Unter Hashing versteht man den Vorgang, aus einer Eingabe variabler Größe eine Ausgabe fester Größe zu erzeugen. Dies geschieht durch die Verwendung mathematischer Formeln, die als Hashfunktionen bezeichnet werden (implementiert als Hashalgorithmen).

Obwohl nicht alle Hash-Funktionen den Einsatz von Kryptografie beinhalten, bilden die sogenannten kryptografischen Hash-Funktionen das Herzstück von Kryptowährungen. Dank ihnen können Blockchains und andere verteilte Systeme ein hohes Maß an Datenintegrität und -sicherheit erreichen.

Sowohl herkömmliche als auch kryptografische Hashfunktionen sind deterministisch. Deterministisch bedeutet, dass der Hashalgorithmus immer dieselbe Ausgabe (auch Digest oder Hash genannt) erzeugt, solange sich die Eingabe nicht ändert.

Normalerweise sind die Hashing-Algorithmen von Kryptowährungen als Einwegfunktionen konzipiert, was bedeutet, dass sie ohne großen Rechenaufwand und Ressourcen nicht einfach rückgängig gemacht werden können. Mit anderen Worten: Es ist ziemlich einfach, aus der Eingabe die Ausgabe zu erstellen, aber relativ schwierig, in die entgegengesetzte Richtung zu gehen (die Eingabe allein aus der Ausgabe zu erzeugen). Generell gilt: Je schwieriger es ist, die Eingabe zu finden, desto sicherer gilt der Hashing-Algorithmus.


Wie funktioniert eine Hash-Funktion?

Verschiedene Hashfunktionen erzeugen Ausgaben unterschiedlicher Größe, aber die möglichen Ausgabegrößen für jeden Hashalgorithmus sind immer konstant. Beispielsweise kann der SHA-256-Algorithmus nur Ausgaben von 256 Bit erzeugen, während der SHA-1 immer einen 160-Bit-Digest generiert.

Zur Veranschaulichung lassen wir die Wörter „Binance“ und „binance“ durch den SHA-256-Hashing-Algorithmus (der in Bitcoin verwendet wird) laufen.

SHA-256

Eingang

Ausgabe (256 Bit)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

Binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Beachten Sie, dass eine kleine Änderung (die Groß-/Kleinschreibung des ersten Buchstabens) zu einem völlig anderen Hashwert führte. Da wir jedoch SHA-256 verwenden, haben die Ausgaben immer eine feste Größe von 256 Bit (oder 64 Zeichen) – unabhängig von der Eingabegröße. Außerdem spielt es keine Rolle, wie oft wir die beiden Wörter durch den Algorithmus laufen lassen, die beiden Ausgaben bleiben konstant.

Wenn wir umgekehrt dieselben Eingaben durch den SHA-1-Hashing-Algorithmus laufen lassen, erhalten wir die folgenden Ergebnisse:

SHA-1

Eingang

Ausgabe (160 Bit)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

Binance

e58605c14a76ff98679322cca0eae7b3c4e08936


Insbesondere steht das Akronym SHA für Secure Hash Algorithms. Es bezieht sich auf eine Reihe kryptografischer Hash-Funktionen, zu denen die Algorithmen SHA-0 und SHA-1 sowie die Gruppen SHA-2 und SHA-3 gehören. SHA-256 ist neben SHA-512 und anderen Varianten Teil der SHA-2-Gruppe. Derzeit gelten nur die Gruppen SHA-2 und SHA-3 als sicher.


Warum sind sie wichtig?

Herkömmliche Hashfunktionen haben ein breites Anwendungsspektrum, darunter Datenbanksuchen, Analysen großer Dateien und Datenverwaltung. Kryptografische Hashfunktionen werden dagegen häufig in Informationssicherheitsanwendungen verwendet, etwa bei der Nachrichtenauthentifizierung und beim digitalen Fingerabdruck. Bei Bitcoin sind kryptografische Hashfunktionen ein wesentlicher Teil des Mining-Prozesses und spielen auch bei der Generierung neuer Adressen und Schlüssel eine Rolle.

Die wahre Stärke des Hashings zeigt sich beim Umgang mit enormen Informationsmengen. So kann man beispielsweise eine große Datei oder einen großen Datensatz durch eine Hash-Funktion laufen lassen und dann die Ausgabe verwenden, um schnell die Genauigkeit und Integrität der Daten zu überprüfen. Dies ist aufgrund der deterministischen Natur von Hash-Funktionen möglich: Die Eingabe führt immer zu einer vereinfachten, verdichteten Ausgabe (Hash). Bei einer solchen Technik entfällt die Notwendigkeit, große Datenmengen zu speichern und „zu merken“.

