Hashcash – Ein Algorithmus als Gefahr für unsere Umwelt?

Hashcash soll dabei helfen, E-Mail-Spam zu vermeiden. Ausserdem ist es ein wichtiges technologisches Konzept von Bitcoin. Der große Nachteil von Hashcash ist aber, dass es sehr viel „leere“ Energie benötigt. Genau das, was zur Prävention von Missbrauch sowie mehr Freiheit und damit zur Erhöhung unserer Lebensqualität führen soll, führt letztendlich aber dazu, dass der weltweite Energiebedarf und damit die Verschmutzung der Umwelt massiv ansteigen würde. Vor allem im Bereich der Kryptowährungen wie z.B. Bitcoin, in denen Verfahren wie Hashcash intensiv zum Einsatz kommen, wird das zu einem immer größeren Problem: So wird alleine das Bitcoin-Mining in 2020 voraussichtlich so viel Energie verschlingen, wie ganz Dänemark verbraucht! [1]

Einführung

Hashcash ist kein neues Konzept. Es wurde bereits 1997 von Adam Black entwickelt und veröffentlicht. Seine ursprüngliche Idee war es, E-Mail-Spam zu verringern. Der Grundgedanke darin ist, dass jeder, der eine E-Mail versenden möchte, zuvor eine gewisse Rechenleistung aufwenden und dies nachweisen muss („Proof-of-Work“). Erst dann wird die E-Mail vom Empfänger akzeptiert.

Was macht das für einen Sinn? Angenommen, für jede E-Mail die versendet werden soll, muss zuvor eine Rechenzeit von im Schnitt 2 Sekunden aufgewendet werden. Für einen normalen Versender kein großes Problem, da der Zeitversatz unmerklich ist. Wenn ein Spammer jedoch hunderttausende E-Mails versenden möchte, und für jede E-Mail zusätzlich diese Zeit an Rechenpower investieren muss, kann ihm dies hohe Kosten verursachen, zumindest aber den Versand deutlich verlangsamen. Theoretisch könnte es für ihn dann Wochen anstatt Sekunden dauern, um mehrere tausend E-Mails zu versenden.

Die Betonung liegt allerdings auf „theoretisch“. Denn Spammer verwenden immer häufiger illegale Botnets, einem Netzwerk aus infizierten Rechnern, um darüber Spam zu versenden. Sie bezahlen also nicht für Rechenleistung und die Einbeziehung von tausenden infizierten Botrechnern. Auch der Geschwindigkeitsnachteil wird durch die Vielzahl der Rechner wieder relativiert. Im E-Mail-Umfeld hat sich dieses Verfahren deswegen nie so richtig durchgesetzt.

In den letzten Jahren hat Hashcash einen neuen Hype erfahren, da es eine wichtige konzeptionelle Basis beim Bitcoin-Mining darstellt.

Doch wie funktioniert Hashcash eigentlich unter der Motorhaube?

Wie funktioniert Hashing?

Um Hashcash zu verstehen, ist es zunächst wichtig, zu verstehen, wie Hashfunktionen funktionieren. Nachfolgend ein kleiner Exkurs hierzu. Wer weiß, wie Hashing funktioniert, kann diesen Abschnitt überspringen.

Als Hashing bzw. Hashfunktion wird ein Algorithmus bezeichnet, der eine digitale Eingabe beliebiger Länge auf eine immer gleiche, eindeutige Ausgabe fester Länge abbildet. Bekannte Hash-Verfahren sind z.B. CRC32, MD5, SHA-1 oder SHA-256. In den nachfolgenden Beispielen wurde das Hashverfahren CRC32 verwendet, welches sehr kurze Hashes generiert. Heutzutage verwendet man eher SHA-1 oder besser noch SHA-256, u.a. um eine Kollision (zwei unterschiedliche Eingaben führen zum selben Hashwert) zu vermeiden.

Hashing – Kleine Änderung mit großer Wirkung

