Hashing bezieht sich auf den Prozess der Erstellung einer Ausgabe fester Größe aus einer Eingabe variabler Größe. Dies geschieht durch die Verwendung mathematischer Formeln, die als Hash-Funktionen bekannt sind (implementiert als Hash-Algorithmen).

Obwohl nicht alle Hash-Funktionen Kryptographie verwenden, bilden sogenannte kryptografische Hash-Funktionen den Kern digitaler Währungen. Dank ihnen können Blockchain und andere verteilte Systeme ein erhebliches Maß an Datenintegrität und -sicherheit erreichen.

Sowohl traditionelle als auch kryptografische Hash-Funktionen sind deterministisch. Deterministisch bedeutet, dass der Hashing-Algorithmus immer die gleiche Ausgabe (auch Digest oder Hash genannt) erzeugt, solange sich die Eingabe(n) nicht ändern.

Kryptowährungs-Hashing-Algorithmen sind in der Regel als Einwegfunktionen konzipiert, was bedeutet, dass sie ohne erheblichen Zeit- und Rechenaufwand nicht einfach rückgängig gemacht werden können. Mit anderen Worten: Es ist sehr einfach, Ausgaben aus Eingaben zu erhalten, aber relativ schwierig, das Gegenteil zu erreichen (Eingaben nur aus Ausgaben zu erhalten). Im Allgemeinen gilt: Je schwieriger es ist, die Eingabe zu finden, desto sicherer ist der Hashing-Algorithmus.


Wie funktionieren Hash-Funktionen?

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

Lassen Sie uns zur Veranschaulichung das Wort „Binance“ und „binance“ durch den SHA-256-Hashing-Algorithmus (der in Bitcoin verwendet wird) laufen lassen.

SHA-256

Eingang

Ausgabe (256 Bit)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

Binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Beachten Sie, dass eine kleine Änderung (in der Form des Anfangsbuchstabens) zu einem völlig anderen Hashwert führte. Da wir jedoch SHA-256 verwenden, hat die Ausgabe immer eine feste Größe von 256 Bit (oder 64 Zeichen), unabhängig von der Größe der Eingabe. Es spielt auch keine Rolle, wie oft wir die beiden Wörter durch den Algorithmus laufen lassen, da die beiden Ausgaben konstant bleiben.

Wenn wir umgekehrt dieselbe Eingabe über den SHA-1-Hash-Algorithmus ausführen, erhalten wir die folgenden Ergebnisse:

SHA-1

Eingang

Ausgabe (160 Bit)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

Binance

e58605c14a76ff98679322cca0eae7b3c4e08936


Es ist erwähnenswert, dass das Wort SHA eine Abkürzung für Secure Hash Algorithms ist. Es bezieht sich auf eine Reihe kryptografischer Hash-Funktionen, die die Algorithmen SHA-0 und SHA-1 sowie SHA-2- und SHA-3-Kombinationen umfassen. SHA-256 ist zusammen mit SHA-512 und anderen Varianten Teil der SHA-2-Suite. Derzeit gelten nur SHA-2- und SHA-3-Blöcke als sicher.


Warum ist es wichtig?

Herkömmliche Hash-Funktionen haben ein breites Spektrum an Anwendungsfällen, darunter Datenbanksuchen, die Analyse großer Dateien und die Datenverwaltung. Kryptografische Hash-Funktionen hingegen werden häufig in Informationssicherheitsanwendungen wie der Nachrichtenauthentifizierung und dem digitalen Fingerabdruck verwendet. Für Bitcoin sind kryptografische Hashes ein wesentlicher Bestandteil des Mining-Prozesses und spielen auch eine Rolle bei der Generierung neuer Adressen und Schlüssel.

Die wahre Stärke der Segmentierung liegt im Umgang mit großen Informationsmengen. Beispielsweise kann eine große Datei oder ein großer Datensatz eine Hash-Funktion durchlaufen und dann deren Ausgabe verwenden, um die Genauigkeit und Integrität der Daten schnell zu überprüfen. Dies ist aufgrund der deterministischen Natur von Hash-Funktionen möglich: Eingaben führen immer zu vereinfachten, komprimierten (Hash-)Ausgaben. Diese Technologie macht das Speichern und Merken großer Datenmengen überflüssig.

Besonders nützlich ist Hashing im Kontext der Blockchain-Technologie. Die Bitcoin-Blockchain enthält viele Operationen, die Hashing beinhalten, die meisten davon im Mining-Prozess. Tatsächlich basieren fast alle Kryptowährungsprotokolle auf Hashing, um Transaktionssätze zu verknüpfen und sie in Blöcken zu verdichten. Und auch, um kryptografische Verbindungen zwischen den einzelnen Blöcken zu erstellen und so effektiv eine Blockchain zu schaffen.


Kryptografische Hash-Funktionen

Auch hier kann eine Hash-Funktion, die kryptografische Techniken verwendet, als kryptografische Hash-Funktion definiert werden. Das Hacken einer Hash-Funktion erfordert unzählige Brute-Force-Angriffe. Damit eine Hash-Funktion invertiert werden kann, müssen sie durch Versuch und Irrtum erraten, was die Eingabe war, bis die entsprechende Ausgabe erzeugt wird. Es ist aber auch möglich, dass unterschiedliche Eingaben die gleiche Ausgabe erzeugen, es kommt dann zu einer „Kollision“.

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

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

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

  • Vorbildresistenz: Die Hash-Funktion kann nicht „invertiert“ werden (Eingaben aus gegebenen Ausgaben finden).

  • Widerstand gegen das zweite Vorbild: Es kann kein zweiter Eingang gefunden werden, der mit einem anderen angegebenen Eingang kollidiert.


