Die fünf vorherigen Schritte haben gezeigt, wie Sie Eigentum anhand der gesamten Transaktionsdatenhistorie zurückverfolgen und einzelne Eigentumsübertragungen auf sichere Weise durch das Autorisieren von Transaktionen mithilfe von digitalen Signaturen und das eindeutige Identifizieren von Anwenderkonten beschreiben können. Allerdings wurde bislang noch nicht darauf eingegangen, wie all die Transaktionsdaten, aus denen die Transaktionshistorie besteht, auf sichere Art gespeichert werden. An diesem Punkt kommt die Blockchain-Datenstruktur ins Spiel, deren Aufbau, Beschaffenheit und Funktion Sie auf den folgenden Seiten kennenlernen werden.
Erinnern Sie sich noch an Ihren letzten Büchereibesuch? Gab es zu diesem Zeitpunkt noch die klassischen Buchkataloge in Karteikartenform in großen Aktenschränken? Büchereikataloge sind Verzeichnisse aller Bücher, die die jeweilige Einrichtung besitzt. In einigen älteren Büchereien gibt es auch heute noch solche Kartenverzeichnisse für das gesamte Inventar. Jede Karte in einem dieser Kataloge steht für ein Buch. Auf der Karte sind die wichtigsten Angaben zu dem betreffenden Buch notiert, zum Beispiel der Name des Autors, der Titel, das Veröffentlichungsdatum und sein Standort in der Bücherei, meist als Stockwerk, Raumnummer, Regalnummer usw. angegeben. Zur Identifizierung der Bücher enthalten die Katalogkarten häufig eindeutige Referenznummern, die auch auf den Buchrücken angegeben sind. Die meisten Büchereien besitzen mehrere Kataloge für unterschiedliche Sortiermerkmale. In einem Verfasserkatalog sind die Karten zum Beispiel alphabetisch nach den Namen der Autoren sortiert, in einem Titelkatalog dagegen alphabetisch nach den Buchtiteln. Man könnte auch einen Sortierkatalog erstellen, in dem die Karten nach dem Datum sortiert sind, zu dem die Bücher in die Bücherei aufgenommen worden sind. Dieser Schritt erläutert, wie die Blockchain Transaktionsdaten auf ähnliche Weise wie in einem Sortierkatalog speichert.
Das Ziel der Blockchain besteht darin, die gesamte Transaktionsdatenhistorie in sortierter Weise zu speichern.
Die Herausforderung besteht in diesem Fall darin, sämtliche Transaktionsdaten, die jemals angefallen sind, so zu speichern, dass die Ausführungsreihenfolge der Transaktionen erhalten bleibt, während Modifikationen an den Daten schnell und problemlos erkannt werden können. Das schnelle Erkennen von Änderungen ist wichtig, da es die Basis zum Verhindern von Manipulationen und Fälschungen der Transaktionshistorie legt.
Die Idee besteht darin, eine Bibliothek der Transaktionsdaten aufzubauen und einen Sortierkatalog zu führen, der die Reihenfolge ausweist, in der die Transaktionen zur Bibliothek hinzugefügt wurden. Um jegliche Änderungen am Sortierkatalog oder den einzelnen Transaktionsdaten erkennen zu können, müssen die Daten mithilfe von Hashreferenzen veränderungssensitiv gespeichert werden.
Dieser Abschnitt erklärt, wie ein Buch in eine kleine Bibliothek mit einem Sortierkatalog transformiert werden kann. Wie Sie sehen werden, entspricht dies einer vereinfachten Version der Blockchain-Datenstruktur.
Über viele Jahrhunderte wurden Informationen auf unhandlichen Schriftrollen aus Pergament niedergeschrieben und aufbewahrt. Heutzutage stehen uns schriftliche Informationen in Form gebundener Papierstapeln mit nummerierten Seiten zur Verfügung, den Büchern. Bücher sind so allgegenwärtig, dass wir ihre Erfindung als selbstverständlich hinnehmen. Zu ihren wichtigen Merkmalen gehören diese:
Aufbewahren von Inhalten: Auf den Buchseiten werden Inhalte aufbewahrt.
Sortierung: Die Sätze auf den Seiten und die Seiten im Buch befinden sich in einer festen Anordnung bzw. Reihenfolge.
Verbundene Seiten: Die Seiten sind physisch über den Buchrücken und logisch über ihren Inhalt und die Seitenzahlen miteinander verbunden.
Diese Merkmale erlauben es uns, durch das Umlegen der Seiten in einem Buch zu lesen, zurückzublättern oder direkt mithilfe der Seitenzahlen zu einer bestimmten Seite zu springen. Nachfolgend ändern wir nun einige dieser Merkmale und betrachten das Ergebnis.
Abbildung 14.1 zeigt eine schematische Darstellung von zwei Seiten in einem sehr einfachen Buch. Jede Seite ist am oberen Rand mit einer Seitenzahl versehen und enthält zusätzlich einen Inhaltsbereich mit nur einem Wort.
Die Seitenzahlen dienen einem wichtigen Zweck: Es lässt sich ganz einfach anhand der fortlaufenden Seitenzahlen feststellen, ob jemand eine Seite aus dem Buch entnommen hat. Nehmen wir an, Sie lesen gerade Seite 42 unseres einfachen Buchs. Welche Seitenzahl müsste die vorhergehende Seite haben? Die Antwort ist einfach: Die vorhergehende Seite muss die Seitenzahl 41 tragen, also 42 minus 1. Um nun zu prüfen, ob tatsächlich niemand die vorhergehende Seite entfernt hat, vergleichen wir die auf der vorhergehenden Seite angegebene Seitenzahl mit der erwarteten Seitenzahl, also der Seitenzahl der aktuellen Seite weniger 1. Sind die beiden Zahlen identisch, können wir davon ausgehen, dass die vorhergehende Seite nicht entfernt wurde.
Doch woher wissen wir, dass die Zahl der vorhergehenden Seite um eins geringer als die aktuelle Seitenzahl sein muss? Auch hier ist die Antwort einfach: Wir gehen davon aus, dass alle Bücher der Konvention folgen, dass die Seiten fortlaufend mit natürlichen Zahlen nummeriert werden. Aber was, wenn diese Annahme nicht korrekt ist, weil Verfasser oder Herausgeber ein anderes Nummerierungsschema verwenden (zum Beispiel nur gerade Zahlen oder nur Vielfache der Zahl Drei)? In diesem Fall würde der gerade vorgestellte Ansatz zur Überprüfung, ob die vorhergehende Seite entfernt wurde oder nicht, kein korrektes Ergebnis liefern. Um anderen eine sichere Prüfung auf Vollständigkeit der Seiten zu ermöglichen, könnten wir auf jeder Seite einen expliziten Verweis auf die vorhergehende Seite einfügen. In Abbildung 14.2 ist dargestellt, wie dies bei unserem einfachen Buch umgesetzt wird. Jede Seite trägt nicht nur die eigene Seitenzahl, sondern auch die Seitenzahl der vorhergehenden Seite. Dieses Nummerierungsschema sorgt für eine explizite Abhängigkeit zwischen einer Seite und der Vorgängerseite – und die explizite Referenz auf die vorhergehende Seite macht das Überprüfen auf entnommene Seiten einfach, denn es sind keine impliziten Annahmen bezüglich des verwendeten Nummerierungsschemas mehr erforderlich.
Die Seiten in unserem Buch enthalten den Inhalt und die Angaben, mit denen die Reihenfolge der Seiten beibehalten wird: die Seitenzahlen. Nun können wir das Buch praktischer gestalten, indem wir von jeder Seite den Inhaltsbereich mit dem Wort auslagern und im Buch nur die Information behalten, die für die Aufrechterhaltung der Reihenfolge notwendig ist. Abbildung 14.3 zeigt, wie die Seiten unseres schematischen Buchs aussehen, nachdem wir die Inhalte ausgelagert haben. Die Seiten weisen keinen Inhaltsbereich mehr auf, sondern haben an dessen Stelle eine Referenznummer, die auf den Inhalt verweist. Jetzt können wir die Inhalte nach Belieben speichern, zum Beispiel in einer Kiste, auf einem Regalbrett usw.
Was haben wir mit diesem Schritt erreicht? Nun, unser Buch ist zu einer kleinen Bibliothek geworden. Das Buch, in dem zuvor Inhalte und Seitenzahlen gemeinsam verzeichnet waren, ist nun zum Katalog geworden, der einzig und allein für die Aufrechterhaltung der Reihenfolge der Inhalte verantwortlich ist. Die Inhalte selbst sind auf separierten Seiten gespeichert, die über eindeutige Referenznummern gekennzeichnet sind.
Unser Buch, das mittlerweile zum Sortierkatalog geworden ist, erhält die Reihenfolge der Seiten auf zwei Arten: Erstens durch die physische Lage der Seiten im Buch, denn sie sind fest mit dem Buchrücken verbunden, und zweitens durch die Seitenzahlen und die expliziten Verweise auf die jeweils vorhergehende Seite. Da der physische Aufbau des Buchs bereits die Reihenfolge der Seiten sicherstellt, können wir uns einmal an ein anderes Nummerierungsschema für die Seiten wagen: Wir können die natürlichen Zahlen, mit denen die Seiten markiert sind, durch Referenznummern ersetzen. Abbildung 14.4 zeigt das Ergebnis dieser Transformation. So wird die zuvor als Seite 42 bezeichnete Seite jetzt über die Seitenreferenznummer 8118E736 identifiziert. Ebenso wird die zuvor als Seite 41 bezeichnete Seite jetzt über die Seitenreferenznummer B779E800 identifiziert. Beachten Sie, dass die Referenzen zu den vorhergehenden Seiten ebenfalls aktualisiert wurden: Die Seite mit der Referenznummer 8118E736 enthält die korrekte Referenznummer für die vorhergehende Seite.
In der vorangegangenen Transformation haben wir die Seitenzahlen in unserem Buch durch Referenznummern ersetzt – allerdings haben wir nicht darüber gesprochen, wie diese Nummern erzeugt werden. Am besten nutzen wir kryptographische Hashwerte, um eindeutige Referenznummern zu erhalten. So können wir die Seiten in unserem Katalog und die zugehörigen Inhaltsseiten über ihre kryptographischen Hashwerte identifizieren, die ja digitale Fingerabdrücke des Inhalts sind. Aus Gründen der Einfachheit werden in den Abbildungen 14.3 und 14.4 verkürzte Hashwerte verwendet. (Sie können die Ergebnisse mit dem Tool auf www.blockchain-basics.com/Hashing.html überprüfen.) Die Inhaltsseite mit dem Wort Hello wird zum Beispiel durch den verkürzten Hashwert für Hello identifiziert, nämlich 185F8DB3. Der Referenzwert unserer Buchseiten wird anhand des Inhalts berechnet; dieser Inhalt setzt sich zusammen aus der Referenznummer für den Inhalt und der Referenznummer der vorhergehenden Seite. Zum Beispiel ist die Seitenreferenznummer B779E800 der Hashwert von 011C01C1 185F8DB3.
Unser Sortierkatalog ist ein seltsames Buch, denn jede der Seiten enthält eine eigene Referenznummer, die Referenznummer der Vorgängerseite und die Referenznummer der zugehörigen Inhaltsseite. Aber es handelt sich nach wie vor um ein klassisches Buch, dessen Seiten im Buchrücken gebunden sind.
Was geschieht, wenn wir uns auch noch vom Buchrücken verabschieden und aus dem Sortierbuch einen Stapel loser Blätter machen? Dadurch zerstören wir die physische Verbindung der Seiten und damit auch ihre physische Anordnung. Zum Glück geht ihre Reihenfolge damit dennoch nicht völlig verloren, denn jede Seite enthält ja noch die Referenznummer der vorhergehenden Seite. So können wir uns rückwärts durch die Seiten bewegen, indem wir einfach den Referenznummern auf die vorhergehenden Seiten folgen. Solange wir die letzte Seite des Sortierkatalogs getrennt aufbewahren, können wir jederzeit in umgekehrter Reihenfolge durch alle Seiten blättern.
Fassen wir kurz zusammen, was wir mit diesem Beispiel erreicht haben. Wir haben ein normales Buch genommen und daraus zwei physisch unsortierte Loseblattsammlungen gemacht, die über eindeutige Referenznummern miteinander verbunden sind. Ein Papierstapel enthält den Inhalt, der andere dient als Sortierhilfe. Aus Gründen der Einfachheit bezeichnen wir den zweiten Stapel als Sortierkatalog. Jede Seite im Sortierkatalog enthält die Referenznummer ihrer Vorgängerseite und die Referenznummer ihrer zugehörigen Inhaltsseite. Somit haben wir die Sortierung vom Inhalt getrennt und die logische Lage (Reihenfolge) von der physischen Lage der Seiten separiert. Da wir Hashwerte als Referenznummern einsetzen, kann deren Korrektheit von jeder Person ganz einfach durch erneutes Berechnen der Hashwerte überprüft werden. Und weil die Seiten des Sortierkatalogs nicht mehr in einem Buchrücken gebunden sind, können wir nur rückwärts darin blättern und zwar Seite für Seite anhand der Seitenreferenznummern, die jeweils auf die vorhergehende Seite verweisen. Tabelle 14.1 fasst die Merkmale unseres Buchs vor und nach den Transformationen zusammen.
Merkmal |
Buch |
Transformiertes Buch |
---|---|---|
Aufbewahren von Inhalten |
|
|
Sortieren von Inhalten |
|
|
Verbundene Seiten |
|
|
Blättern durch die Seiten |
|
|
Tabelle 14.1: Vergleich des Buchs vor und nach der Transformation
Was ist die Blockchain-Datenstruktur? Sie kennen die Antwort auf diese Frage bereits, denn im vorhergehenden Beispiel haben wir eine vereinfachte Blockchain-Datenstruktur entwickelt, allerdings haben wir andere Begriffe benutzt. Dieser Abschnitt beendet die Analogie, indem die Elemente des transformierten Buchs mit den entsprechenden Fachbegriffen für die Blockchain verknüpft werden.
Unser transformiertes Buch besteht aus:
einer gedanklichen Einheit, die aus einer Seite im Sortierkatalog und der zugehörigen Inhaltsseite besteht
einer Loseblattsammlung, die wir als Sortierkatalog bezeichnen
einer Loseblattsammlung, welche die Inhalte enthält
Seitenreferenznummern zum Identifizieren und Referenzieren von Seiten und deren jeweiliger Vorgängerseite im Sortierkatalog
Inhaltsreferenznummern zum Identifizieren und Referenzieren von Inhaltsseiten aus dem Sortierkatalog heraus
Tabelle 14.2 am Ende des Abschnitts fasst die Ergebnisse des Vergleichs zwischen den Elementen unseres vereinfachten Buchs nach der Transformation und den Elementen der Blockchain-Datenstruktur zusammen.
Transformiertes Buch |
Blockchain-Datenstruktur[a] |
---|---|
Eine Seite im Sortierkatalog |
Ein Block-Header |
Der gesamte Sortierkatalog |
Die Kette der Block-Header |
Die Referenznummer einer Seite im Sortierkatalog |
Der kryptographische Hashwert eines Block-Headers |
Die Referenznummer der vorhergehenden Seite |
Der kryptographische Hashwert des vorhergehenden Block-Headers |
Inhalt |
Transaktionsdaten |
Eine Inhaltsseite |
Ein Hashbaum (Merkle Tree) mit Transaktionsdaten |
Referenz auf die Inhaltsseite |
Die Wurzel des Hashbaums, der Transaktionsdaten enthält |
Die gedankliche Einheit einer Seite im Sortierkatalog und der zugehörigen Inhaltsseite |
Ein Block der Blockchain-Datenstruktur bestehend aus einem Block-Header und dem zugehörigen Hashbaum |
Der gesamte Sortierkatalog und alle Inhaltsseiten in ihrer Gesamtheit |
Die Blockchain-Datenstruktur |
[a] Nakamoto, Satoshi. Bitcoin: A peer-to-peer electronic cash system. 2008. https://bitcoin.org/bitcoin.pdf. |
Tabelle 14.2: Vergleich des transformierten Buchs mit der Blockchain-Datenstruktur
Die gedankliche Einheit einer Seite im Sortierkatalog und der zugehörigen Inhaltsseite entspricht einem Block in der Blockchain-Datenstruktur. Alle Blöcke gemeinsam bilden die Blockchain-Datenstruktur. Es ist wichtig darauf hinzuweisen, dass die Einheit aus Sortierseite und zugehöriger Inhaltsseite gedanklich aber nicht physisch existiert, da die Seiten im Sortierkatalog und die Inhaltsseiten physisch klar getrennte Entitäten sind. Erstere verweisen mithilfe von Hashreferenzen auf Letztere, wodurch die gedankliche Einheit entsteht.
Der Sortierkatalog unseres transformierten Buchs entspricht der Kette der Block-Header in der Blockchain-Datenstruktur. Jede Seite des Sortierkatalogs entspricht einem einzelnen Block-Header in der Blockchain-Datenstruktur. Da die Block-Header über Referenzen linear miteinander verbunden sind (wie die Glieder einer Kette), bilden Sie eine Kette von Block-Headern. Ähnlich unserem Sortierkatalog speichert die Kette der Block-Header selbst keine Transaktionsdaten, sondern lediglich Hashreferenzen, die auf die zugehörigen Transaktionsdaten verweisen. An diesem Punkt wird die gedankliche Einheit von Sortierkatalog und Inhalt wichtig.
Der Inhalt des transformierten Buchs entspricht den Transaktionsdaten, die in der Blockchain geführt werden. Diese sind spezifisch für unser Anwendungsgebiet, der Verwaltung von Eigentum. Es gibt keine »Inhaltsseiten« in realen Umsetzungen der Blockchain – dieser Begriff wurde hier aus didaktischen Gründen verwendet. In der Realität werden in Blockchain-Anwendungen die Inhaltsdaten (zum Beispiel Transaktionsdaten) direkt in einer Datenbank abgelegt und über Hashbäume referenziert, deren Wurzeln in den Block-Headern gespeichert werden.
Die Seitenreferenznummern unseres transformierten Buchs dienen zur Identifizierung von Seiten im Sortierkatalog. Sie entsprechen den kryptographischen Hashwerten der einzelnen Block-Header in der Blockchain-Datenstruktur und werden als Block-Hash oder Blockprüfsumme bzw. Hash oder Prüfsumme des vorhergehenden Blocks bezeichnet. Diese Referenznummern dienen zur eindeutigen Identifizierung der einzelnen Block-Header und dazu, auf den vorhergehenden Block-Header zu verweisen. Die eigentliche Referenzierung von einem Block-Header auf dessen Vorgänger erfolgt mittels Hashreferenzen.
Die Inhaltsreferenznummern in unserem transformierten Buch dienen zur Identifizierung der Inhaltsseiten. Sie entsprechen den Hashreferenzen in der Kette der Block-Header, die auf die zugehörigen Transaktionsdaten verweisen. Genauer gesagt ist die Inhaltsreferenznummer, die in einem Block-Header gespeichert wird, die Wurzel eines Hashbaums für Transaktionsdaten, die in einer Datenbank abgelegt werden. An diesem Punkt entsteht die gedankliche Einheit von einer Seite des Sortierkatalogs (Block-Header) und dem zugehörigen Inhalt (Hashbaum mit Transaktionsdaten).
Abbildung 14.5 fasst das soeben Gelernte in einer schematischen Darstellung der Blockchain-Datenstruktur mit vier gespeicherten Transaktionen zusammen. Die Grafik zeigt eine vereinfachte Blockchain-Datenstruktur, die aus zwei Blöcken namens BLOCK 1 und BLOCK 2 besteht. Um die gedankliche Einheit der Blöcke anzudeuten, sind die Blockumrisse mit einer gestrichelten Linie gezeichnet. Beide Blöcke enthalten als Block-Header 1 bzw. Block-Header 2 bezeichnete Block-Header. BLOCK 1 ist der allererste Block in dieser Datenstruktur, es gibt daher keinen Vorgängerblock und somit enthält Block-Header 1 auch keine Referenz auf einen vorhergehenden Block-Header. Da BLOCK 2 einen Vorgänger besitzt, wird im Block-Header 2 eine Hashreferenz auf den vorhergehenden Block-Header geführt, die hier mit B1 beschriftet ist. Die abgebildete Blockchain-Datenstruktur enthält Hashreferenzen auf zwei separate Hashbäume, deren Wurzeln mit R12 bzw. R34 bezeichnet sind. Die Namen der Hashwurzeln deuten bereits an, welche Transaktionsdaten in den Hashbäumen enthalten sind (der Hashbaum mit der Wurzel R12 enthält zum Beispiel die ersten beiden Transaktionen, die hier als Transaktion 1 und als Transaktion 2 bezeichnet sind, samt der zugehörigen Hashreferenzen R1 und R2, die auf diese verweisen).
Wenn Sie einem verteilten Peer-to-Peer-System beitreten, dessen Blockchain-Datenstruktur der Abbildung 14.5 entspricht, empfangen Sie sämtliche Transaktionsdaten, sämtliche Hashreferenzwerte und sämtliche Block-Header. Anhand dieser Daten kann Ihr eigener Computer die Blockchain-Datenstruktur einschließlich der Hashreferenzen erzeugen, um auf die auf Ihrem lokalen Computer gespeicherten Daten verweisen. Mithilfe dieser Daten und der Referenz auf den neuesten Block-Header können Sie in der gesamten Historie aller jemals an das System übertragenen Transaktionsdaten rückwärts blättern – im Beispiel sind dies nur vier Transaktionen. Beachten Sie, dass die Referenz auf den zuletzt hinzugefügten Block-Header als Kopf (engl. Head) der Blockchain-Datenstruktur bezeichnet wird, weil an dieser Stelle der nächste Block hinzugefügt wird. Manchmal werden auch der zuletzt hinzugefügte Block-Header und die Referenz, die darauf verweist, als »Kopf der Blockchain-Datenstruktur« bezeichnet. In Abbildung 14.5 ist die Referenz B2 der Kopf der Blockchain-Datenstruktur. Verwechseln Sie bitte nicht die Begriffe »Kopf« und »Header«. Die Blockchain-Datenstruktur besteht aus vielen Blöcken, die jeweils über einen eigenen Header verfügen, aber die gesamte Blockchain-Datenstruktur besitzt nur einen Kopf.
In diesem Schritt haben Sie die Blockchain-Datenstruktur kennengelernt und erfahren, wie sie aufgebaut ist. Der umfassende Gebrauch von Hashreferenzen in der Blockchain-Datenstruktur sorgt dafür, dass die Daten sehr veränderungssensitiv abgelegt sind. Im nächsten Schritt wird dieses Merkmal genauer erklärt, denn es bildet den Schlüssel zum Verständnis der Sicherheit in der Blockchain.
Die Blockchain-Datenstruktur ist eine besondere Datenstruktur, die aus sortierten Einheiten besteht, welche als Blöcke bezeichnet werden.
Jeder Block der Blockchain-Datenstruktur besteht aus einem Block-Header und einem Hashbaum mit Transaktionsdaten.
Die Blockchain-Datenstruktur besteht aus zwei wesentlichen Strukturen: einer sortierten Kette von Block-Headern und den Hashbäumen.
Man kann sich die sortierte Kette von Block-Headern als digitales Gegenstück eines alten Büchereikatalogs in Karteikartenform vorstellen, bei dem die einzelnen Karteikarten in der Reihenfolge der Aufnahme der Bücher in den Katalog sortiert sind.
Da jeder Block-Header auf den vorhergehenden Block-Header verweist, bleibt die Reihenfolge der einzelnen Block-Header bzw. Blöcke, aus denen die Blockchain-Datenstruktur besteht, erhalten.
Jeder Block-Header in der Blockchain-Datenstruktur wird über seinen kryptographischen Hashwert identifiziert und enthält sowohl eine Hashreferenz auf den vorhergehenden Block-Header als auch eine Hashreferenz auf die anwendungsspezifischen Daten, deren Reihenfolge er verzeichnet.
Die Hashreferenz auf die anwendungsspezifischen Daten ist normalerweise die Wurzel eines Hashbaums, der wiederum Hashreferenzen auf die anwendungsspezifischen Daten enthält.