MSTR Cat

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

Multisignatur

Das Quorum, der Fehler und der Schlüssel, der nie existierte

MaterialienEin Block-Explorer mit Funktionen zur Dekodierung von Scripts (z. B. mempool.space oder blockchain.com)Der Quellcode von Bitcoin Core, insbesondere die Logik des Skriptinterpreters für OP_CHECKMULTISIGSpezifikationsdokumente für BIP147 und BIP327

Neugier

  1. Warum nimmt ein Script, das zwei Signaturen erfordert, drei Elemente vom Stack?
  2. Wie kann ein leerer Byte-String eine Konsensregel sein und nicht bloß eine Konvention?
  3. Was ändert sich, wenn zehn Schlüssel zu einer Signatur zusammengefasst werden, die nicht von der eines einzelnen Unterzeichners zu unterscheiden ist?

Erkunden

  1. Multisignatur-Scripts verlangen, dass mindestens m Signaturen gegen n aufgeführte öffentliche Schlüssel gültig sind. Das Locking-Script führt m, die n öffentlichen Schlüssel und n auf; OP_CHECKMULTISIG nimmt n, die n Schlüssel, m und anschließend m Signaturen vom Stack, die in der aufgeführten Reihenfolge zu den Schlüsseln passen müssen. Werden weniger als m gültige Signaturen geliefert, ist das Ausgeben ungültig.
  2. Ein Programmierfehler in der ursprünglichen Implementierung führt dazu, dass OP_CHECKMULTISIG über die erforderlichen Signaturen hinaus ein zusätzliches Element vom Stack nimmt. Dieses „Dummy“-Element wird bei der kryptografischen Verifizierung ignoriert, muss aber vorhanden sein; fehlt es, läuft der Stack leer (Stack-Underflow) und die Transaktion scheitert. Frühe Ausgebende verwendeten OP_0 als Platzhalter – eine Konvention, die sich jahrelang hielt, weil Nodes an dieser Stelle jeden Wert akzeptierten.
  3. BIP147 (NULLDUMMY), im August 2017 zusammen mit SegWit aktiviert, machte aus diesem Malleability-Vektor eine Konsensregel. Das Dummy-Element muss nun ein leeres Byte-Array sein. Jeder nicht leere Wert, selbst ein einzelnes Null-Byte, lässt das Script fehlschlagen. Damit entfiel die Möglichkeit, Transaktions-IDs durch Austauschen des Dummy-Inhalts zu verändern, und der Transaktionshash wurde für alle nachfolgenden Bestätigungen stabil.
  4. Standardness-Regeln bestimmen, welche Multisig-Scripts Nodes weiterleiten. Bare-Multisig-Outputs sind nach der Standard-Policy von Bitcoin Core auf drei Schlüssel beschränkt. In P2SH verpackt kann Multisig bis zu 15 Schlüssel verwenden (begrenzt durch das 520-Byte-Redeem-Script), in P2WSH bis zu 20. Diese Unterscheidung ermöglicht komplexe Treasury-Setups von Unternehmen, ohne die Basis-Transaktionsebene aufzublähen.
  5. Zwei neuere Werkzeuge lösen die herkömmlichen Multisig-Muster ab. MuSig2 (BIP327, 2023), ein eigenständiges Protokoll auf Basis der Schnorr-Signaturen von Taproot, aggregiert mehrere öffentliche Schlüssel zu einem einzigen Schlüssel und erzeugt eine gewöhnliche Schnorr-Signatur; on-chain ist das Ausgeben nicht von einem normalen Taproot-Ausgeben mit einem einzigen Schlüssel zu unterscheiden. Tapscript, Teil von Taproot selbst, fügt OP_CHECKSIGADD hinzu, das eine schrittweise Signaturprüfung ohne den Stack-Pop-Bug und ohne das 20-Schlüssel-Limit der Legacy-Opcodes ermöglicht.
  6. Um diese Mechanik zu untersuchen, öffnen Sie einen Block-Explorer und suchen Sie eine Bare-Multisig-Transaktion aus der Zeit vor SegWit. Betrachten Sie das scriptSig: Es beginnt mit OP_0, gefolgt von Signaturen. Vergleichen Sie es mit dem Ausgeben eines P2WSH-Multisig-Outputs, bei dem der Witness einen leeren Eintrag, die Signaturen und das Witness-Script mit der Schlüsselliste enthält. Beachten Sie, wie sich die Byte-Zahlen unterscheiden – darin spiegeln sich die Kosten wider, die vollständige Schlüsselliste im Output statt im Input unterzubringen.

Kernfakten

  • OP_CHECKMULTISIG nimmt aufgrund eines historischen Off-by-One-Fehlers ein zusätzliches Element vom Stack.
  • BIP147 (NULLDUMMY) verlangt, dass dieses Dummy-Element auf Konsensebene ein leeres Byte-Array ist.
  • Die Standard-Policy von Bitcoin Core beschränkt Bare-Multisig-Outputs auf drei öffentliche Schlüssel; P2SH erlaubt bis zu 15 und P2WSH bis zu 20.
  • MuSig2 aggregiert mehrere Schlüssel zu einer einzigen Signatur, sodass das Ausgeben wie ein gewöhnliches Taproot-Ausgeben mit einem einzigen Schlüssel aussieht.
  • OP_CHECKSIGADD in Tapscript ersetzt OP_CHECKMULTISIG und ermöglicht Schwellenwertprüfungen ohne den Bug mit dem zusätzlichen Element.
  • Die Aktivierung von SegWit (August 2017) beinhaltete BIP147, wodurch die NULLDUMMY-Regel von der Relay-Policy in den Konsens überführt wurde.

Übung neun, sechs, drei, eins

9SammelnListen Sie 9 Multisig-Konstellationen auf, die Sie beschrieben finden (in Wallets, bei Börsen, im Lightning Network, in Nachlassplänen), und notieren Sie jeweils m-of-n sowie den verwendeten Script-Typ.
6GruppierenGruppieren Sie die 9 nach On-Chain-Form in 6 Gruppen: Bare Multisig, P2SH, in P2SH verpacktes SegWit, P2WSH, Taproot-Script-Pfad oder Taproot-Key-Pfad mit aggregierten Schlüsseln.
3VerdichtenReduzieren Sie die sechs Gruppen auf drei Kompromisse in Bezug auf Privatsphäre, Byte-Kosten und Flexibilität bei der Wiederherstellung, die jeder Multisig-Implementierungsart innewohnen.
1KristallisierenSchreiben Sie einen Satz, der erklärt, warum ein leerer Byte-String zu einer dauerhaften Konsensregel wurde statt zu einem veränderbaren Policy-Parameter.

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