Was sind Doppelausgaben?

Doppelte Ausgaben sind ein potenzielles Problem in einem digitalen Geldsystem, bei dem die gleichen Gelder gleichzeitig an zwei Empfänger gesendet werden. Ohne angemessene Gegenmaßnahmen ist ein Protokoll, das das Problem nicht angeht, grundsätzlich zum Scheitern verurteilt. Benutzer haben keine Möglichkeit zu überprüfen, ob die erhaltenen Gelder nicht bereits anderweitig ausgegeben wurden.

Bei digitalem Geld muss unbedingt darauf geachtet werden, dass bestimmte Einheiten nicht dupliziert werden können. Das gesamte System wäre gefährdet, wenn Alice 10 Einheiten empfangen, sie 10 Mal kopieren und einfügen könnte und am Ende 100 Einheiten hätte. Ebenso kann ein solches System nicht funktionieren, wenn es gleichzeitig die gleichen 10 Einheiten an Bob und Carol senden kann. Damit digitales Geld funktioniert, müssen Mechanismen vorhanden sein, die dieses Verhalten verhindern.


Wie vermeide ich Doppelausgaben?

Der zentralisierte Ansatz

Der zentralisierte Ansatz ist wesentlich einfacher umzusetzen als dezentrale Alternativen. Dabei handelt es sich in der Regel um einen Vorgesetzten, der das System verwaltet und die Ausgabe und Verteilung von Anteilen kontrolliert. Ein gutes Beispiel für eine zentralisierte Lösung des Problems der doppelten Ausgaben ist eCash von David Chaum.

Um Benutzern einen digitalen Vermögenswert auszustellen, der Geld imitiert (und damit für anonyme Peer-to-Peer-Austausche verwendet werden kann), kann eine Bank Blindsignaturen verwenden, wie der Kryptograph David Chaum in seinem 1982 erschienenen Aufsatz Blind Signatures for Untraceable Payments ausführlich beschreibt.

Wenn in einem solchen Kontext ein Benutzer (nennen wir ihn Dan) 100 Dollar in digitalem Geld erhalten möchte, muss er dies zunächst der Bank mitteilen. Wenn sie den Restbetrag auf ihrem Konto haben, generieren sie eine Zufallszahl (oder mehrere, bei kleinen Stückelungen). Angenommen, er gibt fünf Zahlen aus, denen jeweils ein Wert von 20 $ zugewiesen ist. Um zu verhindern, dass die Bank bestimmte Einheiten erkennt, vermischt Dan die Zufallszahlen, indem er zu jeder einen Blindfaktor hinzufügt.

Anschließend gibt er diese Daten an die Bank weiter, die sein Konto mit 100 Dollar belastet und eine Bestätigung unterzeichnet, dass jede der fünf Münzen gegen 20 Dollar eingetauscht werden kann. Dan kann nun die von der Bank ausgegebenen Mittel ausgeben. Er geht in Erins Restaurant und kauft ein Essen, das ihn 40 Dollar kostet.

Dan kann den Blendungsfaktor entfernen, um die mit jeder digitalen Geldnote verknüpfte Zufallszahl offenzulegen, die als eindeutige Kennung für jede Einheit dient (ähnlich einer Seriennummer). Er enthüllt zwei davon Erin, die sie nun sofort bei der Bank umtauschen muss, um zu verhindern, dass Dan sie bei einem anderen Händler ausgibt. Die Bank überprüft, ob die Unterschriften gültig sind, und schreibt Erins Konto 40 US-Dollar gut, wenn alles in Ordnung ist.

Die gebrauchten Tickets sind nun praktisch nutzlos und es müssen mehr ausgegeben werden, wenn Erin ihr neues Guthaben auf die gleiche Weise ausgeben möchte.

