Fortgeschrittene
Lektion 19
5 min

Was ist eine Hash-Funktion in einer Blockchain-Transaktion?

Kryptographische Hash-Funktionen generieren aus Datensätzen beliebiger Länge eine Zeichenfolge mit fester Länge. Ein Datensatz kann durch ein Wort, einen Satz, einen längeren Text oder eine ganze Datei gebildet werden. 

  • Eine kryptographische Hash-Funktion wird zu Sicherheitszwecken verwendet und bildet sozusagen den Kern der kryptographischen Sicherheit
  • Eine Hash-Funktion wandelt eine beliebige Eingabe von Daten (“keys”) in eine Folge von Bytes mit fester Länge und Struktur (“Hash-Wert”) um.
  • Der Hash einer Transaktion erleichtert die Identifikation von Transaktionen in der Blockchain

In dieser Lektion lernst du über die Eigenschaften von Hash-Funktionen.

Was ist eine Hash-Funktion?

Wie du in Lektion 6 der Bitpanda Academy für Fortgeschrittene gelernt hast, ist das Bitcoin-Netzwerk auf Regeln begründet, die als Proof of Work Konsens-Algorithmus bezeichnet werden. Dieser Konsens-Algorithmus steuert das Blockchain-Netzwerk. Abgesehen von Kryptowährungen werden Hash-Funktionen am häufigsten bei der Speicherung von Passwörtern verwendet.

Schauen wir uns die Grundlagen an. Eine mathematische Funktion wird verwendet, um etwas auszudrücken oder eine Beziehung zu veranschaulichen, die eine oder mehrere Variablen oder Mengen umfasst. Folglich stellt eine Funktion eine Eingabe (“input”) in Beziehung zu einer Ausgabe (“output”).

Ein Beispiel hierfür wären die Größen und die Preise von Burgern in einem Restaurant.

Die Kosten eines Burgers werden durch seine Größe bestimmt.

Daher sind in diesem Fall die Kosten eine Funktion der Größe.

Angenommen, du kannst kleine, mittlere und große Burger kaufen. Die jeweiligen Kosten betragen 1,50 USD, 2,50 USD und 3,50 USD.

Der Input ist die Größe des Burgers.

Der Output sind die Kosten des Burgers.

Eine Hash-Funktion wandelt einen Input (z. B. Text) in eine Bytefolge mit fester Länge und Struktur um. Der erstellte Output oder der erstellte Wert wird als "Hash-Wert" oder "Prüfsumme" bezeichnet. Jeder Hash-Wert, der mit einem bestimmten Hashing-Algorithmus aus Daten erstellt wird, hat immer die gleiche Länge. Die Erstellung ist nur in eine Richtung möglich - er ist nicht invertierbar, das heißt, er kann nicht rückgängig gemacht werden.

 

Der Begriff "Hash-Funktion" leitet sich vom französischen Wort "hacher" ab, was "in kleine Stücke schneiden" bedeutet und darauf hinweist, auf welche Art eine Hash-Funktion die Daten "kleinhacken" soll. Eine weitere Art von Datenstruktur, eine Hash-Tabelle, wird häufig zur schnellen Identifikation von zwei identischen Hashes (Hash-Werten) verwendet.

Nachdem Diffie und Hellman 1976 in ihrem wegweisenden Artikel über die Public-Key Kryptographie erstmals den Bedarf einer Einweg-Hash-Funktion (engl. one-way hash function) identifiziert hatten, fanden während der nächsten zwei Jahrzehnte rasante Entwicklungen in der Kryptographie statt. 1990 erfand der Kryptograph und MIT-Professor Ronald Rivest die MD4-Hash-Funktion und später die MD5- und MD6-Funktionen. 1995 entwickelte die NSA (National Security Agency) den SHA-1 (Secure Hash Algorithm 1) auf der Grundlage des Rivest-Designs, gefolgt vom SHA-2-Update im Jahr 2001. SHA-2 ist der Standard, der SHA-256 inspirierte. Dieser diente als Basis für den Konsens-Algorithmus von Bitcoin.

Der Zweck von Hash-Funktionen

Hash-Funktionen entstanden aus zwei Gründen: Einerseits bestand die Notwendigkeit Inhalte zu vereinheitlichen und andererseits sollten sie als “singular unique identifiers”, einzigartige Nummern, mit denen ein Objekt oder eine Entität online eindeutig identifiziert werden kann, dienen. Häufige Verwendungen für Hash-Funktionen abgesehen vom Bereich der Kryptowährungen findet man:

  • bei der Berechnung einer (kurzen) Prüfsumme für ein Objekt, zum Beispiel der Prüfsumme für eine ISBN (International Standard Book Number)
  • bei der eindeutigen aber dennoch “kurzen“ Identifikation von Inhalten, ohne etwas über den eigentlichen Inhalt in kryptographischen Anwendungen preiszugeben

