比特币抵御量子攻击脚步持续前进,由 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:
- 抵御具备密码学破解能力的量子电脑(CRQC)发动的长期暴露攻击
- 抵御未来可能破解椭圆曲线密码学的密码分析方法
重要说明: 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 | 否* | 1 | 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa |
| P2MS | 是 | 不定 | 52410496ec45… |
| P2SH | 否* | 3 | 3FkhZo7sGNue153xhgqPBcUaBsYvJW6tTx |
| P2WPKH | 否* | bc1q | bc1qsnh5ktku9ztqeqfr89yrqjd05eh58nah884mku |
| P2WSH | 否* | bc1q | bc1qvhu3557twysq2ldn6dut6rmaj3qk04p60h9l79wk4lzgy0ca8mfsnffz65 |
| P2TR | 是 | bc1p | bc1p92aslsnseq786wxfk3ekra90ds9ku47qttupfjsqmmj4z82xdq4q3rr58u |
| P2MR | 否* | bc1z | bc1zzmv50jjgxxhww6ve4g5zpewrkjqhr06fyujpm20tuezdlxmfphcqfc80ve |
*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 的设计遵循三项指导原则:
- 最小化网路变更: 重用现有的、经过实战验证的 P2TR、tapleaf 和 tapscript 程式码,降低钱包、交易所和函式库的实作负担和复杂性风险。
- 为后量子签名整合铺路: P2MR 是唯一能抵御长期暴露攻击的脚本树输出类型。现有的抵御类型(P2WSH)不支援 tapscript,缺少对后量子 OP_CHECKSIG 整合至关重要的 OP_SUCCESSx 操作码升级路径。
- 促进渐进式抗量子功能整合: 设计允许随著量子电脑演进进行迭代采用,鼓励有节制的而非应急式的应对。
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 的脚本路径验证相同,但有以下修改:
验证步骤:
- 令 q 为 32 位元组的见证程式(脚本树的 Merkle 根)
- 若见证堆叠少于两个元素,则失败
- 若恰好有两个元素且最后一个元素的第一个位元组为 0x50,则失败
- 若至少有三个元素且最后一个元素的第一个位元组为 0x50,则移除此元素作为附录 a(由签名覆盖、计入权重、验证时忽略)
- 至少需保留两个见证元素:
- 倒数第二个元素 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,则失败
- 使用 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。






