Malleable Transactions und Wechselgeld anschaulich skizziert und erklärt

Da das Thema “Transaction Malleability” für die meisten technischen Laien nicht nur Neuland ist, sondern ein Dschungel verwirrender Begriffe und Systematiken, der schnell zu falschen Schlussfolgerungen führt, hat unser Mitarbeiter Jonathan Harkort die Transaction Malleability in einem leserfreundlichen und anschaulichen Artikel erklärt.

(1) Malleable Transaction

(c) Bitcoin.de, creative commons

(c) Bitcoin.de, creative commons

Um sich zu veranschaulichen, was eine Malleable Transaction ist, stellt man sich am besten einen Eilbrief vor, durch den Anne Müller einen 10-Euro-Schein an Max Schmid sendet. Anne übergibt den Eilbrief einem Postboten, der Brief erhält die Sendungsnummer 0815.
Auf dem Weg zum Empfänger schnappt sich ein nun jedoch ein Scherzbold den Eilbrief und ändert die Sendungsnummer auf dem Brief und im Trackingsystem des Expressdientes auf die Nummer 0816. Am Zustellort liefert der Postbote den Eilbrief mit dem 10-Euro-Schein an Max Schmidt aus und lässt sich den Empfang mit der Sendungsnummer 0816 quittieren.
Das Wichtigste hat geklappt: Max hat die 10 Euro von Anna bekommen. Wenn Anne allerdings im Trackingsystem prüft, ob der Brief angekommen ist, wird sie die Auslieferung der Sendung Nr. 0815 nicht bestätigt bekommen. Zum Glück zeigt das Trackingsystem aber alle Eingänge inklusiv Inhalt bei Max an. Darunter ist auch eine Sendung von 10 Euro unter der Sendungsnummer 0816 genau an dem Tag, an dem Anne den Eilbrief verschickt hat. Da im Trackingsystem zudem Anne als Absender aufgeführt wird, besteht keinerlei Zweifel, dass Max sein Geld erhalten hat. Alles, was der Scherzbold erreicht hat, ist ein wenig Verwirrung.

(2) Wechselgeld

(c) Bitcoin.de, creative commons

(c) Bitcoin.de, creative commons

Anne möchte nun 4 Bitcoins an Max überweisen. Dazu benutzt sie den BitcoinClienten und öffnet ihr Wallet, in der sich insgesamt 13 Bitcoins befinden. Anne gibt also einfach die Summe 4 BTC sowie Max’ BitcoinAdresse 1Max5y3ftSchmidtZJmyRH4qnUijZxWWi7 ein und klickt auf ‘Senden’. Um den Rest kümmert sich dann der Client.
Dieser schaut zunächt, welche Einzahlungen es auf Annes Wallet gab. Man kann sich die Bitcoins in der Wallet wie Münzen vorstellen. Man kann zunächst nur die empfangenen und bestätigten Transaktionen versenden. Der einfachste Fall ist es, wenn der Client eine Einzahlung von genau 4 Bitcoin oder mehrere kleine Einzahlungen die zusammen 4 Bitcoin ergeben vorfindet. Da Anne bisher nur Eingänge von 1 BTC + 2 BTC + 10 BTC gibt, ist dies nicht der Fall. Der Client muss also die Transaktion über 10 BTC nutzen, um 4 Bitcoin zu bezahlen. Ähnlich wie an der Kasse beim Supermarkt gibt es in diesem Fall Wechselgeld: 10 BTC verlassen die Börse, 4 BTC wandern an die Adresse von Max und 6 BTC finden ihren Weg zurück zu Anne. Von alldem bekommt Anne nichts mit. Bitcoins sind so schön unkompliziert.

(3) Wechselgeld und Malleable Transaction

(c) Bitcoin.de, creative commons

Eine unschöne Konstellation bilden nun das Wechselgeld und der Scherzbold aus dem ersten Beispiel, den wir jetzt einen Scherz-Bot nennen. Genauso wie bei der Transaktion von Anne zu Max kann der Scherz-Bot auch die Wechselgeld klonen und ID ändern. Transaktionnummer desWechselgeldes von 6 BTC ändern.
Annes Transaktion von 4 Bitcoin an Max läuft wie gewünscht unter der Transaktionsnummer 0815. Die Transaktion mit dem Wechselgeld, eigentlich Nummer 4711, wird nicht nur geändert, sondern geklont. Von nun an existieren eine Transaktion 4711 und eine Transaktion 4712. Das Gute im Bitcoin-System: Nur eine Transaktion ist gültig, nämlich diejenige, die am schnellsten in der Blockchain bestätigt wird. Selbstverständlich können keine Bitcoins einfach verdoppelt werden..
Bis vor kurzem gab es beim Bitcoin-Client ein Problem: Er hat nicht geprüft, ob die Transaktion 4711 oder 4712 die gültige war, sondern dem Wechselgeld einfach blind vertraut. Warum sollte sich ein User auch selbst betrügen? In unserem Beispiel konnten dem Client also 6 nicht bestätigte Bitcoins untergeschoben werden.
Wenn Anne nun diese 6 Bitcoins für eine nachfolgende Auszahlung nutzt, wurden die Bitcoins intern als erfolgreich ausgezahlt verbucht – kommen jedoch nie beim Empfänger an. Denn das Bitcoin-System bemerkt, dass die ausgehende Transaktion selbst auf nicht bestätigten eingehenden Transaktionen basiert. Und ohne verifizierte Vorgänger wird auch die nachfolgende Transaktion nie bestätigt.
Hat irgendjemand Bitcoins verloren? Nein! Der verwirrte Client denkt zwar zunächst, dass 6 Bitcoins erfolgreich aus der Transaktion 4711 ausgezahlt wurden, mit einem Reparatur-Tool bringt man den Client dazu, die Transaktion 4711 und alle Folgetransaktion anders zu sehen (nämlich gar nicht) und dafür 4712 als das bestätigte Wechselgeld zu betrachten (und zu zählen). Eine korrekte Buchführung ist wieder hergestellt. Zu guter Letzt bekommt der Bitcoin-Client dann auch noch ein Update verpasst und sieht von da an das Wechselgeld genauso kritisch wie jede eingehende Transaktion und wartet vor einer Verwendung auf ausreichend Bestätigungen aus dem Bitcoin-Netzwerk.

