Freigeben über



März 2018

Band 33, Nummer 3

Blockchain: Grundlagen von Blockchains

Von Jonathan Waldman | März 2018

Bereits 1999 war es mit dem Dateifreigabenetzwerk Napster einfach, Audiodateien (zumeist Musikdateien) in einem hybriden Peer-to-Peer-Netzwerk zu teilen („hybrid“, weil ein zentraler Verzeichnisserver verwendet wurde). Dieses Dateifreigabenetzwerk konnte mehr als nur Musikdateien freigeben: Es erlaubte allen Benutzern, Kopien dieser freigegebenen Dateien so beizubehalten, dass eine einzige digitale Ressource zu einer unbegrenzten Anzahl perfekter Kopien in einem globalen Netzwerk führte. Die ungezwungene Leichtigkeit, mit der die Technologie von jedermann mit einem Computer genutzt werden konnte, kam für das ehrwürdige Unternehmen Tower Records so überraschend, dass es gezwungen war, bis 2006 alle 89 Geschäfte in den USA zu schließen.

Im Jahr 2008 ereignete sich die Hypothekenkrise, während der alteingesessene, mächtige US-Finanzinstitute und -Versicherungsgesellschaften ihre Insolvenz erklärten mussten oder am Rande des Bankrotts standen. Diese Umstände erforderten ein sofortiges Eingreifen der US-Bundesregierung, um eine nationale und möglicherweise globale Finanzkrise zu vermeiden. Dieses wichtige Ereignis führte zu einer Verunsicherung der Bevölkerung hinsichtlich der Zentralbanken und machte die Gefahr deutlich, dass die Finanzhauptbücher für die Öffentlichkeit nicht einsehbar sind. Im März 2008 wurden durch den Datenschutzverstoß von Heartland Payment Systems mehr als 130 Millionen Kreditkartennummern offengelegt, von denen viele später für betrügerische Einkäufe verwendet wurden.

Diese Ereignisse veranschaulichen die Gefahren des Lebens in einer digitalen, vernetzten Welt, die von Vermittlern abhängt, die Transaktionsgebühren generieren und Menschen anfällig für digitale Ausbeutung, Gier und Kriminalität machen. Die akademische Herausforderung bestand darin, eine verfügbare, digitale Infrastruktur ohne Intermediation zu schaffen, in der eine digitale Ressource offen und zuverlässig von einem Besitzer an einen anderen übertragen werden kann (anstatt kopiert und freigegeben zu werden), die keine korrumpierbare oder fehlerhafte zentrale Autorität besitzt und sicher und vertrauenswürdig ist.

Die Bitcoin-Blockchain

Scheinbar als Reaktion auf den historischen Kontext, in dem dies geschah, hat eine neuartige Infrastruktur am 3. Januar 2009 50 digitale Münzen aufgelegt und in einem manipulationssicheren öffentlichen Hauptbuch aufgezeichnet, das in einem dezentralen Peer-to-Peer-Netzwerk von Computern repliziert wird, die über das Internet verbunden sind. Diese 50 Kryptowährungseinheiten, Bitcoins genannt, wurden als Genesisblock aufgezeichnet: der erste Link zu dem, was als Bitcoin-Blockchain bekannt werden sollte.

Das Bemerkenswerte an dieser durch Blockchains gesteuerten Kryptowährung ist, dass es ihr an jeglicher Art von Vertrauensinstanz oder Steuerung (z.B. durch eine Bank oder Regierung) mangelt, um jede Transaktion zu validieren. Darüber hinaus disintermediiert sie Transaktionen, sodass es möglich ist, die digitale Währung international über ein globales Netzwerk ohne Zwischenhändler (z.B. einen Makler oder eine Agentur) zu transferieren. Durch die Verwendung moderner Kryptografie sind die in der Blockchain enthaltenen Daten manipulationssicher und pseudonymisiert. Und da jede Blockchain auf jedem Knoten, der ihr Peer-to-Peer-Netzwerk umfasst, repliziert wird, ist kein Single Point of Failure vorhanden, sodass die Technologie verfügbar und zuverlässig ist.

Seit der Einführung von Bitcoin entwickeln sich die Blockchaintechnologien immer schneller. Ihre Implementierungsdetails unterscheiden sich erheblich, sodass die Untersuchung von Blockchains dynamisch, umfangreich und komplex ist. Tatsächlich gilt der Begriff „Blockchain“ nicht mehr nur für Bitcoin im Besonderen oder für Kryptowährungen im Allgemeinen. Blockchains werden optimiert und perfektioniert, damit sie schneller und intelligenter arbeiten. In der Tat erlauben einige Blockchaintechnologien Skripting, um intelligente Verträge zu unterstützen, die es erlauben, benutzerdefinierte Regeln auf Transaktionen anzuwenden. Auf diese Weise haben sich Blockchains zu einer neuen Art von programmierbarer, hackersicherer Speichertechnologie entwickelt, was ein Grund dafür ist, dass IT-Fachleute, Unternehmen, Finanzinstitute und andere Nutzer lautstark fordern, ihr wahres Potenzial auszuschöpfen.

