比特幣抵抗量子威脅》BIP 360 提案移除 Taproot 脆弱路徑,軟分叉引入新輸出類型 P2MR

特幣抵禦量子攻擊腳步持續前進,由 Hunter Beast、Ethan Heilman 和 Isabel Foxen Duke 共同撰寫的改進提案 BIP 360 昨日進行更新,提出一種名為 P2MR(Pay-to-Merkle-Root)的新輸出類型,透過軟分叉,在不強制所有人遷移的前提下,為比特幣增加一層抗量子防護。

核心概念其實很直觀:現行的 Taproot(P2TR)有兩條花費路徑,其中「密鑰路徑」依賴橢圓曲線密碼學(ECC),而這正是量子電腦理論上能用 Shor 演算法攻破的部分。P2MR 的做法是直接把這條量子脆弱的路徑拆掉,只保留腳本樹路徑。

面對量子攻擊的潛在威脅。BIP 360 不是恐慌式的全面改造,而是一次「有備無患」的最小改動,它甚至不包含後量子簽名方案(如 ML-DSA、SLH-DSA),而是先搭好框架,為未來整合這些方案鋪路。以下動區為您做該提案的內容翻譯:


摘要

本提案透過軟分叉引入一種名為 Pay-to-Merkle-Root(P2MR)的新輸出類型。P2MR 的運作方式類似於 P2TR(Pay-to-Taproot),但移除了量子脆弱的密鑰路徑花費。

本提案使開發者能夠以下列方式使用腳本樹和 tapscript:

  1. 抵禦具備密碼學破解能力的量子電腦(CRQC)發動的長期暴露攻擊
  2. 抵禦未來可能破解橢圓曲線密碼學的密碼分析方法

重要說明: P2MR 輸出僅提供對「長期暴露攻擊」的抵禦能力——即針對長時間暴露的密鑰進行的攻擊。對「短期暴露攻擊」(即交易在記憶池等待確認期間的攻擊)的防護,可能需要未來實作後量子簽名方案。

本文件在術語表中對「長期暴露」和「短期暴露」攻擊進行了定義和補充說明。

動機

量子運算對比特幣的主要威脅來自於其可能破解數位簽名安全性的能力。具體而言,Shor 演算法使 CRQC 能以指數級加速求解離散對數問題(Discrete Logarithm Problem),從而從公鑰推導出私鑰——這稱為「量子密鑰恢復」(quantum key recovery)。

儘管 CRQC 的可行性時間表仍不確定,多個機構已表達關切:

  • 美國商業國家安全演算法套件(CNSA)2.0 要求在 2030 年前完成後量子方案升級,瀏覽器和作業系統須在 2033 年前全面升級
  • NIST IR 8547 計畫在 2035 年後禁止美國聯邦政府使用橢圓曲線密碼學(混合加密方案例外)
  • 使用者對量子技術進展的焦慮影響了比特幣的採用和信心

即使在最樂觀的情況下——量子電腦永遠不會威脅到 ECC——回應使用者對量子風險的擔憂也可能強化網路的採用。

P2MR 代表一個保守的第一步——在不強制所有人參與的前提下,啟用抗量子的比特幣使用方式。

長期暴露攻擊 vs 短期暴露攻擊

長期暴露攻擊(Long Exposure Attack): 針對已暴露在區塊鏈上的資料(公鑰、已花費輸出的腳本)進行的攻擊。攻擊者有充足的時間進行量子密鑰恢復。這很可能是量子電腦對比特幣最早的威脅。

短期暴露攻擊(Short Exposure Attack): 需要更快的量子電腦,必須在交易於記憶池中等待確認的短暫窗口內完成。由於大多數比特幣交易在花費時需要揭露公鑰,輸出通常都是脆弱的。

由於針對公鑰的長期暴露攻擊很可能是最早的量子威脅,P2MR 提出一種抵禦此類攻擊的腳本樹輸出類型,作為初步的安全強化措施。

輸出類型脆弱性對照表

