Glossar / Privatsphäre und Sicherheit
Doppelausgabe
Auch bekannt als Double spend, Double spending.
- Was ist Doppelausgabe?
- Von einer Doppelausgabe spricht man, wenn versucht wird, mit denselben Bitcoin zwei verschiedene Personen zu bezahlen, indem statt der ersten Transaktion eine zweite bestätigt wird, die dieselben Coins ausgibt.
Digitales Geld ist von Natur aus kopierbar, und das Kopieren zu verhindern ist das Problem, für dessen Lösung Bitcoin gebaut wurde. Jeder Bitcoin ist ein Output, der genau einmal ausgegeben werden kann, und das Ledger entscheidet Streitfälle, indem es eine Version unter Blöcken begräbt: Nach sechs Bestätigungen, ungefähr einer Stunde, bedeutet das Rückgängigmachen, das gesamte Netzwerk zu überminen. Bis eine Zahlung bestätigt ist, behandeln Sie sie als Versprechen und nicht als erhaltenes Geld.
Wie es funktioniert
Bitcoin ausgeben bedeutet, bestimmte Outputs zu verbrauchen, die jeweils durch die Transaktion, die sie erzeugt hat, und ihre Position in dieser Transaktion identifiziert werden. Vollständige Nodes führen eine Menge aller nicht ausgegebenen Outputs, und die Validierung ist ein Nachschlagen: Wenn der Output, den Ihre Transaktion benennt, nicht in dieser Menge ist, ist die Transaktion ungültig und wird verworfen, egal wie gut sie signiert ist.
Das macht einen bestätigten Doppelausgaben-Vorgang konstruktionsbedingt unmöglich. Die interessanten Fälle ereignen sich alle vor der Bestätigung, und es gibt drei davon.
Der häufige ist der Ersatz. Zwei Transaktionen, die denselben Output ausgeben, stehen im Konflikt, und nur eine kann überleben. Nodes akzeptieren die zuerst angekommene und ignorieren normalerweise die zweite, aber sie leiten einen Ersatz weiter, der eine höhere Gebühr zahlt. Seit Bitcoin Core 28.0, veröffentlicht im Oktober 2024, ist die Einstellung -mempoolfullrbf standardmäßig aktiviert, was bedeutet, dass ein Node eine konkurrierende Transaktion mit höherer Gebühr weiterleitet, unabhängig davon, ob die ursprüngliche darum gebeten hat, ersetzbar zu sein. Alles Unbestätigte ist Freiwild.
Der zweite ist ein Rennen. Der Angreifer sendet eine Transaktion an den Node des Händlers und eine konkurrierende an den Rest des Netzwerks im selben Moment und wettet darauf, dass die Version, die ihm selbst zahlt, die Miner zuerst erreicht. Es ist kein Gebührenaufschlag nötig, nur eine bessere Konnektivität.
Der dritte ist eine Reorganisation, die die Mehrheit der Hashrate erfordert und unter dem 51 %-Angriff behandelt wird. Sie ist die einzige Methode, die eine bereits in einem Block befindliche Zahlung rückgängig machen kann.
Bitcoins eigener Code hat sich in dieser Frage genau einmal öffentlich geirrt. CVE-2018-17144, veröffentlicht im September 2018, war ein Fehler, der eine Transaktion denselben Input zweimal ausgeben ließ, ohne den Node, der sie prüfte, zum Absturz zu bringen. Bitcoin Core 0.16.3 lieferte den Fix innerhalb weniger Tage, und es entstand kein Schaden an der Chain, aber es ist eine nützliche Erinnerung daran, dass die Garantie von Software durchgesetzt wird, die Menschen weiterhin prüfen müssen.
Warum das wichtig ist, wenn Sie Bitcoin kaufen
Käufer sind fast nie Opfer eines Doppelausgaben-Vorgangs. Wenn Sie Dollar oder Euro an eine Börse senden und Bitcoin erhalten, trägt die Börse das Abwicklungsrisiko, weshalb sie auf Bestätigungen wartet, bevor sie eine Auszahlung freigibt, und weshalb Einzahlungen einen Fortschrittszähler anzeigen. Sobald Coins an einer Adresse ankommen, über die Sie verfügen, kann niemand sie erneut ausgeben, denn eine Ausgabe erfordert Ihre Signatur.
Das Risiko kehrt sich in dem Moment um, in dem Sie derjenige sind, der Bitcoin empfängt. Das geschieht häufiger, als Menschen erwarten: Coins in einem Peer-to-Peer-Handel verkaufen, Bitcoin für freiberufliche Arbeit annehmen, einen Laden betreiben, der Zahlungen annimmt. In jedem Fall ist es der Fehler, Waren, Bargeld oder eine Banküberweisung gegen eine unbestätigte Transaktion herauszugeben. Warten Sie mindestens einen Block ab, und bei größeren Beträgen warten Sie mehrere ab.
Es gibt auch ein ganzes Betrugsgenre, das auf diesem Begriff aufbaut. Verkäufer in Messaging-Apps und auf Videoseiten bieten "double spend software", "flash BTC" oder Tools an, die angeblich für eine Gebühr ausgebbare Coins erzeugen. Nichts davon funktioniert, weil die ungültige Transaktion von jedem Node im Netzwerk abgelehnt wird; das Produkt ist die Gebühr, die Sie bezahlt haben. Unser Sicherheitsratgeber behandelt die Familie von Betrügereien, zu der dies gehört.
Lightning verändert die Form des Problems, anstatt es zu beseitigen. Zahlungen werden in Sekunden gegen ein Kanalguthaben abgewickelt, sodass ein Händler nicht auf Blöcke warten muss, und die Frage der Doppelausgabe verlagert sich darauf, ob ein Kanalpartner versucht, einen alten Zustand zu senden, was Watchtowers bestrafen sollen.
Eine unbestätigte Zahlung ersetzen, Schritt für Schritt
Eine unbestätigte Zahlung zu ersetzen ist die billige Version des Angriffs, und es lohnt sich, sie mit echten Zahlen durchzugehen.
Alice kauft einen Laptop und zahlt 0,01 BTC. Ihre Wallet erstellt eine SegWit-Transaktion mit einem Input und zwei Outputs von etwa 141 virtuellen Bytes und fügt 3 sat/vB hinzu, eine Gebühr von 423 Satoshis. Das Terminal des Ladens zeigt die Zahlung als eingegangen an, und der Laptop verlässt das Geschäft.
Bevor ein Block eintrifft, sendet Alice eine zweite Transaktion, die denselben Input ausgibt, diesmal mit den Coins an ihre eigene Adresse, mit einer Gebühr von 20 sat/vB oder 2.820 Satoshis. Miner nehmen die Version, die für sie mehr wert ist. Wenn der Block eintrifft, ist die Zahlung des Ladens aus dem Mempool verschwunden und wird nie bestätigt werden. Alice gab zusätzliche 2.397 Satoshis aus, deutlich unter einem Dollar bei den meisten Preisen, und behielt sowohl den Laptop als auch die Coins.
Nichts in dieser Abfolge ist exotisch, und es war keine Hashrate beteiligt. Die Verteidigung kostet ebenfalls nichts: Warten Sie einen Block ab, im Durchschnitt etwa zehn Minuten, und das Ersetzungsfenster schließt sich.
Doppelausgabe vs. Replace-by-Fee
Replace-by-Fee ist derselbe Mechanismus, ehrlich genutzt. Wenn Ihre eigene Zahlung feststeckt, senden Sie sie mit einer höheren Gebühr an denselben Empfänger erneut, und das Netzwerk ersetzt die alte Version bereitwillig. Eine Doppelausgabe nutzt diese Maschinerie, um zu ändern, wer bezahlt wird. Die Weiterleitungsrichtlinie kann die beiden nicht unterscheiden, weil der Unterschied in der Absicht liegt, die in den Outputs ausgedrückt wird, weshalb Händler, die unbestätigte Zahlungen akzeptieren, jetzt davon ausgehen, dass jede einzelne davon ersetzbar ist.
Doppelausgabe vs. Transaktionsmalleabilität
Malleabilität ändert die Kennung einer Transaktion, ohne zu ändern, was sie zahlt. Die Coins bewegen sich weiterhin zum beabsichtigten Empfänger; nur die Txid, die Sie verfolgt haben, ist veraltet, was historisch die Buchhaltung von Börsen und das Auszahlungssystem von Mt. Gox im Februar 2014 brach. SegWit, aktiviert im August 2017, beseitigte die Malleabilität durch Dritte, indem es Signaturen aus den Daten herausbewegte, die in die Txid gehasht werden. Eine malleierte Transaktion ist ein Buchhaltungsproblem; eine Doppelausgabe ist eine Zahlung, die verschwindet.