Wenn Sie sich bisher nur am Rande mit Blockchains beschäftigt haben, wird es Zeit, dies zu ändern. In diesem einführenden Artikel ist es nicht möglich, die feineren technischen Details einer bestimmten Blockchaintechnologie zu behandeln. Jede dieser Technologien weist ihre eigenen Regeln, Funktionen und Anpassungen auf, aber die Ideen, die ich hier vorstelle, werden Ihnen helfen, sich an den technischen Grundlagen zu orientieren, auf denen viele moderne Blockchaintechnologien basieren.

Funktionsweise von Blockchains

Die Bitcoin-Blockchain ist das weltweit erste praktische Beispiel für die Blockchaintechnologie. Und wegen dieser Unterscheidung wird „Blockchain“ oft als Synonym für Bitcoin missverstanden. Moderne Blockchaintechnologieangebote verfolgen jedoch andere digitale Objekte als eine digitale Währung nach, und diese Blockchains funktionieren ganz anders als die Bitcoin-Blockchain. Darüber hinaus hat die Bitcoin-Blockchain die Vorstellung populär gemacht, dass eine Blockchain eine Datenstruktur ist, die ein Rechnungshauptbuch virtualisiert, indem sie Gutschriften und Lastschriften verfolgt und gleichzeitig eine kreative, kryptografische Lösung anbietet, die effektiv die doppelte Ausgabe von Kryptowährungseinheiten verhindert. Aus diesem Grund wurden die Begriffe „digitales Hauptbuch“ und „zweimalige Ausgabe“ mit Kryptowährungsblockchains in Verbindung gebracht. Diese Begriffe beziehen sich jedoch weitgehend auf die Nachverfolgung des Eigentums und die Durchsetzung einer einzigen Übertragung digitaler Objekte. Wenn Sie auf diese Begriffe stoßen, sollten Sie nicht davon ausgehen, dass sie sich ausschließlich auf kryptowährungsorientierte Blockchaintechnologien beziehen.

Im Wesentlichen ist eine Blockchain eine manipulationssichere Datenstruktur, die etwas von Wert oder Interesse nachverfolgt, das von einem Besitzer an einen anderen weitergegeben wird. Dieses „Etwas“ kann jede Art von digitalem Objekt sein, z.B. eine digitale Münze, ein Word-Dokument oder die Seriennummer eines Microsoft Surface-Tablets. Tatsächlich kann jedes Element, das mit einem eindeutigen digitalen Fingerabdruck in Verbindung gebracht werden kann, in einer Blockchain nachverfolgt werden. Blockchains lösen das sogenannte Problem der „zweimaligen Ausgabe“, indem sie verlangen, dass das Eigentum an einem digitalen Objekt übertragen und nicht kopiert oder geteilt wird. Interessant an einer Blockchaintechnologie ist jedoch, dass sie ein Protokoll einrichtet, Transaktionsregeln durchsetzt und in der Lage ist, die Knoten in ihrem verteilten Netzwerk von Computern den gesamten Vorgang selbst überwachen zu lassen. Und sie vollbringt diese bemerkenswerte Leistung ohne zentrale Server- oder Vertrauensautorität, schnell und global (also international). Dieses Versprechen begeistert diejenigen, die es als Möglichkeit sehen, Zwischenhändler zu eliminieren und Transaktionsgebühren zu verringern oder zu erlassen, um den Handel für Unternehmen und Konsumenten gleichermaßen effizienter zu gestalten.

Kernkomponenten einer Blockchain

Das Bitcoin-Blockchainnetzwerk ist öffentlich. Jeder kann überall auf der Welt daran teilnehmen. Neuere Blockchainangebote (wie die von Microsoft Azure gehostete Blockchain) können jedoch als öffentliche, private oder genehmigte Netzwerke konfiguriert werden. Blockchains gelten als dezentralisiert, aber dieser Begriff bedarf der Klärung: Wie Vitalik Buterin erklärt (bit.ly/2tEUYyT), bedeutet der Begriff „dezentrale Blockchains“, dass sie „politisch dezentralisiert (niemand kontrolliert sie) und architektonisch dezentralisiert (kein infrastruktureller zentraler Point of Failure), aber logisch zentralisiert sind (es gibt einen allgemein anerkannten Zustand, und das System verhält sich wie ein einziger Computer)“. Dezentralisierung bietet Fehlertoleranz, Angriffsresistenz und Kollusionsresistenz (was das bedeutet, wird deutlich, wenn ich später über Proof of Work spreche).

Um zu verstehen, wie eine öffentliche Blockchain aufgebaut wird, sind Kenntnisse über kryptografische Hashes, asymmetrische Kryptosysteme (Public Key Cryptography, PKC), binäre Hashketten (insbesondere Hashbäume) und Konsensalgorithmen erforderlich. Ich werde diese Konzepte kurz vorstellen und dann zeigen, dass eine Blockchain eine Hashkette ist, die eine Hashkette von Transaktionen enthält. Sobald Sie dieses Konzept der geschachtelten Hashketten begriffen haben, werden Sie den grundlegenden Entwurf der Blockchaintechnologie verstehen.

