Bekanntlich ist eine Blockchain eine Reihe von miteinander verknüpften Blöcken. Bildlich kann man sich zwar den einen Block als einen Kasten mit vielen Transaktionen vorstellen, doch mathematisch gesehen, ist ein Block ein sogenannter Hashwert, der aus den ganzen Transaktionen und noch weiteren zusätzlichen, für kryptographische Berechnungen relevante, Informationen berechnet wird.
Als Hash bzw. Hashwert wird eine Reihe von aufeinander folgenden Buchstaben und Ziffern bezeichnet. Ein Hashwert entsteht nach der Anwendung einer mathematischen kryptographischen Hashfunktion auf einen Wert wie Text oder Zahl. Der Output einer Hashfunktion hat immer die gleiche feste Länge unabhängig davon, wie lang das Input ist. Ein Input ergibt bei einer Hashfunktion immer den gleichen Output. Man könnte in der Praxis eine Hashfunktion auch als Verschlüsselung sehen. Es werden oft Passwörter mit dieser Art verschlüsselt und gespeichert, um die Speicherung des Klartextes vom Passwort zu vermeiden.
Eine Blockchain verwendet das Hashing für die Validierungszwecken. Die Validatoren stellen sicher, dass der entstandene Block nicht manipuliert wurde, indem sie den Hash des Blockes mit der für alle bekannten Hashfunktion berechnen und sich vergewissern, dass dieser mit dem Veröffentlichten übereinstimmt.
Beim Mining in der Bitcoin-Blockchain muss sogar noch zusätzlich eine große Zahl erraten werden, mit der der richtige Hashwert des Blockes samt ganzen Transaktionen errechnet wird. Derjenige, der diese Zahl rausfindet, bekommt eine Belohnung.
Eine Funktion ist nur dann eine Hashfunktion, wenn die unter anderem nicht umkehrbar ist, das bedeutet, dass sich aus dem Hashwert kein Klartext erkennen oder berechnen lässt und dass der Aufwand zwei gleiche Klartexte mit demselben Hashwert (Kollision) durch Ausprobieren unvorstellbar hoch ist.
In folgenden beiden Beispielen versuche ich möglichst simpel den Unterschied zwischen einer Funktion und einer Hashfunktion zu zeigen, ohne in die tiefste Mathematik einzusteigen.
Jeder kennt eine der bekanntesten Funktionen f(x)=x2. Beim Einsetzen eines konkreten Wertes an der Stelle „x“ erhält man in den meisten Fällen einen ganz anderen Wert als „x“.
Zum Beispiel wenn x=2, so erhält man f(2)=4 als Ergebnis. Das kann somit keine Hashfunktion sein, da wir die Umkehrung (die Wurzel) kennen und die beiden x-Variante (+2 und -2) für das gleiche Ergebnis leicht ermitteln können. Wird x=5 genommen, so erhält man die 25 als Ergebnis, was gegen die Eigenschaft feste Länge vom Hash spricht.
Bei einer Blockchain dagegen werden viel komplexere mathematisch-kryptographische Funktionen für das Hashing verwendet. Bei der Bitcoin-Blockchain findet die SHA-256 Funktion Anwendung, also f(x)=SHA256(x). Ich habe zur Veranschaulichung als „x“ den Klartext „PPI“ genommen, dabei kommt das folgende Ergebnis raus:
SHA256(PPI)= cc4704c7e2ddd4a99852a77161757e11b8c7d38b1211588ae7bc5cd5f273b1d4
Schreiben wir nur den ersten Buchstaben klein, schon verändert sich das Ergebnis komplett:
SHA256(pPI)= 7fbdb03db917c7a94cd1b757ba3535777e0f7c46e3b0dba9441248b8aad13e3f
Verlängert man den Klartext, hat des Ergebnis trotzdem die gleiche Länge
SHA256(PPI2022)= 113bc5de2a41675e9510bac515ac00402130c500681e65d73a53b1d50a482a73
In diesem Fall kann man nicht auf den Klartext zurückführen (nicht umkehrbar), wenn man nur das Ergebnis kennt. Nur durch Ausprobieren und mit unvorstellbarem Aufwand kriegt man theoretisch irgendwann einen Wert für x raus, was praktisch fast unmöglich ist (keine Kollision), wobei selbst wenn, dann wird man nicht sicherstellen können, ob das Resultat korrekt ist, da der gleiche Hashwert aus unterschiedlichen Klartexten theoretisch erreicht werden kann.
Fazit
Man sieht am unteren Beispiel, wie sich der Hashwert komplett verändert, trotz der minimalen Input-Veränderung. Diese Eigenschaft bzw. diese Verschlüsselungsart der Transaktionen macht die Blockchain so sicher. Jeder Block ist so ein Hashwert aus Transaktionen. Verändert ein Missetäter einen Buchstaben in einer Transaktion in einem Block, so ist der Hash des Blockes komplett verändert.
Wenn man beachtet, dass jeder Block in einer Blockchain den Hashwert des vorhergehenden Blockes beinhaltet und jeder Netzwerk-Teilnehmer alle Blöcke kennt, so müsste der Missetäter in jedem Knoten diese Manipulation vornehmen, was sogar theoretisch schwer vorzustellen ist und nicht möglich sein kann. Der Missetäter müsste gleichzeitig alle Knoten des Netzwerkes angreifen, auch diejenigen, die Offline sind.
Im nächsten Artikel wird eine konkrete Hashfunktion erläutert. Es wird sich um ein Commitment-Verfahren handeln, welches eine gute Anwendung in den Blockchain-Lösungen finden könnte.
Gastautor: Vladislav Zolotarev