Das eCash-System von Chaumian könnte für private Überweisungen nützlich sein. Aber es scheitert an der Widerstandsfähigkeit, weil die Bank ein zentraler Punkt des Scheiterns ist. Eine ausgegebene Note ist an sich nichts wert, denn ihr Wert ergibt sich ausschließlich aus der Bereitschaft der Bank, sie in Dollar umzutauschen. Kunden sind der Gnade der Bank ausgeliefert und müssen sich auf deren Wohlwollen verlassen, damit das Geld funktioniert. Genau dieses Problem wollen Kryptowährungen lösen.


Der dezentrale Ansatz

Ohne einen Aufseher ist es schwieriger sicherzustellen, dass Gelder nicht doppelt in einem Ökosystem ausgegeben werden. Ebenso mächtige Teilnehmer müssen sich nach einer Reihe von Regeln abstimmen, die Betrug verhindern und alle Benutzer dazu anregen, ehrlich zu handeln.

Die größte im Bitcoin-Whitepaper vorgestellte Innovation war eine Lösung für das Problem der doppelten Ausgaben. Obwohl nicht als solche erwähnt, schlug Satoshi die Datenstruktur vor, die heute als Blockchain bekannt ist.

Eine Blockchain ist eigentlich nur eine Datenbank mit bestimmten einzigartigen Eigenschaften. Netzwerkteilnehmer (sogenannte Knoten) führen spezielle Software aus, die es ihnen ermöglicht, ihre Kopie der Datenbank mit ihren Peers zu synchronisieren. Das Ergebnis ist, dass das gesamte Netzwerk den Transaktionsverlauf überprüfen und ihn bis zum Genesis-Block zurückverfolgen kann. Da die Blockchain öffentlich zugänglich ist, ist es einfach, betrügerische Aktivitäten zu erkennen und zu verhindern, beispielsweise Transaktionen, die darauf abzielen, Ausgaben zu verdoppeln.

Wenn ein Benutzer eine Transaktion sendet, wird diese nicht sofort zur Blockchain hinzugefügt, sondern muss zunächst durch Mining in einen Block aufgenommen werden. Daher sollte der Empfänger die Transaktion erst dann als gültig betrachten, wenn sein Block zur Kette hinzugefügt wurde. Andernfalls besteht die Gefahr, dass das Geld verloren geht, da der Absender die gleichen Einheiten woanders ausgeben könnte.

Sobald die Transaktion bestätigt ist, können Einheiten nicht mehr doppelt ausgegeben werden, da das Eigentum einem neuen Benutzer zugewiesen wird und das gesamte Netzwerk dies überprüfen kann. Aus diesem Grund empfehlen viele, mehrere Bestätigungen abzuwarten, bevor eine Zahlung als gültig angesehen wird. Jeder nachfolgende Block erhöht den Aufwand zum Ändern oder Umschreiben der Zeichenfolge erheblich (was bei einem 51-Prozent-Angriff passieren kann).

Kehren wir zum Restaurant-Szenario zurück. Dan kehrt ins Restaurant zurück und dieses Mal hängt ein Bitcoin-Accepted-Aufkleber am Fenster. Ihm hat das letzte Mal geschmeckt, also bestellt er es noch einmal. Es kostet ihn 0,005 BTC.

Erin zeigt ihm eine öffentliche Adresse, an die er das Geld schicken soll. Dan sendet die Transaktion, bei der es sich im Wesentlichen um eine signierte Nachricht handelt, die besagt, dass die 0,005 BTC, die sich in Dans Besitz befanden, nun Erin gehören. Ohne große Details kann jeder, dem Dans unterzeichnete Transaktion vorgelegt wird, bestätigen, dass er tatsächlich im Besitz der Gelder war und daher befugt war, sie zu senden.

Wie bereits erwähnt, ist die Transaktion jedoch nur dann gültig, wenn sie in einem bestätigten Block enthalten ist. Das Akzeptieren unbestätigter Transaktionen ähnelt in etwa dem Akzeptieren der 40 US-Dollar in eCash aus dem vorherigen Beispiel, ohne dass diese sofort von der Bank ausgezahlt werden, sodass der Absender sie in der Zwischenzeit woanders ausgeben kann. Es wird daher empfohlen, dass Erin mindestens 6 Blockbestätigungen (etwa eine Stunde) wartet, bevor sie die Zahlung von Dan akzeptiert.


