Zum Inhalt springen
buybitcoinsmart

Glossar / Protokoll und Upgrades

SIGHASH_ANYPREVOUT

Auch bekannt als APO.

Was ist SIGHASH_ANYPREVOUT?
SIGHASH_ANYPREVOUT ist ein vorgeschlagener Signaturmodus für Taproot-Skripte, mit dem eine einzige Signatur jede Coin ausgeben kann, die an ein passendes Skript gebunden ist, statt nur die eine Coin, für die sie erstellt wurde.

Spezifiziert im BIP-118.

BIP-118 definiert einen neuen öffentlichen Schlüsseltyp für tapscript, 33 Bytes beginnend mit 0x01, statt eines Flags, das gewöhnlichen Schlüsseln hinzugefügt wird. Im Februar 2017 zugewiesen, wurde er nie aktiviert, und er funktioniert nur bei Ausgaben über den Skriptpfad, nie bei Ausgaben über den Schlüsselpfad. Nichts in Ihrer Wallet kann so signieren, daher beschreibt jedes Produkt, das eltoo-Kanäle im Mainnet verspricht, eine Zukunft.

Wie es funktioniert

Status: BIP-118 ist ein Draft, zugewiesen am 2017-02-28, erfordert BIP-340, BIP-341 und BIP-342, und der eigene Abschnitt Deployment lautet TODO. Nichts wurde ersetzt, weil nichts in Betrieb ging.

Eine Taproot-Signatur bindet sich an den Outpoint der ausgegebenen Coin, 36 Bytes aus txid und Index im ANYONECANPAY-Digest, den BIP-118 abändert, und schweißt sie damit für immer an eine einzige Coin. Entfernt man den Outpoint aus der signierten Nachricht, benennt die Signatur keine Coin mehr, sondern eine Form, sodass später jeder UTXO dieser Form an sie gebunden werden kann. Das BIP nennt dies dynamic rebinding.

Es sind zwei Varianten definiert, und der Unterschied zwischen ihnen besteht darin, worauf weiterhin committet wird.

  • SIGHASH_ANYPREVOUT, Bitwert 0x40, lässt den Outpoint weg, behält aber den Betrag des Inputs (8 Bytes), dessen scriptPubKey (hier immer 35 Bytes) und den Tapleaf-Hash. Die Signatur passt dann auf jede Coin mit demselben Wert unter demselben Skript.
  • SIGHASH_ANYPREVOUTANYSCRIPT, Bitwert 0xc0, lässt zusätzlich den Betrag, den scriptPubKey und den Tapleaf-Hash weg. Sie passt auf jede Coin, deren Skript dieser Schlüssel erfüllen kann.

Man entscheidet sich dafür bei der Erstellung der Adresse, nicht zum Zeitpunkt des Signierens. Diese Schlüssel funktionieren nur über ein tapscript-Blatt, daher muss die Adresse ein solches Blatt in ihrem Merkle-Baum tragen, und bis sie ausgegeben wird, ist sie von jeder anderen Taproot-Adresse nicht zu unterscheiden. Eine einzige Konstante trennt beide: key_version ist 0x01 für einen BIP-118-Schlüssel gegenüber 0x00 für einen gewöhnlichen tapscript-Schlüssel, sodass ein einzelner privater Schlüssel keine Signatur erzeugen kann, die unter beiden Regeln gültig ist. Sechs neue hash_type-Bytes werden zulässig: 0x41, 0x42, 0x43, 0xc1, 0xc2 und 0xc3.

Wo Sie es sehen

SIGHASH_ANYPREVOUT erscheint in keiner Mainnet-Transaktion, und BIP-118 erwartet, dass es selbst dann, wenn es existiert, nur selten verwendet wird ("only be rarely used in practice"), da Ausgaben über den Skriptpfad schwerer und leichter identifizierbar sind.