類型脆弱前綴範例
P2PK不定02103203b768…eac
P2PKH否*11A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
P2MS不定52410496ec45…
P2SH否*33FkhZo7sGNue153xhgqPBcUaBsYvJW6tTx
P2WPKH否*bc1qbc1qsnh5ktku9ztqeqfr89yrqjd05eh58nah884mku
P2WSH否*bc1qbc1qvhu3557twysq2ldn6dut6rmaj3qk04p60h9l79wk4lzgy0ca8mfsnffz65
P2TRbc1pbc1p92aslsnseq786wxfk3ekra90ds9ku47qttupfjsqmmj4z82xdq4q3rr58u
P2MR否*bc1zbc1zzmv50jjgxxhww6ve4g5zpewrkjqhr06fyujpm20tuezdlxmfphcqfc80ve

*P2PKH、P2SH、P2WPKH、P2WSH 和 P2MR 中的資金,在腳本揭露公鑰時,仍可能受到長期暴露量子攻擊。

根本性脆弱的輸出類型:

  • P2PK 輸出
  • 重複使用的輸出
  • Taproot 輸出(bc1p)

注意:擴展公鑰(xpub)和錢包描述符也會揭露量子脆弱的公鑰資訊。

設計

P2MR 承諾至腳本樹的 Merkle 根,而不承諾至內部密鑰——移除了量子脆弱的密鑰路徑花費,同時保留腳本樹和 tapscript 功能。

P2MR 不使用 P2TR 的調整內部密鑰(tweaked internal key)方法,而是將 BIP 341 中定義的 32 位元組腳本樹根,以「TapBranch」標籤進行雜湊。

腳本樹建構

D = tagged_hash("TapLeaf", bytes([leaf_version]) + ser_script(script))CD = tagged_hash("TapBranch", C + D)CDE = tagged_hash("TapBranch", CD + E)ABCDE = tagged_hash("TapBranch", AB + CDE)

P2MR 見證結構

初始堆疊元素 0,...,初始堆疊元素 N,葉腳本(leaf script),控制區塊 = [控制位元組, 32*m 位元組 Merkle 路徑]

初始堆疊元素遵循 P2TR 腳本路徑花費規則,將元素放置於堆疊上供葉腳本執行。

控制區塊是 1 + 32*m 位元組的陣列。第一個位元組是控制位元組(透過 7 個位元指定葉版本)。與 P2TR 不同,P2MR 省略了控制區塊中的公鑰。奇偶位元固定為 1,因為 P2MR 沒有密鑰路徑花費。可選的附錄(annex)支援得以保留。

設計原理

P2MR 的設計遵循三項指導原則:

  1. 最小化網路變更: 重用現有的、經過實戰驗證的 P2TR、tapleaf 和 tapscript 程式碼,降低錢包、交易所和函式庫的實作負擔和複雜性風險。
  2. 為後量子簽名整合鋪路: P2MR 是唯一能抵禦長期暴露攻擊的腳本樹輸出類型。現有的抵禦類型(P2WSH)不支援 tapscript,缺少對後量子 OP_CHECKSIG 整合至關重要的 OP_SUCCESSx 操作碼升級路徑。
  3. 促進漸進式抗量子功能整合: 設計允許隨著量子電腦演進進行迭代採用,鼓勵有節制的而非應急式的應對。

P2MR 的取捨

見證大小: P2MR 的見證比 P2TR 密鑰路徑花費(僅需一個簽名)更大,但比等效的 P2TR 腳本路徑花費更小(因控制區塊中省略了 32 位元組的內部密鑰)。

隱私性: 花費 P2MR 輸出的使用者會揭露其使用了腳本樹,不像 P2TR 密鑰路徑花費那樣隱蔽。然而,P2MR 和 P2TR 的腳本路徑花費提供同等的隱私性,兩者都優於 P2SH(P2SH 會揭露未使用的腳本路徑)。

規格

P2MR 是一種原生 SegWit 輸出(BIP 141),使用版本 2 和 32 位元組的見證程式,功能類似 P2TR,但透過省略內部密鑰來停用密鑰路徑花費以實現抗量子。

地址格式

P2MR 輸出使用 SegWit 版本 2,根據 BIP 173 的 Bech32m 編碼,主網地址以「bc1z」開頭(版本 2 對應字元「z」)。

範例: bc1zzmv50jjgxxhww6ve4g5zpewrkjqhr06fyujpm20tuezdlxmfphcqfc80ve

此地址承諾至一個 32 位元組的腳本樹 Merkle 根。

ScriptPubKey

OP_2 OP_PUSHBYTES_32 <hash>

其中:

  • OP_2 表示 SegWit 版本 2
  • 是腳本樹的 32 位元組 Merkle 根