Kryptografische Hashes: Es gibt zwar viele Varianten von unidirektionalen kryptografischen Hashalgorithmen, häufig wird aber SHA-256 (bit.ly/29kkpft) genutzt, eine unidirektionale Hashfunktion, die eine Nachricht von bis zu (264-1)/8 Bytes akzeptiert und einen 32-Byte-Hashwert (64 hexadezimale Zeichen) im Dezimalbereich von 0 bis etwa 1,16 x 1077zurückgibt. Um die Größenordnung dieser Zahl ins rechte Licht zu rücken: Ein Wassertropfen weist etwa 5 x 1012 Atome auf, das beobachtbare Universum wird auf 1078 bis 1082 Atome geschätzt. Wenn Sie ein beliebiges Zeichen in der Nachricht verändern und den SHA-256-Hashwert neu berechnen, wird ein völlig neuer Hashwert generiert. (Um zu experimentieren, besuchen Sie onlinemd5.com, und legen Sie den Datei- oder Textprüfsummentyp auf SHA-256 fest.)

Bei gleicher Eingabe generiert der SHA-256-Algorithmus immer die gleiche Ausgabe mit fester Länge. In Bezug auf Blockchaintechnologien besteht der Wert der Verwendung von kryptografischen SHA-256-Hashes darin, dass sie eindeutig genug sind, um als eine Art digitaler Fingerabdruck zu dienen und gleichzeitig als Prüfsumme zu fungieren. Außerdem können unidirektionale Hashfunktionen (in der Praxis) nicht decodiert werden. Sehen Sie sich den SHA-256-Wert für meinen Namen an: 8F12D83BA54AC0EA7687AD4AFDE5E258BBFF970AA8D60C6588381784C502CA8E. Für diesen Hashwert gibt es kein praktisches Verfahren, ihn algorithmisch in meinen Namen zurückzuverwandeln. (Eine Hackertechnik nutzt Rainbow Tables, die bereits berechnete Hashwerte für gängige Zeichenfolgen auflisten (z.B. für „password“), aber das ist keine algorithmische Rückverwandlung des Hashwerts. Um einem solchen Missbrauch vorzubeugen, ist es üblich, die Zeichenfolge, die in einen Hashwert umgewandelt werden soll, mit einer zufälligen Zeichenfolge zu versehen, die als „Salt“-Wert bezeichnet wird.)

Wenn Sie keinen SHA-256-Generator zur Hand haben, sehen Sie sich die Tabelle in Abbildung 1 an, die zeigt, dass Zeichenfolgen verschiedener Länge immer einen 64-stelligen hexadezimalen Hashwert ergeben und eine kleine Änderung an einer bestimmten Zeichenfolge zu einem völlig anderen Ergebnis führt.

Abbildung 1: Versehen von Zeichenfolgen verschiedener Länge mit Hashwerten unter Verwendung des SHA-256-Algorithmus

Eingabezeichenfolge SHA-256-Hashwert
m 62C66A7A5DD70C3146618063C344E531E6D4B59E379808443CE962B3ABD63C5A
M 08F271887CE94707DA822D5263BAE19D5519CB3614E0DAEDC4C7CE5DAB7473F1
M1 2D214CA69B86C255BE416D42CCA977A59B34A7492873105522C35015FAB806F0
M2 0892A10ECE1F933EE98F5D554601B28F8437801D1AA1B77799E4035DDCB6950C
März 86AC4D6762519C9DF9013BD7B54723D595B624740F764430F963CDBD6BBCD292
1. März 2018 9051C426252198C3993FE72BE012F397D22DC97A53414A90DC0F06EFC988C026
2. März 2018 25435AE28DBEE3124FBF16B23485DE1F7F2AA7210E1C998CD59AB68B07339D30

Manchmal wird ein Hashwert doppelt gehasht, was bedeutet, dass der erste Hash durch Anwenden einer zweiten Iteration des SHA-256-Algorithmus erneut gehasht wird. Wenn ich auf die Werte in Abbildung 1 den doppelten Hashwert anwende, erhalte ich die Ergebnisse in Abbildung 2.

Abbildung 2: Doppelte Hashwerte für die Werte in Abbildung 1

Eingabezeichenfolge Doppelter SHA-256-Hashwert
m A5FCE7E78734EC317F83F9019C80FFAF2508689B06EFA02191495A7D21FECE9A
M 6F6DCF58526B0D29EE664A708A939B7CDAC124A6A8569FCACE46FEAD38868E2E
M1 6C5D08BE9FFBBABD24B5F19AFFE6590FD402D347A50B519A59D40E15DCC0A6CB
M2 B2307311CC5877D5A581EDC821F3BFD5F99EB4E3B1D1B4009D9545BCF07E2E1A
März 639393674379195754AE9FF5F4EB9BEF90FDA7AD235084397386FE2EDDC28991
1. März 2018 FA5DBA66053E6DA31CD2908A92C2A00BA902C925B5ED9266039E0F461C93D7BF
2. März 2018 D7C52904C660EDB37D188A579D89FE0BFDFAAD9888CB8E2EC559C50A3C3E280B

Public Key Cryptography: Erinnern Sie sich daran, dass eine der Hauptfunktionen einer Blockchain darin besteht, das Eigentum an einem digitalen Objekt nachzuverfolgen. Das fragliche digitale Objekt kann nichts oder viele Millionen Dollar wert sein, daher muss der Eigentumstest sicherstellen, dass der Besitzer nicht gefälscht werden kann. Um einen solchen Test im digitalen Bereich auszuführen, setzen Blockchains PKC ein, die es dem Besitzer ermöglicht, sein Objekt digital zu signieren, um das Eigentum nachzuweisen und die Übertragung zu genehmigen. Im Gegensatz zur Verschlüsselung mit symmetrischen Schlüsseln, bei der ein einziger privater (geheimer) Schlüssel sowohl zum Verschlüsseln als auch zum Entschlüsseln einer Nachricht verwendet wird, verwendet PKC eine Verschlüsselung mit asymmetrischen Schlüsseln.

