Inhaltsverzeichnis

  • Was ist ein Merkle-Baum?

  • Wie funktioniert ein Merkle-Baum?

  • Warum wird Merkel Root in Bitcoin verwendet?

    • Bergbau

    • verifizieren

  • Zusammenfassen


Was ist ein Merkle-Baum?

In den frühen 1980er Jahren schlug Ralph Merkle, ein bekannter Informatiker auf dem Gebiet der Public-Key-Kryptographie, das Konzept des Merkle-Baums vor.

Die Merkle-Baumstruktur kann die Integrität des Datensatzes effektiv überprüfen und ist effektiver in Peer-to-Peer-Netzwerken, in denen die Teilnehmer Informationen austauschen und unabhängig überprüfen müssen.

Hash-Funktionen sind das Herzstück der Merkle-Baumstruktur. Daher empfehlen wir Ihnen, zu verstehen, was Hashing ist, bevor Sie mit diesem Artikel fortfahren.


Wie funktioniert ein Merkle-Baum?

Nehmen wir an, Sie möchten eine große Datei herunterladen. Bei Open-Source-Software-Downloads muss häufig überprüft werden, ob der Hash der heruntergeladenen Datei mit dem vom Entwickler veröffentlichten übereinstimmt. Wenn sie übereinstimmen, sind die beiden Dokumente konsistent.

Wenn die Hashes nicht übereinstimmen, sind Sie in Schwierigkeiten. Entweder haben Sie eine schädliche Datei heruntergeladen, die als Software getarnt ist, oder Sie haben sie falsch heruntergeladen, und das Endergebnis ist, dass die Datei unbrauchbar ist. Wenn der Download fehlerhaft ist, werden Sie sich auf jeden Fall ärgern, weil Sie schon lange auf den Download der Datei warten. Wenn man nun noch einmal von vorne anfängt, muss man hoffen, dass das gleiche Problem nicht noch einmal auftritt.

Haben Sie jemals darüber nachgedacht, ob es einen einfacheren Weg gibt, dieses Problem zu lösen? Hier kommt der Merkle-Baum ins Spiel. Merkle-Bäume können Dateien in mehrere Datenblöcke aufteilen. Beispielsweise kann eine 50-GB-Datei in 100 Kopien aufgeteilt werden, von denen jede 0,5 GB groß ist. Anschließend können Sie sie einzeln herunterladen. So funktionieren Torrents.

Die Dateiquelle ist zu diesem Zeitpunkt ein Hashwert, der Merkle-Root genannt wird. Dieser einzelne Hashwert repräsentiert alle Datenblöcke, aus denen die Datei besteht. Darüber hinaus erleichtern Merkle-Wurzeln die Datenvalidierung.

Um das Verständnis zu erleichtern, geben wir ein Beispiel. Nachfolgend ist eine 8-GB-Datei in acht Teile unterteilt, und jedes Fragment wird jeweils mit A bis H bezeichnet. Jedes Fragment wird dann in eine Hash-Funktion eingefügt, was zu acht verschiedenen Hash-Werten führt.


通过哈希函数,计算出八个片段的哈希值。

Durch die Hash-Funktion werden die Hash-Werte der acht Fragmente berechnet.


Hoffentlich ist die obige Beispielerklärung leicht verständlich. Wir haben die Hash-Werte aller Fragmente. Wenn einer davon falsch ist, können wir das Problem durch Vergleich der Quelldateien finden? Vielleicht, aber es ist immer noch äußerst ineffizient. Wenn die Datei Zehntausende Fragmente enthält, müssen wir dann alle Fragmente hashen und die Ergebnisse im Detail vergleichen?

