Von Klaus Meyer-Wegener
Vorbemerkung von Hartmut Wedekind
Prof. Klaus Meyer-Wegener und seine Mannschaft haben diesen Blog in Juni 2015 durch ein Geburtstags-Geschenk initiiert. Heute können wir laut Statistik mit seinem Beitrag über „Blockchain“ den 60. Artikel registrieren. Das sind 1,5 pro Monat bei ca. durchschnittlich 50 Zugriffen (stark schwankend) pro Tag. Für journalistische Amateure, die Freude am Schreiben haben, langt das. Interessante Themen zu finden, aber keine Hypes, die bald wieder vergehen, ist das Problem eines Blogs mit dem Generalthema „Unsere Zeit in Gedanken fassen“. „Blockchain“ ist ein solches interessantes Thema aus dem Gebiet der verteilten Datenbanken, ein Fachgebiet, auf dem Prof. Meyer-Wegener u.a. seit Langem tätig ist und über große Erfahrungen verfügt.. Das Thema hat eine heute noch kaum abschätzbare praktische Bedeutung, auch jenseits von berühmten Kryptowährungen.
Man erkennt sofort schon in der Einleitung: Das Zentralproblem ist im Rechnernetz „Vertrauen schaffen“. Man kann das auch anders formulieren: Gewährung von Sicherheit gegen Angriffe von außen, oder einfacher: Vertrauen durch Sicherheit (security)
Einleitung
Es gibt aktuell sehr viel Wirbel um die Blockchain. Manche betrachten sie als eine Art Allheilmittel für viele Probleme der weltweiten Computer-Netze. Dieser Beitrag versucht, so nüchtern wie möglich zu klären, was man damit machen kann und was auch nicht.
Es ist gar nicht so einfach, die Blockchain von ihrer wichtigsten Anwendung zu trennen: den sog. Kryptowährungen. Die bekannteste davon ist die Bitcoin, aber inzwischen gibt es schon etliche weitere. Sie benutzen die Blockchain, ergänzen sie dabei aber um verschiedene Verfahren, die das Vertrauen in die darin gespeicherten Daten erhöhen sollen. Man bezeichnet das auch als „Distributed Ledger“ (verteiltes Kassen- oder Hauptbuch), was die Bedeutung und auch die Zuverlässigkeit suggerieren soll. Die muss allerdings noch erarbeitet werden.
Der berühmte Aufsatz von „Satoshi Nakamoto“ (bis heute weiß man nicht, wer sich hinter diesem Pseudonym verbirgt) führt beides zugleich ein. Man sollte ihn eher verstehen als einen Vorschlag der Art: „So könnte es gehen“ und nicht als eine exakte Anleitung. Es geht nur darum, einen Versuch zu machen, das Problem des Vertrauens in einen Datenbestand ohne eine zentrale Instanz zu lösen. Auf den damit verbundenen Aufwand hat man erst einmal nicht geachtet.
Zentrale Instanzen lösen das Problem ja jetzt schon, aber man ist ein wenig misstrauisch geworden. Gemeint sind Banken und Behörden wie das Wahlamt oder das Grundbuchamt, und es gibt weltweit genug Fälle, in denen beide das in sie gesetzte Vertrauen enttäuscht haben. Sie waren z.B. nicht neutral, sie sind auch angreifbar mit massiven Auswirkungen, es hat Machtmissbrauch gegeben und bei vielen gleichzeitigen Anfragen können sie zum Engpass werden. Aus diesen Gründen sucht man nach dezentralen Alternativen.
Nun ist das in der Informatik nicht neu. Ein dezentrales System nutzen wir fast alle jeden Tag: elektronische Post. Hier gibt es kein zentrales „Postamt“ mehr, sondern nur noch die vielen Mail-Server bei den sog. Providern oder in Organisationen, die sich nach sehr genau definierten Regeln („Protokollen“) miteinander unterhalten. Versuche von Firmen, das wieder zu zentralisieren (siehe z.B. die Mail-Funktionen in Facebook oder Google) sind zum Glück eher eine Randerscheinung geblieben. Etwa zwischen 2002 und 2007 gab es dann eine Welle der allgemeinen Entwicklung von Peer-to-Peer-(P2P-)Systemen, also von Systemen unter Gleichen, die eine Alternative zu den zentralen Systemen bilden sollten. Gerade im Bereich von Datenbanken, die verlässliche Information bereitstellen sollen, ist das aber nicht erfolgreich gewesen. Um wirklich die Garantien geben zu können, die zentrale Datenbanken heute ganz selbstverständlich bieten (Eindeutigkeit bei Geld auf dem Konto, bei einer Flugreservierung und auch bei einem Platz im Theater), mussten die P2P-Systeme so aufwändige Protokolle benutzen und u.U. auch so lange Zeit auf Bestätigungen warten, dass es einfach nicht praktikabel war. Vielleicht hat auch das Herrn „Nakamoto“ gereizt, doch noch eine Art Lösung zu finden.
Ein großes Problem bei P2P-Systemen ist, dass sich unter den vielen Teilnehmern (die eben alle gleiche Rechte und Pflichten haben), auch solche mit bösen Absichten befinden können. Außerdem können nicht nur ständig neue Teilnehmer hinzukommen, die erst einmal Rechen- und Speicherressourcen mitbringen und dadurch bei der Gesamtaufgabe helfen können, sondern es können auch genauso gut Teilnehmer jederzeit wieder verschwinden, so dass sie ihren Teil der Verpflichtung einfach nicht mehr erfüllen. Das nennt man im Jargon „Churn“ – das englische Wort für Abwanderung. Mit beiden Problemen muss sich auch die Blockchain auseinandersetzen. Insbesondere muss sie sicherstellen, dass Widersprüche in den Daten, die sich bei Betrugsversuchen ergeben, ausgeräumt werden können.
Daneben gibt es noch eine ganze Reihe weiterer Probleme:
- Das Netz wird nicht synchronisiert, weil das zu aufwändig wäre, so dass verschiedene Transaktionen gleichzeitig an den teilnehmenden Computern („Knoten“ des Netzes) eingegeben werden können.
- Es kann dabei auch sich widersprechende Transaktionen geben.
- Eine globale Reihenfolge ist nicht zu bestimmen.
- Man muss Versuche, Dinge zweimal zu verkaufen oder Geld zweimal auszugeben, erkennen und verhindern.
- Neue Transaktionen können von sich widersprechenden Transaktionen abhängen, ohne das zu wissen.
Wie kann nun eine Lösung aussehen, die all das zumindest in einer hinreichend großen Zahl von Fällen verhindert?
Ansatz
Zunächst einmal ist die Blockchain eine verteilte Datenbank mit voller Replikation, das heißt, jeder Teilnehmer (jeder „Peer“) hat alle Daten auch bei sich. Das bedeutet einerseits, dass man sich immer fehlende Daten von anderen Peers holen kann (die man dann noch verifizieren muss), es bedeutet andererseits aber auch, dass man bei wirklich großen Systemen zum einem beträchtlichen Speicherplatz auf seinem Rechner bereitstellen muss und dass man zum anderen auch Änderungen (sog. „Transaktionen“) immer an alle anderen melden muss, was zu erheblichem Nachrichtenaufkommen im Netz führt. Dabei ist noch nicht einmal sicher, dass es alle anderen auch wirklich erhalten, und auf deren Bestätigung will man keineswegs warten (obendrein müsste man auch klären, was im Moment gerade „alle anderen“ überhaupt sind), aber versuchen muss man es. In der Sprache der Rechnernetze nennt man das einen „Broadcast“, so wie Rundfunk und Fernsehen im Englischen, denn die schicken ihre Sendungen ja auch an „alle“.
Die Daten sollen einen Tatbestand oder eine Verpflichtung feststellen. Bei den Kryptowährungen ist das der Besitz oder die Weitergabe eines Geldbetrags, aber es kann auch der Besitz einer Immobilie oder eines anderen Gegenstands sein. Ganz wichtig ist, dass das System nicht nur stabile Zustände abbilden, sondern auch Veränderungen nachvollziehen kann. Damit diese Veränderungen nachvollziehbar und überprüfbar bleiben, müssen sie auf jeden Fall gespeichert werden. Dann kann man sich aber die Zustände sparen, denn sie ergeben sich aus den Änderungen. Einzig der Ausgangszustand muss vereinbart werden. Das kann entweder einfach eine Null bei allen sein oder bei Gegenständen der erste Besitzer. Wie oben schon vermerkt, bezeichnet man die Änderungen in der Blockchain als „Transaktionen“.
Unterschriften
Nun geht es also darum, die Transaktionen zuverlässig zu dokumentieren, ohne eine zentrale Instanz (einen „Notar“), deren Aussage dann immer die entscheidende wäre. Wenn sich also irgendetwas ändert, wird das an alle weitergemeldet („Broadcast“, siehe oben). Dazu muss man sich authentifizieren, man muss also (digital) unterschreiben, damit eindeutig festgestellt werden kann, wer da etwas meldet. Sonst könnte ja jeder irgendetwas melden. Dafür gibt es zum Glück längst ein Verfahren, das nach und nach auch in der E-Mail-Kommunikation und beim Zugriff auf Web-Seiten eingesetzt wird und das sogar schon juristische Bedeutung erlangt hat: das RSA-Kryptosystem. Dazu lässt man sich mit geeigneter Software ein Paar von Schlüsseln generieren. Einer davon bleibt geheim, der andere ist öffentlich. Was man mit dem geheimen Schlüssel verschlüsselt, kann mit dem öffentlichen entschlüsselt werden und umgekehrt. Will man also etwas unterschreiben, verschlüsselt man mit seinem geheimen Schlüssel. Dann kann jeder es mit dem dazu gehörenden öffentlichen Schlüssel auspacken und weiß dann genau, dass es nur von dem einen Besitzer des geheimen Schlüssels stammen kann. Will man dagegen eine Geheimnachricht an jemanden schicken, so verschlüsselt man die mit dessen öffentlichem Schlüssel und kann sicher sein, dass nur er es mit seinem geheimen auspacken kann. Das kann man sogar kombinieren, also erst einmal unterschreiben und danach noch mit dem öffentlichen Schlüssel des Empfängers in ein unlesbares Bitmuster verwandeln.
Tatsächlich ist das sogar noch etwas mehr als eine Unterschrift und deshalb noch schwieriger zu fälschen: Man bezieht ja immer die Aussage, die Nachricht mit ein, unterschreibt also jeden „Brief“ ein bisschen anders.
In der Blockchain kann man damit sogar anonym bleiben, denn das einzige, was die übrigen Teilnehmer von einem kennen müssen, ist der öffentliche Schlüssel (und das sind z.B. 256 Bits, also ein unverständliches Muster von Nullen und Einsen). Was immer sich damit entschlüsseln lässt, kann nur vom selben Teilnehmer kommen, denn er hat es mit demselben geheimen Schlüssel verschlüsselt. Allerdings ist nicht gefordert, dass ein Teilnehmer nur ein solches Schlüsselpaar verwendet. Wer noch mehr Anonymität haben möchte, verwendet mehr als ein Schlüsselpaar, bei der einen Transaktion mal das eine, bei der nächsten dann mal das andere. Es ist sogar möglich, bei jeder Transaktion ein neues Schlüsselpaar zu verwenden, wenn man den Aufwand nicht scheut, seine ganzen geheimen Schlüssel so zu verwalten, dass man immer noch weiß, wozu man sie genutzt hat.
So kann man also Transaktionen melden, die dann auch immer eindeutig einem Beteiligten zugeordnet werden können. Aber gilt dann auch schon, was in der Transaktion als Zustandsänderung verbreitet wird? Es kann ja mal eine Nachricht verloren gehen. Oder einer der Beteiligten hat böse Absichten und verschickt es gar nicht an alle. Oder er verschickt eine falsche Transaktion an alle anderen, was man als Betroffener erst einmal gar nicht merkt. Er versucht vielleicht, einen Gegenstand noch einmal zu verkaufen und dafür wieder (reales) Geld zu bekommen. Das nennt man im Jargon (und vor allem bei den Kryptowährungen) „double spend“, also die mehrfache Weitergabe. Wann kann man sicher sein, dass der neue Zustand (typischerweise Besitz) tatsächlich gilt, so dass man auch dafür bezahlen kann (und sollte)?
Man könnte theoretisch warten, bis alle zurückmelden, dass sie die Transaktion gespeichert haben, aber zum einen weiß man ja nicht, wer „alle“ im Moment gerade sind, und zum anderen dauert das viel zu lang.
Proof of Work (Arbeitsnachweis)
Nun kommen die Blöcke ins Spiel. Sie dokumentieren Transaktionen, davon mehrere auf einmal, durchaus auch 1000 oder 2000, damit der Aufwand reduziert wird. Wenn nun aber einfach jeder Beteiligte Blöcke erzeugen könnte, wäre noch nichts gewonnen. Also darf immer nur einer einen neuen Block erzeugen, und das sollte keiner der gerade Betroffenen sein – oder nur zufällig, mit anschließender Kontrolle durch alle anderen. Das Recht, einen neuen Block zu erzeugen, erhält man durch substanziellen Ressourceneinsatz. Das wird Arbeit genannt, und man erbringt einen Arbeitsnachweis, englisch „Proof of Work“. Bei Bitcoin heißen die Beteiligten, die genug Ressourcen dafür aufwenden können, etwas unglücklich „Miner“, also Bergleute, weil sie sozusagen neues Geld schürfen. Das ist aber nur wieder eine der oft eher missglückten Analogien, an denen die Informatik so reich ist.
Die Fleißarbeit, die bei der Bitcoin zur Schaffung eines neuen Blocks führt, beruht auf dem wiederholten Aufrufen einer sogenannten kryptologischen Hash-Funktion (z.B. SHA 256), die ein Ergebnis mit ganz bestimmten Eigenschaften erzeugen muss. Diese kryptologischen Hash-Funktionen haben die Eigenschaft, dass sie ein Bitmuster (das ist hier der Blockinhalt) als Eingabe benutzen und es auf ein anderes Bitmuster abbilden, wobei sie die Bits dermaßen „durcheinander wirbeln“, dass man vom zweiten Bitmuster niemals (bzw. nur mit gigantischem Aufwand, nämlich durch Probieren) auf das erste Bitmuster zurückschließen kann. Die eine Richtung ist also ganz einfach, die andere aber furchtbar schwierig. Nun war ja die Aufgabe, einen neuen Block mit Transaktionen zu erzeugen und der einzige zu sein, der das schafft. Die Fleißarbeit, die sich „Nakamoto“ für die Bitcoin ausgedacht hat (und es gibt inzwischen längst schon andere und es wird in der Zukunft noch mehr geben), ist, dass das zweite Bitmuster mit einer bestimmten Anzahl an Nullen beginnen muss, z.B. 40. Da man eben von zweiten Bitmuster nicht auf das erste zurückschließen kann, weiß man nicht, was im Block stehen muss, damit die kryptologische Hash-Funktion auch wirklich ein zweites Bitmuster erzeugt, das am Anfang die gewünschte Zahl von Nullen hat. Ein Teil des Blocks ist durch die Transaktionen ja ohnehin schon vorgegeben. Das ergänzt man nun noch um eine Zahl, die man verändern darf, eben mit dem Ziel, diese Nullen zu produzieren. Diese Zahl wird „nonce“ genannt, was im Englischen „für den augenblicklichen Zweck“ bedeutet. Sie wird ja auch wirklich nur für diesen einen Zweck benötigt. Wie findet man nun die richtige „nonce“? Durch Probieren! Man beginnt z.B. mit der Null, wendet die kryptologische Hash-Funktion auf das Bitmuster von Bockinhalt und „nonce“ zusammen an und betrachtet das Ergebnis. Hat es zufällig die geforderte Anzahl von Nullen am Anfang, ist man fertig! So schnell klappt das aber allermeistens nicht. Also macht man weiter mit der 1, dann mit der 2 usw. Da das beliebig lange dauern kann, nennt man es auch eine „Mini-Lotterie“. Tatsächlich dauert es praktisch immer sehr lange und es braucht sehr große Computer, diese Zahl zu finden. Es gibt inzwischen auf der Welt sog. Computer-Farmen, in denen Tausende von Rechnern nichts Anderes tun, als Transaktionen aus dem Netz zu sammeln, sie in einen Block zu packen und dann zu versuchen, die „nonce“ dazu zu finden. Nur einer von denen gewinnt! Die anderen müssen erleben, dass ihr Block als ungültig verworfen wird.
Wer gewinnt? Die besten Chancen hat der, der zuerst fertig wird. Er muss dann seinen Block wieder per Broadcast an alle anderen verschicken – siehe oben. Das erhöht die Last auf den weltweiten Rechnernetzen noch einmal. Was machen die Empfänger mit all den Blöcken, die sie dadurch empfangen? Zum einen überprüfen sie die „nonce“. Das ist in dieser Richtung ganz einfach, weil die kryptologische Hash-Funktion nur einmal angewendet werden muss. Stimmen dann die Nullen am Anfang, ist der Block insofern erst einmal gültig. Was aber, wenn Blöcke mit widersprüchlichen Transaktionen eintreffen und bei allen die „nonce“ stimmt? Da hat halt auch ein Betrüger mal lang genug probiert.
Nun kommt noch der zweite Teil des Wortes „Blockchain“ ins Spiel: die Kette. In einen Block wird außer den Transaktionen und der „nonce“ auch noch der Hash-Wert, also das zweite Bitmuster von oben, mit abgespeichert. Dadurch erkennt man, auf welchem vorherigen Zustand die Transaktionen dieses Blocks aufbauen. Und jeder Teilnehmer akzeptiert von allen Blöcken, die er so bekommt, nur denjenigen mit der längsten Vorgänger-Kette, weil in dem sozusagen die meiste Arbeit steckt. Wer also einen betrügerischen Block einschleusen will, muss von dem aus die Arbeit fortsetzen und selbst die Kette immer mehr verlängern. Dazu muss er bei jeder Arbeit schneller sein als die anderen, was kaum jemand durchhalten kann. Zur ganzen Wahrheit gehört aber auch, dass genau hier eine seit „Nakamoto“ bekannte Grenze des Verfahrens erreicht ist: „Das System ist sicher, so lange die ehrlichen Knoten des Netzes zusammen mehr Rechenleistung aufbieten können als jede kooperierende Gruppe von Angreifern.“ Das ist sehr wahrscheinlich, aber eben nicht garantiert.
Warum ist es für einen ehrlichen Teilnehmer attraktiv, einen neuen Block zu erzeugen? Er hat ja zunächst einmal sehr hohe Kosten, um die Rechenleistung bereitzustellen. Tatsächlich gibt es für ihn eine kleine Belohnung, die auch noch mit in den Block geschrieben wird: eine Gebühr. Bei den Kryptowährungen ist das sozusagen eine neu geprägte Münze. Bei der Bitcoin wurden bis November 2012 50, bis Juli 2016 25 und seitdem 12,5 Bitcoins mit jedem neuem Block ausgezahlt. 2020 soll es sich wieder halbieren auf 6,25.
Bei der Bitcoin ist auch geregelt, dass nur alle 10 Minuten ein neuer Block entstehen soll. Kommt eine Zeit lang der jeweils nächste Block früher an (weil immer stärkere Rechner bei den Teilnehmern eingesetzt werden), wird der Schwierigkeitsgrad ein wenig erhöht: Die geforderte Zahl von Nullen am Anfang wird erhöht. Mit hoher Wahrscheinlichkeit dauert es danach wieder ein wenig länger. Da auch Teilnehmer verschwinden können, kann es auch dazu kommen, dass die Erzeugung des nächsten Blocks wieder länger dauert. Dann werden die Nullen wieder reduziert. Andere Kryptowährungen haben andere, meist kürzere Zeitintervalle, weil dann die Bestätigung einer Transaktion nicht so lange dauert.
Man kann das alles übrigens im World-wide Web unter blockchain.com beobachten. Ein wichtiger Teil des Konzepts ist ja, dass alles öffentlich ist – zumindest bis zu den öffentlichen Schlüsseln der Teilnehmer.
Die Blockkette kann also nie mehr verändert, sondern nur noch ergänzt werden, wie die Bücher der klassischen Buchhaltung: niemals radieren, immer nur durchstreichen. Das soll nun für in Computern gespeicherte Daten gelten, die man ja sonst ganz einfach ändern oder löschen kann, und das nahezu spurenlos.
Nun werden viele Teilnehmer bei der Mini-Lotterie der Erzeugung neuer Blöcke weder mitmachen können noch wollen, sondern einfach nur die „Notardienste“ nutzen wollen. Sie müssen also, nachdem sie eine unterschriebene Transaktion in die Welt hinaus gesandt haben, die eintreffende Blöcke betrachten und sortieren. Transaktionen sind nur gültig, wenn sie in gültigen Blöcken enthalten sind. Blöcke sind nur gültig, wenn die „nonce“ stimmt, sie keine Transaktionen enthalten, die früheren Transaktionen widersprechen, und sie am Ende der längsten Kette hängen. Da man nicht weiß, in welcher Reihenfolge Blöcke ankommen, muss man evtl. ein wenig warten, bis man die Kette zusammensetzen und die längste auswählen kann. Als Faustregel gilt, dass eine Transaktion sicher ist, wenn nach ihrem Block mittlerweile noch sechs weitere Blöcke an die gültige Kette angehängt wurden. Erst dann hat man also das Geld oder das Grundstück sicher. Mit so einem Verfahren kommt aber niemals auf die Geschwindigkeit, die heutzutage jede Kreditkartenfirma leisten muss.
Schluss
Das soll an dieser Stelle genügen. Ich habe den Versuch gemacht, den Kern der Blockchain zu beschreiben, so wie „Nakamoto“ ihn konzipiert hat. Es gibt inzwischen unzählige Varianten, Verbesserungen, Optimierungen und Weiterentwicklungen. Wie immer, wenn sich mit etwas Geld verdienen lässt, wird die menschliche Kreativität entfesselt. Interessant ist z.B. der Zweig der privaten Blockchains, z.B. für Unternehmen, bei denen die Menge der Teilnehmer kontrolliert wird, man aber trotzdem von der Dezentralität profitieren kann.
Gar nicht so leicht ist es, dass in allgemeiner Sprache zu beschreiben, was die Blockchain unabhängig von den Kryptowährungen eigentlich leistet. Ich versuche es trotzdem einmal: Man dokumentiert in ihr öffentlich eine anonyme Verpflichtung, die einen (ebenfalls anonymen) anderen Teilnehmer einbeziehen kann. Ist das ein Vertrag? Eher nicht, da fehlen zu viele Möglichkeiten wie z.B. ein Rücktritt. Agiert sie wie ein Notar? Könnte sein, aber das sollten die Juristen beurteilen. Kann man damit ein Standesamt realisieren? Vermutlich geht das nicht anonym, aber dann ergänzt man eben die Namen.
Bitcoins werden gehandelt, d.h. man kann sie kaufen. Der Preis wird durch Angebot und Nachfrage bestimmt und schwankt deshalb wie ein Aktienkurs, derzeit noch sehr stark. Ende 2017 kostete eine Bitcoin 15.000 USD, inzwischen sind es nur noch 6.500 – der aktuelle Kurs findet sich auf blockchain.com. Angesichts dieser Zahlen werden längst auch Bruchteile gehandelt; man kann also 0,005 Bitcoin kaufen – wenn man möchte. Bankfachleute haben wiederholt festgestellt, dass es sich nicht um eine Währung handelt, weil essentielle Bestandteile fehlen. Andererseits ist die Technik noch sehr neu, und sie wird massiv weiterentwickelt. Man darf durchaus gespannt sein, was sich am Ende durchsetzen wird.
Quellen
Nakamoto, Satoshi: Bitcoin: A Peer-to-Peer Electronic Cash System. Online, Nov. 2008. – URL: http://www.bitcoin.org/bitcoin.pdf
Wikipedia: Blockchain ( https://de.wikipedia.org/wiki/Blockchain ) und Bitcoin ( https://de.wikipedia.org/wiki/Bitcoin )
YouTube-Video von 3Blue2Brown zur Blockchain ( https://www.youtube.com/watch?v=bBC-nXj3Ng4 ) mit sehr anschaulichen Animationen, Englisch mit deutschen Untertiteln