Da ein genauer Überprüfungsalgorithmus für den Besitz von digitalen Objekten für Blockchains von entscheidender Bedeutung ist, verwenden sie eine extrem robuste Strategie zur Generierung öffentlicher/privater Schlüsselpaare, die sich auf ECDSA (Elliptic Curve Digital Signature Algorithm) stützt. Das Schöne an ECDSA ist, dass dieser Algorithmus Schlüssel erstellt, die kürzer in der Länge, aber kryptografisch stärker sind als gleich lange Schlüssel, die durch den üblichen Algorithmus generiert werden: DSA (Digital Signature Authorization). Wann immer sie benötigt werden, greifen Benutzer auf eine Softwareanwendung zu, die ECDSA verwendet, um das kryptografische Schlüsselpaar zu generieren. Der Benutzer muss eine Sicherung des privaten Schlüssels aufbewahren, da dieser Schlüssel erforderlich ist, um den Wert eines digitalen Objekts, das in einer Blockchain gespeichert ist, zu übertragen oder nutzbar zu machen. Wenn Sie nur auf den privaten Schlüssel eines privaten/öffentlichen Schlüsselpaars zugreifen können, können Sie den öffentlichen Schlüssel erneut generieren, da zwischen den beiden Schlüsseln eine mathematische Beziehung besteht. Der private Schlüssel kann jedoch nicht aus dem öffentlichen Schlüssel generiert werden (d.h. wenn Sie nur einen Schlüssel sichern, müssen Sie unbedingt sicherstellen, dass es sich um den privaten Schlüssel handelt).

Diese Schlüssel werden üblicherweise auf eine von zwei Arten verwendet. Der erste Anwendungsfall (siehe Abbildung 3) bezieht sich darauf, dass Sie möchten, dass Ihnen jemand eine verschlüsselte Nachricht sendet, die nur Sie öffnen können. Zu diesem Zweck überlassen Sie der anderen Person Ihren öffentlichen Schlüssel und bitten sie, ihn zu verwenden, um das Dokument mithilfe einer Software zu verschlüsseln, die einen Verschlüsselungsalgorithmus anwendet und einen Chiffriertext generiert: die verschlüsselte Version ihrer Nachricht. Diese Person sendet Ihnen anschließend nur den Chiffriertext. Da sie Ihren öffentlichen Schlüssel zur Verschlüsselung des Dokuments verwendet hat, müssen Sie den richtigen privaten Schlüssel des Schlüsselpaars verwenden, um es zu entschlüsseln.

Verwenden von PKC, wenn Sie möchten, dass Ihnen jemand ein verschlüsseltes Dokument oder eine verschlüsselte Nachricht sendet, die nur Sie öffnen können
Abbildung 3: Verwenden von PKC, wenn Sie möchten, dass Ihnen jemand ein verschlüsseltes Dokument oder eine verschlüsselte Nachricht sendet, die nur Sie öffnen können

Der zweite Anwendungsfall (siehe Abbildung 4) bezieht sich darauf, dass Sie eine Nachricht verschlüsseln und beweisen möchten, dass sie tatsächlich von Ihnen stammt. Zu diesem Zweck verwenden Sie Ihren privaten Schlüssel, um einen Chiffriertext Ihres Dokuments zu erstellen. Dann senden Sie diesen Chiffriertext an eine andere Person. Diese verwendet Ihren öffentlichen Schlüssel, um ihn zu entschlüsseln. Da nur Ihr öffentlicher Schlüssel das Dokument entschlüsseln kann, kann der Empfänger davon ausgehen, dass das Dokument mit Ihrem privaten Schlüssel verschlüsselt wurde – und solange Ihr privater Schlüssel nicht unterschlagen wurde, stammt das Dokument von Ihnen.

Verwenden von PKC, wenn Sie jemandem ein verschlüsseltes Dokument oder eine verschlüsselte Nachricht senden und sicherstellen möchten, dass es bzw. sie tatsächlich von Ihnen stammt
Abbildung 4: Verwenden von PKC, wenn Sie jemandem ein verschlüsseltes Dokument oder eine verschlüsselte Nachricht senden und sicherstellen möchten, dass es bzw. sie tatsächlich von Ihnen stammt

Ein dritter Anwendungsfall setzt PKC ein, um das Eigentum an einem digitalen Objekt durch einen digitalen Signaturprozess nachzuweisen. Stellen Sie sich für diesen Anwendungsfall (siehe Abbildung 5) vor, dass Bill ein Word-Dokument eines rechtsverbindlichen Dokuments verfasst hat, das er per E-Mail an Susan senden muss. Susan möchte sicher sein, dass die Kopie des Dokuments, das sie von Bill erhält, tatsächlich von Bill stammt und nicht während der Übermittlung manipuliert wurde. Bill erstellt zunächst einen SHA-256-Hash des Word-Dokuments und zeichnet den Wert als H(W) auf. Als nächstes verwendet er seinen privaten Schlüssel, um den Dokumenthash zu verschlüsseln, was zu Enc(H(W)) führt, und sendet dann das Word-Dokument (optional verschlüsselt) und den Enc(H(W))-Wert (dies ist Bills digitale Signatur für Dokument W) an Susan.

