Funktionsweise
D
ie Idee einer Kryptowährung ist ein Zahlungssystem, welches nicht auf Vertrauen beruht, sondern auf mathematischen Beweisen, und dabei von niemandem kontrolliert wird. In diesem Kapitel folgen wir den Kernideen einer Kryptowährung und gehen dabei auftretenden Problemen gemeinsam auf den Grund.
Kassenbuch
Stellen Sie sich eine Gruppe von drei Menschen vor, die sich gegenseitig untereinander Geld leihen bzw. sich gegenseitig für etwas bezahlen. Es werden immer wieder Kleinbeträge zwischen den Beteiligten ausgetauscht.
Das Geschäft läuft immer besser und die Drei tauschen immer öfter untereinander Geldbeträge. Um den Arbeitsaufwand zu verringern, kommen die drei klugen Köpfe auf die Idee, statt die Transaktion selbst auszuführen, diese einfach in ein Kassenbuch zu schreiben und später abzurechnen. Bei einem Netzwerk von drei Benutzern könnten dann die einzelnen Transaktionen wie folgt aussehen: Benutzer 1 gibt Benutzer 2 300 $, Benutzer 3 gibt Benutzer 1 50 $, Benutzer 2 gibt Benutzer 1 20 $. Wofür die Benutzer das Geld ausgeben, bleibt ihnen überlassen.
Das Kassenbuch muss öffentlich sein und jeder Benutzer des Netzwerkes muss die Möglichkeit besitzen, dem Kassenbuch eine Zeile hinzuzufügen. Später werden sich dann zu einem vereinbarten Zeitpunkt das Kassenbuch und die Transaktionen zusammen von den Nutzern angeschaut und abgerechnet. Benutzer 1 hat hier beispielsweise mehr Geld ausgegeben, als er bekommen hat und muss daher die Differenz von 230 $ in den vorhandenen Geldpool einzahlen. Auch Benutzer 3 hat über seine Verhältnisse gelebt und 50 $ ausgegeben, ohne eine Zahlung erhalten zu haben. Benutzer 2 ist hier der Einzige, der einen hohen Geldbetrag von 300 $ erhalten und dabei nur 20 $ ausgegeben hat. Er kann sich glücklich schätzen und bekommt 280 $ aus dem Geldpool - genau den Betrag, den die anderen beiden Benutzer einzahlen mussten.
Signaturen
So weit, so gut, doch was hält einen findigen Benutzer davon ab, in das Kassenbuch eine Transaktion zu seinen Gunsten einzutragen? Benutzer 1 schreibt einfach: Benutzer 2 gibt Benutzer 1 500 $. Falls das System nicht nur auf Vertrauen basieren soll, muss hierfür eine Lösung erdacht werden. Der einfachste Weg ist es, jede Transaktion durch eine Unterschrift zu verifizieren, stellen die Drei fest. Jeder Benutzer muss also von nun an jede Transaktion, bevor sie als gültig anerkannt werden kann, unterschreiben. Selbstverständlich sollte die Unterschrift nicht von den anderen Benutzern fälschbar sein.
Da die drei Nutzer aus unterschiedlichen Ecken der Welt kommen, beschließen sie, Computer zu nutzen, um ihre Transaktionen abzuwickeln. Das bedeutet, sie müssen ihre Transaktionen von nun an digital signieren. Aber werden digitale Unterschriften auch den hohen Sicherheitsanforderungen der Drei gerecht? Vielleicht könnte ein findiger Benutzer den Code, aus dem diese digitale Unterschrift entspringt, einfach kopieren und hinter eine Transaktion im Kassenbuch einfügen. Eine weitere Lösung musste her.
Schlüssel
Hier kommen die zwei Schlüssel ins Spiel, die jedem Benutzer der Kryptowährungen zugeteilt werden. Der erste Schlüssel ist privat und nur dem einzelnen Benutzer des Netzwerkes bekannt. Aus ihm wird zuerst eine für jede Transaktion einzigartige Signatur in Abhängigkeit zu den Daten innerhalb der Transaktion selbst errechnet. Auf die reale Welt angewandt würde dies bedeuten, dass alle Ihre Unterschriften auf jedem Dokument völlig anders aussehen würden und trotzdem Gültigkeit besäßen. Des Weiteren bedeutet dies, dass eine Veränderung der Daten auf dem Dokument auch automatisch die Signatur selbst verändern würde. Damit verliert dann das ganze Dokument seine Gültigkeit, da es nicht mehr vom Benutzer unterzeichnet ist. Auf eine Transaktion bezogen heißt dies, dass nur der Urheber der Transaktion selbst mit dieser einzigartigen Signatur unterschreiben kann, da nur er im Besitz des privaten Schlüssels ist.
In einem zweiten Schritt wird überprüft, ob die Unterschrift des Benutzers mit dieser Transaktion Gültigkeit besitzt. Dabei wird der zweite Schlüssel verwendet. Mit ihm kann von jedem Benutzer überprüft werden, ob der Besitzer bei einer Transaktion im Besitz seines privaten Schlüssels ist, ohne den privaten Schlüssel selbst gesehen zu haben. Der zweite Schlüssel ist öffentlich und wird aus dem privaten Schlüssel generiert. Mit ihm wird, in Abhängigkeit zu der Transaktion und der Signatur, festgestellt, ob die Transaktion als wahr anerkannt werden kann. Die Signatur kann also nicht mehr einfach von unserem findigen Benutzer 1 kopiert und unter eine neue Transaktion gesetzt werden, da diese nicht zusammenpassen würden und er nicht im Besitz des privaten Schlüssels ist, um eine passende Unterschrift zu errechnen.
Zusammengefasst wird aus dem ersten Schlüssel in Abhängigkeit zur Transaktion eine digitale unfälschbare Signatur berechnet. Im zweiten Schritt wird diese Transaktion über den öffentlichen Schlüssel verifiziert und letztendlich an alle Benutzer des Netzwerks gesendet.
Sicherheit
Nun könnte der findige Benutzer 1 vielleicht wiederum auf die ruhmreiche Idee kommen, sich einfach eine Transaktion und einen öffentlichen Schlüssel zu nehmen und damit die richtige Signatur zu erraten. Er probiert einfach solange Unterschriften auf einem Dokument aus, bis eine passt. Doch müsste der Benutzer 1 großes Durchhaltevermögen beweisen und sich einen riesigen Vorrat an Kugelschreibern anlegen, denn es existieren bei einer 256-Bit verschlüsselten Signatur 2^256 verschiedene Möglichkeiten, wie diese Unterschrift aussehen könnte. Diese unvorstellbar gigantische Zahl besitzt über achtzig Stellen. Bei einer als wahr verifizierten Transaktion kann sich ein Benutzer also absolut sicher sein, dass der Urheber im Besitz des privaten Schlüssels war. Eine Fälschung der Transaktion unter falschem Namen wird somit völlig ausgeschlossen. Benutzer 1 hat Pech gehabt.
Dezentralisierung
Nun gut, die drei Benutzer einigen sich darauf, ihre Transaktionen über das Zwei-Schlüssel-System zu verifizieren und diese in das Kassenbuch einzutragen. Doch tritt hierbei ein weiteres Problem auf: Wo sollte das Kassenbuch gespeichert werden? Auf einem einzigen Server wäre es vielleicht zu unsicher vor Angriffen oder Manipulation. Die Drei wollten außerdem ihr Kassenbuch nicht in die Hände Dritter legen. Die Lösung liegt nahe, das Kassenbuch einfach auf jedem der Computer der Nutzer zu speichern. Jeder Benutzer bekommt eine Version des Kassenbuches. Doch das Kassenbuch muss auch bei jedem Nutzer aktualisiert werden, falls eine neue Transaktion stattfindet. Kein Benutzer kann sich hierbei allerdings sicher sein, dass die Transaktionen, die er empfängt, auch von den anderen Benutzern empfangen wurden. Stellen Sie sich die Transaktionen als einen Werbebrief vor, der Ihnen ein Fest ankündigt. Absolut sicher, dass auch andere diesen Brief empfangen haben, können Sie sich nicht sein. Und falls auch andere diesen Brief erhalten haben, können Sie nicht sagen, in welcher Reihenfolge. Sie können sich das Chaos vorstellen, in der sich die Benutzer befinden. Dies war ein Hauptproblem der Kryptowährungen: Jeder musste die aktuelle Version des Kassenbuches besitzen und dabei auch sicher sein, dass die anderen Benutzer alle dieselbe Version besitzen.
Arbeitsnachweis
Bei Kryptowährungen wurde sich dabei auf einen Arbeitsnachweis (siehe Kapitel: Proof of Work) geeinigt. Man vertraut also nur dem Kassenbuch, in dem die meiste Arbeit steckt. Wenn ein Benutzer nun eine Transaktion signiert, wird sie an alle Teilnehmer gesendet und muss verifiziert werden. Die Nutzer sammeln die neuesten Transaktionen in sogenannten Blöcken und berechnen dann mithilfe mathematischer Funktionen die Legitimität der Transaktionen. Da diese aufeinander basieren und in einer Kette gesammelt werden, würde für eine Manipulation der Kette ein hoher Arbeitsaufwand notwendig werden (siehe Kapitel: 51 %-Attacke). Dies ist ein weiterer bedeutender Grund, welcher Kryptowährungen so sicher macht.
Transparenz
Wir wissen also bereits, dass das Kassenbuch bzw. die Transaktionskette dezentral und anonym von den Benutzern des Netzwerkes gelagert wird. Aus dieser Vorgehensweise resultiert ein neues Problem. Es muss sichergestellt werden, dass eine Transaktion auch wirklich dem Vorgängerblock zugeordnet werden kann. Außerdem kann sich ein Empfänger einer Transaktion nicht sicher sein, ob derselbe Betrag nicht schon vorher an einen anderen Ort transferiert wurde (engl.: Double Spending). Dieses Problem wird mit der Transparenz der Kryptowährungen gelöst. Alle Benutzer des Netzwerkes sind in der Lage, jede Transaktion zurückzuverfolgen und eigenständig zu überprüfen, da diese öffentlich zugänglich und aufeinander basierend im Kassenbuch eingetragen sind.
Zusammenfassung
Die drei Benutzer einigen sich also bei der Ausführung von Transaktionen auf ein Protokoll:
- Neue Transaktionen müssen signiert und an die anderen Benutzer gesendet werden.
- Diese werden von allen Benutzern empfangen und auf den einzelnen Seiten des Kassenbuches eingetragen.
- Die neuen Transaktionen werden auf den Seiten des Kassenbuches von den einzelnen Benutzern überprüft.
- Sollten die Seiten des Kassenbuches legitimiert werden, sendet ein Benutzer seine Seite an alle anderen Benutzer.
- Die anderen Benutzer nehmen die legitimierte Seite daraufhin in ihr Journal auf.
Dies ist die grobe Arbeitsweise von Transaktionen...