Inhalt

  • Was ist ein Merkle-Baum?

  • Wie werden Merkle-Bäume gebaut?

  • Warum werden Merkle-Wurzeln in Bitcoin verwendet?

    • Bergbau

    • Überprüfung

  • Zusammenfassung


Was ist ein Merkle-Baum?

Das Merkle-Baum-Konzept wurde in den frühen 1980er-Jahren von Ralph Merkle vorgeschlagen, einem Informatiker, der für seine Arbeiten zur Public-Key-Kryptographie bekannt ist.

Ein Merkle-Baum ist eine Struktur zur Überprüfung von Daten in einer Menge. Es wird häufig im Bereich von Peer-to-Peer-Netzwerken eingesetzt, bei denen Teilnehmer Informationen austauschen und diese einer unabhängigen Überprüfung unterziehen müssen.

Die Merkle-Baumstruktur basiert auf Hash-Funktionen, daher empfehlen wir Ihnen, zuerst den Artikel „Was ist Hashing?“ zu lesen und dann zu diesem Thema zurückzukehren.


Wie werden Merkle-Bäume gebaut?

Nehmen wir an, Sie laden eine große Datei herunter. Wenn Sie ein Open-Source-Programm verwenden, müssen Sie prüfen, ob der Hash der heruntergeladenen Datei mit dem veröffentlichten Hash der Entwickler übereinstimmt. Wenn es übereinstimmt, ist die Datei auf Ihrem Computer genau dieselbe wie ihre Datei.

Wenn die Hashes unterschiedlich sind, haben Sie entweder eine schädliche Datei heruntergeladen, die sich als Programm ausgibt, oder sie wurde falsch heruntergeladen und funktioniert nicht. Auch Ladeprobleme können problematisch sein, insbesondere wenn es lange dauert. In diesem Fall müssen Sie die Datei erneut herunterladen und hoffen, dass diesmal alles gut geht.

Sie denken wahrscheinlich: „Ist es wirklich so kompliziert?“ Glücklicherweise kommen hier Merkle-Bäume zum Einsatz, die es uns ermöglichen, die Datei in Teile aufzuteilen. Beispielsweise kann eine 50-GB-Datei in 100 0,5-GB-Blöcke aufgeteilt werden. In diesem Fall wird es in Teilen heruntergeladen, ähnlich wie Dateien über einen Torrent heruntergeladen werden. 

Das Hauptziel des Prozesses besteht darin, einen einzelnen Hash namens Merkle Root zu erhalten, der jedes Datenelement in einer Datei darstellt. Durch die Verwendung der Merkle-Wurzel können wir die Datenvalidierung erheblich vereinfachen. 

Nehmen wir als Beispiel eine 8-GB-Datei, die in 8 Teile unterteilt ist. Jedes Fragment erhält einen Namen von A bis H und durchläuft dann eine Hash-Funktion, um 8 verschiedene Hashes zu erzeugen.


Каждый из восьми фрагментов проходит через хеш-функцию, чтобы сгенерировать свой хеш.

Jedes der acht Fragmente durchläuft eine Hash-Funktion, um seinen Hash zu generieren.


Wir haben das also geklärt. Wir haben einen Hash aller Fragmente erhalten, was bedeutet, dass wir ihn mit dem Original vergleichen und herausfinden können, welches fehlerhaft ist, oder? Es ist möglich, aber es wäre äußerst wirkungslos. Unsere Datei enthält nur acht Fragmente, aber wenn es Tausende sind, würden Sie sie dann alle hashen und die Ergebnisse vergleichen?

Kaum. Stattdessen müssen Sie jedes Hash-Paar nehmen, sie verketten und zusammen hashen. Also hashen wir hA + hB, hC + hD, hE + hF und hG + hH und erhalten vier Hashes. Dann führen wir eine weitere Hashing-Runde durch, sodass zwei Hashes vorliegen. Schließlich hashen wir das verbleibende Paar und erhalten den Haupt-Hash – den Merkle-Root (oder Root-Hash).


Структура напоминает перевернутое дерево. В нижнем ряду находятся «листья», которые переходят в ноды, а те — в корень.

Die Struktur ähnelt einem umgedrehten Baum. In der unteren Reihe befinden sich „Blätter“, die in Knoten übergehen, die wiederum in die Wurzel übergehen.


Wir haben also ein Merkle-Stammverzeichnis, das die heruntergeladene Datei darstellt. Jetzt können wir den Root-Hash mit dem ursprünglichen Ersteller-Hash vergleichen. Wenn sie übereinstimmen, ist alles super! Wenn die Hashes unterschiedlich sind, bedeutet dies, dass die Daten geändert wurden, d. h. ein oder mehrere Fragmente haben einen anderen Hash erstellt. Daher führt jede Änderung der Daten zu einer völlig anderen Merkle-Wurzel. 

Glücklicherweise können wir das falsche Fragment leicht finden. Nehmen wir an, das ist er. Fragen Sie zunächst die letzten beiden Hashes ab, die den Merkle-Root erstellt haben (hABCD und hEFGH). Ihr hABCD ist mit dem Original identisch, da in diesem Segment keine Fehler vorliegen. Ihr hEFGH ist jedoch anders und sollte überprüft werden. Als nächstes fragen wir hEF und hGH ab und vergleichen sie mit unseren. Da hGH passt, benötigen wir hEF. Abschließend vergleichen wir die Hashes hE und hF. Wir haben also herausgefunden, dass das falsche Fragment hE ist, was bedeutet, dass wir es erneut herunterladen müssen.