腳本驗證

P2MR 是具有 32 位元組見證程式的原生 SegWit 版本 2 輸出。驗證邏輯與 BIP 341 的腳本路徑驗證相同,但有以下修改:

驗證步驟:

  1. 令 q 為 32 位元組的見證程式(腳本樹的 Merkle 根)
  2. 若見證堆疊少於兩個元素,則失敗
  3. 若恰好有兩個元素且最後一個元素的第一個位元組為 0x50,則失敗
  4. 若至少有三個元素且最後一個元素的第一個位元組為 0x50,則移除此元素作為附錄 a(由簽名覆蓋、計入權重、驗證時忽略)
  5. 至少需保留兩個見證元素:
    • 倒數第二個元素 s 為腳本
    • 最後一個元素 c 為控制區塊,長度必須為 1 + 32*m(m 介於 0 到 128 之間)
    • 令 v = c[0] & 0xfe 為葉版本;c[0] 的最後一個位元必須為 1
    • 令 k₀ = hash_TapLeaf(v || compact_size(s 的長度) || s)
    • 對於 j 在 [0, 1, …, m-1] 中:
      • 令 eⱼ = c[1+32j : 33+32j]
      • 若 kⱼ < eⱼ:kⱼ₊₁ = hash_TapBranch(kⱼ || eⱼ)
      • 若 kⱼ ≥ eⱼ:kⱼ₊₁ = hash_TapBranch(eⱼ || kⱼ)
    • 令 r = kₘ
    • 若 q ≠ r,則失敗
  6. 使用 BIP 342 規則執行腳本,見證元素(排除 s、c、a)作為初始堆疊

與 BIP 341 的主要差異:

  • 見證程式是 Merkle 根,而非調整後的密鑰
  • 直接跳至腳本路徑驗證
  • 計算腳本樹 Merkle 根 r 並直接與 q 比較
  • 控制區塊為 1 + 32m 位元組,而非 33 + 32m 位元組

通用簽名訊息建構

P2MR 的簽名訊息建構完全沿用 BIP 342 的「通用簽名訊息」程序。

與 BIP 141 的相容性

P2MR 遵循 SegWit 交易結構和版本控制,維持與現有交易處理的相容性。不認識 SegWit 版本 2 的節點會將這些輸出視為「任何人可花費」(anyone-can-spend),但通常不會轉播或挖掘此類交易。

交易大小與手續費

P2MR 和 P2TR 的輸出大小始終相同。P2MR 的輸入大小相對於 P2TR 的輸入,取決於是密鑰路徑花費還是腳本路徑花費。

與 P2TR 密鑰路徑花費的比較

P2MR 的見證大於 P2TR 密鑰路徑花費的見證(後者僅包含一個簽名),因為每次 P2MR 花費都是腳本路徑花費,需要腳本、輸入堆疊和控制區塊。

P2MR 深度 0 樹的見證(103 位元組):

[計數] (1 位元組)[大小] 簽名 (65 位元組)葉腳本 = [大小] [OP_PUSHBYTES_32, 32 位元組公鑰, OP_CHECKSIG] (35 位元組)控制區塊 = [大小] [控制位元組] [Merkle 路徑(空)] (2 位元組)

P2TR 密鑰路徑花費見證(66 位元組):

[計數] (1 位元組)[大小] 簽名 (65 位元組)

差異:P2MR 多出 37 位元組。

在相同深度 m 的多葉 Merkle 樹中: P2MR 見證: 103 + 32m 位元組 比 P2TR 密鑰路徑多出: 37 + 32m 位元組

與 P2TR 腳本路徑花費的比較

P2MR 的見證比等效的 P2TR 腳本路徑花費小 32 位元組(因控制區塊中省略了內部公鑰)。

效能影響

P2MR 的驗證在運算上略優於 P2TR 腳本路徑花費,因為 P2MR 的操作是 P2TR 腳本路徑操作的嚴格子集。

向後相容性

缺乏 SegWit 版本 2 支援的舊版錢包和節點無法辨識 P2MR 輸出。根據 BIP 350,舊版錢包應能向 SegWit 版本 2 輸出進行支付。使用者必須確保更新錢包和節點,才能接收 P2MR 和驗證相關交易。

