Hashing bezieht sich auf den Prozess der Erstellung einer bestimmten Ausgabe aus Eingabedaten unterschiedlicher Größe. Dies geschieht mithilfe mathematischer Formeln, auch Hash-Funktionen genannt (implementiert als Hashing-Algorithmen).
Nicht alle Hash-Funktionen beinhalten den Einsatz von Kryptographie, sondern nur diejenigen, die speziell für diesen Zweck entwickelt wurden, die sogenannten kryptografischen Hash-Funktionen, die der Kryptowährung zugrunde liegen. Dank ihrer Arbeit können Blockchains und andere verteilte Systeme ein hohes Maß an Datenintegrität und -sicherheit erreichen.
Sowohl reguläre als auch kryptografische Hash-Funktionen sind deterministisch. Deterministisch bedeutet, dass der Hashing-Algorithmus immer das gleiche Ergebnis liefert (auch Digest oder Hash genannt), solange sich die Eingabedaten nicht ändern.
Hashing-Algorithmen in Kryptowährungen sind so konzipiert, dass ihre Funktion einseitig funktioniert, was bedeutet, dass die Daten nicht in umgekehrter Reihenfolge zurückgegeben werden können, ohne viel Zeit und Ressourcen in die Durchführung der Berechnungen zu investieren. Mit anderen Worten: Es ist recht einfach, aus einer Eingabe eine Ausgabe zu erstellen, es ist jedoch relativ schwierig, den Prozess umzukehren (aus einer Eingabe eine Ausgabe zu generieren). Je schwieriger es ist, den Eingabewert zu finden, desto sicherer wird der Hashing-Algorithmus angesehen.
Wie funktioniert eine Hash-Funktion?
Verschiedene Arten von Hash-Funktionen erzeugen unterschiedliche Ausgabegrößen, aber die mögliche Ausgabegröße für jeden Hashing-Algorithmus ist immer konstant. Beispielsweise kann der SHA-256-Algorithmus nur Ausgaben im 256-Bit-Format erzeugen, während SHA-1 immer einen 160-Bit-Digest generiert.
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.
Beachten Sie, dass eine geringfügige Änderung (Groß- und Kleinschreibung des Anfangsbuchstabens) zu einem völlig anderen Hashwert führte. Da wir SHA-256 verwenden, haben die Ausgabedaten immer eine feste Größe von 256 Bit (oder 64 Zeichen), unabhängig von der Größe der Eingabe. Unabhängig davon, wie oft wir diese beiden Wörter durch den Algorithmus laufen lassen, ändern sich die beiden Ausgaben nicht, da sie konstant sind.
Wenn wir dieselben Eingabedaten mit dem SHA-1-Hashing-Algorithmus ausführen, erhalten wir auf die gleiche Weise die folgenden Ergebnisse:
Es ist erwähnenswert, dass das Akronym SHA für Secure Hash Algorithms steht. Es bezieht sich auf eine Reihe kryptografischer Hash-Funktionen, die Algorithmen wie SHA-0 und SHA-1 sowie die Gruppen SHA-2 und SHA-3 umfasst. SHA-256 gehört zusammen mit SHA-512 und anderen Analoga 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 ein breites Spektrum an Anwendungsfällen, darunter Datenbanksuche, Analyse großer Dateien und Datenverwaltung. Kryptografische Hash-Funktionen wiederum werden häufig in Informationssicherheitsanwendungen zur Nachrichtenauthentifizierung und zum digitalen Fingerabdruck verwendet. Bei Bitcoin sind kryptografische Hash-Funktionen integraler Bestandteil des Mining-Prozesses und spielen auch eine große Rolle bei der Generierung neuer Schlüssel und Adressen.
Hashing zeigt sein volles Potenzial bei der Arbeit mit großen Informationsmengen. Sie können beispielsweise 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 führt immer zu einer vereinfachten komprimierten Ausgabe (dem Hash). Diese Methode macht das Speichern und Merken großer Datenmengen überflüssig.
Besonders nützlich ist Hashing im Hinblick auf die Blockchain-Technologie. Auf der Bitcoin-Blockchain werden mehrere Vorgänge ausgeführt, darunter Hashing, bei dem es sich größtenteils um Mining handelt. Tatsächlich basieren praktisch alle Kryptowährungsprotokolle auf Hashing, um Gruppen von Transaktionen zu Blöcken zu verknüpfen und zu komprimieren sowie eine kryptografische Beziehung herzustellen und effizient eine Blockkette aufzubauen.
Kryptografische Hash-Funktionen
Beachten Sie auch hier, dass eine Hash-Funktion, die kryptografische Methoden verwendet, als kryptografische Hash-Funktion definiert werden kann. Um es zu knacken, bedarf es unzähliger Versuche, Zahlen mit roher Gewalt auszuwählen. Um eine kryptografische Hash-Funktion umzukehren, müssen Sie Eingabedaten durch Ausprobieren auswählen, bis Sie die entsprechende Ausgabe erhalten. Es ist jedoch möglich, dass unterschiedliche Eingaben die gleiche Ausgabe erzeugen. In diesem Fall kommt es zu einer Kollision.
Technisch gesehen muss eine kryptografische Hash-Funktion drei Eigenschaften erfüllen, um als sicher zu gelten. Wir können sie als Kollisionsresistenz und Resistenz gegen die Suche nach dem ersten und zweiten Bild beschreiben.
Bevor wir mit der Betrachtung der einzelnen Eigenschaften beginnen, fassen wir deren Logik in drei kurzen Sätzen zusammen.
Kollisionsresistenz: Es ist unmöglich, zwei verschiedene Eingaben zu finden, die einen Hash ähnlich der Ausgabe erzeugen.
Widerstand gegen die Suche nach dem ersten Urbild: das Fehlen einer Methode oder eines Algorithmus zur umgekehrten Wiederherstellung der Hash-Funktion (Finden einer Eingabe aus einer bestimmten Ausgabe).
Widerstand gegen die Suche nach einem zweiten Vorbild: Es ist unmöglich, einen zweiten Input zu finden, der sich mit dem ersten überschneidet.
Kollisionsfestigkeit
Wie bereits erwähnt, kommt es zu einer Kollision, wenn verschiedene Eingaben denselben Hash erzeugen. Daher gilt die Hash-Funktion als kollisionsresistent, bis jemand eine Kollision erkennt. Beachten Sie, dass es aufgrund der unendlichen Anzahl von Eingaben und der begrenzten Anzahl von Ausgaben immer zu Kollisionen bei allen Hash-Funktionen kommt.
Daher ist eine Hash-Funktion kollisionsresistent, wenn die Wahrscheinlichkeit, sie zu erkennen, so gering ist, dass sie Millionen von Jahren Berechnung erfordern würde. Aus diesem Grund gibt es zwar keine kollisionsfreien Hash-Funktionen, einige davon sind jedoch so stark, dass sie als robust gelten können (z. B. SHA-256).
Unter den verschiedenen SHA-Algorithmen sind die Gruppen SHA-0 und SHA-1 nicht mehr sicher, da bei ihnen Kollisionen festgestellt wurden. Derzeit gelten nur die Gruppen SHA-2 und SHA-3 als die sichersten und kollisionssichersten.
Widerstand gegen die Suche nach dem ersten Vorbild
Diese Eigenschaft steht in engem Zusammenhang mit dem Konzept der Einwegfunktionen. Eine Hash-Funktion gilt als resistent gegen die Suche nach dem ersten Bild, solange die Wahrscheinlichkeit sehr gering ist, dass jemand eine Eingabe findet, die eine bestimmte Ausgabe generieren kann.
Beachten Sie, dass sich diese Eigenschaft von der vorherigen unterscheidet, da der Angreifer die Eingabe anhand der spezifischen Ausgabe erraten müsste. Diese Art von Kollision tritt auf, wenn jemand zwei unterschiedliche Eingaben findet, die denselben Ausgabecode erzeugen, ohne den Eingabedaten, die zu seiner Erzeugung verwendet wurden, irgendeine Bedeutung zu geben.
Die Robustheit des ersten Bildes ist für die Datensicherheit wertvoll, da ein einfacher Hash einer Nachricht deren Authentizität nachweisen kann, ohne dass zusätzliche Informationen offengelegt werden müssen. In der Praxis speichern und verwenden viele Dienstanbieter und Webanwendungen aus Passwörtern generierte Hashes, anstatt sie im Klartextformat zu verwenden.
Widerstand gegen die Suche nach dem zweiten Vorbild
Um Ihr Verständnis zu vereinfachen, können wir sagen, dass diese Art von Stabilität irgendwo zwischen den beiden anderen Eigenschaften liegt. Der zweite Preimage-Angriff besteht darin, eine bestimmte Eingabe zu finden, die zur Generierung einer Ausgabe verwendet werden kann, die ursprünglich durch andere bekannte Eingaben generiert wurde.
Mit anderen Worten: Bei einem zweiten Preimage-Angriff geht es um die Kollisionserkennung, aber anstatt zwei zufällige Eingaben zu finden, die denselben Hash generieren, zielt der Angriff darauf ab, Eingaben zu finden, die zur Wiederherstellung des Hashs verwendet werden können, der ursprünglich von der anderen Eingabe generiert wurde.
Daher ist jede kollisionsresistente Hash-Funktion auch resistent gegen solche Angriffe, da letztere immer eine Kollision implizieren. Es ist jedoch immer noch möglich, einen First-Preimage-Angriff auf eine kollisionsresistente Funktion durchzuführen, da dabei nach einem einzelnen Eingang über einen einzelnen Ausgang gesucht wird.
Bergbau
Es gibt viele Schritte beim Mining, die mithilfe von Hash-Funktionen ausgeführt werden. Dazu gehören die Überprüfung von Salden, die Verknüpfung von Transaktionseingaben und -ausgaben sowie das Hashen aller Transaktionen in einem Block, um einen Merkle-Baum zu bilden. Aber einer der Hauptgründe für die Sicherheit der Bitcoin-Blockchain liegt darin, dass Miner so viele Hashing-Vorgänge wie möglich durchführen müssen, um letztendlich die richtige Lösung für den nächsten Block zu finden.
Ein Miner muss versuchen, mehrere unterschiedliche Eingaben zu erhalten, wenn er einen Hash für seinen Kandidatenblock erstellt. Die Überprüfung eines Blocks ist nur dann möglich, wenn die Ausgabe in Form eines Hash korrekt generiert ist und mit einer bestimmten Anzahl von Nullen beginnt. Die Anzahl der Nullen bestimmt die Mining-Schwierigkeit und variiert je nach Netzwerk-Hashrate.
In diesem Fall stellt die Hash-Rate die Menge an Computerleistung dar, die Sie in den Bitcoin-Mining investieren. Wenn die Hash-Rate zu steigen beginnt, passt das Bitcoin-Protokoll den Mining-Schwierigkeitsgrad automatisch an, sodass die durchschnittliche Zeit, die zum Mining eines Blocks benötigt wird, nicht mehr als 10 Minuten beträgt. Wenn mehrere Miner beschließen, das Mining einzustellen, was zu einem erheblichen Rückgang der Hashrate führt, wird die Mining-Schwierigkeit angepasst, um den Rechenaufwand vorübergehend zu verringern (bis die durchschnittliche Blockgenerierungszeit wieder 10 Minuten beträgt).
Beachten Sie, dass Miner aufgrund der begrenzten Anzahl von Hashes, die sie als gültige Ausgabe generieren können (beginnend mit einer bestimmten Anzahl von Nullen), nicht nach Kollisionen suchen müssen. Somit gibt es mehrere mögliche Lösungen für einen bestimmten Block und Miner müssen nur eine davon finden, abhängig von einem Schwellenwert, der durch die Schwierigkeit des Minings bestimmt wird.
Da das Bitcoin-Mining eine so kostspielige Aufgabe ist, gibt es für 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 dementsprechend.
Abschluss
Es besteht kein Zweifel, dass Hash-Funktionen eines der grundlegenden Werkzeuge der Informatik sind, insbesondere wenn es um die Arbeit mit großen Datenmengen geht. In Kombination mit Kryptografie können Hashing-Algorithmen sehr vielseitig sein und Sicherheit und eine Vielzahl von Authentifizierungsmethoden 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 nützlich, ihre Eigenschaften und Arbeitsmechanismen zu verstehen.
