Hashing bezieht sich auf den Prozess der Erzeugung einer festen Größe aus einer Eingabe von Variablen. Dies geschieht durch die Verwendung mathematischer Formeln, die als Hash-Funktionen bekannt sind (implementiert als Hashing Algorithmen).
Obwohl nicht alle Hash-Funktionen die Verwendung von Kryptographiebeinhalten, sind die sogenannten kryptographischen Hash-Funktionen im Kern von Kryptographie-Währungen. Dank dieser Systeme können Blockchains und andere Systeme bedeutsame Stufen von Datenintegrität und Sicherheit erreichen.
Sowohl konventionelle als auch kryptographische Hash-Funktionen sind deterministisch. Deterministisch zu sein bedeutet, dass der Hashing-Algorithmus immer dieselbe Ausgabe erzeugt (auch Digest oder Hash genannt), solange sich die Eingabe nicht ändert.
Typischerweise werden die Hashing-Algorithmen von Kryptographien als Einwegfunktionen konzipiert, was bedeutet, dass sie ohne große Mengen an Rechenzeit und Ressourcen nicht leicht zurück geleitet werden können. Mit anderen Worten, es ist ziemlich einfach, die Ausgabe aus der Eingabe zu erstellen, aber relativ schwierig in die entgegengesetzte Richtung (um die Eingabe allein aus der Ausgabe zu erzeugen). Allgemein gesprochen, je schwieriger es ist, die Eingabe zu finden, desto sicherer wird der Hashing-Algorithmus als sein.
Wie funktioniert ein Hash?
Verschiedene Hash-Funktionen erzeugen die Ausgabe in unterschiedlichen Größen, aber die mögliche Ausgabegröße für jeden Hashing-Algorithmus ist immer konstant. So kann der SHA-256-Algorithmus nur eine Ausgabe von 256 Bit erzeugen, während der SHA-1 immer eine 160-Bit-Ausgabe erzeugt.
Um dies zu veranschaulichen, lassen wir die Wörter “Binance” und “Binnce” durch den SHA-256 Hashing-Algorithmus (der in Bitcoin verwendeten) ausführen.
Beachte, dass eine kleine Änderung (die Änderung des ersten Buchstabes) zu einem völlig anderen Hash-Wert führte. Da wir jedoch SHA-256 verwenden, werden die Ausgänge immer eine feste Größe von 256 Bit (oder 64 Zeichen) haben - unabhängig von der Eingabegröße. Außerdem spielt es’keine Rolle, wie oft wir die beiden Wörter durch den Algorithmus ausführen, die Ausgabe bleibt konstant.
Wenn wir hingegen die gleichen Eingaben durch den SHA-1 Hashing-Algorithmus ausführen, hätten wir folgende Ergebnisse:
Das Akronym SHA steht für "Secure Hash Algorithmen". Es bezieht sich auf eine Reihe von kryptographischen Hash-Funktionen, die die SHA-0- und SHA-1-Algorithmen zusammen mit den Algorithmen SHA-2- und SHA-3 umfassen. Der SHA-256 Algorithmus ist Teil der SHA-2 Gruppe, zusammen mit SHA-512 und anderen Varianten. Derzeit werden nur SHA-2 und SHA-3 als sicher angesehen.
Warum ist das wichtig?
Die Funktionsweise der herkömmlichen Hash-Funktionen hat eine breite Palette von Anwendungsszenarien, darunter fallen Datenbanksuchen, umfangreiche Dateianalysen und Datenmanagement. Andererseits werden kryptographische Hash-Funktionen in Informations-Security-Anwendungen, wie z. B. der Nachrichtenauthentifizierung und im Bereich der digitalen Fingerabdrücke umfassend genutzt. Bei Bitcoin sind kryptographische Hash-Funktionen ein wesentlicher Bestandteil des Mining Prozesses und spielen auch eine Rolle bei der Generierung neuer Adressen und Schlüssel.
Die wirkliche Leistung des Hashings wird bei der Benutzung von enormen Informationsmengen deutlich. So kann man beispielsweise eine große Datei oder einen Datensatz durch eine Hash-Funktion ausführen und dann ihre Ausgabe verwenden, um die Genauigkeit und Integrität der Daten schnell zu überprüfen. Dies ist möglich, weil die Hash-Funktionen deterministisch sind: Die Eingabe führt immer zu einer vereinfachten, kondensierten Ausgabe (Hash). Eine solche Technik macht die Speicherung und “ das Merken” von großen Datenmengen überflüssig.
Das Hashing ist im Zusammenhang mit der Blockchain-Technologie besonders nützlich. Die Bitcoin Blockchain hat mehrere Operationen, die das Hashing beinhalten.Die meisten davon beim minen. Tatsächlich vertrauen fast alle kryptographischen Protokolle darauf, dass sie die Transaktionsgruppen in Blöcken verknüpfen und auch kryptographische Verbindungen zwischen jedem Block herstellen, was eine Blockchain bildet.
Kryptografische Hash-Funktionen
Eine Hash-Funktion, die kryptographische Techniken einsetzt, wird als kryptographische Hash-Funktion definiert. Generell erfordert die Auflösung einer kryptographischen Hash-Funktion eine Vielzahl von brute-force Angriffen. Falls jemand eine kryptographische Hash-Funktion zurückleiten möchte, ginge dies nur durch Vermuten der Eingabe, bis die entsprechende Ausgabe erzeugt wurde. Es gibt jedoch auch die Möglichkeit, dass verschiedene Eingaben die exakt gleiche Ausgabe erzeugen, in diesem Fall tritt eine “Kollision” auf.
Technisch muss eine kryptographische Hash-Funktion drei Eigenschaften aufweisen, um als sicher angesehen werden. Wir können diese als Starke Kollisionsresistenz, Einwegfunktion und Schwache Kollisionsresistenz beschreiben.
Bevor wir über jede Eigenschaft diskutieren, lass uns die Logik in drei kurzen Sätzen zusammenfassen.
Starke Kollisionsresistenz: es ist nicht möglich, zwei verschiedene Eingabewerte zu finden, die den gleichen Hash wie der Ausgabewert erzeugen.
Einwegfunktion: es ist nicht möglich, die Hash-Funktion “zurückzusetzen” (den Eingabewert von einem bestimmten Ausgabewert zu finden).
Schwache Kollisionsresistenz: es ist nicht möglich, irgendeinen zweiten Eingabewert zu finden, der mit einem bestimmten Eingabewert kollidiert.
Kollisionsvermeidung
Wie erwähnt, kommt eine Kollision vor, wenn verschiedene Eingaben den gleichen Hash erzeugen. So wird eine Hash-Funktion als Kollisionserresistent angesehen, bis jemand eine Kollision findet. Beachte, dass es immer Kollisionen für jede Hash-Funktion gibt, da die möglichen Eingaben unendlich sind, während die möglichen Ausgaben endlos sind.
Anders ausgedrückt, ist eine Hash-Funktion kollisionsbeständig, wenn die Möglichkeit einer Kollision so niedrig ist, dass sie Millionen von Jahren an Kalkulationen erfordern würde. Obwohl es keine kollisionsfreien Hash-Funktionen gibt, sind einige von ihnen stark genug, um als resistent zu gelten (z.B. SHA-256).
Unter den verschiedenen SHA-Algorithmen sind SHA-0- und SHA-1 nicht mehr sicher, weil Kollisionen gefunden wurden. Derzeit werden SHA-2 und SHA-3 als widerstandsfähig gegen Kollisionen betrachtet.
Einwegfunktion
Das Eigentum der Vorbildresistenz ist mit dem Konzept der Einwegfunktionen verbunden. Eine Hash-Funktion wird als preimage-resistent angesehen, wenn es eine sehr geringe Wahrscheinlichkeit gibt, dass jemand die Eingabe findet, die eine bestimmte Ausgabe generiert.
Beachte, dass sich diese Eigenschaft von der vorherigen unterscheidet, da ein Angreifer versuchen könnte, die Eingabe zu erraten, indem er eine bestimmte Ausgabe betrachtet. Eine Kollision hingegen tritt auf, wenn jemand zwei verschiedene Eingaben findet, die die gleiche Ausgabe erzeugen, aber es ist nicht egal welche Eingaben verwendet wurden.
Die Eigenschaft von Vorbildresistenz ist für den Schutz von Daten wertvoll, da ein einfacher Hash einer Nachricht seine Richtigkeit nachweisen kann, ohne die Informationen offen zu legen. In der Praxis speichern und verwenden viele Dienstleister und Webanwendungen Hashes, die aus Passwörtern erzeugt werden, anstatt die Passwörter in Klartext.
Zweiter Vorbildwiderstand
Um es zu vereinfachen, können wir sagen, dass der zweite Vorbildwiderstand irgendwo zwischen den anderen beiden Eigenschaften liegt. Ein zweites Vorbild-Angriff tritt auf, wenn jemand eine spezifische Eingabe finden kann, die die gleiche Ausgabe eines anderen Input erzeugt, den sie bereits kennen.
Mit anderen Worten: Ein zweites Vorbild-Angriff beinhaltet die Suche nach einer Kollision, aber anstatt nach zwei zufälligen Eingaben zu suchen, die den gleichen Hash erzeugen, suchen sie nach einer Eingabe, die denselben Hash erzeugt, der von einem anderen bestimmten Eingabewert erzeugt wurde.
Daher ist jede Hash-Funktion, die gegen Kollisionen resistent ist, auch gegen Zweitpräbild-Angriffe resistent, da letztere immer eine Kollision implizieren wird. Allerdings kann man noch einen Vorbild-Angriff auf eine kollisionsbeständige Funktion ausführen, da es bedeutet, eine einzige Eingabe aus einer einzigen Ausgabe zu finden.
Mining
Es gibt viele Schritte beim Bitcoin mining, die Hash-Funktionen beinhalten, wie z. B. die Verknüpfung von Transaktionseingaben und Ausgaben und das Hashing von Transaktionen innerhalb eines Blocks, um einen Merkle Tree zubilden. Aber einer der Hauptgründe, warum die Bitcoin Blockchain sicher ist ist, ist die Tatsache, dass Miner eine Vielzahl von Hashing-Operationen durchführen müssen, um schließlich eine gültige Lösung für den nächsten Block zu finden.
Speziell muss ein Miner mehrere verschiedene Eingaben versuchen, wenn er einen Hash-Wert für seinen Block erstellt. Im Wesentlichen können sie ihren Block nur validieren, wenn sie einen Ausgabehash erzeugen, der mit einer bestimmten Anzahl von Nullen beginnt. Die Anzahl der Nullen bestimmt die Mining Difficulty. Diese variiert je nach der Hash Rate, die dem Netzwerk zugeteilt ist.
Die Hash-Rate stellt dar, wie viel Computer Energie aktuell in Bitcoin-Mining investiert wird. Wenn die Hash-Rate des Netzwerks steigt, wird das Bitcoin-Protokoll automatisch die Mining Difficulty anpassen, so dass die durchschnittliche Zeit, die für das Minen eines Blocks benötigt wird, bei circa 10 Minuten bleibt. Wenn mehrere Miner sich entscheiden, das Mining stoppen, würde die Hash-Rate deutlich sinken und die Mining-Difficulty würde angepasst werden. Dadurch wäre es einfacher zu Minen (bis die durchschnittliche Blockzeit wieder bei 10 Minuten ist).
Beachte, dass Miner keine Kollisionen finden 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, aber Miner müssen nur eine davon finden. Diese wird durch die Mining-Difficulty bestimmt.
Da das Mining eine kostenintensive Aufgabe ist, haben Miner keinen Grund zu betrügen, da es zu erheblichen finanziellen Verlusten führen würde. Je mehr Miner einer Blockchain beitreten, desto größer und stärker wird sie.
Gedanke zum Schluss
Es besteht kein Zweifel, dass Hash-Funktionen wesentliche Werkzeuge in der Informatik sind, insbesondere wenn es um riesige Datenmengen geht. Wenn sie mit Kryptographie kombiniert werden, können Hashing-Algorithmen ziemlich vielseitig sein, was Sicherheit auf verschiedene Weise bietet. So sind kryptographische Hash-Funktionen für fast alle kryptographischen Netzwerke von entscheidender Bedeutung, daher ist das Verständnis ihrer Eigenschaften und Arbeitsmechanismen für jeden, der an der Blockchain-Technologie interessiert ist, sicherlich hilfreich.