Bitcoin Core mergeert fix voor ondertekeningsfout die gelden kan omleiden zonder sleutels bloot te leggen
Belangrijkste punten
- •Bitcoin Core heeft op 25 september een fix samengevoegd die voorkomt dat PSBT's worden ondertekend in gevallen waarin het SIGHASH_SINGLE-randgeval met ontbrekende output een handtekening geldig kan laten blijven nadat de ontvanger is gewijzigd.
- •De fout legt privésleutels niet bloot, maar voor legacy-inputs kan een handtekening over een vaste hashwaarde onder overeenkomende structurele omstandigheden mogelijk worden hergebruikt tegen andere ongebruikte outputs van dezelfde sleutel.
- •SegWit v0-handtekeningen blijven gebonden aan de specifieke munt en het bedrag, maar de bestemmingsoutput kan ongebonden blijven, wat een autorisatieprobleem oplevert voor wallets en ondertekeningsapparaten.
- •De nieuwe controle is verplaatst naar de gedeelde logica voor het maken van handtekeningen van Bitcoin Core, waarmee de bestaande afwijzing bij raw-transacties wordt uitgebreid naar het PSBT-pad, waaronder het commando walletprocesspsbt, terwijl geldige inputs in dezelfde PSBT kunnen doorgaan.
- •Per 4 oktober bevatte geen enkele productierelease of bevestigde backport de beveiliging, waardoor wallet-aanbieders en hardware-ondertekeningsintegraties hun eigen omgang met SIGHASH_SINGLE-verzoeken moeten herzien in plaats van te wachten op een Bitcoin Core-release.

Bitcoin Core heeft een beveiliging toegevoegd tegen het ondertekenen van transacties waarbij de gelden mogelijk niet cryptografisch worden verbonden aan de door de gebruiker goedgekeurde betaalbestemming. De wijziging, op 25 september samengevoegd in de master development branch van het project, richt zich op een beperkte fout in deels ondertekende Bitcoin-transacties, of PSBT's, die een geldige handtekening kan opleveren zonder de beoogde output te beschermen. Bitcoin Optech bracht de update op 2 oktober onder de aandacht.
Het probleem legt de privésleutel van een gebruiker niet bloot. Het creëert echter een ander risico: onder specifieke omstandigheden kan een handtekening geldig blijven, zelfs nadat de ontvanger van een transactie is gewijzigd.
Hoe de SIGHASH_SINGLE-zwakte werkt
Elke Bitcoin-handtekening bevat een sighash-vlag die bepaalt aan welke onderdelen van een transactie de handtekening gebonden is. SIGHASH_SINGLE is een van deze ondertekeningsmodi, ontworpen om een input te verbinden aan de output op de bijbehorende positie in een transactie. Wanneer er op die positie geen output bestaat, werkt de beveiliging anders niet meer, afhankelijk van het type bitcoin dat wordt uitgegeven.
Voor legacy-inputs kan het ontbreken van een output leiden tot een handtekening over een hashwaarde. Ontwikkelaars van Bitcoin Core zeiden dat zo'n handtekening vervolgens hergebruikt zou kunnen worden tegen andere ongebruikte outputs die door dezelfde sleutel worden beheerd, wanneer dezelfde structurele omstandigheden aanwezig zijn.
SegWit v0-transacties behouden sterkere bescherming, omdat de handtekening nog steeds gebonden is aan de specifieke munt die wordt uitgegeven en het bijbehorende bedrag. De bestemmingsoutput kan echter ongebonden blijven. Dat creëert een autorisatieprobleem voor wallets en ondertekeningsapparaten: software kan de gebruiker één betaling tonen terwijl de geproduceerde handtekening niet cryptografisch garandeert dat de goedgekeurde ontvanger ongewijzigd blijft.
Bitcoin Core blokkeert het risicovolle ondertekeningsverzoek
Bitcoin Core wees de randgeval al af via zijn raw-transaction ondertekeningsinterface, maar het PSBT-pad — waaronder het commando walletprocesspsbt — kon het nog steeds ondertekenen. De nieuwe code verplaatst de controle naar de gedeelde logica voor het maken van handtekeningen van Bitcoin Core, zodat dezelfde afwijzing nu geldt voor alle ondertekeningspaden van Bitcoin Core. Hierdoor worden getroffen legacy- en SegWit v0-inputs niet meer ondertekend, terwijl andere geldige inputs in dezelfde PSBT gewoon kunnen worden verwerkt.
PSBT's worden vaak gebruikt om transacties te coördineren tussen software-wallets, hardware-apparaten en offline ondertekenaars. Ze stellen bouwers van transacties in staat informatie door te geven aan een aparte ondertekenaar zonder dat systeem controle over de privésleutels te geven. De fix versterkt daarom een grens die wallet-ontwikkelaars onafhankelijk van sleutelbeveiliging moeten afdwingen: een geldige cryptografische handtekening moet gebonden zijn aan de transactiedetails die de gebruiker daadwerkelijk heeft geautoriseerd.
Bitcoin Improvement Proposal 174, dat PSBT's definieert, schrijft ondertekenaars al voor om onaanvaardbare ondertekeningsmodi af te wijzen en beveelt SIGHASH_ALL aan wanneer er geen alternatief is gespecificeerd. De wijziging in Bitcoin Core voorkomt expliciet dat deze configuratie met ontbrekende output de ondertekeningsfase bereikt.
Nog geen productierelease met de fix
Gebruikers hebben nog geen bevestigde productierelease met de beveiliging. De wijziging van 25 september is samengevoegd in de development branch van Bitcoin Core, en in de gepubliceerde releaselijsten het project was per 4 oktober nog geen gerepareerde versie of bevestigde backport te vinden. Een backport zou dezelfde beveiliging naar een al uitgebrachte versie brengen; totdat die in de lijsten verschijnt, bestaat de bescherming alleen in de development-codebase.
Dat laat wallet-aanbieders en integraties met hardware-ondertekenaars met een directe beslissing: hun eigen omgang met SIGHASH_SINGLE-verzoeken herzien in plaats van te wachten op een Bitcoin Core-release die dezelfde bescherming stroomafwaarts afdwingt.
Het oorspronkelijke rapport is gepubliceerd op CryptoSlate.