Hashcash ist ein System rechnerischer Briefmarken auf Grundlage von Proof of Work, einem Arbeitsnachweis. Eine Marke zeigt, dass ein Ergebnis gefunden wurde, das eine vorgegebene Bedingung erfüllt. Sie ist weder ein Bitcoin noch ein übertragbares Kontoguthaben.
Anna möchte Pavel eine E-Mail schicken. Eine weitere Kopie zu versenden kostet sie kaum etwas. Diesen Vorteil hat aber auch jemand, der Millionen Werbemails verschickt. Hashcash baut eine kleine Hürde ein: Der Computer des Absenders erstellt zuerst eine rechnerische Marke. Bezahlt wird mit Zeit und Energie, nicht mit Geld an die Post. Adam Back kündigte seine Implementierung am 28. März 1997 an und veröffentlichte 2002 eine wissenschaftliche Beschreibung. Schon 1992 hatten Cynthia Dwork und Moni Naor eine ähnliche Idee untersucht. Hashcash gehört in diese Geschichte der Versuche, den Missbrauch von Netzwerken einzudämmen. [1] [12]
Ein Hash ist ein aus Daten berechneter Fingerabdruck mit fester Länge. Annas Programm verändert einen Versuchswert in der Marke und berechnet den Fingerabdruck neu, bis er mit genügend Nullbits beginnt. Ein Bit ist eine Binärziffer, also null oder eins. Bei b geforderten Nullen beträgt die Erfolgswahrscheinlichkeit je Versuch ungefähr 2^-b; im Mittel sind 2^b Versuche nötig. Für b = 20 sind das durchschnittlich 1048576 Berechnungen, keine verbindliche genaue Zahl. Manchmal hat das Programm früh Glück, manchmal dauert es länger. Pavel prüft die fertige Marke mit einer Hashberechnung. Zusätzlich muss er ihre Angaben und die Annahmeregeln prüfen. [10] [11]
Könnte Anna eine Marke für eine Million Nachrichten verwenden, wäre die Hürde wirkungslos. Deshalb enthält die Marke einen bestimmten Empfänger oder Dienst und ein Datum. Der Empfänger prüft die Gültigkeit und erfasst angenommene Marken, um Wiederverwendung, sogenanntes replay, abzulehnen. Weder das Datum noch die Bindung an den Nachrichteninhalt verhindert allein, dass dieselbe Nachricht erneut gesendet wird. Hashcash besitzt kein gemeinsames weltweites Ausgabenregister: Der empfangende Dienst übernimmt diese Kontrolle. Ein korrekter Hash bedeutet noch nicht, dass die Marke erneut angenommen werden darf. [11] [12]
Die erforderliche Schwierigkeit legt der empfangende Dienst fest. Jedes zusätzliche Nullbit verdoppelt ungefähr die durchschnittliche Arbeit. Eine schwache Anforderung hält Spammer kaum auf; eine starke belastet auch gewöhnliche Nutzer. Die Zahl 20 ist deshalb ein Beispiel und kein zeitloser Sicherheitsstandard. Gleich viele Versuche dauern zudem auf einem alten Telefon anders lange als auf einem schnellen Computer. Ein Dienst muss Geräteleistung, Gültigkeitsdauer und eigene Kapazität berücksichtigen. Hashcash erzwingt keine universelle Anzahl von Sekunden für alle. [10] [11]
Rechenarbeit unterscheidet nicht zwischen einem rücksichtsvollen Menschen und einem Angreifer. Spammer mit vielen Computern oder einem Botnet, einem Netz übernommener Geräte, können die Arbeit verteilen und einen Teil der Kosten anderen aufbürden. Gleichzeitig verbraucht ein normaler Nutzer Akkuladung. Hashcash soll die Wirtschaftlichkeit eines Angriffs verändern, nicht das Ende von Spam garantieren. Eine Marke verschlüsselt auch keine Nachricht, bestätigt keine bürgerliche Identität und garantiert keine Zustellung. Sie ist eine Annahmebedingung, die ein Dienst mit weiteren Schutzmaßnahmen verbinden kann. [10]
Version 1 hat das Format 1:bits:date:resource:ext:rand:counter. Die Felder stehen für Version, angegebene Schwierigkeit, Datum, Empfänger oder Dienst, Erweiterungen, Zufallswert und veränderlichen Zähler. Das Feld bits gibt an, wie viele führende Nullbits der Fingerabdruck laut Absender hat, nicht wie viele Versuche der Computer tatsächlich durchgeführt hat. Diese Feldnamen gehören zum technischen Format und werden nicht übersetzt. Die klassische Implementierung berechnet SHA-1 über die gesamte Zeichenfolge. Der tatsächliche Fingerabdruck muss die Bedingung erfüllen; eine Zahl im Feld bits reicht nicht. Dies beschreibt ein historisches Format und empfiehlt SHA-1 nicht für neue Sicherheitsentwürfe. Bitcoin verwendet ein anderes Datenformat und eine andere Hashfunktion. [11] [13]
Gesucht wird hier eine Eingabe, deren Fingerabdruck einen vorgegebenen Anfang hat. Eine solche Eingabe heißt partial preimage: Ihr Fingerabdruck erfüllt den vorgegebenen Teil des Musters, während der Rest beliebig sein darf. Bei einer Kollision haben dagegen zwei unterschiedliche Eingaben denselben Fingerabdruck. Manche historischen Texte verwenden den ungenaueren Ausdruck partial collision. Für das Verständnis der Arbeit ist die Unterscheidung jedoch wichtig. Ein Angriff, der SHA-1-Kollisionen findet, löst nicht automatisch die Suche nach dem verlangten Anfang. Damit wird SHA-1 aber nicht zu einer heute geeigneten allgemeinen Sicherheitswahl. [10] [11] [13]
Hal Finney stellte 2004 RPOW, Reusable Proofs of Work, vor. Nutzer konnten einen Arbeitsnachweis abgeben und einen neuen Token erhalten. Bei einer weiteren Übertragung wurde der alte Token ungültig und durch einen neuen ersetzt. Wiederverwendung bedeutete also nicht, dieselbe Marke beliebig zu kopieren. Das System setzte auf einen Server mit dem Sicherheitsmodul IBM 4758 und die Fernüberprüfung des laufenden Programms. Das verringerte das nötige Vertrauen in den Betreiber, behielt aber Annahmen über Hardware und Hersteller bei. RPOW war ein experimenteller Vorläufer, nicht der dezentrale Konsens von Bitcoin. [7] [15]
Das Bitcoin Whitepaper verweist ausdrücklich auf Backs Hashcash. Satoshi nutzte dieselbe grundlegende Asymmetrie: Ein passendes Ergebnis zu finden erfordert viele Versuche, andere können es leicht prüfen. Bitcoin-Miner suchen so einen gültigen Blockheader, der einen Block von Transaktionen zusammenfasst und auf den vorherigen Block verweist. Sie verwenden double SHA-256, zwei aufeinanderfolgende Anwendungen von SHA-256, und vergleichen das Ergebnis mit einer Zahlengrenze namens target. Das ist keine SHA-1-Mailmarke in einer Wallet. Gemeinsam ist das Prinzip, nicht das ganze System. [8] [14]
Porto bepreist eine einzelne Anfrage. Geld braucht zusätzlich eine Antwort darauf, welche von zwei widersprüchlichen Übertragungen gilt. Bitcoin verbindet Blöcke, und seine Nodes wählen unter gültigen Zweigen die Kette mit der größten kumulierten Arbeit. Nodes sind die Computer, die Regeln prüfen; sie kontrollieren auch Transaktionen und die erlaubte Geldschöpfung. Selbst enorme Arbeit macht eine ungültige Transaktion nicht gültig. Hashcash lieferte einen wichtigen Baustein. Erst die Verbindung mit weiteren Regeln ermöglichte eine gemeinsame Geldhistorie ohne zentrale Verwaltung. [8] [9]
Für ein möglichst vollständiges Bild lies diesen Eintrag zusammen mit Proof of Work, Cypherpunks, Adam Back, Bitcoin Whitepaper, Bitcoin, Hash. Auf diesen Eintrag verweisen außerdem Cypherpunks, b-money, Bit Gold, Reusable Proofs of Work.