Verwenden von PKC zusammen mit einem kryptografischen Hash zum digitalen Signieren von Dokumenten/Nachrichten
Abbildung 5: Verwenden von PKC zusammen mit einem kryptografischen Hash zum digitalen Signieren von Dokumenten/Nachrichten

Susan berechnet den H(W)-Wert aus der Kopie des erhaltenen Word-Dokuments neu und verwendet dann Bills öffentlichen Schlüssel, um den Enc(H(W))-Wert zu entschlüsseln (siehe Abbildung 6). Wenn der von Susan berechnete Hashwert gleich dem entschlüsselten H(W)-Wert ist, kann Susan daraus schließen, dass Bill das Dokument signiert hat und dass die Kopie, die sie erhalten hat, mit der von Bill signierten identisch ist.

Verwenden von PKC zusammen mit einem kryptografischen Hash, um zu überprüfen, ob ein Dokument/eine Nachricht von der erwarteten Partei signiert wurde
Abbildung 6: Verwenden von PKC zusammen mit einem kryptografischen Hash, um zu überprüfen, ob ein Dokument/eine Nachricht von der erwarteten Partei signiert wurde

Mithilfe von Hashwerten und PKC verwaltet eine Blockchain einen Verlauf des Besitzes von digitalen Objekten mithilfe von Transaktionen. Transaktionsdatenobjekte sind miteinander verknüpft und bilden eine Datenstruktur, die als Hashkette bezeichnet wird. Dies funktioniert so, dass jeder Transaktionsdatensatz die Nachricht (m) darstellt, die mit der Funktion (H) mit einem Hashwert versehen und dann mit dem privaten Schlüssel (s) des Besitzers signiert wird. (Es ist üblich, „s“ für „secret“ (geheim) zu verwenden, um den privaten Schlüssel darzustellen, um ihn nicht mit „p“ für den öffentlichen („public“) Schlüssel zu verwechseln.) So entsteht eine Signatur (sig):

sig = signature(H(m), s)

Wenn ein digitales Objekt von einem Besitzer auf einen anderen übertragen wird, wird seine digitale Signatur vom neuen Besitzer untersucht, bestätigt und digital signiert und dann als neuer Knoten in der Hashkette registriert. Obwohl die Details der Implementierung in den einzelnen Blockchaintechnologien und -versionen sehr unterschiedlich sind, ist die Grundidee für alle gleich. Beispielsweise ist Bill (wie in Abbildung 7 gezeigt) der Besitzer eines digitalen Objekts und verwendet seinen privaten Schlüssel, um eine Übertragung dieses digitalen Objekts an Susan einzuleiten. Susans Transaktionsdatensatz verwendet Bills öffentlichen Schlüssel, um seine Signatur zu überprüfen. Anschließend wird der öffentliche Schlüssel von Susan verwendet, um das digitale Objekt zu signieren, wodurch Susan zum neuen Besitzer wird. Dadurch wird ein neuer Transaktionssatz erstellt: ein neuer Link in der Hashkette der Transaktion.

Die Transaktionshashkette verwendet digitale Signaturen, um den Besitz eines digitalen Objekts zu übertragen, und jeder Transaktionsdatensatz verwaltet einen kryptografischen Backlink zur vorherigen Transaktion in der Hashkette
Abbildung 7: Die Transaktionshashkette verwendet digitale Signaturen, um den Besitz eines digitalen Objekts zu übertragen, und jeder Transaktionsdatensatz verwaltet einen kryptografischen Backlink zur vorherigen Transaktion in der Hashkette

Diese Hashkette von Transaktionen ist kryptografisch sicher und vor Manipulationen geschützt. Jede Änderung an Transaktion 0 würde eine Änderung von Sig0 zur Folge haben, und das würde eine Aktualisierung des in Transaktion 1 gespeicherten Hashwerts und jeder weiteren Transaktion in der Hashkette erfordern.

Die Transaktionsobjekte sind hier mit Daten abgebildet. Die Daten, die in jeder Transaktion enthalten sind, sind für jede Blockchainimplementierung unterschiedlich, daher habe ich die zugrunde liegenden Daten für unsere Zwecke abstrahiert, weil der wichtigste zu verstehende Punkt der folgende ist: Die Hashkette ist eine kryptografisch verknüpfte Kette von Transaktionen, die durch den Hashwert des Transaktionsdatensatzes des Vorbesitzers verknüpft ist. (In Kryptowährungsblockchains enthält jedes Transaktionsobjekt eine Liste von Ein- und Ausgängen in digitaler Währung sowie Metadaten wie einen Zeitstempel und eine optionale Transaktionsgebühr. Diese Ein- und Ausgänge der Kryptowährung liefern die Transaktionsdetails, die für die genaue Modellierung eines Finanzhauptbuchs erforderlich sind.)