Hashing ist im Zusammenhang mit der Blockchain-Technologie besonders nützlich. Die Bitcoin-Blockchain umfasst mehrere Vorgänge, die Hashing beinhalten, die meisten davon im Rahmen des Mining-Prozesses. Tatsächlich verlassen sich fast alle Kryptowährungsprotokolle auf Hashing, um Transaktionsgruppen zu verknüpfen und in Blöcken zusammenzufassen und auch um kryptografische Links zwischen den einzelnen Blöcken herzustellen, wodurch effektiv eine Blockchain entsteht.


Kryptografische Hashfunktionen

Auch hier kann eine Hash-Funktion, die kryptografische Techniken einsetzt, als kryptografische Hash-Funktion definiert werden. Im Allgemeinen sind unzählige Brute-Force-Versuche erforderlich, um eine kryptografische Hash-Funktion zu knacken. Um eine kryptografische Hash-Funktion „umzukehren“, müsste eine Person durch Ausprobieren erraten, was die Eingabe war, bis die entsprechende Ausgabe erzeugt wird. Es besteht jedoch auch die Möglichkeit, dass unterschiedliche Eingaben genau dieselbe Ausgabe erzeugen, in welchem ​​Fall eine „Kollision“ auftritt.

Technisch gesehen muss eine kryptografische Hash-Funktion drei Eigenschaften erfüllen, um als effektiv sicher zu gelten. Wir können diese als Kollisionsresistenz, Urbildresistenz und Zweiturbildresistenz beschreiben.

Bevor wir die einzelnen Eigenschaften besprechen, fassen wir ihre Logik in drei kurzen Sätzen zusammen.

  • Kollisionsresistenz: Es ist nicht möglich, zwei unterschiedliche Eingaben zu finden, die als Ausgabe denselben Hash erzeugen.

  • Urbildresistenz: Es ist nicht möglich, die Hash-Funktion „umzukehren“ (die Eingabe aus einer gegebenen Ausgabe zu ermitteln).

  • Widerstand gegen zweites Urbild: Es ist nicht möglich, einen zweiten Input zu finden, der mit einem angegebenen Input kollidiert.


Kollisionssicherheit

Wie erwähnt, kommt es zu einer Kollision, wenn unterschiedliche Eingaben genau denselben Hash erzeugen. Daher gilt eine Hash-Funktion als kollisionsresistent, bis jemand eine Kollision feststellt. Beachten Sie, dass es bei jeder Hash-Funktion immer zu Kollisionen kommen wird, da die möglichen Eingaben unendlich sind, während die möglichen Ausgaben endlich sind.

Anders ausgedrückt: Eine Hash-Funktion ist kollisionsresistent, wenn die Wahrscheinlichkeit einer Kollision so gering ist, dass Millionen von Jahren an Berechnungen erforderlich wären. Obwohl es also keine kollisionsfreien Hash-Funktionen gibt, sind einige von ihnen stark genug, um als kollisionsresistent zu gelten (z. B. SHA-256).

Von den verschiedenen SHA-Algorithmen sind die Gruppen SHA-0 und SHA-1 nicht mehr sicher, da Kollisionen festgestellt wurden. Derzeit gelten die Gruppen SHA-2 und SHA-3 als kollisionsresistent.


Urbild-Widerstand

Die Eigenschaft der Urbildresistenz ist mit dem Konzept der Einwegfunktionen verwandt. Eine Hash-Funktion gilt als Urbildresistenz, wenn die Wahrscheinlichkeit sehr gering ist, dass jemand die Eingabe findet, die eine bestimmte Ausgabe erzeugt hat.

Beachten Sie, dass sich diese Eigenschaft von der vorherigen unterscheidet, da ein Angreifer anhand einer gegebenen Ausgabe versuchen würde, die Eingabe zu erraten. Eine Kollision hingegen tritt auf, wenn jemand zwei unterschiedliche Eingaben findet, die dieselbe Ausgabe erzeugen, wobei es keine Rolle spielt, welche Eingaben verwendet wurden.

