text: Malleable Transactions und Wechselgeld anschaulich skizziert und erklärt – BitcoinBlog.de – das Blog für Bitcoin und andere virtuelle Währungen
  Veröffentlicht am 2. März 2014 von Christoph Bergmann // 10 Kommentare
  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
  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
  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
  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.
  10 Kommentare zu Malleable Transactions und Wechselgeld anschaulich skizziert und erklärt
  Frage // 2. März 2014 um 17:29 // Antworten
  "Genauso wie bei der Transaktion von Anne zu Max kann der Scherz-Bot auch die Wechselgeld klonen und ID ändern."
  Frage // 2. März 2014 um 17:30 // Antworten
  "Transaktionnummer desWechselgeldes von 6 BTC ändern."
  derhobbit // 2. März 2014 um 23:18 // Antworten
  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.
  Peter // 3. März 2014 um 11:20 // Antworten
  Ja, da hst du Recht. Das ist hier Falsch dargestellt. Das Wechselgeld sit einfach nur ein Output der Transaktion….
  unnamed // 3. März 2014 um 3:06 // Antworten
  Danke für die Erklärungen. Im ersten Absatz unter Punkt 3 gibt es eine kleine Wortverschiebung 😉
  no // 3. März 2014 um 15:19 // Antworten
  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.
  Manuel // 5. März 2014 um 22:05 // Antworten
  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.
  CryptoSoldie // 3. März 2014 um 15:45 // Antworten
  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.
  shulgin // 4. März 2014 um 17:11 // Antworten
  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?
  piwwi // 17. März 2014 um 13:29 // Antworten
  "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.