Unter Hash-Verarbeitung versteht man den Prozess der Generierung einer Ausgabe fester Größe aus einer Eingabe unterschiedlicher Größe. Dies geschieht durch die Verwendung einer mathematischen Formel, die als Hash-Funktion bekannt ist (implementiert als Hashing-Algorithmus).

Obwohl nicht alle Hash-Funktionen mit der Verwendung von Kryptografie zusammenhängen, bilden die sogenannten kryptografischen Hash-Funktionen den Kern von Kryptowährungen. Dadurch können Blockchain und andere verteilte Systeme ein erhebliches Maß an Datenintegrität und -sicherheit erreichen.

Konventionelle Hash-Funktionen und kryptografische Hashes sind dasselbe: deterministisch. Deterministisch bedeutet, dass der Hashing-Algorithmus immer die gleiche Ausgabe (auch Digest oder Hash genannt) erzeugt, solange sich die Eingabe nicht ändert.

Insbesondere der Hashing-Algorithmus von Kryptowährungen ist als Einwegfunktion konzipiert, was bedeutet, dass er ohne enormen Rechenaufwand und Ressourcenaufwand nicht einfach rückgängig gemacht werden kann. Mit anderen Worten: Es ist sehr einfach, aus Eingaben eine Ausgabe zu erzeugen, aber das Gegenteil (Eingabe nur aus Ausgabe generieren) ist relativ schwierig. Generell gilt: Je schwieriger es ist, die Eingabe zu finden, desto sicherer ist der Hashing-Algorithmus.


Wie funktioniert die Hash-Funktion?

Verschiedene Hash-Funktionen erzeugen Ausgaben unterschiedlicher Größe, aber die mögliche Ausgabegröße jedes Hashing-Algorithmus ist immer konstant. Beispielsweise erzeugt der SHA-256-Algorithmus nur eine 256-Bit-Ausgabe, während SHA-1 immer einen 160-Bit-Digest erzeugt.

Um dies zu veranschaulichen, lassen Sie uns die Wörter „Binance“ und „binance“ durch den SHA-256-Hashing-Algorithmus (den in Bitcoin verwendeten) laufen lassen.

SHA-265

Eingang

Ausgabe (256 Bit)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

Binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Beachten Sie, dass kleine Änderungen (Größe des ersten Buchstabens) zu sehr unterschiedlichen Hashwerten führen. Da wir jedoch SHA-256 verwenden, hat die Ausgabe immer eine feste Größe von 256 Bit (oder 64 Zeichen) – unabhängig von der Eingabegröße. Unabhängig davon, wie oft wir diese beiden Wörter durch den Algorithmus laufen lassen, sind beide Ausgaben immer konstant.

Wenn wir die Eingaben hingegen über den SHA-1-Hashing-Algorithmus ausführen, erhalten wir die folgenden Ergebnisse:

SHA-1

Eingang

Ausgabe (160 Bit)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

Binance

e58605c14a76ff98679322cca0eae7b3c4e08936


Konkret bedeutet das Akronym SHA Secure Hash Algorithms. Es bezieht sich auf eine Reihe kryptografischer Hash-Funktionen, die die Algorithmen SHA-0 und SHA-1 sowie die Gruppen SHA-2 und SHA-3 umfassen. SHA-256 gehört zusammen mit SHA-512 und anderen Varianten zur SHA-2-Gruppe. Derzeit gelten nur die Gruppen SHA-2 und SHA-3 als sicher.


Warum ist das wichtig?

Herkömmliche Hash-Funktionen haben eine Vielzahl von Anwendungsfällen, einschließlich Datenbanksuche, Analyse großer Datenmengen und Datenverwaltung. Andererseits werden kryptografische Hash-Funktionen häufig in Informationssicherheitsanwendungen wie der Nachrichtenauthentifizierung und dem digitalen Fingerabdruck verwendet. Bei Bitcoin sind kryptografische Hash-Funktionen ein wichtiger Teil des Mining-Prozesses und tragen zur Generierung neuer Adressen und Schlüssel bei.

