Zum Inhalt springen
buybitcoinsmart

Glossar / Transaktionen und Gebühren

SIGHASH_SINGLE

Was ist SIGHASH_SINGLE?
SIGHASH_SINGLE ist das Flag, das eine Signatur an genau eine Ausgabe bindet, nämlich an die, die in der Liste an derselben Position steht wie die Eingabe, die signiert wird.

Eingabe null wird mit Ausgabe null gepaart, Eingabe eins mit Ausgabe eins, und alles andere in der Transaktion bleibt unsigniert. Das Design erlaubt es mehreren Parteien, jeweils ihre eigene Auszahlung innerhalb einer gemeinsamen Transaktion abzusichern. Es trägt außerdem den berüchtigtsten Signaturfehler von Bitcoin in sich, den Legacy-Eingaben noch immer enthalten.

Wie es funktioniert

Der Digest behält die zu signierende Eingabe, die Transaktionsversion, die Locktime und genau eine Ausgabe: diejenige, deren Index mit dem Index der Eingabe übereinstimmt.

Ausgaben nach diesem Index werden vor dem Hashing aus der Kopie entfernt. Ausgaben davor bleiben als Platzhalter erhalten, aber geleert, mit einem Wert von minus eins und einem leeren Skript, sodass auch ihr tatsächlicher Inhalt nicht abgedeckt ist. Die Sequenznummern aller anderen Eingaben werden auf null gesetzt, wie unter dem Flag ohne Ausgaben.

Dann kommt der Fehler. Im ursprünglichen Algorithmus gibt es, wenn der Index der zu signierenden Eingabe größer oder gleich der Anzahl der Ausgaben ist, keine passende Ausgabe zum Hashen. Statt zu scheitern, liefert der Code einen festen Digest zurück: den Wert eins von 32 Bytes. Jeder Unterzeichner, der an diese Position gerät, erzeugt eine Signatur über den identischen Digest, sodass die Signatur an keine bestimmte Transaktion gebunden ist und von jedem kopiert und erneut verwendet werden kann, der eine Eingabe am selben Index platzieren kann. Dieser Zweig besteht in Bitcoin Core bis heute, weil seine Löschung die Gültigkeit von Coins ändern würde, die bereits in der Chain liegen.

Beide Neufassungen des Signatur-Hash-Algorithmus haben ihn geschlossen. BIP143 legt fest, dass für eine SegWit-Eingabe der Version 0 ohne passende Ausgabe der Ausgabenteil des Digests aus 32 Nullbytes besteht, während der Rest des Digests weiterhin genau diese Eingabe festschreibt, sodass nichts erneut verwendet werden kann. BIP341 geht weiter: Bei einer Taproot-Eingabe scheitert eine Signatur dieses Typs mit einem Index jenseits der Ausgabenanzahl einfach an der Validierung.

Wo es auftritt

Das Flag erscheint als abschließende 03 an einer Signatur, und Sie finden es fast ausschließlich in vorab signierten Angeboten und nicht in gewöhnlichen Zahlungen.

Das Muster ist eine halbe Transaktion, die als Einladung veröffentlicht wird. Ein Verkäufer signiert die Aussage „diese Eingabe von mir geht ein, und die Ausgabe am passenden Index zahlt mir meinen geforderten Preis“, und lässt dann den Rest der Transaktion leer, damit ein Käufer ihn ausfüllt. Da die Signatur des Verkäufers jede andere Eingabe und Ausgabe ignoriert, kann der Käufer eigene Mittel, eigenes Wechselgeld und eine Gebühr in der Höhe hinzufügen, die der Mempool verlangt, und die Garantie des Verkäufers gilt weiterhin. Marktplätze für Ordinals und Runes bauen genau darauf auf, wobei diese Angebote als PSBTs verteilt werden, und es ist einer der wenigen wirklich vertrauenslosen Geschäfte, die Bitcoin ohne Dritte in der Mitte ermöglicht.

Es wird fast immer mit ANYONECANPAY kombiniert, weil das Flag für sich genommen noch die vollständige Liste der Eingaben festschreibt, was den Zweck vereitelt, die Transaktion offen zu lassen, damit jemand anderes sie vervollständigt.

SIGHASH_SINGLE vs. SIGHASH_ANYONECANPAY

SIGHASH_SINGLE ist ein Basismodus und SIGHASH_ANYONECANPAY ein Modifikator, sie beantworten also unterschiedliche Fragen. Der Basismodus entscheidet, wie viel von der Ausgabenseite eine Signatur abdeckt: alles, nichts oder eine passende Ausgabe. Der Modifikator entscheidet, wie viel von der Eingabeseite sie abdeckt: jede Eingabe oder nur die, die signiert wird. Sie wählen einen Basismodus und entscheiden dann getrennt, ob Sie den Modifikator hinzufügen, weshalb das Flag-Byte einer echten Signatur meist die Summe der beiden ist und nicht eines allein.

Nicht zu verwechseln mit

Häufig gestellte Fragen

Was ist der SIGHASH_SINGLE-Fehler?

Im ursprünglichen Signaturalgorithmus erzeugt ein Eingabeindex ohne passende Ausgabe einen festen Digest mit dem Wert eins statt eines Fehlers. Eine Signatur über diesen Digest ist an keine Transaktion gebunden und kann von jemand anderem erneut verwendet werden, daher dürfen Wallets niemals an dieser Position signieren.

Ist der Fehler noch ausnutzbar?

Nur bei Legacy-Eingaben, die noch den ursprünglichen Algorithmus ausführen. SegWit-Eingaben folgen BIP143 und hashen stattdessen Nullbytes, und Taproot-Eingaben lehnen den Fall nach BIP341 von vornherein ab, sodass Coins, die an bc1-Adressen gehalten werden, nicht betroffen sind.

Verwandte Begriffe

Mehr zum Thema Transaktionen und Gebühren

Diese Seite auf Englisch lesen