unnötig. Wir müssen lediglich ein Paar Hash-Werte kombinieren und eine kombinierte Hash-Operation durchführen. Das heißt, wir hashen mit hA + hB, hC + hD, hE + hF und hG + hH. Das Ergebnis sind vier Hashwerte. Anschließend fahren wir mit der nächsten Runde zusammengeführter Hashes fort, bis wir zwei Hashwerte erhalten. Diese beiden Hash-Werte werden dann kombiniert und schließlich der Haupt-Hash-Wert erhalten, der die Merkle-Wurzel (auch Root-Hash-Wert genannt) ist.


这个结构看起来像一棵倒置的树。底部一排叶子,相互结合产生节点,最后生成根。

Die Struktur sieht aus wie ein umgedrehter Baum. Die unterste Blattreihe verbindet sich miteinander, um Knoten und schließlich Wurzeln zu bilden.


Jetzt haben wir das Merkle-Stammverzeichnis, das die heruntergeladene Datei darstellt. Vergleichen Sie den Root-Hash mit dem Wert der Quelldatei. Wenn er übereinstimmt, sind alle zufrieden! Sobald die Hashwerte unterschiedlich sind, ist bewiesen, dass die Daten manipuliert wurden. Mit anderen Worten: Ein oder mehrere Fragmente haben einen unterschiedlichen Hashwert generiert. Daher können bereits kleine Datenänderungen die Merkel-Wurzel vollständig verändern.

Glücklicherweise ist es auch einfach, nach fehlerhaften Segmenten zu suchen. Nehmen Sie an, dass der Fehler hE ist. Zuerst bitten wir andere um zwei Hashes (hABCD und hEFGH), um die Merkle-Wurzel zu generieren. Unser hABCD-Wert sollte mit dem anderer übereinstimmen und beweisen, dass der Teilbaum fehlerfrei ist. Wenn hEFGH nicht übereinstimmt, können wir den Fehler hier korrigieren. Dann fragen Sie andere nach ihren hEF- und hGH-Hashes und vergleichen Sie sie mit Ihren eigenen. Wenn hGH in Ordnung ist, ist hEF der Übeltäter. Abschließend vergleichen wir die Hashwerte von hE und hF. Sobald wir feststellen, dass die Fehlerquelle hE ist, können wir den Datenblock erneut herunterladen.

Zusammenfassend besteht die Funktion des Merkle-Baums darin, die Daten in mehrere Teile zu unterteilen und dann wiederholt Hash-Operationen durchzuführen, um schließlich die Merkle-Wurzel zu bilden, sodass effektiv überprüft werden kann, wo die fehlerhaften Daten vorkommen. Im nächsten Abschnitt stellen wir weitere interessante Anwendungen vor.



Möchten Sie Ihre Reise zur Kryptowährung beginnen? Gehen Sie zu Binance und kaufen Sie jetzt Bitcoin!



Warum wird Merkel Root in Bitcoin verwendet?

Es gibt viele Anwendungsfälle für Merkle-Bäume, aber dieser Artikel konzentriert sich auf seine wichtige Rolle in der Blockchain. Bitcoin und viele Kryptowährungen sind untrennbar mit Merkle-Bäumen verbunden. Der Merkle-Baum ist ein integraler Bestandteil jedes Blocks und befindet sich normalerweise im Blockkopf. Durch den Transaktions-Hashwert (TXID) jeder Transaktion im Block können wir die Blätter erhalten.​

In diesem Zusammenhang dient die Merkel-Wurzel mehreren Zwecken. Werfen wir einen Blick auf die Anwendung von Merkle Root beim Kryptowährungs-Mining und bei der Transaktionsüberprüfung.


Bergbau

Bitcoin-Blöcke bestehen aus zwei Teilen. Der erste Teil ist der Blockheader, der eine feste Größe hat und Blockmetadaten enthält. Der zweite Teil ist der Blockkörper, dessen Größe variabel ist, der jedoch normalerweise viel größer als der Blockkopf ist und die Transaktionsliste enthält.

