MSTR Cat

Blockchain/Niveau IV · Tiefer ins Protokoll/4.1 Script/Lektion 7

Segregated Witness und Transaction Malleability

Die instabile ID, die abgetrennte Signatur und die Lösung, die Lightning möglich machte

MaterialienEin Block-Explorer mit JSON-AusgabefunktionDer Hex-String einer P2PKH-Transaktion aus der Zeit vor SegWit (aus dem Jahr 2016 oder früher)Der Hex-String einer P2WPKH-Transaktion aus der Zeit nach SegWit

Neugier

  1. Warum konnte ein Fremder die Identität einer Transaktion ändern, ohne ihre Gültigkeit zu beeinträchtigen?
  2. Wie behebt das Herauslösen der Signaturen aus dem Hash die Malleability, während sie weiterhin durch den Konsens geschützt bleiben?
  3. Was ist das Blockgewicht, und warum hat die rabattierte Gewichtung der Witness-Daten die Kapazität erhöht?

Erkunden

  1. Vor SegWit war die Transaktions-ID (txid) der doppelte SHA-256-Hash der gesamten Transaktion, Signaturen eingeschlossen. Ein Dritter konnte eine Signatur neu kodieren, etwa indem er ihren s-Wert negierte oder die Art änderte, wie sie auf den Stack gelegt wurde, ohne sie ungültig zu machen, und so für dieselbe Zahlung eine neue txid erzeugen. Diese Malleability brach unbestätigte Transaktionsketten: Verwies Alices Kind-Transaktion per ID auf ihre Eltern-Transaktion, wurde sie verwaist, sobald die Eltern-Transaktion verändert worden war – was Wallets und Börsen, die Zahlungen nachverfolgten, in die Irre führte.
  2. Mt. Gox berief sich im Februar 2014 auf diesen Mechanismus, um das interne Chaos während seines Zusammenbruchs zu erklären, doch spätere Analysen zeigten, dass er nur einen geringen Teil der gemeldeten Verluste ausmachte. Die Schwachstelle blieb bestehen, weil ECDSA-Signaturen in ihrer Byte-Darstellung grundsätzlich veränderbar sind; Dritte – und nach Einführung von BIP66 und der Low-S-Regeln vor allem Miner – konnten sie umschreiben. Diese Instabilität machte es unsicher, bidirektionale Zahlungskanäle wie Lightning aufzubauen, bei denen die Kanalzustände schon vor der Bestätigung von bestimmten, vorhersagbaren Transaktions-IDs abhängen.
  3. Segregated Witness (BIP141), aktiviert am 24. August 2017 bei Block 481.824, löste das Problem, indem es die Witness-Daten vom Transaktionskörper trennte. Die txid hasht nun nur noch die Nicht-Witness-Felder und ist damit immun gegen Änderungen an der Signaturkodierung. Die Witness-Daten liegen weiterhin in einer eigenen Struktur innerhalb der Rohtransaktion, fließen aber nicht in den Identitäts-Hash ein. Dritte können die txid nicht mehr verändern, während die Signaturen weiterhin vollständig vom Konsens geprüft werden.
  4. Die Witness-Daten werden über einen Merkle-Tree festgeschrieben, auf den die Coinbase-Transaktion jedes Blocks verweist; so können sie nicht entfernt oder verändert werden, ohne den Block ungültig zu machen. Obwohl sie von der txid getrennt sind, zählen Witness-Daten nach einer neuen Messgröße, dem „Gewicht“ (Weight), weiterhin zur Blockgrößengrenze: 4.000.000 Gewichtseinheiten pro Block. Jedes Nicht-Witness-Byte zählt als 4 Gewichtseinheiten und jedes Witness-Byte als 1, sodass signaturlastige Transaktionen leichter hineinpassen.
  5. BIP143 führte ein neues Signatur-Hashing-Verfahren ein, das die quadratischen Hashing-Kosten bei Transaktionen mit vielen Inputs beseitigte. BIP141 definierte Witness-Programme der Version 0, P2WPKH und P2WSH, die zum Standard für neue Adressen wurden, und BIP144 legte fest, wie Witness-Daten zwischen Peers übertragen werden. Diese Änderungen behoben nicht nur die Malleability, sondern legten auch den Grundstein für spätere Upgrades wie Taproot, indem sie ein versioniertes Framework für Witness-Programme schufen, das die Weiterentwicklung von Scripts erlaubt, ohne bestehende Konsensregeln zu brechen.
  6. Öffnen Sie einen Block-Explorer und suchen Sie eine aktuelle P2WPKH-Transaktion. Untersuchen Sie sie: Die Signaturen stehen in einem separaten „Witness“-Feld statt im scriptSig des Inputs, und die txid wird ohne sie berechnet. Vergleichen Sie dies mit einer P2PKH-Transaktion von 2016 aus der Zeit vor SegWit, bei der die Signaturen im scriptSig stehen und daher in die txid einfließen. Die sichtbare Trennung bestätigt, dass Witness-Daten die Identität der Transaktion nicht mehr beeinflussen.

Kernfakten

  • Segregated Witness wurde am 24. August 2017 im Block 481.824 aktiviert.
  • Transaction Malleability erlaubte es Dritten, eine txid zu ändern, indem sie die Kodierung der ECDSA-Signatur veränderten, ohne die Transaktion ungültig zu machen.
  • BIP141 verlagerte die Signaturen in eine separate Witness-Struktur, die bei der Berechnung der txid nicht berücksichtigt wird.
  • Das Blockgewicht ist auf 4.000.000 Einheiten begrenzt, wobei Witness-Daten gegenüber Nicht-Witness-Daten um den Faktor vier rabattiert werden.
  • BIP143 führte ein Signatur-Hashing-Verfahren ein, das die quadratischen Hashing-Kosten bei Transaktionen mit vielen Inputs beseitigte.
  • BIP141 führte versionierte Witness-Programme ein (Version 0: P2WPKH und P2WSH) und ließ damit Raum für spätere Versionen wie Taproot.

Übung neun, sechs, drei, eins

9SammelnListen Sie 9 technische oder wirtschaftliche Folgen der Transaction Malleability vor 2017 auf. Notieren Sie, welche davon Nutzer, Wallets, Börsen oder Protokollentwickler betrafen.
6GruppierenGruppieren Sie die 9 in 6 Kategorien: instabile IDs, Abbrüche unbestätigter Transaktionsketten, Verwirrung bei Börsen, Unmöglichkeit von Zahlungskanälen, veränderbare Signaturkodierung und Lücken im Konsensschutz.
3VerdichtenReduzieren Sie die 6 auf 3 Kerngründe, warum die Malleability vor SegWit skalierbare Zahlungskanäle verhinderte.
1KristallisierenSchreiben Sie 1 Satz darüber, wie die Trennung der Witness-Daten vom txid-Hash zugleich die Stabilität der ID sichert und künftige Script-Upgrades ermöglicht.

Faktcheck

Datumsangaben, Zahlen und Behauptungen wurden mit den unten aufgeführten veröffentlichten Quellen abgeglichen.

In der interaktiven Akademie öffnen →

EN PT ES ZH JA KO RU FR MS