Die Eigenschaft der Präimage-Resistenz ist für den Datenschutz wertvoll, da ein einfacher Hash einer Nachricht deren Authentizität beweisen kann, ohne dass die Informationen offengelegt werden müssen. In der Praxis speichern und verwenden viele Dienstanbieter und Webanwendungen aus Passwörtern generierte Hashes anstelle der Passwörter im Klartext.


Zweiter Urbildwiderstand

Vereinfacht ausgedrückt können wir sagen, dass die Second-Preimage-Resistenz irgendwo zwischen den beiden anderen Eigenschaften liegt. Ein Second-Preimage-Angriff findet statt, wenn jemand einen bestimmten Input findet, der denselben Output wie ein anderer Input erzeugt, den er bereits kennt.

Mit anderen Worten: Bei einem Second-Preimage-Angriff geht es darum, eine Kollision zu finden. Anstatt jedoch nach zwei zufälligen Eingaben zu suchen, die denselben Hash generieren, wird nach einer Eingabe gesucht, die denselben Hash generiert, der von einer anderen bestimmten Eingabe generiert wurde.

Daher ist jede kollisionsresistente Hash-Funktion auch resistent gegen Second-Preimage-Angriffe, da letztere immer eine Kollision implizieren. Man kann jedoch immer noch einen Preimage-Angriff auf eine kollisionsresistente Funktion durchführen, da dies das Finden eines einzelnen Inputs aus einem einzelnen Output impliziert.


Bergbau

Beim Bitcoin-Mining kommen viele Schritte mit Hash-Funktionen zum Einsatz, beispielsweise das Prüfen von Kontoständen, das Verknüpfen von Transaktionseingaben und -ausgaben und das Hashen von Transaktionen innerhalb eines Blocks zum Bilden eines Merkle-Baums. Einer der Hauptgründe für die Sicherheit der Bitcoin-Blockchain ist jedoch die Tatsache, dass die Miner unzählige Hash-Operationen durchführen müssen, um schließlich eine gültige Lösung für den nächsten Block zu finden.

Konkret muss ein Miner mehrere verschiedene Eingaben ausprobieren, wenn er einen Hash-Wert für seinen Kandidatenblock erstellt. Im Wesentlichen kann er seinen Block nur validieren, wenn er einen Ausgabe-Hash generiert, der mit einer bestimmten Anzahl von Nullen beginnt. Die Anzahl der Nullen bestimmt die Mining-Schwierigkeit und variiert je nach der dem Netzwerk zugewiesenen Hash-Rate.

In diesem Fall stellt die Hash-Rate dar, wie viel Computerleistung in das Bitcoin-Mining investiert wird. Wenn die Hash-Rate des Netzwerks steigt, passt das Bitcoin-Protokoll die Mining-Schwierigkeit automatisch an, sodass die durchschnittliche Zeit, die zum Mining eines Blocks benötigt wird, bei etwa 10 Minuten bleibt. Wenn dagegen mehrere Miner beschließen, das Mining einzustellen, wodurch die Hash-Rate deutlich sinkt, wird die Mining-Schwierigkeit angepasst, wodurch das Mining einfacher wird (bis die durchschnittliche Blockzeit wieder bei 10 Minuten liegt).

Beachten Sie, dass Miner keine Kollisionen finden müssen, da es mehrere Hashes gibt, die sie als gültige Ausgabe generieren können (beginnend mit einer bestimmten Anzahl von Nullen). Es gibt also mehrere mögliche Lösungen für einen bestimmten Block, und Miner müssen nur eine davon finden – entsprechend dem durch die Mining-Schwierigkeit bestimmten Schwellenwert.

Da Bitcoin-Mining eine kostenintensive Aufgabe ist, haben Miner keinen Grund, das System zu betrügen, da dies zu erheblichen finanziellen Verlusten führen würde. Je mehr Miner einer Blockchain beitreten, desto größer und stärker wird sie.


Abschließende Gedanken

Es besteht kein Zweifel, dass Hash-Funktionen unverzichtbare Werkzeuge in der Informatik sind, insbesondere beim Umgang mit riesigen Datenmengen. In Kombination mit Kryptografie können Hash-Algorithmen sehr vielseitig sein und Sicherheit und Authentifizierung auf viele verschiedene Arten bieten. Daher sind kryptografische Hash-Funktionen für fast alle Kryptowährungsnetzwerke von entscheidender Bedeutung. Daher ist es für jeden, der sich für Blockchain-Technologie interessiert, sicherlich hilfreich, ihre Eigenschaften und Funktionsweise zu verstehen.