Miner müssen die Daten wiederholt hashen, bis ein Ergebnis vorliegt, das bestimmte Bedingungen erfüllt, bevor sie einen gültigen Block ausgraben können. Um das richtige Ergebnis zu erzielen, müssen sie Billionen Mal versuchen. Bei jedem Versuch ändert der Miner die Zufallszahl im Blockheader, den Nonce-Wert, um unterschiedliche Ergebnisse zu generieren. Der Rest des Blocks bleibt jedoch derselbe und die Tausenden von Transaktionen darin müssen immer noch jedes Mal gehasht werden.

Merkel hat den Prozess stark vereinfacht. Wenn das Mining beginnt, werden alle Transaktionswarteschlangen gepackt und in einem Merkle-Baum erstellt, und der generierte 32-Bit-Root-Hash-Wert wird im Blockheader platziert. Dann muss nicht der gesamte Block gehasht werden, sondern nur der Blockheader.

Diese Methode verhindert Datenmanipulationen und ist daher effektiv, da alle Transaktionen in einem Block effizient und kompakt zusammengefasst werden können. Die Transaktionsliste der gültigen Blockheader kann nicht geändert werden, da sonst der Merkle-Stamm geändert wird. Nachdem der Block an andere Knoten gesendet wurde, wird der Root-Hash aus der Transaktionsliste berechnet. Wenn er nicht mit dem Wert im Blockheader übereinstimmt, kann der Block abgelehnt werden.


verifizieren

Es gibt eine weitere interessante Eigenschaft, die wir von Merkle-Roots nutzen können, die sich auf die Anwendung von Lightweight-Clients (Knoten, die keine vollständige Kopie der Blockchain behalten) bezieht. Wenn Sie einen Knoten auf einem Gerät mit begrenzten Ressourcen betreiben, möchten Sie nicht alle Transaktionen in einem Block herunterladen und hashen. Stattdessen fordern Sie einfach einen Merkle-Beweis an, bei dem es sich um den von einem Full Node bereitgestellten Beweis dafür handelt, dass eine Transaktion in einem bestimmten Block enthalten war. Dieser Beweis ist besser bekannt als Simple Payment Verification (SPV) und wurde im Bitcoin-Whitepaper von Satoshi Nakamoto detailliert beschrieben.


要想检查hD,只需验证红色的哈希值即可。

Um HD zu überprüfen, überprüfen Sie einfach den roten Hash.


Angenommen, wir möchten Transaktionsinformationen über die TXID hD erhalten. Wenn hC bekannt ist, kann hCD berechnet werden. Dann kann hABCD über hAB berechnet werden. Schließlich können Sie anhand von hEFGH überprüfen, ob die berechnete Merkle-Root mit dem Root-Hash im Blockheader übereinstimmt. Ein erfolgreicher Abgleich beweist, dass die Transaktion im Block enthalten war, da es nahezu unmöglich ist, denselben Hash mit unterschiedlichen Daten zu generieren.

Im obigen Beispiel haben wir nur dreimal gehasht. Ohne Merkels Zertifizierung wären es sieben. Heutige Blöcke enthalten Tausende von Transaktionen und Merkle-Proofe sparen uns viel Zeit und Rechenleistung.


Zusammenfassen

Merkle-Bäume haben sich in Informatikanwendungen als wichtig erwiesen, und wie wir gesehen haben, sind sie auch in der Blockchain wertvoll. Merkle-Bäume machen die Informationsüberprüfung in verteilten Systemen komfortabler und vermeiden eine Überlastung redundanter Daten im Netzwerk.

Ohne Merkle-Bäume und Merkle-Wurzeln wären Bitcoin und andere Kryptowährungsblöcke nicht so kompakt wie heute. Obwohl es bei Lightweight-Clients an Vorteilen in Bezug auf Datenschutz und Sicherheit mangelt, können Benutzer mit Merkle-Beweisen mit minimalen Gebühren überprüfen, ob Transaktionen in Blöcken enthalten sind.