1. Juni 2017 von Matthias Roth
Wie funktioniert eine Blockchain?
Blockchain – Was ist das?
Die meisten von euch kennen Blockchain sicherlich als Basis der Crypto-Währung „Bitcoin“. Mit Blockchain wurde allerdings auch ein fundamentales Problem – nämlich die Sicherung gegen nachträgliche Manipulation - gelöst. Auf diese Weise können unzählige neue Anwendungsfälle auf einfache Art umgesetzt werden. Welche das genau sind, könnt ihr in meinem letzten Blog-Beitrag nachlesen.
Aber nun zurück zur Ausgangsfrage „Wie funktioniert eine Blockchain?“: Blockchain ist eine Datenbank, in der neue Daten angelegt werden, aber nicht mehr verändert oder gelöscht werden können. Wie der Begriff bereits suggeriert, besteht die Datenbank aus einer sequenziellen Kette von Blöcken, die Transaktionsdaten, beziehungsweise Handänderungsdaten enthalten.
Diese Blöcke werden zeitlich in eine Kette geordnet. Für den ganzen Inhalt des Blockes wird ein Hash erzeugt, der dann die eindeutige Referenz des Blocks darstellt. Der nächste Block verweist dann jeweils auf den Hashwert des vorgängigen Blocks und ein neuer wird jeweils immer vorne an eine bestehende Kette angehängt.
Was ist ein Hash?
Ein Hash ist eine Zahl, die einen eindeutigen Wert für eine beliebige Zeichenkette darstellt. Es gibt verschiedene Arten von Hash-Algorithmen. In den Blockchain-Technologien wird meistens der Hash „SHA256“ verwendet, da dieser auch in Bitcoin benötigt wird.
Um euch ein Beispiel zu nennen: Der Text „The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.” ergibt den Hashwert: “635241ac823ee4a81fbb410c92be616b0a89191083d8d7b5d232c823dc8df4f5”
Wird nun etwas im Text verändert, sei es auch nur ein einzelnes Zeichen, so führt das zu einem neuen Hashwert, der durch einen beliebigen Computer sehr schnell erzeugt werden kann. Auf diese Weise könnt ihr einfach prüfen, ob ein Hashwert zu einem bestimmten Text passt oder nicht.
Was ist Mining?
Der Hashwert eines Blocks muss in der Blockchain gewisse Vorgaben erfüllen. Beispielsweise muss der Hash bei Bitcoin mit einer bestimmten Anzahl von Nullen beginnen (Difficulty).
Damit das möglich ist, enthält ein Block neben den vorgegebenen Daten das Feld „Nonce“, das eine beliebige Zahl enthalten darf. Beispielsweise ist die Difficulty „00“. Die Zahl im Feld Nonce (2983373116) und der Text im Datenfeld („The quick brown fox jumps over the lazy dog. The quick brown fox jumps over the lazy dog.”) ergeben somit den Hash 00245750cdddf195efb0594740c08ed5b1a07c8df5cbc4b0d1d1e99bc69a0d3f. Je mehr Nullen für den Hashwert erforderlich sind, umso rechenintensiver ist das Finden einer Zahl, die einen solchen Hashwert liefert. Die Überprüfung, ob die Zahl mit den Daten auch wirklich einen solchen Hashwert ergibt, ist für euch sehr einfach. Das Finden einer solchen Zahl – also das sogenannte Mining - hingegen sehr aufwendig.
Was ist ein Block?
Ein Block hat jeweils einen Header, der aus einer ID, einem Zeitstempel, der Difficulty, der Nonce, dem Hashwert des vorgängigen Blocks und dem Hash des aktuellen Blocks besteht. Zusätzlich gibt es ein Datenfeld, in dem die Transaktionsdaten enthalten sind.
Versucht ihr nun, die Daten irgendeines Blocks zu verändern, so ist die ganze Blockkette ungültig. Der Grund dafür besteht darin, dass sich der Hashwert des gesamten Blocks verändert und die Referenz durch den nachfolgenden Block nicht mehr stimmt. Um die Kette wieder gültig zu machen, müsstet ihr für jeden Block fortfolgend einen neuen Hashwert erzeugen (Mining), was allerdings sehr zeit- und rechenintensiv wäre.
Durch diesen Umstand kann eine Kette nachträglich nicht mehr geändert werden, ohne dass ihr es bemerken würdet. Da gleichzeitig alle anderen Miner neue Blöcke erstellen, müsste ein potentieller Angreifer ein Vielfaches der Rechenleistung aller Miner besitzen. Entsprechend müsste die Kette schneller neu berechnet werden, bevor ein neuer Block durch einen anderen Miner erstellt und vorne an die Kette angehängt wird. Da jedoch immer die längste Kette akzeptiert wird, ist ein Angreifer bei einer öffentlichen Blockchain mit einer sehr großen Anzahl Miner und deren immenser gemeinsamer Rechenleistung auf verlorenem Posten. Private oder halbprivate Blockchains, bei denen die Anzahl Miner klein und die Rechenleistung entsprechend gering ist, kommen andere Sicherheitsmechanismen – die ich an dieser Stelle aber nicht genauer erläutern werde – zum Zuge.
Wie läuft nun eine Transaktion ab?
Wenn ihr euch nun die Crypto-Währungen wie Bitcoin oder Ether (Ethereum) anschaut, läuft eine Transaktion wie folgt ab: Von einer Brieftasche (Wallet) kann eine Überweisung in eine andere Brieftasche gemacht werden.
Zum Beispiel überträgt Wallet 1 den Betrag von 90$ auf Wallet 2. In der Eingabemaske ist ersichtlich, dass nicht nur die 90$ übertragen werden, sondern auch eine kleine Gebühr (Fee) von 0.10$. Das bedeutet, eine Transaktion ist nicht ganz gratis. Die Gebühren sind in der Regel aber sehr klein.
Das Wallet 1 hatte initial 100$. Nach der Transaktion sind nur noch 9.90$ im Wallet (abzüglich 90$ + 0.10$). Im Wallet 2 ist die Überweisung bereits sichtbar. Da aber noch kein Miner die Transaktion in einen Block gepackt hat, kann der Betrag noch nicht verwendet werden.
Die Transaktionen, die noch in keinem Block gebunden sind, warten darauf, von einem Miner verarbeitet zu werden.
Der Miner 2 hat nun die Transaktion erfolgreich in einen Block gepackt. Für seine Arbeit erhält er eine Belohnung (Award) von 50$ und die Gebühr von 0.10$ gutgeschrieben. Im Blockchain-System sind somit nun 50$ oder 50 Coins zusätzlich vorhanden. So entstehen im Bitcoin-Netzwerk neue Bitcoins bis zu einer bestimmten Obergrenze.
Im Block 2 sind die Transaktionen zu sehen. Einerseits der Übertrag von Wallet 1 zu Wallet 2 und andererseits die Belohnung von 50$, die der Miner erhalten hat.
Wenn ihr das Ganze selbst einmal ausprobieren möchtet, findet ihr unter http://blockchain.adesso.ch eine einfache Demo, die euch hilft, die Zusammenhänge besser verstehen zu können. Ich wünsche euch viel Spaß damit!