Kollisionssicherheit

Wie bereits erwähnt, kommt es zu einer Kollision, wenn verschiedene Eingaben genau den gleichen Hash erzeugen. Daher ist die Hash-Funktion kollisionsresistent, bis jemand eine Kollision feststellt. 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 stark genug, um als resistent zu gelten (z. B. SHA-256).

Unter den verschiedenen SHA-Algorithmen sind SHA-0- und SHA-1-Kombinationen aufgrund von Kollisionen nicht mehr sicher. SHA-2- und SHA-3-Blöcke gelten derzeit als kollisionssicher.


Urbild-Widerstand

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

Bedenken Sie, dass sich diese Funktion von der vorherigen unterscheidet, da ein Angreifer versuchen wird, anhand bestimmter Ausgaben zu erraten, um welche Eingabe es sich handelt. Andererseits kommt es zu einer Kollision, wenn jemand verschiedene Eingaben findet, die dieselbe Ausgabe erzeugen, es aber egal ist, welche Eingabe verwendet wurde.

Preimage-Resistenz ist für den Datenschutz wertvoll, da ein einfacher Hash einer Nachricht deren Authentizität nachweisen kann, ohne dass Informationen preisgegeben werden müssen. In der Praxis speichern und verwenden viele Dienstanbieter und Webanwendungen aus Passwörtern generierte Hashes anstelle von Klartext-Passwörtern.


Zweiter Urbildwiderstand

Der Einfachheit halber können wir sagen, dass der Widerstand gegen das zweite Urbild irgendwo zwischen den anderen vorherigen Eigenschaften liegt. Ein Second-Preimage-Angriff tritt auf, wenn jemand eine bestimmte Eingabe findet, die dieselbe Ausgabe generiert wie eine andere Eingabe, die er bereits kennt.

Mit anderen Worten: Bei einem Second-Preimage-Angriff wird eine Kollision gefunden, aber statt nach zwei zufälligen Eingaben zu suchen, die denselben Hash wie eine Ausgabe generieren, wird nach einer Eingabe gesucht, die denselben Hash generiert, der von einer anderen spezifischen Eingabe generiert wurde.

Daher ist jede kollisionsresistente Hash-Funktion auch resistent gegen Second-Preimage-Angriffe, da letztere immer eine Kollision bedeuten. Aber Angreifer können dennoch einen frühen Angriff auf eine kollisionsresistente Funktion durchführen, da es darum geht, einen Eingang von einem Ausgang zu finden.


Bergbau

Es gibt mehrere Schritte im Bitcoin-Mining-Prozess, die Hashing-Funktionen enthalten, wie z. B. die Überprüfung von Guthaben, die Verknüpfung von Ein- und Ausgängen mit Transaktionen und das Hashing von Transaktionen innerhalb eines Blocks, um einen Merkle Tree zu bilden. Aber einer der Hauptgründe, warum die Bitcoin-Blockchain sicher ist, ist die Tatsache, dass Miner unzählige Hashes benötigen, um eine gültige Lösung für den nächsten Block zu finden.

Insbesondere muss der Miner mehrere verschiedene Eingaben ausprobieren, wenn er einen Hash-Wert für seinen Kandidatenblock generiert. Im Wesentlichen können sie ihren Block nur dann validieren, wenn sie einen resultierenden Hash generieren, der mit einer bestimmten Anzahl von Nullen beginnt. Die Anzahl der Nullen bestimmt die Schwierigkeit des Minings und variiert je nach der dem Netzwerk zugewiesenen Hash-Rate.

In diesem Fall stellt die Hash-Rate die Menge an Rechenleistung dar, die in das Mining von Bitcoin investiert wird. Wenn die Netzwerk-Hash-Rate steigt, passt das Bitcoin-Protokoll den Mining-Schwierigkeitsgrad automatisch an, sodass die durchschnittliche Zeit zum Mining eines Blocks bei etwa 10 Minuten bleibt. Wenn andererseits viele Miner beschließen, das Mining einzustellen, was zu einem erheblichen Rückgang der Hash-Rate führt, wird die Mining-Schwierigkeit angepasst, was den Mining-Prozess erleichtert (bis die durchschnittliche Block-Mining-Zeit wieder 10 Minuten beträgt).

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

Da das Bitcoin-Mining sehr teuer ist, haben Miner kaum einen Grund, das System zu betrügen, da dies zu erheblichen finanziellen Verlusten führen würde. Je mehr Miner der Blockchain beitreten, desto leistungsfähiger wird sie.


Abschließende Gedanken

Es besteht kein Zweifel, dass Hash-Funktionen unverzichtbare Werkzeuge in der Informatik sind, insbesondere wenn es um den Umgang mit großen Datenmengen geht. Hash-Algorithmen können in Kombination mit Kryptografie vielseitig einsetzbar sein und auf viele verschiedene Arten Sicherheit und Authentifizierung bieten. Daher sind kryptografische Hash-Funktionen für fast alle Kryptowährungsnetzwerke äußerst wichtig. Daher ist es für jeden, der sich für die Blockchain-Technologie interessiert, auf jeden Fall nützlich, seine Eigenschaften und Wirkmechanismen zu verstehen.