Für das nachfolgende Beispiel habe ich  das kurze CRC32 verwendet, um es übersichtlicher zu gestalten. Hier sieht man vor allem zwei wichtige Merkmale sehr deutlich, nämlich dass die Länge der Hashes immer gleich ist und dass nur kleine Änderungen an der Eingabe zu einem völlig neuen Hash führen:

4d73bcc6

Eingabe CRC32 Ausgabe (Hash)
a e8b7be43 Hallo 78b31ed5 Hallo Welt 50281475 Das ist ein ganz langer Text, der aber wieder auf einen Hash fester Länge abgebildet wird.

Du kannst diese Beispiele auch selbst überprüfen, indem Du z.B. einen Online-Dienst wie Fileformat verwendest.

Die CRC32-Ausgabe (Hash) hat immer eine Zeichenfolge fester Länge mit 8 Zeichen. Egal wie kurz oder lange die Eingabe ist, diese Länge bleibt gleich. Wird nur ein kleiner Wert an der Eingabe verändert, ändert sich der errechnete Hashwert grundlegend, die Zeichenlänge bleibt jedoch gleich. Wird im Beispiel z.B. die Eingabe „Hallo“ durch „Hello“ ersetzt, ändert sich der Hashwert vollständig:

Eingabe CRC32 Ausgabe
Hallo 78b31ed5
Hello f7d18982

Kleine Veränderungen werden sofort bemerkt. Wird ein ursprünglicher Eingabetext – auch nur minimal – verändert, kann man zwar aus dem errechneten Hashwert nicht erkennen, was geändert wurde. Man kann aber mit Sicherheit sagen, dass sich die Eingabe verändert hat.

hashing_2

Hash = Eindeutiger, digitaler Fingerabdruck

Es ist zudem nahezu ausgeschlossen, dass zwei beliebige, unterschiedliche Eingaben zum selben Hashwert führen. Weswegen der Hashwert oftmals auch als digitaler Fingerabdruck bezeichnet wird. Genau wie ein Fingerabdruck eindeutig einem Menschen zugeordnet werden kann, wird ein digitaler Fingerabdruck einer digitalen Einheit, wie z.B. einem Word-Dokument , einer Zip-Datei oder einem Text unverwechselbar zugeordnet.

hashing

Der umgekehrte Weg, um vom digitalen Fingerabdruck (also dem Hashwert) wiederum die Eingabe zu reproduzieren, ist so gut wie ausgeschlossen. Hinzu kommt, dass in der Regel noch deutlich bessere Verfahren als CRC32 verwendet werden (z.B. SHA-2).

Man kann mit Hashing also sicher stellen, dass die originale Eingabe (z.B. ein Dokument) unverändert ist, indem man den Hashing-Algorithmus darauf anwendet und darauf achtet, dass immer derselbe Hashwert (Fingerprint) ausgegeben wird. Ist dies nicht der Fall, so wurde die ursprüngliche Eingabe garantiert verändert. An welcher Stelle allerdings, ist daraus nicht ersichtlich. Dafür müsste man dann die beiden Eingaben (z.B. Dokumente) gegenüberstellen und vergleichen. Alleine aber die Aussage, „es hat sich etwas oder nichts verändert“ ist in der Informatik extrem wertvoll. Sie entscheidet manchmal über Kosten in Millionenhöhe.

Wie funktioniert Hashcash?

Wie der Name schon sagt, ist ein wichtiger Bestandteil von Hashcash das Hashing mit dem sozusagen bezahlt wird. Beim Hashing ist es nicht möglich, aus einem errechneten Hashwert den ursprünglichen digitalen Eingabewert zu rekonstruieren. Umgekehrt heisst das, wenn ich einen ganz bestimmten Hashwert z.B. 00006e21 als Ergebnis haben möchte, es keinen anderen Weg gibt, als die Eingabe solange durch Ausprobieren zu verändern, bis ich als Ausgabe den gewünschten Hashwert erhalte. Dies bedeutet Rechenpower und damit Rechenzeit. Für SHA-1 Hashwerte sind im Schnitt ca. eine Million Versuche nötig, wenn das Ziel ist, die Eingabe für einen Hashwert zu ermitteln, der genau vier führende Nullen besitzt. Auf modernen Prozessoren dauert dies im Schnitt ca. 2 Sekunden.

