Teil 2 der Serie: Wie funktioniert Bitcoin?
Diese dreiteilige Serie erläutert die technologischen Grundlagen hinter Bitcoin und der zugrundeliegenden Distributed-Ledger-Technologie (DLT). Nachdem im ersten Teil der Reihe die Geschichte Bitcoins und erste wichtige Bausteine, wie Hashfunktionen, Private und Public Keys vorgestellt wurden, geht es nun im zweiten Teil um den Konsensmechanismus Proof-of-Work, Signaturen und dem Ablauf einer Bitcoin-Transaktion.
Konsensmechanismus und Netzwerkteilnehmer
Im dezentralen Bitcoin-System legt der Konsensalgorithmus Proof-of-Work die Regeln fest, damit sich die Netzwerkteilnehmer, sog. Nodes (Knoten), innerhalb des Netzwerks darüber einig werden, welche Transaktionen als valide angesehen werden können und welche nicht. Generell ist der Algorithmus dafür verantwortlich, dass das Protokoll, also die Regeln der Blockchain, eingehalten werden. Im Bitcoin-Netzwerk gibt es insgesamt drei Parteien, die für den Transaktionsprozess wichtig sind. Dazu zählen die Nutzer, die Nodes und die Miner. Nutzer wollen Bitcoins von A nach B transferieren und leiten dafür ihre Transaktion an die Nodes weiter. Als Gegenleistung zur Durchführung einer Transaktion müssen die Nutzer eine Transaktionsgebühr bezahlen. Nodes erhalten die Transaktionsinformationen, wie Transaktionsbetrag und Empfänger, von den Nutzern und senden diese an den sogenannten Mempool — den Pool der offenen Transaktionen — der Miner weiter.
Eine (Full) Node hat permanent die gesamte Blockchain heruntergeladen und aktualisiert diese regelmäßig. Miner fügen schließlich Transaktionen aus dem Mempool in einem Block zusammen (dazu später mehr), und schicken diesen dann zum Verifizieren an die Nodes. Daraufhin überprüfen die Nodes den Block und die enthaltenen Transaktionen.
Signatur einer Transaktion
Doch wie genau läuft nun eine Bitcoin-Transaktion ab? Der vereinfachte Ablauf einer Bitcoin-Transaktion ist in Abbildung 1 dargestellt und wird im Folgenden im Detail besprochen.[1] Angenommen Anja möchte einen Bitcoin an Bernd schicken. Dafür benötigt sie mehrere Informationen. Erstens benötigt sie ihren Private Key, um verifizieren zu können, dass sie tatsächlich die Besitzerin des einen Bitcoins ist, den sie gerne versenden möchte. Zusätzlich benötigt sie noch die Bitcoin-Adresse von Bernd, damit sie weiß, wohin sie den Bitcoin schicken muss. Zudem kann Anja auch noch optional, analog zum Verwendungszweck bei Banküberweisungen, einen Nachrichtentext hinzufügen. Nach Eingabe dieser Daten werden die Transaktionsinformationen durch die Hashfunktion gehasht und der Output wird mit dem von Anja angegebenen Private Key unterschrieben. Dadurch entsteht eine digitale Signatur. Doch wie können Bernd bzw. die Nodes im Netzwerk sicher sein, dass Anja tatsächlich den richtigen Private Key benutzt hat?
Abbildung 1: Ablauf einer Bitcoin-Transaktion
Hierfür wird Anjas Public Key zur Hand genommen. Dieser wurde initial mit Hilfe einer elliptischen Kurve aus dem Private Key erzeugt, aus dem wiederum die Bitcoin-Adresse erzeugt wurde.[1] So kann das Netzwerk validieren, dass Anja den richtigen Private Key benutzt hat, ohne dass die Nodes oder andere User, abgesehen von Anja selbst, den Private Key kennen. Sollte Anja einen falschen Private Key benutzen, kann der Public Key die digitale Signatur nicht verifizieren und die Transaktion wird abgelehnt.
Ist die Transaktion valide, wird diese an alle Nodes im gesamten Netzwerk verteilt und landet schlussendlich im Mempool der Miner. Die Miner nehmen sich die Transaktionen aus den Mempool heraus und „verpacken“ diese in einen Block. Ein Block ist genau ein Megabyte groß und umfasst rund 4.200 Transaktionen. Aufgrund der begrenzten Blockgröße sind im Bitcoin-Netzwerk derzeit lediglich maximal sieben Transaktionen pro Sekunde möglich. Ein Block besteht neben den Transaktionsdaten auch aus einem Block Header.
Block Header und Merkle Trees
Die für das Grundverständnis wichtigsten Bestandteile des Block Headers sind der Hash des vorherigen Blocks, eine Merkle Root und die sog. Nonce. Hash des vorherigen Blocks bedeutet, dass der letzte Block aus der Blockchain gehasht wird und dieser Hash dann Bestandteil des Block Headers im neuen Block ist. Ein Merkle Tree ist vom visuellen Aufbau ähnlich zu einem Baumdiagramm (siehe Abbildung 2).
Abbildung 2: Visuelle Darstellung eines Merkle Tree
Auf den untersten Zweigen des Merkle Tree befinden sich die Hashes der einzelnen Transaktionen des Blocks. Diese werden dann so lange paarweise gehasht bis am Ende nur noch ein einziger Hash übrig bleibt. Dieser Hash wird als Merkle Root bezeichnet und wird mit in den Block Header aufgenommen. Durch die Merkle Root können alle Transaktionen im Block mit nur einem Hash abgebildet werden. Vertauscht man z.B. in Abbildung 2 HB mit HC, resultiert am Ende auch ein komplett anderer Hash für die Merkle Root, da HA und HC zusammen einen anderen Hash ergeben als zuvor HA und HB. Das Gleiche gilt auch für den Hash aus HB und HD.
Nonce und Mining
Der letzte Bestandteil des Block Headers ist die Nonce. Diese kann man sich vorerst als freies Feld vorstellen, in das später eine Zahl zwischen 0 und 232 eingesetzt wird. Der Block Header ist wichtig, da er zweimal mit SHA-256 gehasht wird. Das Besondere an diesem Output ist, dass er mit einer bestimmten Anzahl an Nullen beginnen muss, damit der Block als gefunden gilt, beispielsweise so:
0000000000000000000573d3f4df115906726c1e469818314a311de43207853c
Ein solcher Hash wird gefunden, indem die Miner für die Nonce, also das ursprüngliche freie Feld, Zahlen von null bis ca. 4,2 Milliarden (232) einsetzen. Je höher die Anzahl an Nullen sein muss, desto schwieriger ist es den Hash zu finden. Da die Hashfunktion SHA-256 nicht umkehrbar ist, müssen die Miner die Zahlen so lange durchprobieren, bis sie eine Zahl gefunden haben, die dafür sorgt, dass der Hash mit der gesuchten Anzahl an Nullen beginnt. Dann gilt in diesem Kontext eine Nonce als gefunden.
Dieser Prozess des „Proof-of-Work“ wird als Mining bezeichnet und erfordert eine große Rechenleistung der involvierten Computer. Früher konnte das Mining noch mit konventionellen Computern profitabel betrieben werden, aktuell wird dies überwiegend mit sogenannten ASIC Minern betrieben, die allein dafür konzipiert sind, möglichst schnell die Nonce zu finden.
Allgemein ist das Mining aufgrund von Hardware- und Stromkosten äußerst kostenintensiv, weshalb sich Miner geografisch vor allem in Regionen mit geringen Strompreisen aufhalten. Aufgrund der hohen Rechenleistung und des damit verbundenen hohen Energieverbrauchs ist das Mining zudem nicht umweltfreundlich.
„Allgemein ist das Mining aufgrund von Hardware- und Stromkosten äußerst kostenintensiv.“
Sobald der erste Miner eine passende Nonce für seinen Block gefunden hat, sodass der Block Header mit einer bestimmten Anzahl von Nullen beginnt, leitet er den gefundenen Block an die Nodes weiter. Die Nodes überprüfen, ob das Protokoll für den Block eingehalten wurde, also z.B. ob eine passende Nonce gefunden wurde und die maximale Blockgröße nicht überschritten wurde. Wenn das Protokoll eingehalten wurde, gilt der Block als gültig und wird an die Blockchain angehängt. Da in jedem neuen Block immer auch gleichzeitig der Hash des vorherigen Blocks integriert ist, baut jeder Block aufeinander auf, wodurch eine Verkettung der Blöcke entsteht. Sollte folglich ein Netzwerkteilnehmer versuchen, Daten in einem älteren Block zu ändern, so würde sich der Hash dieses Blocks und demzufolge auch die Hashes der darauffolgenden Blöcke verändern. Es müssten also alle darauffolgenden Blöcke abgeändert und für jeden eine neue Nonce gefunden werden, was äußerst rechenintensiv wäre. Deshalb gilt die Blockchain als quasi nicht veränderbar und manipulationsresistent.
Anreize beim Mining
Doch warum nehmen die Miner immense Hardware- und Stromkosten auf sich, um die Nonce für ihren Block zu finden? Grundsätzlich geht es einem Miner darum, schneller eine Nonce für seinen Block zu finden als alle anderen. Denn sobald ein Miner eine Nonce für seinen Block gefunden hat, dieser als gültig anerkannt und zur Blockchain hinzugefügt wurde, hören alle anderen Miner auf, eine Nonce für diesen Block zu finden. Das liegt darin begründet, dass ab dem Zeitpunkt ein neuer Block zur Blockchain hinzugefügt wurde und die Miner den Hash dieses Blocks benötigen, damit sie anfangen können an einem neuen Block zu arbeiten.
Der Miner, der als erstes eine gültige Nonce für seinen Block gefunden hat, bekommt eine Belohnung von 6,25 Bitcoin und die Summe der Transaktionsgebühren in diesem Block. Mining wird deshalb aufgrund des finanziellen Anreizes betrieben. Ursprünglich bekamen Miner eine Belohnung von 50 Bitcoin pro Block ausgezahlt — diese Belohnung halbiert sich allerdings alle 210.000 Blöcke (ca. alle 4 Jahre), bis schließlich alle 21 Millionen Bitcoin im Umlauf sind (ca. im Jahr 2140). Danach bekommen die Miner lediglich die Transaktionsgebühren als Belohnung ausgezahlt.
Wie bereits erwähnt, hängt die Schwierigkeit eine Nonce zu finden davon ab, mit wie vielen Nullen der Hash des Block Headers beginnen muss. Je mehr Nullen zu Beginn benötigt werden, umso schwieriger ist das Finden einer Nonce. Die Schwierigkeit ist so eingestellt, dass das Netzwerk ungefähr zehn Minuten braucht, bis eine passende Nonce für einen Block gefunden wird. Bei Abweichungen wird die Schwierigkeit, d.h. die Anzahl an gesuchten Nullen, angepasst, um weiterhin den 10-Minuten-Rhythmus einzuhalten.
Im Laufe der Zeit ist die Schwierigkeit bei Bitcoin immer weiter angestiegen. Das hat überwiegend zwei Gründe. Zum einen stieg der Bitcoin-Preis enorm an. Das führte dazu, dass immer mehr neue Miner ins Netzwerk kamen und folglich Mining betrieben. Zweitens wird die Mining Hardware immer effizienter. Beides hat zur Folge, dass die Hashpower — also die Rechenleistung beim Bitcoin-Mining — im Netzwerk ansteigt und deshalb die Schwierigkeit erhöht werden muss, damit weiterhin im Durchschnitt alle zehn Minuten ein neuer Block gefunden wird (Narayanan et al., 2016).
Quellen:
[1] Für einen noch detaillierteren Überblick über den Ablauf einer Bitcoin-Transaktion siehe: https://www.mme.ch/fileadmin/files/documents/Publikationen/Bitcoin_Luka_Mueller.pdf.
[2] Für mehr Informationen hierzu siehe: https://www.youtube.com/watch?v=-Gix2bX9jZA.