I02 Blockchain mit Hashwerten

Die Blockchain in 9 Schritten – Teil 2:

In Teil 1 haben wir die einfachste Blockchain aufgebaut aber am Ende festgestellt, das sie einen Nachteil hat: die einzelnen Datenblöcke sind numerisch aufsteigend sortiert und wir können einzelne Datenblöcke einfach ändern, ohne das diese Veränderung von jemandem bemerkt werden kann.

Auf dieser Webseite wurde das Problem „Schutz vor Veränderung“ unter dem Menüpunkt „F Hash und Mac“ bereits ausgiebig besprochen und so ist es kein Wunder, das unsere Blockchain nun als zusätzlichem Schutz mit einem Hashwert ausgestattet wird, der für jeden Datenblock einzeln berechnet wird. Die einzelnen Datenblöcke werden nun anhand ihrer Hashwerte (und nicht mit einer aufsteigenden Zahlenfolge) miteinander verknüpft.

Schauen wir uns die etwas erweiterte Block-Klasse an:

An Stelle der numerischen Felder „number“ und „previousNumber“ treten nun die Stringfelder „hash“ und „previousHash“ sowie das neue Feld „timeStamp“ (also der Zeitstempel der Datenblockerstellung. Die Berechnung des Datenblock-Hashwertes erfolgt durch die Methode „calculateHash“, welche aus dem Inhalt der drei Felder „previousHash“, „timeStamp“ und „data“ einen SHA256-Hashwert berechnet und ihn im Feld „hash“ speichert.

Sehen wir uns nun die Hauptroutine an:

Hier gibt es eine neue Methode ganz am Ende („generateSha256“). Diese Methode sorgt im Wesentlichen dafür, das der Hashwert aus einem String berechnet wird und das Ergebnis wieder einen String ergibt.

Hier folgt nun die Konsolenausgabe:

Der erste Datenblock („genesis block“) hat natürlich keinen Vorgänger, daher steht dort unverändert eine „0“, aber die laufende Nummer ist nun nicht „1“ sondern der errechnete Hashwert (in meinem Beispiel „d6d45f5bdc7549010eb658ba1d9bd83308f03bdead9e1f548042c8ce6beba5fb“). Der zweite Datenblock enthält diesen Wert als Vorgänger-Hash und einen neuen, eigenen Hashwert.

Natürlich könnt Ihr nun entgegenhalten, dass die Berechnung eines SHA256-Hashwertes kein Problem darstellt und eine nachträgliche Änderung doch auch recht einfach machbar ist, aber genau an dieser Stelle hat der Erfinder des Konzeptes eine Schwierigkeitsstufe eingebaut. Dieses führt dazu, dass die Berechnung des Hashwertes weitaus komplexer ist und eine größere nachträgliche Änderung zu viel Zeit benötigt – aber dazu später mehr. Weiter geht es mit Teil 3: I03 Gültigkeit der Blockchain.

Alle Quellcodes zur Blockchain findet Ihr zum Download in meinem Github-Repository, welches Ihr über diesen Link erreicht: https://github.com/java-crypto/I-Blockchain. Alle Programme sind sowohl unter Java 8 als auch unter Java 11 lauffähig.

Die Lizenz zum obigen Beispiel findet Ihr auf der eigenen Lizenz-Seite.

Letzte Aktualisierung: 28.05.2019