BIP 360(付给默克尔根 P2MR)
一句话定义: 草案:定义 P2MR——移除密钥路径花费的 Taproot 变体,地址只承诺脚本树默克尔根,创建输出时链上无公钥,抵御长期暴露的量子攻击。
BIP-360 是付给默克尔根(P2MR)的草案提案——一种功能上与 P2TR 几乎相同、但移除密钥路径花费的新输出类型。bech32m 地址只承诺脚本树的默克尔根;输出创建时不暴露任何公钥。
这一处改动正是 P2MR 作为部分量子加固的意义。P2TR 天生「始终暴露」(bech32m 地址就是调整后的公钥),P2MR 则在脚本路径花费揭示一个叶子之前什么都不暴露。针对长期挂在链上的公钥的量子攻击——长暴露攻击——对这些输出无从下手。
地址格式
P2MR 采用 SegWit 版本 2、bech32m 前缀 bc1z(对照:v0 是 bc1q,v1 是 bc1p)。输出脚本是 SegWit 版本字节加脚本树的 32 字节带标签 TapBranch 默克尔根。花费只走脚本路径:见证揭示一个 tapleaf、其初始栈与控制块(控制字节 + 默克尔路径)——省去 P2TR 控制块会携带的内部密钥。
长暴露 vs 短暴露
BIP-360 仔细区分两类攻击:
- 长暴露攻击瞄准长期(数月到数年)躺在链上的公钥。P2MR 对 tapscript 输出封死这条路:那个始终暴露的密钥路径被移除了。
- 短暴露攻击瞄准交易广播到确认之间那几分钟里暴露在内存池中的公钥。P2MR 不解决这个。完整的短暴露修复需要后量子签名方案,那被推迟到另一份尚未写就的 BIP。
这是「保守的第一步」的定位。P2MR 修掉最具体的量子风险——中本聪时代 P2PK 密钥、复用地址的密钥、P2TR 密钥的长期暴露——又不把协议绑死在任何特定后量子签名方案上。
为什么不直接用 P2WSH
P2WSH 出于类似原因本来就抗长暴露(见证脚本被哈希,花费前不揭示)。P2MR 的存在理由是 tapscript。P2WSH 不支持 tapscript,也就吃不到 OP_SUCCESSx 操作码升级路径——若后量子签名到来,那将是加入后量子版 OP_CHECKSIG 最干净的方式。P2MR 是独一份的组合:长暴露抗性 + 未来 PQ 签名操作码需要的 tapscript 机器。
与 BIP-361 的关系
BIP-361 定义在多年窗口内逐步淘汰 ECDSA 与 Schnorr 花费的迁移时间表。BIP-361 假设存在一种抗量子的输出类型作为迁移目的地;BIP-360 的 P2MR 是候选之一。两份 BIP 设计为一起落地,但 BIP-360 也可以独立先行,作为愿意现在就要长暴露防护的用户的主动加固选项。
状态
草案。 未激活、未排期、非共识。编号分配于 2024-12-18。作者 Hunter Beast(Surmount)、Ethan Heilman、Isabel Foxen Duke。
建立在 Taproot 栈上:BIP-360 依赖 BIP-340(Schnorr)、341(Taproot)、342(Tapscript)。
P2MR 要解决的「始终暴露」问题,见量子与比特币专题。
规范:BIP-360。
相关词条: BIP(比特币改进提案) · BIP 361(后量子迁移) · BIP 341(Taproot) · BIP 342(Tapscript) · Taproot · 后量子比特币(Post-Quantum Bitcoin) · P2WSH(付给见证脚本哈希) · ECDSA · Schnorr 签名 · ML-DSA / Dilithium(FIPS 204) · SLH-DSA / SPHINCS+(FIPS 205) · 软分叉(Soft Fork) · 公钥(Public Key)