Was ist ein Hash-Baum in der Blockchain?

Ein Hash-Baum ist eine Datenstruktur, die in Informatikanwendungen verwendet wird. In Bitcoin und anderen Kryptowährungen dienen Hash-Bäume dazu, Blockchaindaten effizienter und sicherer zu kodieren. Der Merkle Tree wird auch als „binärer Hash-Baum“ bezeichnet.

Hash-Baum genauer betrachtet

In der Blockchain von Bitcoin durchläuft ein Block von Transaktionen einen Algorithmus, um einen Hash zu erzeugen, d.h. eine Folge von Zahlen und Buchstaben, die zur Überprüfung, ob ein gegebener Datensatz mit dem ursprünglichen Transaktionssatz übereinstimmt, verwendet werden kann, aber nicht, um den ursprünglichen Transaktionssatz zu erhalten.

Die Software von Bitcoin lässt jedoch nicht den gesamten Block von Transaktionsdaten – die im Durchschnitt Transaktionen im Wert von 10 Minuten darstellen – auf einmal durch die Hash-Funktion laufen. Vielmehr wird jede Transaktion gehasht, dann wird jedes Paar von Transaktionen verkettet und zusammen gehasht, und so weiter, bis es einen Hash für den gesamten Block gibt. (Bei einer ungeraden Anzahl von Transaktionen wird eine Transaktion verdoppelt und ihr Hash mit sich selbst verkettet).

Visualisiert ähnelt diese Struktur einem Baum, daher der Name Hash-Baum. Im untenstehenden Diagramm bezeichnet „T“ eine Transaktion, „H“ einen Hash. Man beachte, dass das Bild stark vereinfacht ist; ein durchschnittlicher Block enthält über 500 Transaktionen, nicht acht.

Eine einfache Darstellung des Aufbau von einem Hash-Baum.

Merkle-Tree bzw. Hash-Baum in vereinfachter Darstellung.

Die Hashes in der unteren Reihe werden als „Blätter“, die Zwischenhashes als „Zweige“ und die Hashes oben als „Wurzel“ des Hash-Baum bezeichnet. Die Merkle-Wurzel eines bestimmten Blocks wird in der Kopfzeile gespeichert: Die Merkle-Wurzel von Block #482819 lautet beispielsweise

e045b18e7a3d708d686717b4f44db2099aabcad9bebf968de5f7271b458f71c8 .

Der Stamm wird mit anderen Informationen kombiniert (die Software-Version, der Hash des vorherigen Blocks, der Zeitstempel, das Schwierigkeitsziel und die Nonce) und dann eine Hash-Funktion durchlaufen, um den eindeutigen Hash des Blocks zu erzeugen: 00000000000000000000bfc767ef8bf28c42cbd4bdbafd9aa1b5c3c33c2b089594 im Fall von Block #482819. Dieser Hash ist eigentlich nicht in dem betreffenden Block enthalten, sondern im nächsten; er unterscheidet sich von der Merkle-Wurzel.

Der Hash-Baum ist nützlich, weil er es Benutzern ermöglicht, eine bestimmte Transaktion zu verifizieren, ohne die gesamte Blockkette herunterzuladen (über 277 Gigabyte Mitte Mai 2020). Nehmen wir zum Beispiel an, man wolle verifizieren, dass die Transaktion TD in dem Block im obigen Diagramm enthalten ist. Wenn man den Root-Hash (HABCDEFGH) hat, ist der Vorgang wie ein Sudoku-Spiel: Man fragt das Netzwerk nach HD ab, und es gibt HC, HAB und HEFGH zurück. Mit dem Merkle-Baum lässt sich verifizieren, dass alles mit drei Hashes verbucht wird: Bei HAB, HC, HEFGH und dem Wurzelhash HABCDEFGH muss HD (der einzige fehlende Hash) in den Daten vorhanden sein.

Bedingungen im Hash-Baum.

Bei HAB, HC, HEFGH und dem Wurzelhash HABCDEFGH muss HD in den Daten vorhanden sein.

Merkle-Trees sind nach Ralph Merkle benannt, der sie 1987 in einer Arbeit mit dem Titel „A Digital Signature Based on a Conventional Encryption Function.“ vorgeschlagen hat. Merkle erfand auch das kryptografische Hashing.

Video Tipp

Teile diesen Beitrag:

Kommentare