Hashing bezieht sich auf den Prozess der Generierung einer Ausgabe fester Größe aus einer Eingabe variabler Größe. Eine solche Methode wird durch die Verwendung mathematischer Formeln erreicht, die als Hash-Funktionen bekannt sind (implementiert als Hashing-Algorithmen).
Obwohl nicht alle Hash-Funktionen konsequent die Verwendung von Kryptografie beinhalten, sind kryptografische Hash-Funktionen das Herzstück von Kryptowährungen. Durch diese Funktionen können Blockchains und andere Arten verteilter Systeme ein erhebliches Maß an Datenintegrität und -sicherheit erreichen.
Konventionelle und kryptografische Hash-Funktionen sind deterministisch. Das heißt, solange sich die Eingabe nicht ändert, erzeugt der Hashing-Algorithmus immer die gleiche Ausgabe (auch Hash oder Hash genannt).
Typischerweise sind Kryptowährungs-Hashing-Algorithmen als Einwegfunktionen konzipiert, was bedeutet, dass sie ohne großen Zeit- und Rechenaufwand nicht einfach widerrufen werden können. Mit anderen Worten: Es ist ziemlich einfach, aus einer Eingabe eine Ausgabe zu erstellen, aber es ist relativ schwierig, in die entgegengesetzte Richtung zu gehen (die Eingabe allein aus der Ausgabe zu generieren). Insgesamt gilt: Je schwieriger der Eintrag zu finden ist, desto sicherer wird der Hashing-Algorithmus angesehen.
Wie funktioniert eine Hash-Funktion?
Verschiedene Hashing-Funktionen erzeugen Ausgaben unterschiedlicher Größe, die möglichen Ausgabegrößen für jeden Hashing-Algorithmus sind jedoch immer konstant. Beispielsweise kann der SHA-256-Algorithmus nur eine 256-Bit-Ausgabe erzeugen, während SHA-1 immer einen 160-Bit-Hash generiert.
Zur Veranschaulichung wenden wir eine SHA-256-Hash-Funktion (die für Bitcoin verwendet wird) auf die Wörter Binance und binance an.
Beachten Sie, dass eine geringfügige Änderung (hier der erste Buchstabe) zu einem völlig anderen Hashwert führte. Da wir 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. Unabhängig davon, wie oft man diesen Algorithmus auf diese bestimmten Wörter anwendet, sind beide Ergebnisse immer gleich.
Wenn wir andererseits dieselben Einträge über den SHA-1-Hashing-Algorithmus verwenden, würden wir die folgenden Ergebnisse erhalten:
Das Akronym SHA steht für Secure Hash Algorithms. Damit ist eine Reihe kryptografischer Funktionen gemeint, zu denen die Algorithmen SHA-0 und SHA-1 sowie die Gruppen SHA-2 und SHA-3 gehören. SHA-256 gehört zusammen mit SHA-512 und anderen Varianten zur SHA-2-Gruppe. Derzeit gelten nur SHA-2- und SHA-3-Gruppen als sicher.
Warum sind sie wichtig?
Herkömmliche Hashing-Funktionen haben ein breites Spektrum an Anwendungsfällen, darunter Datenbanksuchen, Analysen großer Dateien und Datenverwaltung. Andererseits werden kryptografische Hash-Funktionen häufig in Informationssicherheitsanwendungen wie der Nachrichtenauthentifizierung und dem Drucken von Fingerabdrücken verwendet. Bei Bitcoin sind kryptografische Hash-Funktionen ein wesentlicher Bestandteil des Mining-Prozesses und spielen auch eine Rolle bei der Generierung neuer Adressen und Schlüssel.
Die wahre Leistungsfähigkeit des Hashings zeigt sich, wenn es um die Verarbeitung großer Informationsmengen geht. Beispielsweise kann man eine Datei oder einen Datensatz durch eine Hash-Funktion laufen lassen und dann deren 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 (Hash). Eine solche Technik macht das Speichern und Merken großer Datenmengen überflüssig.
Besonders nützlich ist Hashing im Kontext der Blockchain-Technologie. Die Bitcoin-Blockchain verfügt über mehrere Vorgänge, die Hashing beinhalten, von denen die meisten im Mining-Prozess stattfinden. Tatsächlich basieren fast alle Kryptowährungsprotokolle auf Hashing, um Gruppen von Transaktionen zu Blöcken zu verknüpfen und zu verdichten sowie kryptografische Verbindungen zwischen den einzelnen Blöcken herzustellen, um letztendlich eine Blockchain zu erstellen.
Kryptografische Hash-Funktionen
Eine Hash-Funktion, die kryptografische Techniken einsetzt, kann als kryptografische Hash-Funktion definiert werden. Um eine kryptografische Hash-Funktion zu knacken, sind in der Regel unzählige Brute-Force-Versuche erforderlich. Damit eine Person eine kryptografische Hash-Funktion umkehren kann, muss sie durch zahlreiche Versuche und Fehlschläge erraten, um welche Eingabe es sich handelt, bis die korrekte Ausgabe erzeugt wird. Es besteht jedoch auch die Möglichkeit, dass unterschiedliche Eingaben genau dieselben Ergebnisse erzeugen. In diesem Fall kommt es zu Absprachen.
Technisch gesehen muss eine kryptografische Hash-Funktion drei Eigenschaften erfüllen, um als effektiv sicher zu gelten. Wir können dies beschreiben als: Kollisionswiderstand, Widerstand gegen das Vorbild und Widerstand gegen das zweite Vorbild.
Bevor wir die einzelnen Eigenschaften besprechen, fassen wir deren Logik in drei kurzen Sätzen zusammen.
Kollisionsresistenz: Es ist unmöglich, zwei unterschiedliche Eingaben zu finden, die denselben Hash wie die Ausgabe erzeugen.
Stärke des Vorbilds: Es ist unmöglich, die Hash-Funktion umzukehren (die Eingabe aus einer bestimmten Ausgabe zu finden).
Widerstand gegen zweites Urbild: Es ist unmöglich, eine zweite Eingabe zu finden, die mit einer bestimmten Eingabe kollidiert.
Kollisionsfestigkeit
Wie bereits erwähnt, kommt es zu einer Kollision, wenn verschiedene Eingaben genau denselben Hash erzeugen. Daher gilt eine Hash-Funktion als kollisionsresistent, bis jemand eine Kollision findet. Beachten Sie, dass es bei jeder Hash-Funktion immer zu Kollisionen kommt, da die möglichen Eingaben unendlich sind, während die möglichen Ausgaben endlich sind.
Mit anderen Worten: Eine Hash-Funktion ist kollisionsresistent, wenn die Wahrscheinlichkeit, eine Kollision zu finden, so gering ist, dass die Berechnung Millionen von Jahren erfordern würde. Obwohl es also keine kollisionsfreien Hash-Funktionen gibt, sind einige von ihnen stark genug, um als widerstandsfähig zu gelten (z. B. SHA-256).
Unter den verschiedenen SHA-Algorithmen gelten die Gruppen SHA-0 und SHA-1 nicht mehr als sicher, da Kollisionen festgestellt wurden. Derzeit gelten SHA-2 und SHA-3 als kollisionssicher.
Widerstand gegen Vorbilder
Die Eigenschaft des Urbildwiderstands hängt mit dem Konzept der Einwegfunktionen zusammen. Eine Hash-Funktion gilt als bildresistent, wenn die Wahrscheinlichkeit sehr gering ist, die Eingabe zu finden, die eine bestimmte Ausgabe generiert hat.
Beachten Sie, dass sich diese Eigenschaft von der vorherigen unterscheidet, da hier ein hypothetischer Angreifer versuchen würde, die Eingabe zu erraten, indem er sich eine bestimmte Ausgabe ansieht. Eine Kollision hingegen liegt dann vor, wenn jemand zwei unterschiedliche Eingaben findet, die dieselbe Ausgabe erzeugen, wobei es jedoch nicht unbedingt darauf ankommt, welche Eingabe verwendet wurde.
Die Preimage-Widerstandseigenschaft ist für den Schutz von Daten wertvoll, da durch einfaches Hashen einer Nachricht ihre Authentizität nachgewiesen werden kann, ohne dass der Inhalt offengelegt werden muss. In der Praxis speichern und verwenden viele Dienstanbieter und Webanwendungen aus Passwörtern generierte Hashes anstelle von Klartext-Passwörtern.
Widerstand gegen das zweite Urbild
Der Einfachheit halber können wir sagen, dass der Widerstand des zweiten Urbildes irgendwo zwischen den beiden anderen Eigenschaften liegt. Ein zweiter Preimage-Angriff erfolgt, wenn jemand eine bestimmte Eingabe findet, die dieselbe Ausgabe generiert wie eine andere Eingabe, die er bereits kennt.
Mit anderen Worten, bei einem zweiten Preimage-Angriff geht es darum, eine Kollision zu finden, aber anstatt nach zwei zufälligen Eingaben zu suchen, die denselben Hash generieren, suchen wir nach einer Eingabe, die denselben Hash wie eine andere spezifische Eingabe generiert.
Daher ist jede kollisionsresistente Hash-Funktion auch resistent gegen Second-Preimage-Angriffe, da diese immer eine Kollision beinhalten. Man kann jedoch immer noch einen Preimage-Angriff auf eine kollisionsresistente Funktion durchführen, da es darum geht, einen einzelnen Eingang aus einem einzelnen Ausgang zu finden.
Bergbau
Es gibt viele Schritte beim Bitcoin-Mining, die Hashing-Funktionen beinhalten, wie z. B. das Überprüfen von Salden, das Verknüpfen von Transaktionseingaben/-ausgaben und das Hashing von Transaktionen in einem Block, um einen Merkle-Baum zu bilden. Aber einer der Hauptgründe dafür, dass die Bitcoin-Blockchain sicher ist, besteht darin, dass Miner eine Vielzahl von Hashing-Vorgängen durchführen müssen, um eine gültige Lösung zum Erstellen und Hinzufügen eines Blocks zu finden.
Insbesondere muss ein Miner mehrere verschiedene Eingaben ausprobieren, wenn er einen Hash-Wert für den Block erstellt, den er beantragt. Im Wesentlichen können sie ihren Block nur dann validieren, wenn sie einen Ausgabe-Hash generieren, 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 die Menge an Rechenenergie dar, die in das Mining von Bitcoin investiert wird. Wenn die Netzwerk-Hash-Rate 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 andererseits mehrere Miner beschließen, das Mining einzustellen, was zu einem deutlichen Rückgang der Hash-Rate führt, wird die Mining-Schwierigkeit angepasst, was das Mining erleichtert (bis die durchschnittliche Blockzeit auf 10 Minuten reduziert wird).
Beachten Sie, dass Miner nicht auf mögliche Kollisionen prüfen 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 eine finden – entsprechend der Schwelle, die durch die Mining-Schwierigkeit bestimmt wird.
Da Bitcoin-Mining eine kostspielige Aufgabe ist, besteht für Miner kein Grund, innerhalb des Systems zu betrügen, da dies zu erheblichen finanziellen Verlusten führen würde. Je mehr Miner es in einer Blockchain gibt und je größer sie wird, desto stärker wird sie.
Schlussfolgern
Es besteht kein Zweifel, dass Hash-Funktionen unverzichtbare Werkzeuge in der Datenverarbeitung sind, insbesondere beim Umgang mit großen Datenmengen. In Kombination mit Kryptografie können Hashing-Algorithmen in mehrfacher Hinsicht sehr vielseitig sein, insbesondere für Sicherheit und Authentifizierung. 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, auf jeden Fall nützlich, ihre Eigenschaften und Arbeitsmechanismen zu verstehen.