Eigenschaften von Hash-Funktionen

Eine kryptographische Hash-Funktion sollte rechnerisch effizient sein - die Erstellung des Hash-Werts muss also schnell möglich sein. Sie muss deterministisch sein - jedes Mal, wenn eine bestimmte Eingabe erfolgt, muss dieselbe Ausgabe erzeugt werden. Weiters muss sie Urbild-resistent (engl. “pre-image resistant”) sein und darf daher im Output keinerlei Informationen über den Input selbst anzeigen.

Zu guter Letzt muss eine Hash-Funktion kollisionsresistent sein. Dadurch wird sichergestellt, dass zwei verschiedene Eingaben niemals denselben Hashwert erzeugen können. Ihre deterministische (unumstößliche) Beschaffenheit, ihre Urbildresistenz sowie ihre Kollisionsresistenz sind die drei wichtigsten Eigenschaften von Hash-Funktionen im Bitcoin-Mining-Prozess.

Eine Hash-Funktion muss kollisionsresistent sein. Dadurch wird sichergestellt, dass zwei verschiedene Eingaben niemals denselben Hashwert erzeugen können.

Hash-Funktionen im Mining-Prozess

Noch einmal ein schneller Überblick über den Validierungsprozess im Bitcoin-Netzwerk: ein Block wird gebündelt und enthält mehrere Transaktionen sowie Informationen zum vorherigen Block. Das bedeutet, wollte jemand die Datenbank ändern oder eine Transaktion doppelt ausgeben, müsste er oder sie den Hash in allen vorherigen Blöcken ändern.

Damit der gebündelte Block zur Blockchain hinzugefügt werden kann, müssen Miner einen Hash finden, der die Difficulty erfüllt. Jeder Block enthält einen Blockheader mit der Nummer des Blocks, dem Hash des vorherigen Blocks und einer “Nonce“, die einen Zeitstempel enthält. Der Zweck einer Nonce besteht darin, den Input in eine kryptographische Hash-Funktion, das heißt Erhöhung der Zufälligkeit, bei der Berechnung während des Mining-Prozesses zu variieren.

Den Hash lösen

Die Node beginnt dann mit dem "Hashing" der Daten, indem sie diese in den Hashwert oder "Hash" konvertiert, der immer eine bestimmte Anzahl von Nullen enthalten muss. Die Node prüft, ob ein Hash die Difficulty erfüllt. Der Hash muss mit der korrekten Anzahl an Nullen beginnen. Erfüllt ein Hash die Difficulty, wird er an die anderen Miner im Netzwerk übermittelt. Der erste Miner, der einen gültigen Hash findet, validiert den Block in einen neuen Block und erhält den Block Reward und die Transaktionsgebühren in Bitcoin.

Erfüllt ein Hash die Kriterien der Difficulty im Netzwerk nicht, wird eine andere Nonce ausgewählt und gehasht. Miner müssen fast immer viele Hashes mit vielen Nonces generieren, bis einer von ihnen eine Nonce findet, die die Difficulty erfüllt. Das ist der sich ständig wiederholende und energieintensive Prozess, der als Bitcoin-Mining bezeichnet wird und umfangreiche Rechenleistung erfordert.

Hash-Funktionen bilden gewissermaßen das Rückgrat des Proof of Work Prozesses. Ohne Bestätigung und Erstellung von Hash-Transaktionen wäre die Blockchain weder unveränderlich noch vor Manipulation geschützt, und es wäre nicht möglich nachzuweisen, wem zu welchem Zeitpunkt welche Menge an Bitcoins gehört oder gehört hat.

Möchtest du Kryptowährungen kaufen?

Jetzt loslegen

WEITERFÜHRENDE LITERATUR

BÜCHER

  • Drescher Daniel - Blockchain Grundlagen : Eine Einführung in die elementaren Konzepte in 25 Schritten
  • Fill, Hans-Georg und Meier, Andreas - Blockchain kompakt : Grundlagen, Anwendungsoptionen und kritische Bewertung 

LINKS

Hashwerte und Hash-Funktionen einfach erklärt

SHA - Secure Hash Algorithm (SHA-1 / SHA-2 / SHA-3)