Hashbäume: Manche Blockchains fassen Transaktionen mit einer anderen Art von Hashkette zusammen: mit der binären Hashkette oder dem Hashbaum. Ein vollständiger Hashbaum wird als binäre Baumstruktur bezeichnet, da er sich beginnend mit dem Stamm auf jeder Ebene zwei Mal verzweigt, wie in Abbildung 8 gezeigt.

Ein Hashbaum ist ein Typ eines binären Hashbaums, der einen Hashbaum-Stammhashwert generiert; diese Datenstruktur kann effizient Blattknoten hinzufügen und einen neuen Hashbaumstamm berechnen, ohne dass eine vollständige Neuberechnung erforderlich ist
Abbildung 8: Ein Hashbaum ist ein Typ eines binären Hashbaums, der einen Hashbaum-Stammhashwert generiert; diese Datenstruktur kann effizient Blattknoten hinzufügen und einen neuen Hashbaumstamm berechnen, ohne dass eine vollständige Neuberechnung erforderlich ist

Die Aufgabe beim Einrichten eines Hashbaums besteht darin, eine Reihe von Blattknoten zu erstellen, indem der SHA-256-Hashwert für die in jedem Transaktionsobjekt enthaltenen Daten berechnet wird (die Bitcoin-Blockchain verwendet doppelte Hashwerte für jeden Hashbaum, doppelte Hashwerte können helfen, den kryptografischen Wert im Hashergebnis zu verstärken, falls eine Schwachstelle im SHA-256-Algorithmus entdeckt wird). Der Hashbaum benötigt eine gerade Anzahl von Blattknoten. Es ist üblich, den letzten Blattknoten zu duplizieren, wenn mit einer ungeraden Zahl begonnen wird. Dann wird für jedes Blattknotenpaar zusammen der Hashvorgang ausgeführt, wodurch ein neuer Hashwert generiert wird. In Abbildung 8 zeigt Blatt A den Hash für Transaktion A als HA, Blatt B den Hash für Transaktion B als HB usw. Dieses Muster setzt sich auf jeder Baumebene fort, bis der letzte Stammknoten erreicht wird. Der Hashwert des Stammknotens ist die kryptografische Hashsumme aller anderen Hashsummen im Baum. Jede Änderung der Daten in einem der Blattknoten bewirkt, dass sich der neu berechnete Stammhashwert des Hashbaums ändert.

Die binäre Hashbaumstruktur bietet einige Vorteile. So ist es z.B. einfach, Daten innerhalb einer Transaktion zu aktualisieren und einen neuen Stammhashbaum zu berechnen, ohne den gesamten Hashbaum neu erstellen zu müssen. Wenn sich z.B. die Transaktion E ändert (sie ist in Abbildung 8 hervorgehoben dargestellt), müssen Sie nur den Baum effizient zurück bis zum Hashbaumstamm durchlaufen und neue Hashes für jede Ebene ein Mal berechnen. So berechnen Sie zuerst den neuen Blatthash HE, dann berechnen Sie HEF aus HE und HF, dann berechnen Sie HEFGH aus HEFund HGH, dann berechnen Sie einen neuen Stammhashwert des Hashbaums aus HABCD und HEFGH. Für die Aktualisierung des Hasbaum-Stammhashwerts waren nur vier Berechnungen im Vergleich zu den 15 Berechnungen erforderlich, die benötigt würden, um den Hashbaum von Grund auf neu zu erstellen!

Erstellen einer Blockchain

Um eine Blockchain zu erstellen (siehe Abbildung 9), muss das binäre Hashketten-Datenobjekt, das Transaktionen enthält, in einen manipulationssicheren Datenspeicher committet werden, auf den jeder Benutzer zugreifen kann (denken Sie daran, dass dies eine öffentliche Blockchain ist: jeder Knoten im Netzwerk kann aus ihr lesen und in sie schreiben). Die Hashbaumstruktur enthält Transaktionen und ist manipulationssicher, sodass es den Anschein hat, als könnte sie als Blockchain dienen. Aber es gibt mehrere Probleme. Damit Bill sein digitales Objekt an Susan senden kann, muss Bill dem Dienst oder der Website vertrauen, der bzw. die als Agent fungiert, um seine Anforderung für die Übertragung von digitalen Objekten zu verarbeiten, und er muss dem Server vertrauen, der die Hashstruktur persistent speichert. Ohne einen zentralen Knoten, der eine neue Transaktion verarbeitet, oder eine zentrale Autorität, die sie zur Verarbeitung delegiert, könnte jeder Knoten die ausstehende Transaktion von Bill verarbeiten. Ein betrügerischer oder dominanter Knoten mit überlegener Rechenleistung könnte ungültige oder betrügerische Transaktionen zulassen, die sich auf nicht betrügerische Knoten ausbreiten. Als Lösungsansatz für dieses Problem könnte das Netzwerk versuchen, zufällig einen Knoten zuzuweisen, um Bills Transaktion zu verarbeiten, aber das wiederum zentralisiert die Kontrolle und erfordert Vertrauen, dass der Zufallszahlengenerator tatsächlich Zufälligkeit erzwingt. Um dieses Problem zu beseitigen, verwenden Blockchains Konsensalgorithmen, die im Folgenden beschrieben werden.

