Was ist Doppelausgabe?

Doppelausgaben sind ein potenzielles Problem in einem digitalen Bargeldsystem, in dem derselbe Betrag gleichzeitig an zwei Empfänger gesendet wird. Ohne angemessene Gegenmaßnahmen wird ein Protokoll, das das Problem nicht löst, grundsätzlich untergraben – Benutzer haben keine Möglichkeit zu überprüfen, ob die erhaltenen Beträge nicht bereits anderswo ausgegeben wurden.

Wenn es um digitales Bargeld geht, ist es von größter Bedeutung, sicherzustellen, 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 und am Ende 100 Einheiten besitzen könnte. Ebenso kann ein solches System nicht funktionieren, wenn sie dieselben 10 Einheiten gleichzeitig an Bob und Carol senden kann. Damit digitales Geld funktionieren kann, müssen also Mechanismen vorhanden sein, die dieses Verhalten verhindern.


Wie können Doppelausgaben verhindert werden?

Der zentralisierte Ansatz

Der zentralisierte Weg ist wesentlich einfacher umzusetzen als dezentrale Alternativen. Dabei wird das System normalerweise von einem Aufseher verwaltet, der die Ausgabe und Verteilung der Einheiten kontrolliert. Ein gutes Beispiel für eine zentralisierte Lösung des Problems der Doppelausgabe ist eCash von David Chaum.

