Hashing bezieht sich auf den Prozess der Generierung von Ausgaben fester Größe aus Eingaben variabler Größe. Dies geschieht mithilfe mathematischer Formeln, die als Hash-Funktionen bekannt sind (implementiert als Hashing-Algorithmen).
Obwohl nicht alle Hash-Funktionen den Einsatz von Kryptografie beinhalten, sind sogenannte kryptografische Hash-Funktionen das Herzstück von Kryptowährungen. Dank ihnen können Blockchains und andere verteilte Systeme ein erhebliches Maß an Datenintegrität und -sicherheit erreichen.
Sowohl normale als auch kryptografische Hash-Funktionen sind deterministisch. Determinismus bedeutet, dass der Hashing-Algorithmus immer das gleiche Ergebnis liefert (auch Digest oder Hash genannt), solange sich die Eingabedaten nicht ändern.
Kryptowährungs-Hashing-Algorithmen sind typischerweise als Einwegfunktionen konzipiert, was bedeutet, dass sie nicht ohne großen Rechenzeit- und Ressourcenaufwand rückgängig gemacht werden können. Mit anderen Worten: Es ist ziemlich einfach, aus einer Eingabe eine Ausgabe zu generieren, aber es ist relativ schwierig, umgekehrt vorzugehen (eine Eingabe nur aus einer Ausgabe zu generieren). Generell gilt: Je schwieriger es ist, die Eingabe zu finden, desto sicherer gilt der Hashing-Algorithmus.
Wie funktioniert eine Hash-Funktion?
Verschiedene Hash-Funktionen erzeugen Ausgaben unterschiedlicher Größe, aber die möglichen Ausgabegrößen jedes Hashing-Algorithmus sind immer konstant. Beispielsweise kann der SHA-256-Algorithmus nur 256-Bit-Ausgaben erzeugen, während SHA-1 immer einen 160-Bit-Digest generiert.
Zur Veranschaulichung lassen Sie uns die Wörter „Binance“ und „binance“ durch den SHA-256-Hashing-Algorithmus (den in Bitcoin verwendeten) weiterleiten.
Beachten Sie, dass eine geringfügige Änderung (die Groß-/Kleinschreibung des ersten Buchstabens) zu einem völlig anderen Hash-Funktionswert 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 Größe der Eingabe. Außerdem spielt es keine Rolle, wie oft wir die beiden Wörter durch den Algorithmus laufen lassen, die beiden Ausgaben bleiben konstant.
Und wenn wir dieselben Eingaben durch den SHA-1-Hashing-Algorithmus weiterleiten, erhalten wir die folgenden Ergebnisse:
Interessant ist, dass die Abkürzung SHA für Secure Hash Algorithms (sichere Verschlüsselungsalgorithmen) steht. Es handelt sich um eine Reihe kryptografischer Hash-Funktionen, die SHA-0- und SHA-1-Algorithmen sowie Gruppen von SHA-2 und SHA-3 umfassen. SHA-256 gehört zusammen mit SHA-512 und anderen Varianten zur SHA-2-Familie. Derzeit gelten nur SHA-2- und SHA-3-Gruppen als sicher.
Welche Bedeutung hat diese Technologie?
Herkömmliche Hash-Funktionen haben ein breites Anwendungsspektrum, einschließlich Datenbanksuchen, Analyse großer Dateien 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 integraler Bestandteil des Mining-Prozesses und spielen eine Rolle bei der Generierung neuer Adressen und Schlüssel.
Die wahre Leistungsfähigkeit des Hashings zeigt sich 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 deren Ausgaben 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). Durch diese Methode entfällt die Notwendigkeit, große Datenmengen zu speichern und zu „merken“.
Besonders nützlich ist Hashing im Kontext der Blockchain-Technologie. Die Bitcoin-Blockchain verfügt über mehrere Hashing-bezogene Vorgänge, von denen die meisten im Mining-Prozess ausgeführt werden. Tatsächlich basieren fast alle Kryptowährungsprotokolle auf Hashing, um Gruppen von Transaktionen zu Blöcken zu verknüpfen und zu kombinieren und kryptografische Verbindungen zwischen den einzelnen Blöcken zu erstellen und so eine Blockchain zu schaffen.
Kryptografische Hash-Funktionen
Auch hier kann eine Hash-Funktion, die kryptografische Techniken verwendet, als kryptografische Hash-Funktion definiert werden. Im Allgemeinen erfordert das Knacken einer kryptografischen Hash-Funktion viele Brute-Force-Versuche. Um eine kryptografische Hash-Funktion zu „entfalten“, müssen Sie die Eingaben durch Ausprobieren auswählen, bis eine geeignete Ausgabe erhalten wird. Es besteht jedoch auch die Möglichkeit, dass unterschiedliche Eingaben zum gleichen Ergebnis führen und es dann zu einer „Kollision“ kommt.
Technisch gesehen muss eine kryptografische Hash-Funktion drei Eigenschaften erfüllen, um als gut gesichert zu gelten. Wir können sie beschreiben als: Widerstand gegen Kollisionen und Widerstand gegen den Angriff, den ersten und zweiten Prototypen zu finden.
Bevor wir die einzelnen Eigenschaften beschreiben, fassen wir ihre Logik in drei kurzen Sätzen zusammen.
Kollisionsresistenz: Unmöglichkeit, zwei verschiedene Eingaben zu finden, die denselben Hash erzeugen.
Robustheit beim Finden der ersten Vorschau: Die Hash-Funktion kann nicht „umgekehrt“ werden (die Eingabe über eine bestimmte Ausgabe finden).
Widerstand gegen die Suche nach einem zweiten Beispiel: Die Unfähigkeit, eine zweite Eingabe zu finden, die denselben Hash wie die erste hat.
Kollisionsfestigkeit
Wie bereits erwähnt, kommt es zu einer Kollision, wenn verschiedene Eingaben denselben Hash erzeugen. Die Hash-Funktion gilt dann als kollisionsresistent, bis jemand eine solche Kollision entdeckt. Beachten Sie, dass es aufgrund der unendlichen Anzahl von Eingaben und endlichen Anzahl von Ausgaben immer zu Kollisionen bei allen Hash-Funktionen kommt.
Daher ist eine Hash-Funktion kollisionsresistent, wenn die Wahrscheinlichkeit, eine Kollision zu erkennen, so gering ist, dass die Berechnung Millionen von Jahren dauern würde. Obwohl es keine kollisionsfreien Hash-Funktionen gibt, sind einige aus diesem Grund so stark, dass sie als stabil gelten können (z. B. SHA-256).
Unter den verschiedenen SHA-Algorithmen sind die Gruppen SHA-0 und SHA-1 nicht mehr sicher, da Kollisionen erkannt wurden. Derzeit gelten nur SHA-2- und SHA-3-Gruppen als kollisionsresistent.
Widerstand gegen die Suche nach dem ersten Prototyp
Diese Eigenschaft steht in engem Zusammenhang mit dem Konzept der einseitigen Funktionen. Eine Hash-Funktion gilt als robust beim Finden der ersten Vorschau, solange die Wahrscheinlichkeit sehr gering ist, dass jemand die Eingabe mithilfe der generierten Ausgabe finden kann.
Beachten Sie, dass sich diese Eigenschaft von der vorherigen unterscheidet, da der Angreifer die Eingabe anhand einer bestimmten Ausgabe erraten muss. Diese Art von Kollision tritt auf, wenn jemand zwei unterschiedliche Eingaben findet, die dieselbe Ausgabe erzeugen, unabhängig davon, welche bestimmte Eingabe verwendet wurde.
Die Eigenschaft des Proof-of-First-Look ist wertvoll für die Datensicherheit, da ein einfacher Hash einer Nachricht deren Authentizität nachweisen kann, ohne dass zusätzliche Informationen preisgegeben werden müssen. In der Praxis speichern und verwenden viele Dienstanbieter und Webanwendungen aus Passwörtern generierte Hashes, anstatt sie im Textformat zu verwenden.
Widerstand gegen die Suche nach einem zweiten Prototyp
Diese Art von Stabilität liegt irgendwo zwischen den beiden vorherigen Eigenschaften. Der Angriff des Findens des zweiten Prototyps besteht darin, einen bestimmten Input zu finden, mit dem es möglich ist, einen solchen Output zu generieren, der bereits mit einem anderen, zuvor bekannten Input generiert wurde.
Mit anderen Worten: Bei einem zweiten Lookup-Angriff geht es um die Erkennung von Kollisionen. Anstatt jedoch zwei zufällige Eingaben zu finden, die denselben Hash generieren, zielt der Angriff darauf ab, eine Eingabe zu finden, die einen Hash reproduzieren kann, der bereits von einer anderen Eingabe generiert wurde.
Daher ist jede kollisionsresistente Hash-Funktion auch resistent gegen den Angriff, die zweite Primzahl zu finden, da diese immer eine Kollision benötigt. Es ist jedoch immer noch möglich, einen ersten Lookup-Angriff in einer kollisionstoleranten Funktion durchzuführen, da dabei nach einem Eingang mit einem Ausgang gesucht wird.
Bergbau
Es gibt viele Schritte beim Bitcoin-Mining, die mithilfe von Hash-Funktionen ausgeführt werden. Dabei handelt es sich um die Überprüfung des Kontostands, 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, warum die Bitcoin-Blockchain sicher ist, ist, dass Miner so viele Hashing-Vorgänge wie möglich durchführen müssen, um schließlich die richtige Lösung für den nächsten Block zu finden.
Ein Miner muss mehrere unterschiedliche Eingaben verwenden, wenn er einen Hash für seinen Kandidatenblock generiert. Eine Überprüfung des Blocks ist nur möglich, wenn die korrekt generierte Ausgabe in Form eines Hashs mit einer bestimmten Anzahl von Nullen beginnt. Die Anzahl der Nullen bestimmt die Schwierigkeit des Minings und variiert je nach Hashrate des Netzwerks.
In diesem Fall ist die Hashrate ein Maß für die Leistung Ihres Computers, die Sie in das 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, etwa 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 die Berechnung vorübergehend zu erleichtern (bis die durchschnittliche Blockbildungszeit wieder 10 Minuten beträgt).
Beachten Sie, dass Miner nicht nach Kollisionen suchen müssen, da sie mehrere Hashes als gültige Ausgabe generieren können (beginnend mit einer bestimmten Anzahl von Nullen). Somit gibt es mehrere mögliche Lösungen für einen bestimmten Block, und Miner müssen nur eine davon finden – entsprechend einem Schwellenwert, der durch die Mining-Schwierigkeit bestimmt wird.
Da das Bitcoin-Mining eine kostspielige Aufgabe ist, haben Miner keine Motivation, das System zu betrügen, da dies zu erheblichen finanziellen Verlusten führen würde. Dementsprechend gilt: Je mehr Miner der Blockchain beitreten, desto größer und stärker wird sie.
Ergebnisse
Es besteht kein Zweifel, dass Hash-Funktionen eines der wichtigsten Werkzeuge der Informatik sind, insbesondere bei der Arbeit mit großen Datenmengen. In Kombination mit Kryptografie können Hashing-Algorithmen sehr nützlich sein und auf vielfältige Weise Sicherheit und Authentifizierung bieten. Daher sind kryptografische Hash-Funktionen für fast alle Kryptowährungsnetzwerke von entscheidender Bedeutung, und das Verständnis ihrer Eigenschaften und Arbeitsmechanismen ist sicherlich für jeden, der sich für Blockchain-Technologie interessiert, hilfreich.