Die Blockchain setzt sich aus Blöcken zusammen, die ihrerseits Transaktionshashbäume enthalten, Blöcke in der Blockchain sind mit vorherigen Blöcken rückverknüpft und werden mit einem Proof of Work-Algorithmus überprüft
Abbildung 9: Die Blockchain setzt sich aus Blöcken zusammen, die ihrerseits Transaktionshashbäume enthalten, Blöcke in der Blockchain sind mit vorherigen Blöcken rückverknüpft und werden mit einem Proof of Work-Algorithmus überprüft

Konsensalgorithmen: Blockchaintechnologien vermeiden zentralisierte Datenspeicherung und Probleme mit der Vertrauenswürdigkeit, indem sie ein Protokoll verwenden, das vorschreibt, wie Blöcke hinzugefügt und verwaltet werden. Zu diesem Zweck erzwingen sie einen Blockchainerstellungs-Konsensalgorithmus. Es gibt verschiedene Arten von Konsensalgorithmen. Ich werde erläutern, wie der PoW-Algorithmus (Proof of Work) funktioniert.

PoW basiert auf der Idee, dass ein Knoten im Netzwerk seine ehrenhaften Absichten beweisen muss, indem er Kosten verursacht und die Zeit aufwendet, die für die Lösung eines rechnerisch anspruchsvollen Problems benötigt wird. Um einen Knoten zu veranlassen, an einem solchen System teilzunehmen und nach seinen Regeln zu spielen, bietet das Netzwerk einen Anreiz (oft Geld). Knotenbetreiber werden also bezahlt, wenn sie der Blockchain einen Block hinzufügen. Um dieses Geld zu verdienen, müssen die Knoten alle Transaktionen überprüfen (um sicherzustellen, dass sie den spezifischen Regeln einer Blockchain entsprechen) und dann ein kryptografisches Rätsel lösen.

Wie schon erwähnt, könnte eine zentrale Autorität nach dem Zufallsprinzip einen Knoten zuweisen, um einen Batch neuer Transaktionen zu verarbeiten. Dieser Ansatz würde einen zentralen Zufallszahlengenerator erfordern, der fehlerhaft, gehackt oder deaktiviert sein könnte. Wenn Sie jedoch Knoten ein schwieriges Rätsel lösen lassen, ergibt sich der gewünschte Effekt: Der Knoten, der das Rätsel zuerst lösen wird, kann nicht im Voraus bestimmt werden, was zu einer Art von Knotenlotterie im Netzwerk führt. Es wird keine zentrale Autorität benötigt – und das ist eine der Schlüsselinnovationen der Blockchaintechnologien. Ich habe auch erwähnt, dass Blockchains dezentralisiert sind und deshalb „Kollusionsresistenz“ bieten. Da PoW Zeit und Geld für Rechenleistung kostet, ist es praktisch unmöglich, dass ein einzelner Knoten oder eine Gruppe von Knoten im Netzwerk kollidieren und einen Blockchainvorteil gegenüber anderen Peerknoten haben kann. (Es besteht ein „Angriffsrisiko von 51 Prozent“, das darauf hindeutet, dass Kollusionen auftreten können, wenn eine Gruppe von Knoten 51 Prozent der Rechenleistung beansprucht, aber durch die Verwendung eines PoW-Konsensalgorithmus wird die Möglichkeit eines solchen Angriffs unausführbar.)

Um einen Block von Transaktionen zu erstellen, ruft ein Knoten noch unverarbeitete Transaktionen ab, die im Netzwerk gespeichert sind, und generiert einen Hashbaum, um den Stammhash des Hashbaums zu berechnen. Aus diesem Grund enthält ein Kandidatenblock eine Liste von Transaktionen zusammen mit einem Blockheader, der den Stammhashwert des Hashbaums, einen aktuellen Zeitstempel und den PoW-Schwierigkeitsgrad (sowie manchmal zusätzliche Headerdaten) enthält. Dann muss er das PoW-Rätsel lösen, bei dem es darum geht, einen doppelten Hashwert des gesamten 256-Bit-Blockhashwerts zu berechnen, und dann eine 32-Bit-Zahl zu ermitteln (als „Nonce“ bezeichnet), die mit ihm verkettet werden kann, sodass der Hashwert der sich ergebenden 288-Bit-Zahl ein Ergebnis generiert, das eine bestimmte Anzahl von führenden Nullen aufweist. Die 32-Bit-Nonce weist einen Bereich von 0 bis 232 (4.294.967.295) auf. Anstatt also nur zu versuchen, die Nonce zu erraten, ist es typisch, mit Nonce 0 zu beginnen, den SHA-256 Hashwert zu generieren und festzustellen, ob er die Zielanzahl führende Nullen aufweist (d.h. der sich ergebende Hashwert ist kleiner als ein Zielwert). Wenn dies nicht der Fall ist, inkrementiert der Knoten den Noncewert und versucht es erneut. Wenn der Knoten alle Noncewerte ausprobiert hat, ohne das Rätsel zu lösen, berechnet er den Blockhashwert neu. Dies garantiert die Generierung eines anderen Blockhashwerts, da ein Zeitstempel im Blockheader in die Blockhashberechnung einbezogen wird. Ein Knoten kann jederzeit einen anderen Batch ausstehender Transaktionen für die Aufnahme in den neuen Block auswählen (oder neue ausstehende Transaktionen hinzufügen, die möglicherweise seit der letzten Überprüfung aufgetreten sind), wodurch der Hashbaum-Stammhashwert geändert wird, der zusammen mit dem Zeitstempel den neu berechneten Blockhashwert ändert. Bei jeder Neuberechnung des Blockhashs iteriert der Knoten erneut über alle mehr als vier Milliarden Noncewerte.

