In Schritt 14 wurde die Blockchain-Datenstruktur vorgestellt. Es hat sich gezeigt, dass die Blockchain-Datenstruktur aus zwei wesentlichen Komponenten besteht: einer sortierten Kette von Block-Headern und den Hashbäumen mit den Transaktionsdaten. Diese Datenstruktur wurde mit dem Ziel erfunden, Transaktionsdaten auf sichere Weise zu speichern. Aber was bedeutet es in diesem Zusammenhang, Daten auf sichere Weise zu speichern? Diese Frage soll dieser Schritt beantworten. Er zeigt auf, welche Folgen das Ändern von Daten in der Blockchain hat und erklärt, wie die Blockchain-Datenstruktur Änderungen erkennt. Außerdem unterstreichen die nachstehenden Ausführungen die Macht der Hashreferenzen beim Speichern von Daten auf veränderungssensitive Weise. Und schließlich wird auch erklärt, wie neue Blöcke auf richtige Weise zur Blockchain-Datenstruktur hinzugefügt werden.
Stricken ist die Kunst, Wollfäden in ein Kleidungsstück oder Stoff zu verwandeln. Dabei wird eine Vielzahl von miteinander verwobenen Schlaufen erzeugt, die Maschen genannt werden. Bei der Handarbeit gibt es zum Teil große Unterschiede was die Maschengröße betrifft, daher müssen manchmal einzelne Maschen korrigiert werden. Dazu werden alle zeitlich danach gestrickten Maschen in umgekehrter Reihenfolge wieder aufgelöst, bis die fehlerhafte Masche erreicht ist. Sobald diese Masche richtig gestrickt wurde, müssen alle nachfolgenden Maschen neu gestrickt werden. Dieser Vorgang ist sehr zeitraubend, deshalb ist es sehr wichtig, bereits beim Stricken jeder Masche sicherzustellen, dass sie die Qualitätsanforderungen erfüllt. Die folgenden Seiten zeigen, dass die Verwendung der Blockchain-Datenstruktur dem Stricken stark ähnelt: Das Anfügen eines neuen Blocks an das Ende der Blockchain-Datenstruktur ist einfach, aber das Ändern von Daten irgendwo in der Kette ist sehr aufwendig. Behalten Sie diese Metapher im Sinn, um die folgenden Erklärungen zu den Fragen, wie die Blockchain-Datenstruktur Änderungen erkennt und Daten auf korrekte Weise hinzugefügt bzw. geändert werden, besser zu verstehen.
Ein einfaches Beispiel soll Ihnen helfen, das Eintragen neuer Transaktionen in eine vorhandene Blockchain-Datenstruktur zu verstehen. Abbildung 15.1 zeigt die Ausgangssituation einer Blockchain-Datenstruktur, die nur aus einem Block besteht. Die vorliegende Blockchain-Datenstruktur enthält lediglich zwei Transaktionen. Die Transaktionen 3 und 4, die unten in Abbildung 15.1 dargestellt sind, wurden noch nicht zur Blockchain-Datenstruktur hinzugefügt. Folgende Schritte müssen zum Eintragen neuer Transaktionsdaten befolgt werden:
Erstellen eines neuen Hashbaums, der alle neu einzutragenden Transaktionsdaten enthält (vgl. Abbildung 15.2)
Erstellen eines neuen Block-Headers (Block-Header 2), der sowohl die Hashreferenz (B1) auf den Header des vorhergehenden Blocks (Block-Header 1) als auch die Wurzel des Hashbaums, der die neuen Transaktionsdaten (R34) enthält (vgl. Abbildung 15.3), ausweist
Erstellen einer neuen Hashreferenz (B2) auf den neuen Block-Header (vgl. Abbildung 15.4) und Definieren dieser Referenz als neuen Kopf der aktualisierten Blockchain-Datenstruktur. Denken Sie daran, dass die Referenz, die auf die zuletzt hinzugefügten Daten in der Kette verweist, auch als »Kopf der gesamten Kette« bezeichnet wird (vgl. Schritt 11).
Abb. 15.1: Ausgangssituation: Zwei neue Transaktionen (Transaktion 3 und Transaktion 4) müssen zur bestehenden Blockchain-Datenstruktur hinzugefügt werden.
Abb. 15.2: Schritt 1: Erstellen eines neuen Hashbaums, der die neu einzutragenden Transaktionen enthält
Der in Abbildung 15.4 dargestellte Schritt dient als Ausgangssituation, um zu Untersuchen, wie sich Änderungen an Daten, die bereits Teil der Blockchain-Datenstruktur sind, auswirken. Hier werden die folgenden Fälle betrachtet:
Ändern des Inhalts von Transaktionsdaten
Ändern einer Referenz im Hashbaum
Austauschen einer Transaktion
Ändern der Wurzel des Hashbaums
Ändern einer Block-Header-Referenz
Abbildung 15.5 zeigt, was geschieht, wenn wir Transaktion 2 ändern. Diese Transaktion ist Teil eines Hashbaums, der aus Hashreferenzen besteht. Durch das Ändern beliebiger Eigenschaften von Transaktion 2 (zum Beispiel der Menge der übertragenen Güter oder des Kontos, auf das ein Eigentum übertragen wird) ändert sich auch ihr Fingerabdruck bzw. ihr kryptographischer Hashwert. Als Folge ist die Hashreferenz R2, die auf die ursprünglichen Transaktionsdaten verwiesen hat, beschädigt. Sie erkennt, dass die Transaktionsdaten als ursprüngliches Verweisziel in der Zwischenzeit geändert worden sind und somit gegen die Vorschrift der Unveränderlichkeit verstoßen wurde. Damit ist die gesamte Blockchain-Datenstruktur ungültig.
Abbildung 15.6 zeigt, was geschieht, wenn wir nicht nur Details einer Transaktion ändern, sondern auch die Hashreferenz, die auf die aktualisierte Transaktion verweist. Weil sie korrekt auf die neuen Transaktionsdaten verweist, ist die aktualisierte Hashreferenz (R2) gültig. Allerdings ist sie Bestandteil eines Hashbaums, dessen Wurzel ebenfalls eine Hashreferenz ist. Die Wurzel des Hashbaums (R12) verweist auf einen Datensatz, der die Hashreferenzen R1 und R2 enthält. Letztere wurde geändert, damit die manipulierte Version der Transaktion 2 nicht auffällt. Damit ändert sich auch der kryptographische Hashwert des Datensatzes, der die aktualisierte Version von R2 enthält, wodurch die Wurzel des Hashbaums R12 ungültig wird.
Abbildung 15.7 betrachtet einen Fall, in dem eine vollständige Transaktion ausgetauscht wird, anstatt nur die Details einer vorhandenen Transaktion zu ändern und deren Hashreferenz zu aktualisieren.
Abb. 15.7: Das Austauschen einer Transaktion und ihrer Hashreferenz im Hashbaum führt dazu, dass die Wurzel des Hashbaums ungültig wird und somit auch die gesamte Datenstruktur.
Wenn Sie Abbildung 15.6 mit Abbildung 15.7 vergleichen, fallen nur geringfügige Unterschiede im Namen der Transaktion und ihrer Hashreferenz auf. Die Resultate der beiden dargestellten Szenarien sind jedoch identisch. In beiden Fällen wird die Wurzel des Hashbaums R12 infolge der Änderungen im Hashbaum ungültig. Das Ändern und das Austauschen von Transaktionen haben also dieselbe Auswirkung auf die Blockchain-Datenstruktur. Die Manipulation wird in beiden Fällen erkannt und führt dazu, dass die gesamte Datenstruktur ungültig ist.
Abbildung 15.8 zeigt, was geschieht, wenn ein kompletter Hashbaum samt seiner Wurzel geändert wird.
Abb. 15.8: Das Ändern eines Hashbaums macht die Hashreferenz ungültig, die auf den Block-Header verweist, der die Wurzel des manipulierten Hashbaumes enthält, wodurch wiederum die gesamte Datenstruktur ungültig wird.
Die Wurzel des manipulierten Hashbaums (R12) ist Teil eines Block-Headers (Block-Header 1). Die Änderung der Wurzel des Hashbaums ändert den kryptographischen Hashwert von Block-Header 1, wodurch die Hashreferenz, die darauf verweist (B1) ungültig wird. Die Hashreferenz B1, die als Verbindung oder Verknüpfung zwischen Block-Header 2 und Block-Header 1 dient, wird beim Erkennen der Änderung ungültig. Damit wird die gesamte Blockchain-Datenstruktur ungültig.
Abbildung 15.9 zeigt, was geschieht, wenn nicht nur ein kompletter Hashbaum, sondern auch die Hashreferenz auf den manipulierten Block-Header geändert wird.
Abb. 15.9: Das Ändern einer Hashreferenz in einem Block-Header macht die auf den manipulierten Block-Header verweisende Hashreferenz ungültig, wodurch wiederum die gesamte Datenstruktur ungültig wird.
Falls die Hashreferenz (B1) auf den manipulierten Block-Header (Block-Header 1) geändert wird, geschieht Folgendes: Beginnend mit der Hashreferenz B1 werden sämtliche Hashreferenzen, die auf die manipulierten Daten verweisen, konsistent und gültig, da diese an die vorgenommene Manipulation angepasst wurden. Allerdings ist die manipulierte Hashreferenz B1 Teil von Block-Header 2, wodurch sich dessen kryptographischer Hashwert ändert, was wiederum die Hashreferenz B2, die auf den Block-Header der Originaldaten (der ja die ursprüngliche Version von Hashreferenz B1 enthält) verweist, ungültig macht. Damit ist die gesamte Blockchain-Datenstruktur ungültig.
Nachdem wir nun die vielen Möglichkeiten zur Manipulation der Blockchain-Datenstruktur behandelt haben und deutlich geworden ist, dass sie alle zu einer ungültigen Datenstruktur führen, wenden wir uns nun der Frage zu, wie die Blockchain-Datenstruktur ordnungsgemäß modifiziert oder aktualisiert werden kann. Abbildung 15.10 zeigt, wie die Blockchain-Datenstruktur auf die richtige Weise geändert wird.
Abb. 15.10: Beim ordnungsgemäßen Ändern einer Transaktion müssen auch alle folgenden Hashreferenzen angepasst werden.
Wenn wir einige Details der Transaktion 2 ändern oder aktualisieren müssen, müssen wir auch die Folge aller Hashreferenzen aktualisieren: R2, R12, B1 und B2. Es müssen also sämtliche Hashreferenzen – von der, die direkt auf die manipulierten Daten verweist, bis zu jener, die auf den jüngsten Block-Header verweist – geändert und aktualisiert werden, um die Modifizierungen in ihren jeweiligen Zielen widerzuspiegeln. Das ist ein recht aufwendiges Unterfangen – und das aus gutem Grund: All diese Arbeit ist nötig, damit die gesamte Blockchain-Datenstruktur konsistent bleibt und ihre Integrität behält. Alle anderen Änderungs- oder Manipulationsversuche an Daten, die Teil der Blockchain-Datenstruktur sind, führen zu ungültigen Hashreferenzen, die wiederum die gesamte Datenstruktur ungültig machen.
Die bisherigen Betrachtungen haben gezeigt, dass die Blockchain-Datenstruktur bei Änderungen an ihren Daten einen radikalen Alles-oder-nichts-Ansatz verfolgt: Entweder wird die gesamte Datenstruktur ab dem Punkt, der die Änderung verursacht, bis zum Kopf der gesamten Kette geändert, oder man sieht von vornherein besser von jeder Änderung ab. Alle anderen halbherzigen, halbgaren oder teilweisen Änderungen führen letztlich zu einer Blockchain-Datenstruktur, die in ihrer Gesamtheit nicht mehr konsistent ist, sodass derartige Änderungen schnell und problemlos erkannt werden. Das liegt in den Eigenschaften der Hashreferenzen begründet, denn die Blockchain-Datenstruktur unterscheidet nicht zwischen absichtlichen und unabsichtlichen Änderungen. Tatsächlich gibt es in der Blockchain gar kein Konzept absichtlicher oder unabsichtlicher Änderungen. Diese Begriffe enthalten eine Bewertung des Motivs oder der Person, das oder die eine Änderung verursacht hat, doch die Blockchain-Datenstruktur bewertet weder die Motive noch die Person, die für die Inkonsistenz verantwortlich ist. Die Blockchain-Datenstruktur sorgt sich nur um die Korrektheit und Konsistenz all ihrer Hashreferenzen. Ist eine davon ungültig, ist die gesamte Datenstruktur ungültig – dabei spielt es keine Rolle, wer oder was die Änderungen zu verantworten hat oder was der Grund dafür ist. Und dieses Merkmal ist es, das die Blockchain-Datenstruktur sehr wertvoll macht.
In diesem Schritt wurde detailliert aufgezeigt, wie die Blockchain-Datenstruktur mit Änderungen an ihren Daten umgeht. Wir haben gesehen, dass die Blockchain-Datenstruktur sehr veränderungssensitiv ist. Sie verfolgt bei der Modifizierung ihrer Daten einen radikalen Alles-oder-nichts-Ansatz. Im nächsten Schritt wird erklärt, wie dieses Merkmal genutzt werden kann, um Daten unveränderlich zu machen, sodass die Blockchain-Datenstruktur zum perfekten Anwärter für das Speichern von Daten in einer unzuverlässigen und nicht vertrauenswürdigen Umgebung wird.
Folgende Schritte müssen zum Eintragen neuer Transaktionsdaten in die Blockchain-Datenstruktur befolgt werden:
Erstellen eines neuen Hashbaums, der alle neu einzutragenden Transaktionen enthält
Erstellen eines neuen Block-Headers, der sowohl eine Hashreferenz auf den vorhergehenden Header als auch die Wurzel des Hashbaums ausweist, der die neuen Transaktionsdaten enthält
Erstellen einer Hashreferenz, die auf den neuen Block-Header verweist und nunmehr den Kopf der Blockchain-Datenstruktur darstellt
Bei Änderungen an Daten in der Blockchain-Datenstruktur müssen sämtliche Hashreferenzen erneuert werden, beginnend mit derjenigen, die direkt auf die manipulierten Daten verweist, bis hin zum Kopf der gesamten Blockchain-Datenstruktur.
Die Blockchain-Datenstruktur verfolgt bei Änderungen an ihren Daten einen radikalen Alles-oder-nichts-Ansatz: Entweder wird die gesamte Datenstruktur ab dem Punkt, der die Änderung verursacht, bis zum Kopf der gesamten Kette geändert, oder man sieht von vornherein besser von Änderungen ab.
Alle halbherzigen, halbgaren oder teilweisen Änderungen führen letztlich zu einer Blockchain-Datenstruktur, die in ihrer Gesamtheit nicht mehr konsistent ist, sodass derartige Änderungen schnell und problemlos erkannt werden.
Der Aufwand zum Ändern der gesamten Blockchain-Datenstruktur ist absichtlich sehr hoch.
Die hohe Anfälligkeit der Blockchain-Datenstruktur in Bezug auf Änderungen ist eine Folge der Eigenschaften von Hashreferenzen.