Die wahre Hashing-Leistung zeigt sich beim Umgang mit sehr großen Informationsmengen. Beispielsweise kann man eine große Datei oder einen großen Datensatz über eine Hash-Funktion ausführen 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 erzeugt immer eine einfache und prägnante Ausgabe (Hash). Techniken wie diese machen das Speichern und „Merken“ sehr großer Datenmengen überflüssig.

Insbesondere in der Blockchain-Technologie ist Hashing sehr nützlich. Die Bitcoin-Blockchain verfügt über mehrere Hashing-Prozesse, von denen sich die meisten im Mining-Prozess befinden. Tatsächlich basieren fast alle Kryptowährungsprotokolle auf Hashing, um kompakte Gruppen von Transaktionen zu Blöcken zu verbinden und auch kryptografische Verbindungen zwischen einzelnen Blöcken zu erzeugen, wodurch effektiv eine Blockchain entsteht.


Kryptografische Hash-Funktionen

Auch hier kann eine Hash-Funktion, die kryptografische Techniken einsetzt, als kryptografische Hash-Funktion definiert werden. Im Allgemeinen erfordert das Knacken einer kryptografischen Hash-Funktion eine Menge Brute-Force-Aufwand. Wenn jemand eine kryptografische Hash-Funktion „umkehren“ möchte, muss er oder sie durch Ausprobieren erraten, um welche Eingabe es sich handelt, bis die entsprechende Ausgabe erzeugt wird. Es ist jedoch auch möglich, dass unterschiedliche Eingaben genau die gleiche Ausgabe erzeugen, sodass es in diesem Fall zu einer „Kollision“ kommt.

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

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

  • Kollisionsresistenz: Es ist nicht einfach, zwei verschiedene Eingaben zu finden, die denselben Hash als Ausgabe erzeugen.

  • Widerstand gegen Vorbilder: Es ist nicht einfach, eine Hash-Funktion zu „invertieren“ (die Eingabe aus der verfügbaren Ausgabe zu finden).

  • Widerstand gegen zweites Vorbild: Es ist nicht einfach, eine zweite Eingabe zu finden, die mit der angegebenen Eingabe kollidiert.


Kollisionssicherheit

Wie bereits erwähnt, kommt es zu einer Kollision, wenn verschiedene Eingaben denselben Hash erzeugen. Daher gilt die Hash-Funktion als kollisionsresistent, bis eine Kollision auftritt. Bitte beachten Sie, dass diese Kollisionen bei jeder Hash-Funktion immer auftreten, da die möglichen Eingaben unendlich sind, während die möglichen Ausgaben begrenzt sind.

Mit anderen Worten: Eine Hash-Funktion gilt als kollisionssicher, wenn die Wahrscheinlichkeit, eine Kollision zu finden, sehr gering ist, da sie Millionen von Jahren Berechnung erfordert. Obwohl es also keine kollisionsfreien Hash-Funktionen gibt, sind einige von ihnen sehr stark und können als robust angesehen werden (Beispiel: SHA-256).

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


Urbild-Widerstand

Die Eigenschaft des Urbildwiderstands hängt mit dem Konzept der Einwegfunktionen zusammen. Eine Hash-Funktion gilt als vorbildresistent, wenn die Wahrscheinlichkeit, dass jemand eine Eingabe findet, die aus einer bestimmten Ausgabe resultiert, sehr gering ist.

Bitte beachten Sie, dass sich diese Eigenschaft von der vorherigen unterscheidet, da der Angreifer versuchen wird, anhand der verfügbaren Ausgabe zu erraten, um welche Eingabe es sich handelt. Eine Kollision hingegen tritt auf, wenn jemand auf zwei verschiedene Eingaben trifft, die dieselbe Ausgabe erzeugen, wobei es jedoch keine Rolle spielt, welche Eingabe verwendet wird.

Die Preimage-Widerstandseigenschaft ist für den Schutz von Daten sehr nützlich, da ein einfacher Hash einer Nachricht die Authentizität nachweisen kann, ohne dass die Informationen preisgegeben werden müssen. In der Praxis speichern und verwenden viele Dienstanbieter und Webanwendungen die resultierenden Hashes von Passwörtern anstelle von Passwörtern im Klartext.