Im Lauf der Zeit wird irgendein Knoten im Netzwerk sein kryptografisches Rätsel lösen. Wenn dies der Fall ist, fügt er den neuen Block am Ende seiner Kopie der Blockchain hinzu (jeder Knoten behält eine Kopie der Blockchain bei) und sendet den neuen Block dann an jeden anderen Knoten im Netzwerk, damit diese ihre Kopie der Blockchain aktualisieren können. Wenn ein Knoten einen neuen Block überträgt, vertrauen andere Knoten nicht einfach darauf, dass der neue Block gültig ist – sie beweisen es sich selbst, indem sie den Block überprüfen. Zur Überprüfung verifiziert ein Knoten einfach die Lösung des PoW-Rätsels, indem er den SHA-256-Hashwert des Blocks berechnet, der mit dem Noncewert verkettet ist, und bestätigt, dass die Antwort einen Hashwert generiert, der die Anzahl der führenden Nullen aufweist, die durch den PoW-Schwierigkeitswert des Blocks angegeben wird.

Übrigens wird bei einigen Blockchains der PoW-Schwierigkeitswert durch das Protokoll kontinuierlich angepasst, sodass neue Blöcke in einem vorgegebenen Zeitintervall in die Blockchain eingefügt werden. Diese kontinuierliche Anpassung ist erforderlich, da die Knoten ständig im Netzwerk auftauchen und aus ihm verschwinden und sich die durchschnittliche Rechenleistung der Knoten somit ständig ändert. Denken Sie daran, dass es in PoW einen Anreiz gibt, der Blockchain Blöcke hinzuzufügen, sodass Knotenadministratoren oft ihre Hardware aufrüsten, um ggf. eine Auszeichnung zu erhalten. In der Bitcoin-Blockchain wird der Schwierigkeitswert alle 2.016 Blöcke so angepasst, dass die Blöcke weiterhin mit einer durchschnittlichen Rate von 10 Minuten pro Block hinzugefügt werden.

Es treten einige Branches auf. Das liegt daran, dass in einem großen Netzwerk die Verteilung von neuen Blöcken Zeit in Anspruch nimmt. Es ist möglich, dass während der Verteilung ein anderer Knoten sein PoW-Rätsel löst, einen neuen Block zu seiner Kopie der Blockchain hinzufügt und diese dann im Netzwerk überträgt. Empfangende Knoten fügen ihrer Kopie der Blockchain immer einen gültigen Block hinzu, und da jeder Block kryptografisch mit dem vorherigen Block verbunden ist, ergeben zwei neue Blöcke, die von zwei verschiedenen Knoten veröffentlicht werden, einen Branch, der mit demselben Block am Ende der Kette verbunden ist. Das ist aber in Ordnung. Im Laufe der Zeit werden Knoten neue Blöcke an das Ende dessen anfügen, was das Protokoll als die „längste Kette“ ansieht. Beispielsweise könnte bei einem Branch die längste Kette als diejenige mit dem aktuellsten Blockzeitstempel definiert werden. Im Laufe der Zeit wird die Länge eines einzigen Branches vorherrschen, und Blöcke von aufgegebenen (kürzeren) Branches werden entfernt, wodurch ihre Transaktionen in den Pool der unverarbeiteten Transaktionen zurückkehren.

Zusammenfassung

In diesem Artikel habe ich gezeigt, wie eine öffentliche Blockchain erstellt werden kann, die sich aus kryptografisch verknüpften Blöcken zusammensetzt, von denen jeder seine eigene Hashkette von kryptografisch verknüpften Transaktionen enthält, und zwar in einem dezentralen Peer-to-Peer-Netzwerk von Knoten. Ich habe die Grundlagen der Blockchaintechnologien behandelt und versucht, mich nicht auf eine einzelne Implementierung zu konzentrieren, sondern stattdessen einige der typischen technischen Merkmale zu beschreiben, die allen gemeinsam sind. Wenn Sie das Thema weiter vertiefen möchten, empfehle ich, eine bestimmte Blockchaintechnologie wie Bitcoin, Ethereum oder Ripple auszuwählen und zu versuchen, sich mit den Details der jeweiligen Implementierung vertraut zu machen. Wenn Sie selbst mit Blockchains experimentieren möchten, werfen Sie einen Blick auf die von Azure gehosteten Blockchainangebote unter bit.ly/2Gj2zaC.


Jonathan Waldman ist ein Microsoft Certified Professional, der bereits seit ihrer Einführung mit Microsoft-Technologien gearbeitet hat. Sein Spezialgebiet ist Softwareergonomie. Waldman ist Mitglied des technischen Pluralsight-Teams und leitet zurzeit Softwareentwicklungsprojekte aus dem öffentlichen und privaten Sektor. Sie erreichen ihn unter jonathan.waldman@live.com.

 Unser Dank gilt dem folgenden technischen Experten bei Microsoft für die Durchsicht dieses Artikels: James McCaffrey


Diesen Artikel im MSDN Magazine-Forum diskutieren