About Christoph Bergmann (1108 Articles)
Das Bitcoinblog wird von bitcoin.de gesponsort, ist inhaltlich aber unabhängig und gibt die Meinung des Redakteurs Christoph Bergmann wieder. Wenn Ihnen das Blog gefällt, freuen wir uns über Spenden an 1BvayiASVCmGmg4WUJmyRHoNevWWo5snqC. Jeder Satoshi wird dazu verwendet, um das Blog besser zu machen. Weitere Infos, wie Sie uns unterstützen können, finden Sie HIER. Gastbeiträge sind ebenfalls willkommen. Meinen öffentlichen PGP-Schlüssel sowie den Bitmessage-Schlüssel finden Sie HIER

10 Comments on Malleable Transactions und Wechselgeld anschaulich skizziert und erklärt

  1. Zitat:
    “Genauso wie bei der Transaktion von Anne zu Max kann der Scherz-Bot auch die Wechselgeld klonen und ID ändern.”

    ????

  2. Zitat:
    “Transaktionnummer desWechselgeldes von 6 BTC ändern.”

    ????

  3. derhobbit // 2. March 2014 at 23:18 // Reply

    Stimmt die Darstellung so beim Wechselgeld? Ich hatte das im Wiki so verstanden, dass Überweisung und Wechselgeld in einer Transaktion zusammengefasst sind, also nur eine gemeinsame Transaktions-ID haben.

    • Ja, da hst du Recht. Das ist hier Falsch dargestellt. Das Wechselgeld sit einfach nur ein Output der Transaktion….

  4. Danke für die Erklärungen. Im ersten Absatz unter Punkt 3 gibt es eine kleine Wortverschiebung 😉

  5. Mhhh…, aber so wie es hier in diesem Artikel beschrieben steht würde ja der Scherz-Bot die durch klonen der Wechselgeld-Transaktion ergaunerten 6 Bitcoin trotzdem in seine Wallet umleiten können wenn er schnell genug ist. also z.B. ausreichend viele Bestätigungs-Knoten in unmittelbarer Verbindungs-Nähe des angegriffenen Wallet-Knotens platziert.
    So wie es im Artikel beschrieben steht würde durch das Reparatur-Tool und den Client-Update zunächst einmal nur dafür gesorgt, dass dar angegriffene Wallet-Client die nicht mehr vorhandenen 6 Wechselgeld-Bitcoins nicht mehr anzeigt/sieht.
    Das Problem des clonens der Wechselgeld-Transaktion wäre damit ja nicht gelöst. Zumindest steht davon nichts in dem obigen Artikel.

    • Nein, so wie es im Artikel steht ist es genau andersherum: Der Client zeigt die 6 BTC nicht mehr an, obwohl sie noch da sind.

  6. CryptoSoldie // 3. March 2014 at 15:45 // Reply

    Wurde das Problem eigentlich beim Bitcoin qt-Client behoben? Ist eigentlich peinlich, dass dies beim offiziellen Client auftritt, obwohl das PRoblem seit 2011 bekannt ist. Aber naja, das Core-Dev-Team ist klein.

  7. Was wäre nun, wenn der Empfänger jetzt aber kein Wechselgeld oder z.b nur grössere Beträge (z.b. 7BTC ) in seinem Wallet besitzt?

  8. “Man kann sich die Bitcoins in der Wallet wie Münzen vorstellen.”

    Das ist falsch. In der Wallet gibt es keine Münzen sondern nur PrivateKeys, die einen (bzw. eine BTC-Addresse) als Empfänger von Transaktionen in der Blockchain identifizieren.

    Genau genommen gibt es nicht mal Bitcoins, es gibt nur eine Kette von Blöcken, die Transaktionen und die zugehörigen IDs/Hashes, Empfänger, Absender usw beinhalten.

    Die Coins in dem Client sind nur eine Repräsentation der Transaktionen und bedeuten: Du hast Transaktionen im Wert von X BTC erhalten und darfst darüber mit deinen Keys verfügen.

    Das ist ein ziemlich wichtiger Aspekt der auch zeigt, warum die wallet.dat so wichtig ist: Jeder der diese wallet.dat in seinen Client läd, hat Zugriff auf die Transaaktionen. Darum braucht man weder Blockchain noch irgendwelche Adressen zu sichern/verschlüsseln, sondern einzig die wallet.dat.

    Für die TM ist das irrelevant, für das Verständnis des Bitcoinsystems aber sehr wichtig.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s