7 Min. Lesezeit

Merkle Trees in Bitcoin erklärt

Jeder Bitcoin-Block fasst Hunderte oder Tausende Transaktionen zusammen, doch im Block Header steht nur ein einziger 32-Byte-Hash. Das ist die Merkle Root. Sie ermöglicht es, jede einzelne Transaktion effizient zu verifizieren, ohne den gesamten Block herunterladen zu müssen. Wie das funktioniert, erklärt dieser Artikel.

«A hash tree allows efficient and secure verification of the contents of large data structures.»

— Ralph C. Merkle, Informatiker und Erfinder des Merkle Trees, 1979

Überblick

Ein Bitcoin-Block kann Hunderte von Transaktionen enthalten. Trotzdem steht im Block Header nur ein einziger 32-Byte-Wert, der alle diese Transaktionen zusammenfasst: die Merkle Root. Möglich macht das der Merkle Tree, eine baumartige Struktur aus Prüfsummen. Er erlaubt es ausserdem, einzelne Transaktionen zu überprüfen, ohne den gesamten Block herunterladen zu müssen.

Was ist ein Merkle Tree?

Stell dir vor, jede Transaktion bekommt einen digitalen Fingerabdruck, einen sogenannten Hash. Der Merkle Tree fasst diese Fingerabdrücke schrittweise zusammen: Immer zwei Hashes werden zu einem neuen Hash zusammengesetzt. Aus vielen Einzelhashes wird so, Ebene für Ebene, am Ende ein einziger Wert: die Merkle Root.

Die Struktur sieht aus wie ein umgekehrter Baum. Unten stehen viele Transaktionshashes, oben die Wurzel. Ändert sich auch nur eine einzige Transaktion, ändert sich ihr Hash und damit alle Hashes darüber bis zur Merkle Root.

Schritt für Schritt

Ein Beispiel mit vier Transaktionen (TX A, TX B, TX C, TX D):

  1. Fingerabdrücke erzeugen: Jede Transaktion wird gehasht. Das ergibt Hash A, Hash B, Hash C und Hash D.
  2. Paare zusammenfassen: Hash A und Hash B werden zusammengesetzt und erneut gehasht → Hash AB. Ebenso Hash C und Hash D → Hash CD.
  3. Merkle Root: Hash AB und Hash CD werden zusammengesetzt und gehasht → Merkle Root.

Hat ein Block eine ungerade Anzahl Transaktionen, wird der letzte Hash einfach doppelt verwendet. Bitcoin nutzt durchgehend Double-SHA-256, also SHA-256 zweimal hintereinander.

Merkle Tree mit 4 Transaktionen
Merkle Root
5a3f…d91b
Hash AB
c3e1…8f20
Hash CD
7b4a…1c99
Hash A
a1f2…
Hash B
b8c3…
Hash C
d4e5…
Hash D
f6a7…
TX A
TX B
TX C
TX D
Jede Änderung an einer TX → anderer Hash → andere Merkle Root → ungültiger Block

Manipulationssicher: Ändert sich auch nur ein einziges Byte in einer Transaktion, ändert sich ihr Hash und damit alle Hashes darüber bis zur Merkle Root. Eine nachträgliche Veränderung lässt sich nicht verstecken.

Merkle Root im Block Header

Der Block Header besteht aus sechs Feldern und ist immer genau 80 Bytes gross. Eines dieser Felder ist die Merkle Root, ein 32-Byte-Wert, der alle Transaktionen des Blocks zusammenfasst. Ob ein Block 1 oder 4'000 Transaktionen enthält: Die Merkle Root bleibt immer 32 Bytes.

Beim Mining wird der Block Header gehasht, nicht die gesamte Transaktionsliste. Die Merkle Root ist damit die kompakte Zusammenfassung, mit der Miner arbeiten.

SPV und Merkle Proofs

Satoshi beschrieb im Whitepaper (Kapitel 8) eine Methode namens Simplified Payment Verification (SPV). Die Idee: Eine einfache Wallet muss nicht die gesamte Blockchain herunterladen, um zu prüfen, ob eine Transaktion bestätigt wurde. Sie braucht nur die Block Header und einen Merkle Proof.

Ein Merkle Proof ist ein minimaler Satz von Hashes, der beweist, dass eine Transaktion im Block enthalten ist. Statt alle Transaktionen zu laden, reicht der Pfad vom Blatt bis zur Wurzel. Bei einem Block mit 1'024 Transaktionen genügen 10 Hashes statt aller 1'024.

Die Wallet berechnet die Hashes dieses Pfades und prüft, ob das Ergebnis mit der Merkle Root im Block Header übereinstimmt. Stimmt es überein, ist die Transaktion nachweislich im Block enthalten.

Merkle Trees in der Praxis

Je mehr Transaktionen ein Block hat, desto deutlicher wird der Vorteil: Der Proof wächst nur minimal, während die Anzahl der Transaktionen stark steigt.

  • 256 Transaktionen: Nur 8 Hashes im Proof nötig
  • 4'096 Transaktionen: Nur 12 Hashes im Proof nötig
  • 65'536 Transaktionen: Nur 16 Hashes im Proof nötig

Das macht Merkle Trees besonders wertvoll für mobile Wallets und einfache Geräte. Ohne diese Struktur müssten sie den gesamten Block herunterladen, bei 1–2 MB pro Block auf mobilen Verbindungen unpraktisch.

Die Idee ist nicht auf Bitcoin beschränkt: Git nutzt ähnliche Strukturen für Versionskontrolle, IPFS für dezentrale Dateispeicherung und Ethereum für seinen State-Tree.

Häufige Fragen

Was ist ein Merkle Tree?

Ein Merkle Tree ist eine baumartige Hash-Struktur, die alle Transaktionen eines Blocks in einem einzigen 32-Byte-Wert zusammenfasst: dem Merkle Root. Transaktionen werden paarweise gehasht, bis nur noch ein Hash übrig bleibt.

Was ist der Merkle Root?

Der Merkle Root ist der oberste Hash des Merkle Trees und steht im Block Header. Er repräsentiert kryptographisch alle Transaktionen des Blocks. Ändert sich auch nur eine Transaktion, ändert sich der Merkle Root und damit der Block Hash.

Wozu braucht man Merkle Trees in Bitcoin?

Merkle Trees ermöglichen effiziente Verifikation. Mit einem Merkle Proof kann man beweisen, dass eine Transaktion in einem Block enthalten ist, ohne den gesamten Block herunterzuladen. Das ist nützlich für SPV-Wallets, die keine volle Blockchain speichern.

Was ist ein Merkle Proof?

Ein Merkle Proof ist ein minimaler Satz von Hashes, der beweist, dass eine bestimmte Transaktion im Merkle Tree enthalten ist. Statt alle Transaktionen zu prüfen, reicht der Pfad vom Blatt bis zur Wurzel.

Quellen

BTC ...