Bitcoin Core 合併修補程式,堵住可在不竊取金鑰下重新導向資金的簽署漏洞
重點速覽
- •Bitcoin Core 於 9 月 25 日合併一項修補,防止在 SIGHASH_SINGLE 缺失輸出的邊界情況下,收款人被更改後簽章仍可能有效而簽署 PSBT。
- •此缺陷不會暴露私鑰,但對舊版輸入而言,針對固定雜湊值的簽章在相符的結構條件下,可能被重用於同一把金鑰控制的其他未花費輸出。
- •SegWit v0 簽章仍承諾所花費的特定幣別及其金額,但目的地輸出可能仍未被綁定,為錢包與簽署裝置帶來授權問題。
- •新檢查已移至 Bitcoin Core 的共用簽章產生邏輯,將原有的原始交易拒絕機制擴展至 PSBT 路徑(包括 walletprocesspsbt 指令),同時允許同一 PSBT 中的有效輸入繼續進行。
- •截至 10 月 4 日,尚無正式版本或確認的向後移植包含此防護措施,促使錢包業者與硬體簽署整合方自行檢視其 SIGHASH_SINGLE 請求的處理方式,而非等待 Bitcoin Core 發布版本。

Bitcoin Core 新增了一項防護措施,防止簽署那些簽章可能無法以密碼學方式將資金綁定至使用者核准之付款目的地的交易。此變更於 9 月 25 日合併至該專案的主開發分支,針對部分簽署比特幣交易(PSBT)中一個狹窄的缺陷:該缺陷可能在不保護預期輸出的情況下產生有效簽章。Bitcoin Optech 於 10 月 2 日強調了這項更新。
此問題並不會暴露使用者的私鑰,而是帶來另一種風險:在特定條件下,即使交易的收款人已被更改,簽章仍可能維持有效。
SIGHASH_SINGLE 弱點的運作方式
每個比特幣簽章都帶有 sighash 旗標,用以設定簽章承諾交易中的哪些部分。SIGHASH_SINGLE 是其中一種簽署模式,旨在將某個輸入承諾至交易中對應位置的輸出。當該位置不存在輸出時,保護機制會依所花費比特幣的類型而有不同的失效方式。
對舊版輸入而言,缺失輸出的情況可能產生針對固定雜湊值的簽章。Bitcoin Core 開發人員表示,在相同結構條件存在時,此類簽章可能隨後被重用於同一把金鑰控制的其他未花費輸出。
SegWit v0 交易保留了較強的保護,因為簽章仍承諾所花費的特定幣別及其金額。然而,目的地輸出可能仍未被綁定。這為錢包與簽署裝置帶來授權問題:軟體可能向使用者呈現一筆付款,同時產生的簽章卻無法以密碼學方式保證核准的收款人維持不變。
Bitcoin Core 阻擋有風險的簽署請求
Bitcoin Core 先前已透過其原始交易簽署介面拒絕此邊界情況,但其 PSBT 路徑(包括processpsbt 指令)仍可能予以簽署。新程式碼將此檢查移至 Bitcoin Core 的共用簽章產生邏輯中,因此相同的拒絕機制現在適用於 Bitcoin Core 的所有簽署路徑,防止受影響的舊版與 SegWit v0 輸入被簽署,同時允許同一 PSBT 中的其他有效輸入繼續進行。
PSBT 常被用於協調軟體錢包、硬體裝置與離線簽署器之間的交易。它們允許交易建構者將資訊傳遞給獨立的簽署器,而不會讓該系統掌控私鑰。因此,此修補強化了錢包開發者必須獨立於金鑰安全之外執行的界線:有效的密碼學簽章必須承諾使用者實際授權的交易細節。
定義 PSBT 的比特幣改進提案 174(BIP 174)早已指示簽署器拒絕不可接受的簽署模式,並建議在未指定替代方案時使用 SIGHASH_ALL。Bitcoin Core 的變更明確防止這種缺失輸出的設定進入簽署階段。
尚未有包含此修補的正式版本
目前使用者尚未有確認包含此防護措施的正式版本。9 月 25 日的變更已合併至 Bitcoin Core 的開發分支,而截至 10 月 4 日,該專案公布的版本清單尚未標明修復版本或確認向後移植。向後移植會將相同的防護措施帶入已發布的版本;在清單中出現之前,此保護僅存在於開發程式碼庫中。
這使得錢包業者與硬體簽署整合方面臨更迫切的決定:自行檢視其對 SIGHASH_SINGLE 請求的處理方式,而非等待 Bitcoin Core 發布版本來在下游強制執行相同的保護。
原始報導發布於 CryptoSlate。