多轮协议挤进单向文档
PSBT 的哲学是把”一笔还没签好的交易”连同它的来历打包成一份可传递、可合并的文档,签名者拿到它、签完传下去。MuSig2 打破了这个单向流:聚合签名的每个输入要先做一轮 nonce 交换、再做一轮分片签名汇总,签名者之间需要中间数据在文档里周转。BIP-327 定义了 MuSig2 本身,却给不出 PSBT 里怎么携带这些数据的格式。2024 年 6 月由 Ava Chow 提交、状态已是 Complete 的 BIP-373 就干这一件事:给 PSBTv0 和 PSBTv2 各加四个字段,让 MuSig2 的轮次数据有了官方行李箱。
四个字段各装什么
第一个,输入级 PSBT_IN_MUSIG2_PARTICIPANT_PUBKEYS(类型字节 0x1a):值是该输入 MuSig2 聚合公钥的全部参与方压缩公钥,按聚合算法要求的顺序排列,若约定了排序则按排序后放。这里藏着一个细节:字段里还隐含聚合公钥本身用压缩格式而非 x-only——因为 BIP-32 派生要求奇偶字节,指纹识别需要完整公钥,不认识 MuSig2 的签名器也能靠算指纹判断哪个密钥从聚合钥派生、从而套用正确的 tweak。第二个,输入级 PSBT_IN_MUSIG2_PUB_NONCE(0x1b):按”提供者的压缩公钥 + 所服务的聚合公钥 + 可选 tapleaf 哈希”为键,值是 NonceGen 产出的压缩临时公钥;聚合钥若是 taproot 内部钥或输出钥,tapleaf 哈希省略。第三个,输入级 PSBT_IN_MUSIG2_PARTIAL_SIG(0x1c):同样以参与者为键,存各人产出的分片签名,等待汇总成一条与 BIP-340 完全兼容的普通签名。第四个,输出级 PSBT_OUT_MUSIG2_PARTICIPANT_PUBKEYS(0x08):给找零输出等场景记录该地址所属的参与方公钥集,钱包扫链时靠它认出”这个输出也是我们聚合管的钱”。
它在协作流里怎么运转
设想三人 MuSig2 钱包要共同花一笔钱:协调人建 PSBT,在每个输入的参与者公钥字段填齐三人公钥;把文档发给每人,各自生成 nonce 并把 pub_nonce 字段写好回传;协调人合并 nonce、确定聚合 nonce 后把文档再发一轮,各签者基于聚合 nonce 产分片签名写入 partial_sig 字段;协调人汇总成分片签名之和与聚合 nonce,得到最终签名填入见证。全程文档可以被任何人转来转去、断点续传、离线签署,与硬件钱包”插上来读 PSBT 再签”的工作流天然契合——这正是 BIP-327 从”适合协议”走向”适合产品”缺的那一环。合并规则沿用 PSBT 通用语义:同键同值合并、冲突报错,防止中间人偷换 nonce。
与近亲的边界
分清三个编号:BIP-327 是 MuSig2 算法本体(纯密码学);BIP-328 定义从聚合公钥单向派生的密钥派生法;BIP-373 只管”数据怎么放进 PSBT 行李箱”,依赖列表里还有 BIP-174(PSBTv0)与 BIP-370(PSBTv2)。与 Taproot 内建的 OP_CHECKSIGADD 多签相比,MuSig2 的链上表现是单钥单签名,隐私与费用更优,但必须多轮交互且参与方必须在线协作——PSBT 恰好就是为异步补齐交互而存在的载体。
运维视角的三步演练
想把 MuSig2 钱包投入生产,稳妥路径是三步。第一步在测试网完整跑一次协作循环:建 PSBT、交换 nonce、汇总分片签名、上链花费,每一步记录哪个字段在哪些角色间流动,顺手验证设备离线签名时文档能否拆开传递。第二步做对抗练习:故意用旧 nonce 重签一次、故意删一个参与方再合并,确认软件报错而不是静默产出废签名——PSBT 工具对 MuSig2 字段的错误处理成熟度,比功能清单更能反映实现质量。第三步演练灾难恢复:任意一台设备丢失后按备份重建,检查派生路径与聚合公钥能否精确复现。三步都过关再进主网,因为 MuSig2 的容错哲学与门限方案不同:它不做离线子集签名,协作链路上任何一环的静默偏差,最后都表现为那一条标准 Schnorr 签名验不过,排查面比看得到多签脚本的方案宽得多。
快速问答
问:字段能在PSBTv0和v2都用吗? 答:可以,四个字段声明为 0 与 2 两版通用,v1 草案从未部署无需考虑。
问:中间人换掉某个nonce会怎样? 答:聚合 nonce 变了,其他人后续产的分片签名对不上会被合并阶段检出;PSBT 键值冲突规则同时提供结构层防线。
问:软件支持情况? 答:该提案状态为 Complete(字段规范定稿),具体钱包与 PSBT 工具的支持程度取决于版本,操作前先小额试跑一轮。
风险提示:本文涉及密钥协作机制,不构成投资建议;任何保管方案上线前请完整演练恢复流程。
发表评论
还没有评论,来说两句吧。
评论区为展示样式,提交不会被处理。