Das Design, für das es geschrieben wurde, ist eltoo, ein Off-Chain-Aktualisierungsschema. Off-Chain-Protokolle müssen auf jeden alten Zustand antworten, den eine Gegenpartei veröffentlicht, und weil eine gewöhnliche Signatur an die genaue Transaktion gebunden ist, auf die sie antwortet, ist für jeden Zustand, der erscheinen könnte, eine neue Signatur nötig. Eltoo verwendet stattdessen Skript und nLockTime, um Signaturen asymmetrisch zu machen, sodass eine Transaktion mit einer späteren Signatur eine mit einer früheren Signatur ausgeben kann, aber nie umgekehrt, und eine einzelne Aktualisierungssignatur auf jede frühere Aktualisierung angewendet werden kann, die Ihre Gegenpartei veröffentlicht hat.

Der Name hält eine Korrektur fest. Joseph Poon schlug die Idee als SIGHASH_NOINPUT im Februar 2016 vor, nachdem das ursprüngliche Lightning-Papier sie aufgeworfen hatte, und die Umbenennung besagt, dass der Input nicht wirklich ignoriert wird: nSequence wird immer signiert, und unter SIGHASH_ANYPREVOUT werden auch Skript und Betrag signiert.

Der Sicherheitsabschnitt des BIP nennt den Preis: Replay. Eine ANYPREVOUT-Signatur kann gegen jeden anderen UTXO mit demselben Skript und demselben Wert wiederverwendet werden, und eine ANYPREVOUTANYSCRIPT-Signatur gegen jeden UTXO, der diesen Schlüssel in einem seiner Skripte wiederverwendet, sodass Schlüsselwiederverwendung von einem Datenschutzärgernis zu einer Möglichkeit wird, Geld zu verlieren. Diese Transaktionen sind zudem für Fremde malleable: Jeder, der einen passenden Input liefern kann, kann die txid ohne privaten Schlüssel ändern.

SIGHASH_ANYPREVOUT vs. SIGHASH_ANYONECANPAY

SIGHASH_ANYONECANPAY existiert heute im Netzwerk und entfernt jeden Input außer dem, der signiert wird; SIGHASH_ANYPREVOUT entfernt auch einen Teil dieses verbleibenden. BIP-118 beschreibt seinen Digest als den ANYONECANPAY-Digest ohne den Outpoint, ein Unterschied von einer Zeile mit großen Folgen. Eine ANYONECANPAY-Signatur kann nicht wiederverwendet werden, weil der Outpoint, den sie nennt, nur einmal ausgegeben werden kann. Gibt man diese Bindung auf, muss der Schutz vor Replay vom darüber aufgebauten Protokoll kommen, nicht von der Signatur.

Nicht zu verwechseln mit

Häufig gestellte Fragen

Kann ich SIGHASH_ANYPREVOUT heute verwenden?

Nein. BIP-118 ist noch ein Draft, sein Abschnitt Deployment lautet TODO, und kein Mainnet-Node erzwingt die Regeln, sodass nichts, was so signiert wurde, im Mainnet ausgegeben werden kann.

Ist SIGHASH_ANYPREVOUT dasselbe wie SIGHASH_NOINPUT?

Ja, es ist die umbenannte und überarbeitete Version derselben Idee. Joseph Poon schlug SIGHASH_NOINPUT im Februar 2016 vor; der ANYPREVOUT-Entwurf zielt nur auf Ausgaben über den Taproot-Skriptpfad und committet weiterhin auf nSequence und optional auf Skript und Betrag, was der neue Name widerspiegelt.

Warum definiert BIP-118 einen neuen öffentlichen Schlüsseltyp statt nur eines neuen Flags?

Weil diese Möglichkeit beim Erstellen einer Adresse gewählt werden muss. Diese Signaturen funktionieren nur mit einem öffentlichen BIP-118-Schlüssel innerhalb eines Tapscript-Blattes, daher kann eine Adresse ohne ein solches Blatt niemals auf diese Weise ausgegeben werden, und sie bleibt von jeder anderen Taproot-Adresse nicht zu unterscheiden, bis sie ausgegeben wird.

Weiterlesen

Verwandte Begriffe

Mehr zum Thema Protokoll und Upgrades

Diese Seite auf Englisch lesen