P2MR 與 tapscript 完全相容;現有的 tapscript 程式可在 P2MR 中無需修改即可運作。P2MR 支援使用新葉版本的未來腳本。

安全性

P2MR 提供與 P2TR 相同的 tapscript 功能,但移除了量子脆弱的密鑰路徑花費。這種相似性使得腳本樹可以直接從 P2TR 遷移至 P2MR,以獲得長期暴露量子攻擊的防護。

公鑰暴露防護要求使用者避免重複使用公鑰和其他不安全的做法。

P2MR 使用 256 位元雜湊輸出(128 位元抗碰撞性、256 位元抗原像性),與 BIP 141 中的 P2WSH 安全等級一致。

P2MR 不防護短期暴露量子攻擊,但未來啟用後量子簽名可以減緩此風險。

結合後量子簽名,P2MR 可提供全面的抗量子能力,包括短期暴露防護。

不應低估單獨的長期暴露防護——早期的 CRQC 很可能缺乏進行短期暴露攻擊的速度,這使得長期暴露的防備在時間上更為緊迫。

後量子簽名方案的安全考量

本提案不引入後量子簽名,但涉及相關的安全考量。

抗量子演算法(ML-DSA、SLH-DSA)提供不同層級的保護,在使用前需要嚴格審查。關於比特幣後量子簽名提案的研究仍在持續進行。

使用多種後量子簽名以實現冗餘是可以想像的,儘管平衡複雜性與簽名類型冗餘的收益存在挑戰。

測試向量與參考程式碼

P2MR UTXO 建立的測試向量可在 BIP 儲存庫中取得。

這些向量建立在 BIP 341 測試向量之上,主要差異在於:P2MR 測試向量排除了密鑰路徑花費的場景。

Rust 和 Python 的實作包含測試向量。其中一個測試展示了花費 P2MR UTXO 所需的 secp256k1 簽名的 tapscript(以 Taproot 腳本路徑範例為模型)。遵循 BIP 341 向量,所有簽名使用零值(0x0000…0000)BIP 340 輔助隨機數。

相關工作

移除密鑰路徑的 Taproot

「OP_CAT 讓比特幣抗量子」一文指出,停用 Taproot 密鑰路徑花費並啟用 OP_CAT(BIP 347),可透過 Lamport 簽名實現抗量子。

基於 CAT 建構的 Lamport 和 WOTS 是抗量子的,但屬於一次性簽名——簽名兩次會洩露私鑰,造成重大安全隱患。

這要求錢包行為進行重大變更,並代表顯著的安全降級。RBF(手續費替代)和 CPFP(子付父)等做法在沒有無狀態簽名方案的情況下可能暴露私鑰。

「使用乾淨升級路徑的簡易量子抗性簽名」及相關討論探討了移除密鑰路徑的 Taproot。P2MR 的設計部分受到這些對話的啟發。

承諾-揭露方案

承諾-揭露方案(Commit-Reveal)和「後量子承諾/揭露 Fawkescoin 變體」已被提出,用於無需公鑰密碼學的加密貨幣。

Tadge Dryja 近期的「Lifeboat」提案透過類似的預承諾機制,為比特幣交易提供量子防護,專為比特幣設計。

其他應對量子脆弱性的方法

以太坊的方案: Vitalik Buterin 的提案涉及在量子竊盜發生後透過硬分叉進行鏈回滾,使用基於 BIP 32 種子的 STARKs 作為權威密鑰。

比特幣適用性:鏈回滾對比特幣而言不可行,且在實務上很可能行不通。

STARKs(抗量子)可能在證明外部私鑰存取方面有用,適用於社群選擇如 Jameson Lopp 等人在 QBIP 中提出的脆弱幣銷毀方案。

幣銷毀和供應衝擊緩解的討論超出本提案範圍。部分團隊成員另行提出了「Hourglass」方案來處理這些問題,研究仍在進行中。

結論

P2MR 採取「有備無患」而非恐慌的態度來應對量子運算的可能進展,為比特幣使用者提供可選的增強防護。本 BIP 不對量子運算時間表表態,而是提出靈活、不具侵入性的選項,讓使用者根據個人的量子風險評估做出選擇。

量子運算的討論至少自 2012 年起就出現在比特幣論壇中,顯示使用者對增強量子防護有明確需求。

翻譯基於 BIP 360 v0.11.0(2024-12-18)。原文見 GitHub

출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트