Zusammenfassend lässt sich sagen, dass ein Merkle-Baum durch die Aufteilung von Daten in viele Teile erstellt wird, die dann wiederholt gehasht werden, um eine Merkle-Wurzel zu bilden. Mit diesem System lässt sich leicht überprüfen, ob alle Daten in Ordnung sind. Im nächsten Abschnitt schauen wir uns weitere Einsatzmöglichkeiten an.



Sie fragen sich, wie Sie mit Kryptowährungen beginnen können? Kaufen Sie Bitcoin auf Binance!



Warum werden Merkle-Wurzeln in Bitcoin verwendet?

Merkle-Bäume haben viele Verwendungsmöglichkeiten, aber im Moment sind wir an ihrer Anwendung in der Blockchain interessiert. Merkle-Bäume sind für die Arbeit mit Bitcoin und vielen anderen Kryptowährungen notwendig; sie sind ein integraler Bestandteil jedes Blocks und befinden sich in den Block-Headern. Um die Blätter des Baums zu erhalten, verwenden wir den Hash jeder im Block enthaltenen Transaktion (TXID). 

In diesem Fall übernimmt die Merkle-Wurzel mehrere Aufgaben. Als nächstes werden wir uns ihre Verwendung beim Kryptowährungs-Mining und bei der Transaktionsüberprüfung ansehen.


Bergbau

Ein Bitcoin-Block besteht aus zwei Teilen. Der erste Teil ist der Blockheader, ein Segment fester Größe, das Metadaten für den Block enthält. Der zweite Teil ist eine Liste von Transaktionen, deren Größe normalerweise viel größer ist als der Header, aber variieren kann.

Miner müssen Daten mehrmals hashen, um ein Ergebnis zu erhalten, das bestimmte Bedingungen erfüllt und einen gültigen Block erzeugt. Es kann Billionen von Versuchen erfordern, es zu finden, da Miner die Zufallszahl im Block-Header (Nonce) ändern müssen, um ein neues Ergebnis zu erhalten, aber der größte Teil des Blocks bleibt gleich. Ein Block kann Tausende von Transaktionen enthalten, und alle müssen jedes Mal gehasht werden.

Die Merkle-Wurzel vereinfacht diesen Prozess erheblich. Beim Mining werden alle notwendigen Transaktionen in einem Merkle-Baum aufgereiht. Der Root-Hash (32 Byte) wird im Block-Header platziert, danach wird nur der Block-Header gehasht, nicht der gesamte Block.

Diese Methode ist manipulationssicher und fasst alle Transaktionen in einem Block effektiv in einem kompakten Format zusammen. Es ist jedoch unmöglich, einen gültigen Blockheader zu finden und dann die Liste der Transaktionen zu ändern, da dadurch die Merkle-Wurzel geändert wird. Wenn ein Block an andere Knoten gesendet wird, berechnen diese die Wurzel aus der Liste der Transaktionen. Wenn es nicht mit der Wurzel im Header übereinstimmt, wird der Block abgelehnt.


Überprüfung

Schauen wir uns eine weitere nützliche Eigenschaft der Merkle-Wurzeln an, die vereinfachte Knoten betrifft (die keine vollständige Kopie der Blockchain enthalten). Wenn Sie einen Knoten auf einem Gerät mit begrenzten Ressourcen betreiben, müssen Sie nicht unbedingt alle Transaktionen eines Blocks herunterladen und hashen. Stattdessen können Sie einfach den vollständigen Knoten um einen Merkle-Beweis bitten – einen Beweis dafür, dass sich Ihre Transaktion in einem bestimmten Block befindet. Diese Methode wurde von Satoshi Nakamoto im Bitcoin-Whitepaper ausführlich beschrieben und wird oft als vereinfachte Zahlungsverifizierung (SPV) bezeichnet.


Для проверки hD необходимы только хеши красного цвета.

Um HD zu überprüfen, werden nur rote Hashes benötigt.


Nehmen wir an, wir benötigen Informationen zu einer Transaktion, deren TXID hD ist. Mit hC können wir hCD berechnen. Wir benötigen dann hAB, um hABCD zu berechnen. Schließlich kann mit hEFGH überprüft werden, ob die resultierende Merkle-Wurzel mit der Wurzel im Blockheader übereinstimmt. Wenn ja, dann beweist dies, dass die Transaktion im Block enthalten war, da es nahezu unmöglich ist, denselben Hash mit unterschiedlichen Daten zu erstellen.

Im obigen Beispiel haben wir nur dreimal gehasht, während es ohne den Merkle-Beweis sieben Mal durchgeführt werden müsste. Da Blöcke Tausende von Transaktionen enthalten können, kann die Verwendung von Merkle-Beweisen viel Zeit und Rechenressourcen sparen.


Zusammenfassung

Merkle-Bäume haben ihre Wirksamkeit in der Computertechnologie bewiesen. Sie sind in Blockchains unglaublich nützlich und ermöglichen die einfache Überprüfung von Informationen über verteilte Systeme hinweg, ohne das Netzwerk mit unnötigen Daten zu überlasten.

Ohne Merkle-Bäume (und Merkle-Wurzeln) wären die Blöcke von Bitcoin und anderen Kryptowährungen sehr umfangreich. Während bei leichtgewichtigen Knoten Datenschutz- und Sicherheitsbedenken bestehen können, können Merkle-Beweise kostengünstig feststellen, ob Transaktionen in einem Block enthalten waren.