比特币签名机制革新:SIGHASH_ANYPREVOUT的实现路径

本系列第三篇聚焦于比特币在可升级性框架下引入的新签名模式——SIGHASH_ANYPREVOUT,该提案源自BIP-118,是对早期闪电网络白皮书中提出的SIGHASH_NOINPUT概念的延续与演进。该机制并非新增操作码,而是作为软分叉中的一项标志位扩展,旨在增强交易签名的灵活性。

签名承诺范围的重新定义

SIGHASH_ANYPREVOUT通过将输出点从签名摘要中移除,打破了原有模式对特定前一笔输出的强制绑定。在标准模式中,如SIGHASH_ALL需覆盖全部输入输出及具体出块索引;而SIGHASH_ANYPREVOUT则允许同一签名适用于多个满足金额与脚本条件的兼容UTXO,前提是其余承诺字段保持一致。这一变化使得预签名交易可在链上多场景复用,显著提升效率。

两种变体的技术差异与适用场景

BIP-118定义了两个核心变体:SIGHASH_ANYPREVOUT与SIGHASH_ANYPREVOUTANYSCRIPT。前者仅省略输出点信息,仍保留对金额和锁定脚本的承诺,适用于需要保持资金归属一致性的协议;后者进一步排除金额与scriptPubKey,使签名完全脱离原始输出约束,但因此不适用于依赖脚本绑定的Covenant类应用。

重复使用能力与潜在应用场景

由于签名不再绑定唯一输出点,同一预签名可被用于花费后续到账的同额或兼容金额的UTXO,即使原始私钥已丢失。这种“重新绑定”特性对跨链桥、支付通道等二层协议极具价值,可避免为每笔新入账生成新签名。然而,若新UTXO金额超过原设定且无找零处理,则超额部分将归矿工所有,存在资产损耗风险。

理论构造与潜在安全机制

有研究指出,移除输出点承诺可能支持一种名为“密钥恢复”的构造——即从固定签名对中推导出一个无法由任何人掌握私钥的公钥,从而强制该UTXO只能通过脚本路径花费。该设想源于Jacob Swambo等人2020年的论文,虽具启发性,但尚未纳入正式协议设计,仍属理论探索范畴。

主要安全隐患:签名重放风险分析

核心风险在于签名可被跨UTXO重用,只要目标输出满足金额、脚本及序列号等条件。当配置为ANYPREVOUT | SINGLE且输出可调整时,或存在相同脚本与金额的另一笔输出时,重放攻击可能性上升。此外,矿工若能操控交易排序,也可能利用此漏洞实施攻击。这些情况通常源于不当设计或用户未充分评估重放边界,而非协议本身缺陷。