Doppelte Ausgaben und Bitcoin

Bitcoin ist sorgfältig darauf ausgelegt, Double-Spending-Angriffe zu verhindern, zumindest wenn das Protokoll bestimmungsgemäß verwendet wird. Das heißt, wenn Leute in einem Block auf die Bestätigung von Transaktionen warten, gibt es für den Absender keine einfache Möglichkeit, diese abzubrechen. Dazu müssten sie die Blockchain „invertieren“, was eine unrealistische Menge an Hashing-Leistung erfordert.

Allerdings zielen einige Double-Spend-Angriffe auf Parteien ab, die unbestätigte Transaktionen akzeptieren. Bei Käufen mit geringem Wert möchte ein Händler beispielsweise nicht darauf warten, dass Transaktionen in einen Block aufgenommen werden. Ein geschäftiges Fast-Food-Restaurant kann es sich wahrscheinlich nicht leisten, darauf zu warten, dass das Netzwerk jeden Einkauf verarbeitet. Wenn ein Unternehmen also „sofortige“ Zahlungen zulässt, besteht die Gefahr doppelter Ausgaben. Jemand kann einen Hamburger bestellen, ihn bezahlen und dann sofort den gleichen Betrag an die eigene Adresse senden. Bei höheren Gebühren besteht die Gefahr, dass diese neue Transaktion zuerst bestätigt wird und damit die vorherige ungültig macht.

Es gibt drei beliebte Methoden für doppelte Ausgaben:

  • 51 %-Angriffe: Wenn eine einzelne Entität oder Organisation die Kontrolle über mehr als 50 % der Hash-Rate erlangt und so Transaktionen ausschließen oder deren Reihenfolge ändern kann. Ein solcher Angriff ist auf Bitcoin sehr unwahrscheinlich, kam aber auch bei anderen Netzwerken vor.

  • Rassenangriffe: Zwei widersprüchliche Transaktionen werden nacheinander mit denselben Mitteln übertragen, aber nur eine Transaktion wird bestätigt. Das Ziel des Angreifers besteht darin, die Zahlung ungültig zu machen, indem er nur die Transaktion validiert, die ihm zugute kommt (z. B. das Senden des gleichen Geldbetrags an eine von ihm kontrollierte Adresse). Race-Angriffe zwingen den Empfänger dazu, eine unbestätigte Transaktion als Zahlung zu akzeptieren.

  • Finney-Angriffe: Ein Angreifer prämiert eine Transaktion in einem Block, ohne sie sofort an das Netzwerk zu senden. Stattdessen gibt er dieselben Münzen in einer anderen Transaktion aus und sendet nur seinen zuvor geschürften Block, was die Zahlung ungültig machen kann. Finney-Angriffe erfordern eine bestimmte Abfolge von Ereignissen und setzen außerdem voraus, dass der Empfänger unbestätigte Transaktionen akzeptiert.

Wie wir sehen können, verringert ein Händler, der auf Blockbestätigungen wartet, die Wahrscheinlichkeit, Opfer doppelter Ausgaben zu werden, erheblich.


Schlussfolgern

Durch doppelte Ausgaben kann ein Benutzer ein elektronisches Geldsystem für seine eigenen Zwecke manipulieren und dieselben Gelder mehr als einmal verwenden. Traditionell verhinderte der Mangel an adäquaten Lösungen für das Problem weitere Fortschritte.

Glücklicherweise bietet der Einsatz von Blindsignaturen jedoch eine attraktive Lösung für zentralisierte Finanzsysteme. Später führte die Entwicklung von Proof-of-Work-Mechanismen und der Blockchain-Technologie zu Bitcoin, einer Form einer dezentralen Währung, die wiederum Tausende anderer Kryptowährungsprojekte inspirierte.