Um Benutzern einen digitalen Vermögenswert auszugeben, der Bargeld imitiert (und anonym und Peer-to-Peer ausgetauscht 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 $ in digitalem Bargeld erhalten möchte, muss er dies zunächst der Bank mitteilen. Vorausgesetzt, er hat das nötige Guthaben auf seinem Konto, generiert er dann eine Zufallszahl (oder mehrere, bei kleineren Beträgen). Nehmen wir an, er generiert fünf Zahlen, denen jeweils ein Wert von 20 $ zugewiesen wird. Um zu verhindern, dass die Bank bestimmte Einheiten verfolgt, verschleiert Dan die Zufallszahlen, indem er jeder von ihnen einen Blendungsfaktor hinzufügt.

Anschließend übergibt er diese Daten an die Bank, die sein Konto mit 100 $ belastet, und unterzeichnet Nachrichten, die bestätigen, dass jede der fünf Angaben gegen 20 $ einlösbar ist. Dan kann die von der Bank ausgegebenen Mittel nun ausgeben. Er geht in Erins Restaurant und kauft eine Mahlzeit, die ihn 40 $ kostet.

Dan kann den Blendfaktor entfernen, um die Zufallszahl offenzulegen, die jeder digitalen „Geldnote“ zugeordnet ist und als eindeutige Kennung für jede Einheit dient (ähnlich einer Seriennummer). Er zeigt Erin zwei davon, die sie nun sofort bei der Bank einlösen muss, um zu verhindern, dass Dan sie bei einem anderen Händler ausgibt. Die Bank überprüft, ob die Unterschriften gültig sind, und wenn alles korrekt erscheint, schreibt sie Erins Konto 40 $ gut.

Die verwendeten Scheine sind nun im Wesentlichen verbrannt und es müssen weitere ausgegeben werden, wenn Erin ihr neues Guthaben auf die gleiche Weise ausgeben möchte.

Das Chaumian eCash-System könnte für private Überweisungen nützlich sein. Es ist jedoch nicht robust genug, da die Bank der zentrale Schwachpunkt ist. Eine ausgegebene Banknote ist an sich nichts wert, da ihr Wert ausschließlich von der Bereitschaft der Bank abhängt, sie in Dollar umzutauschen. Kunden sind der Bank ausgeliefert und müssen sich auf deren guten Willen verlassen, damit Geld funktioniert. Genau dieses Problem soll durch Kryptowährungen behoben werden.


Der dezentrale Ansatz

Es ist schwieriger sicherzustellen, dass Gelder in einem Ökosystem ohne Aufsicht nicht doppelt ausgegeben werden können. Gleichberechtigte Teilnehmer müssen sich auf ein Regelwerk einigen, das Betrug verhindert und alle Benutzer zu ehrlichem Handeln anregt.

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

Eine Blockchain ist eigentlich nur eine Datenbank mit einigen einzigartigen Eigenschaften. Teilnehmer des Netzwerks (Knoten genannt) führen spezielle Software aus, die es ihnen ermöglicht, ihre Kopie der Datenbank mit ihren Kollegen zu synchronisieren. Das Ergebnis ist, dass das gesamte Netzwerk den Transaktionsverlauf bis zurück zum Genesis-Block prüfen kann. Da die Blockchain öffentlich einsehbar ist, können betrügerische Aktivitäten, wie z. B. Transaktionen, die auf Doppelausgaben abzielen, leicht erkannt und verhindert werden.

Wenn ein Benutzer eine Transaktion sendet, wird sie nicht sofort zur Blockchain hinzugefügt – sie muss zuerst durch Mining in einen Block aufgenommen werden. Daher sollte der Empfänger die Transaktion erst dann als gültig betrachten, wenn ihr Block zur Kette hinzugefügt wurde. Andernfalls riskiert er den Verlust der Mittel, da der Absender dieselben Münzen woanders ausgeben könnte.

Sobald die Transaktion bestätigt ist, können die Münzen nicht doppelt ausgegeben werden, da der Besitz einem neuen Benutzer zugewiesen wird – und das gesamte Netzwerk kann dies überprüfen. Aus diesem Grund empfehlen viele, auf mehrere Bestätigungen zu warten, bevor eine Zahlung als gültig akzeptiert wird. Jeder nachfolgende Block erhöht den Aufwand, der zum Ändern oder Neuschreiben der Kette erforderlich ist (was bei einem 51%-Angriff passieren kann), drastisch.

Lassen Sie uns das Szenario im Restaurant noch einmal betrachten. Dan kehrt in das Restaurant zurück und bemerkt diesmal einen Aufkleber mit der Aufschrift „Bitcoin wird hier akzeptiert“ am Fenster. Das Essen vom letzten Mal hat ihm geschmeckt, also bestellt er es erneut. Es kostet ihn 0,005 BTC.

Erin präsentiert ihm eine öffentliche Adresse, an die er die Gelder senden muss. Dan sendet die Transaktion, die im Wesentlichen eine signierte Nachricht ist, die besagt, dass die 0,005 BTC, die sich in Dans Besitz befanden, nun in Erins Besitz sind. Ohne zu sehr ins Detail zu gehen, kann jeder, dem Dans signierte Transaktion vorgelegt wird, überprüfen, dass er tatsächlich im Besitz der Münzen war und daher die Befugnis hatte, sie zu senden.

Wie erwähnt ist die Transaktion jedoch nur gültig, wenn sie in einem Block enthalten ist, der bestätigt wird. Das Akzeptieren unbestätigter Transaktionen ist ähnlich wie das Akzeptieren der 40 $ in eCash aus dem vorherigen Beispiel, ohne sie sofort bei der Bank einzulösen – es ermöglicht dem Absender, sie woanders auszugeben. Es wird daher empfohlen, dass Erin mindestens 6 Blockbestätigungen (ungefähr eine Stunde) abwartet, bevor sie Dans Zahlung akzeptiert.


Doppelausgaben in Bitcoin

Bitcoin ist sorgfältig darauf ausgelegt, Doppelausgaben-Angriffe zu verhindern, zumindest wenn das Protokoll wie erwartet verwendet wird. Das heißt, wenn Einzelpersonen darauf warten, dass Transaktionen in einem Block bestätigt werden, gibt es für den Absender keine einfache Möglichkeit, dies rückgängig zu machen. Dazu müssten sie die Blockchain „umkehren“, was eine unrealistische Menge an Hashing-Leistung erfordert.

Es gibt jedoch eine Handvoll Double-Spending-Angriffe, die sich gegen Parteien richten, die unbestätigte Transaktionen akzeptieren. Bei Einkäufen mit geringem Wert möchte ein Händler beispielsweise möglicherweise nicht warten, bis Transaktionen in einen Block aufgenommen werden. Ein gut besuchtes Fast-Food-Restaurant kann es sich wahrscheinlich nicht leisten, tatenlos zu warten, während das Netzwerk jeden Einkauf verarbeitet. Wenn ein Unternehmen also „sofortige“ Zahlungen ermöglicht, setzt es sich der Gefahr von Double-Spendings aus. Jemand könnte einen Burger bestellen, dafür bezahlen und dann sofort den gleichen Betrag an seine eigene Adresse senden. Bei einer höheren Gebühr wird diese neue Transaktion wahrscheinlich zuerst bestätigt und macht daher die vorherige ungültig.

Es gibt drei gängige Methoden zum Durchführen einer Doppelausgabe:

  • 51%-Angriffe: Wenn es einer einzelnen Entität oder Organisation gelingt, mehr als 50 % der Hash-Rate zu kontrollieren, was es ihr ermöglicht, die Reihenfolge der Transaktionen auszuschließen oder zu ändern. Ein solcher Angriff ist bei Bitcoin höchst unwahrscheinlich, ist aber in anderen Netzwerken vorgekommen.

  • Race-Angriffe: Zwei widersprüchliche Transaktionen werden nacheinander gesendet, wobei dieselben Geldmittel verwendet werden – 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 Vorteile bringt (z. B. indem er dieselben Geldmittel an eine Adresse sendet, die er kontrolliert). Bei Race-Angriffen muss der Empfänger eine unbestätigte Transaktion als Zahlung akzeptieren.

  • Finney-Angriffe: Ein Angreifer schürft eine Transaktion vorab in einen Block, ohne sie sofort an das Netzwerk zu senden. Stattdessen gibt er dieselben Münzen für eine andere Transaktion aus und sendet erst dann seinen zuvor geschürften Block, was die Zahlung ungültig machen kann. Finney-Angriffe erfordern das Eintreten einer bestimmten Ereignisfolge und sind außerdem davon abhängig, dass der Empfänger unbestätigte Transaktionen akzeptiert.

Wie wir sehen, reduziert ein Händler, der auf Blockbestätigungen wartet, das Risiko, Opfer von Doppelausgaben zu werden, erheblich.


Abschließende Gedanken

Bei einer Doppelausgabe kann ein Benutzer ein elektronisches Bargeldsystem austricksen, um sich einen finanziellen Vorteil zu verschaffen, indem er dieselben Geldmittel mehr als einmal verwendet. Bisher stand ein Mangel an angemessenen Lösungen für dieses Problem dem Fortschritt in diesem Bereich im Wege.

Glücklicherweise bot die Verwendung von Blindsignaturen jedoch eine interessante Lösung für zentralisierte Finanzsysteme. Später führte die Entwicklung von Proof-of-Work-Mechanismen und der Blockchain-Technologie zur Entstehung von Bitcoin als einer leistungsstarken Form dezentralen Geldes – was wiederum Tausende anderer Kryptowährungsprojekte inspirierte.