Zweite Widerstandsvorschau

Einfach ausgedrückt können wir sagen, dass dieser zweite Preimage-Widerstand zwischen den beiden zuvor besprochenen Eigenschaften liegt. Der zweite Preimage-Angriff tritt auf, wenn es jemandem gelingt, eine bestimmte Eingabe zu finden, die dieselbe Ausgabe erzeugt wie eine andere Ausgabe einer anderen Eingabe, die bereits bekannt ist.

Mit anderen Worten besteht der zweite Preimage-Angriff darin, Kollisionen zu finden, aber anstatt nach zwei zufälligen Eingaben zu suchen, die denselben Hash erzeugen, suchen sie nach Eingaben, die denselben Hash erzeugen, der von einer anderen spezifischen Eingabe erzeugt wurde.

Daher ist jede kollisionsresistente Hash-Funktion auch resistent gegen Second-Preimage-Angriffe. Man kann jedoch immer noch einen Preimage-Angriff auf eine kollisionsresistente Funktion durchführen, da dies auch bedeutet, einen einzelnen Eingang aus einem einzelnen Ausgang zu finden.


Bergbau

Es gibt viele Schritte beim Bitcoin-Mining, die Hash-Funktionen beinhalten, wie z. B. das Überprüfen von Guthaben, das Verknüpfen von Eingabe- und Ausgabetransaktionen und das Hashing von Transaktionen innerhalb eines Blocks, um einen Merkle-Baum zu bilden. Aber einer der Hauptgründe für die Sicherheit der Bitcoin-Blockchain ist die Tatsache, dass Miner eine große Anzahl von Hashing-Vorgängen durchführen müssen, um letztendlich die richtige Lösung für den nächsten Block zu finden.

Konkret muss ein Miner mehrere verschiedene Eingaben ausprobieren, wenn er Hash-Werte für seine Kandidatenblöcke generiert. Im Wesentlichen kann er seinen Block nur validieren, wenn er einen Ausgabe-Hash erzeugt, der mit einer bestimmten Anzahl von Nullen beginnt. Die Anzahl der Nullen bestimmt die Mining-Schwierigkeit und diese variiert je nach der netzwerkspezifischen Hash-Rate.

In diesem Fall gibt die Hash-Rate an, wie viel Computerenergie für das Bitcoin-Mining verbraucht wird. Wenn die Netzwerk-Hash-Rate steigt, passt das Bitcoin-Protokoll die Mining-Schwierigkeit automatisch an, sodass die durchschnittliche Zeit, die zum Mining eines verbleibenden Blocks erforderlich ist, näher bei 10 Minuten liegt. Wenn umgekehrt einige Miner beschließen, das Mining einzustellen, sinkt die Hash-Rate drastisch, die Mining-Schwierigkeit passt sich an und macht es einfacher (bis die durchschnittliche Blockzeit wieder 10 Minuten beträgt).

Bitte haben Sie Verständnis dafür, dass Miner nicht auf Kollisionen stoßen müssen, da sie viele Hashes als gültige Ausgabe erzeugen 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 Lösung finden, abhängig von der Schwelle, die durch den Schwierigkeitsgrad des Minings bestimmt wird.

Da Bitcoin-Mining ein kostspieliges Unterfangen ist, haben Miner keinen Grund, das System zu betrügen, da dies zu erheblichen finanziellen Verlusten führen würde. Je mehr Miner sich der Blockchain anschließen, desto größer und stärker wird sie.


Schlussidee

Es besteht kein Zweifel, dass Hash-Funktionen ein sehr wichtiges Werkzeug in der Informatik sind, insbesondere beim Umgang mit großen Datenmengen. In Kombination mit Kryptografie können Hashing-Algorithmen vielseitig einsetzbar sein und auf vielfältige Weise Sicherheit und Authentizität bieten. Daher sind kryptografische Hash-Funktionen für fast alle Kryptowährungsnetzwerke unerlässlich, sodass das Verständnis ihrer Eigenschaften und ihrer Funktionsweise für jeden, der sich für Blockchain-Technologie interessiert, sehr nützlich ist.