Coin Brief ENDE

Bitcoin Core signiert keine SIGHASH_SINGLE-Eingänge ohne passenden Ausgang mehr

Bitcoin Core hat eine Änderung übernommen, die eine bestimmte Art von Eingang nicht mehr signiert, über die Gelder ohne den privaten Schlüssel des Eigentümers umgeleitet werden könnten. Pull Request #35984 des Entwicklers furszy wurde am 25. September in den Master-Zweig gemergt. Bitcoin Optech hob ihn am 2. Oktober in seinem Newsletter hervor.

Die Schwachstelle. Eine mit SIGHASH_SINGLE erstellte Signatur bezieht sich nur auf den Transaktionsausgang mit demselben Index wie der signierte Eingang. Gibt es an dieser Stelle keinen Ausgang, bezieht sich die Signatur auf gar keinen Ausgang. Bei Legacy-Eingängen wird sie über einen festen Hashwert 1 erstellt, bei SegWit-v0-Eingängen wird die Bindung an die Ausgänge auf null gesetzt. In beiden Fällen bleibt die Signatur laut Pull Request gültig, selbst wenn die Ausgänge vertauscht werden – eine Falle, mit der Gelder ohne Zustimmung des Eigentümers umgeleitet werden können.

Warum nur ein Pfad geschützt war. Die Funktion SignTransaction() von Bitcoin Core übersprang solche Eingänge bereits, SignPSBTInput() für teilsignierte Transaktionen dagegen nicht, sodass der Wallet-Befehl walletprocesspsbt sie signierte. Die Korrektur verlegt die Prüfung in CreateSig, den gemeinsamen Code zur Signaturerstellung. Damit überspringen beide Pfade und jeder künftige solche Eingänge, während andere gültige Eingänge derselben PSBT weiter signiert werden.

Eine bewusste Wahl, keine Voreinstellung. Der Autor schreibt, falls es für den SegWit-v0-Fall eine legitime Verwendung gebe, solle sie über ein ausdrückliches Opt-in-Argument wieder erlaubt werden, nicht standardmäßig – damit es immer eine bewusste Entscheidung ist. Die Änderung schließt Issue #35977.

Wen es betrifft. PSBTs sind der Weg, auf dem Software-Wallets, Hardware-Geräte und Offline-Signierer eine Transaktion austauschen, ohne Schlüssel zu teilen. Das Risiko ist ein Signierer, der dem Nutzer eine Zahlung zeigt, aber eine Signatur erzeugt, die diese Zahlung nicht garantiert. BIP 174, das PSBTs definiert, fordert Signierer bereits auf, unzulässige Signatur-Hash-Typen abzulehnen. Die Änderung liegt im Entwicklungszweig und ist bei Redaktionsschluss in keinem veröffentlichten Release enthalten.

Bitcoin Core signiert keine SIGHASH_SINGLE-Eingänge ohne passenden Ausgang mehr
Bitcoin Core signiert keine SIGHASH_SINGLE-Eingänge ohne passenden Ausgang mehr — Coin Brief

Was das bedeutet

Die Fehlerklasse ist alt und gut dokumentiert – gerade deshalb zählt, dass ein Pfad noch offen war. Entwickler von Wallets und Signiergeräten sollten ihre eigene PSBT-Signierung auf denselben Fall prüfen, statt auf ein Release von Bitcoin Core zu warten: Eine korrekte Signatur muss sich auf die Zahlung beziehen, die der Nutzer freigegeben hat, unabhängig davon, wie sicher der Schlüssel ist.

Primärquelle
Bitcoin Core (GitHub)
https://github.com/bitcoin/bitcoin/pull/35984