hashing_3

Der Hashcash-Header beim Versender

Das Verfahren von Hashcash ist nun so simpel wie genial: Es schickt in jeder E-Mail einen Header mit. Dieser Header besteht unter anderem aus der E-Mail-Adresse des Empfängers und einer Zufallszahl. Ein Beispiel für einen solchen Header (siehe Wikipedia):

X-Hashcash: 1:20:1303030600:adam@cypherspace.org::McMybZIhxKXu57jd:ckvi

Über diesen gesamten Header wird dann ein Hashwert berechnet. Ziel ist es nun, dass der Versender die Zufallszahl im Header (in diesem Beispiel McMybZIhxKXu57jd) solange verändert, bis der berechnete Hashwert vier führende Nullen also z.B.00000b7c65ac70650eb8d4f034e86d7d5cd1852f mit SHA-1 besitzt. Da der Versender keine andere Möglichkeit als die passende Zufallszahl durch Ausprobieren zu ermitteln, wird er im Schnitt eine Million Versuche bzw. 2 Sekunden Rechenleistung aufwänden müssen. Erst wenn er die passende Zufallszahl gefunden hat, versendet er die E-Mail inkl. dem Header an den Empfänger.

Der Hashcash-Header beim Empänger

Der Empfänger wiederum berechnet seinerseits den Hashwert aus dem Header (was sehr performant funktioniert) und überprüft, ob dieser Hashwert vier führende Nullen besitzt. Falls ja, ist das der Beweis, dass der Versender die entsprechende Rechenzeit von ca. 2 Sekunden aufgewendet hat und er kann die E-Mail akzeptieren. Für einen exponentiell höheren Rechenaufwand beim Versender ist nur die Anzahl der führenden Nullen zu erhöhen. Beim Empfänger bleibt der Aufwand hingegen gleich.

Fazit

Hashcash ist technisch gesehen ein so geniale wie einfache Lösung, um sich mit Rechenpower zu legitimieren. So lange jedoch Spammer Zugang zu beliebig großen und nahezu kostenlosen Rechenressourcen durch Botnets haben, wird es sich im E-Mail-Umfeld nicht durchsetzen. Und auch wenn es eine größere Verbreitung erfährt, ist dessen Einsatz fast schon eine ethische Frage: Was ist uns wichtiger: die Legitimation digitaler Aktionen oder Umweltschutz?

Aber egal wie diese Antwort ausfällt, das grundsätzliche Konzept, sich mit der eigenen Rechenpower zu legitimieren oder sogar damit zu bezahlen, ist ein äußerst interessanter Ansatz. Dieser erlebte in der Vergangenheit immer wieder mal einen kleinen Hype, konnte sich aber nie so richtig durchsetzen. Vielleicht gelingt es dieser Lösung, im Zuge von Blockchain zum Mainstream zu werden. Idealerweise mit einer Lösung für optimierten Energieverbrauch.

Update (31.01.2017)

Es gibt bereits auch andere Ansätze, um mit Hashcash Sicherheitsprüfungen im Web durchzuführen. So versucht das Projekt hashcash.io z.B., Captchas durch Hashcash zu ersetzen und damit z.B. Brute Force Attacken entgegen zu wirken. Ein wirklich interessanter Ansatz, wie ich finde!

Stephan Niedermeier

Stephan ist der Gründer des ETHBLOG. Als Informatiker und erfolgreicher Entrepreneur ist er Experte für digitale Technologien und hat bereits mehrere Unternehmungen erfolgreich aufgebaut. Stephan berät Investoren und Unternehmen bei Ihren digitalen Strategien. Er selbst ist ein Ethereum-Investor der ersten Stunde und experimentiert aktuell viel mit Blockchain.
Twitter - LinkedIn - http://niedermeier.io

Kommentar verfassen