Bitcoins, Blockchain und Klopfertaler
Bitcoins bringen mich zum Weinen. Der Grund ist natürlich der: Hätte ich damals kurz nach Erfindung der Bitcoin 2009 angefangen, selbst welche zu schürfen, wäre ich heute Multimillionär. Eine verpasste Gelegenheit, an die ich ständig erinnert werde, wenn irgendwelche Medien darüber diskutieren, ob es nun eine Bitcoin-Blase oder doch ein lange andauernder Bitcoin-Boom sein wird, und gleichzeitig die kühnsten Erwartungen an die Blockchain-Technologie stellen, wobei in mir oft Zweifel laut werden, ob die Schreiberlinge eigentlich tatsächlich wissen, was die Blockchain-Technologie überhaupt ist.
Deswegen werde ich jetzt also erklären, was eigentlich hinter Kryptowährungen wie Bitcoin steckt und was die ominöse Blockchain eigentlich ist. Ich versuche, das so leicht verständlich wie möglich zu machen, auch wenn dabei die Genauigkeit in den Details flöten gehen wird.
Zunächst muss ich aber zwei Dinge erklären, die wir für eine Kryptowährung brauchen: digitale Signaturen und (kryptografische) Hash-Funktionen.
Digitale Signaturen
Im Internet fällt es recht leicht, sich für andere auszugeben. Aus diesem Grund ist es für besonders wichtige Nachrichten oder auch Vorgänge nötig sicherzustellen, dass sie tatsächlich von den Personen stammen, die als Absender genannt werden. Hierfür benutzt man Signaturen.
Für so eine digitale Signatur braucht man einen privaten und dazugehörigen öffentlichen Schlüssel, also zwei Zeichenketten einer beträchtlichen Länge. Den öffentlichen Schlüssel darf jeder wissen – deswegen heißt er öffentlich. Der private Schlüssel hingegen ist der Beweis dafür, dass der Absender tatsächlich derjenige ist, der er zu sein behauptet, denn nur er sollte den privaten Schlüssel kennen.
Ein spezieller Algorithmus generiert aus der Nachricht und dem privaten Schlüssel eine Signatur, die nur für diese eine Nachricht gilt. Diese Signatur hängt man an die Nachricht an.
Mit dem öffentlichen Schlüssel kann der Empfänger nun über einen weiteren speziellen Algorithmus überprüfen, ob die Signatur zu der Nachricht passt. (Deswegen müssen öffentliche und private Schlüssel gemeinsam generiert werden und zueinander passen, damit die Mathematik dahinter funktioniert.)
Damit haben diese digitalen Signaturen einen großen Vorteil gegenüber Unterschriften im echten Leben: Eine echte Unterschrift kann leicht gefälscht werden und sollte auch immer gleich aussehen, um als Unterschrift dieser Person erkannt zu werden; eine digitale Unterschrift per Signatur bezieht sich immer konkret auf das, was signiert werden sollte, und kann leicht über den öffentlichen Schlüssel überprüft werden.
Hash-Funktionen
Eine große Rolle für diese Signaturen spielen Hash-Funktionen. Diese Funktionen machen aus einem eingegeben Text eine Reihe von Bits (den „Hash“ oder „Digest“), die immer die gleiche Länge hat und ziemlich zufällig aussieht, aber nicht zufällig ist. Eine bestimmte Hash-Funktion wird aus einem konkreten Text immer den gleichen Hash generieren. Ändert sich allerdings auch nur ein einziger Buchstabe im Ausgangstext, so wird auch der Hash komplett anders aussehen. (Hashes werden meistens in Form von Hexadezimalzahlen ausgegeben, weil Bits dann doch arg unhandlich sind.)
Hier mal ein Beispiel mit der Sha256-Funktion, die auch bei Kryptowährungen wie Bitcoin eingesetzt wird:
Klopfer will ein Geldstück. 6ca350d28ada45b2c73f7ba997ed8dad6abde632a95ba8e92785c96e84249708 Klopfer will ein Goldstück. 1b7dee16e4e82ecbcea069e79f88582ff3042b0e2a5b00e4ad16f2114148430a
Das Schöne an solchen Hash-Funktionen ist, dass man sie nur schwer umkehren kann. Zu einem Hash den zugehörigen Text zu finden (oder auch nur einen Text, der zufällig den gleichen Hash ergibt), ist sehr aufwendig und bei guten Hash-Funktionen nur durch stumpfes Ausprobieren möglich (diese nennt man dann kryptografische Hash-Funktionen). Das dauert dann natürlich ewig, im besten Fall einige Milliarden Jahre.
(Übrigens werden so heutzutage üblicherweise Passwörter online auf Webseiten gespeichert. Man speichert nicht die Passwörter selbst, sondern nur einen Hash davon, meistens noch mit einer zufälligen Zeichenkette (das sogenannte „Salz“ oder „Salt“), damit selbst bei den Accounts mit gleichen Passwörtern verschiedene Hashes entstehen. Wenn die Hash-Funktion nicht allzu mies ist, sollten die Passwörter so selbst dann noch sicher sein, falls die Datenbank in falsche Hände gerät. Will sich jemand wieder einloggen, benutzt man das gleiche Salz, wendet dieselbe Hash-Funktion auf das eingegebene Passwort an und guckt, ob derselbe Hash wie in der Datenbank entsteht.)
Die Währung
Geld ist dadurch nützlich, dass es bewegt werden kann. Wenn sich alle einig sind, muss dafür nicht mal Bargeld den Besitzer wechseln: Man schreibt einfach in einer Art Kassenbuch auf, wer wem Geld schickt. Wenn man all die Transaktionen nachvollzieht, kann man daraus schließlich erkennen, wie viel Geld jeder gerade auf seinem Konto hat. Wenn man nun statt Euro oder Dollar seine eigene Rechnungseinheit (zum Beispiel Klopfertaler) benutzt, dann ist das im Wesentlichen schon eine Währung, auch wenn sie nur in diesem Kassenbuch existiert.
Absender | Empfänger | Betrag (KT) |
Bob | Linda | 30,00 |
Hermann | Stefon | 10,00 |
Marcia | Greg | 5,00 |
Peter | Jan | 15,50 |
Bobby | Cindy | 2,50 |
Stefon | Glüso | 10,00 |
... |
Um festzustellen, dass jede Transaktion auch tatsächlich von der richtigen Person stammt und auch nicht manipuliert wurde (indem etwa aus 10 Klopfertalern 100 Klopfertaler gemacht werden oder der Empfänger geändert wird), werden die oben erklärten digitalen Signaturen eingesetzt. Zu jeder Kontonummer gehören ein öffentlicher und ein privater Schlüssel, die für die Erstellung und Überprüfung dieser Signaturen zu jeder Transaktion benutzt werden.
Aber trotzdem könnte eine Transaktion ja dann immer noch kopiert und somit mehrfach ausgeführt werden, um ein Konto zu leeren, oder? Um das zu verhindern, verweist man auf eine vorherige Transaktion, aus deren Ergebnis man das Geld nimmt, das verschickt wird. Wenn man nun diese Transaktion kopieren würde, würde das Kassenbuch feststellen, dass das Geld aus der referenzierten Transaktion bereits ausgegeben wurde.
Trans-ID | Ausgangs-Trans-ID | Empfänger | Betrag (KT) | Signatur |
10467 | 9764 10021 |
Linda (bvy6k2idp45mlqp) |
30,00 | 4fece7... |
10468 | 2468 | Stefon (fzjvwj5t09yqrkc) |
10,00 | 818eb1... |
10469 | 67 | Greg (8j88l7xkxmhyhge) |
5,00 | b08a5f... |
10470 | 2755 | Jan (4n9fsym43jx8k3z) |
15,50 | 782dff... |
10471 | 8688 | Cindy (0aabbwsr1e32g1i) |
2,50 | b1aa90... |
10472 | 10468 | Glüso (98umfjxwigu00q2) |
10,00 | d0d75b... |
... |
Damit eine Transaktion überhaupt ausgeführt werden kann, muss man die Klopfertaler natürlich auch erst haben. Sämtliche Konten („Wallets“) bei Kryptowährungen sind quasi auf Guthabenbasis und können nicht überzogen werden, daher kontrollieren das Wallet und das Kassenbuch die vorherigen Transaktionen für dieses Konto, ob überhaupt genug Guthaben vorhanden ist, um diese neue Transaktion auszuführen. Anders als Bankkonten speichern die Wallets aber keinen Kontostand, sondern nur die Schlüssel für die Adressen (Kontonummern), die man zum Versenden von Kryptogeld benutzen kann. Der Kontostand wird dann aus den Transaktionen für diese Adressen im Kassenbuch ermittelt.
Einschub: Um eine gewisse Anonymität zu gewährleisten, kann jedes Wallet viele Adressen generieren, die Ziel einer Transaktion sein können. Es wird empfohlen, jede dieser Adressen nur genau einmal zu verwenden. Für Außenstehende ist nicht erkennbar, dass diese Adressen alle zu einem Wallet gehören, solange also nicht immer dieselbe Adresse benutzt wird, fällt es schwer, Transaktionen einer einzigen Person zuzuordnen.
Was ebenfalls für viele Nutzer sehr gewöhnungsbedürftig ist: Es wird nicht nur das Geld verschoben, welches man tatsächlich ausgibt, sondern alles, was in den zuvor daran beteiligten Transaktionen empfangen wurde. Wenn man mit einer Adresse zweimal Geld empfangen hat, zum Beispiel 1,5 KT (Klopfertaler) und 0,25 KT, und dann jemandem 1,6 KT bezahlen will, werden trotzdem 1,75 KT in der Transaktion verschoben: 1,6 KT landen bei dem Empfänger, das Wechselgeld von 0,15 KT wird im Normalfall auf eine neue Adresse geschoben, die zum eigenen Wallet gehört. (Es gibt noch zusätzliche Kosten, zu denen ich später komme, daher lasse ich sie für diesen Einschub mal weg.)