BIP 143(SegWit 签名验证)
一句话定义: 定义 SegWit v0 交易的签名哈希与验证格式——公钥在见证数据中暴露的位置。
BIP-143 规定 SegWit 版本 0 输出——即 SegWit(BIP-141)引入的 P2WPKH 和 P2WSH 脚本类型——的签名计算与验证方式。2017 年 8 月随 SegWit 软分叉一起激活。
相对旧的 ECDSA 签名验证,三处改动,每一处都有分量:
- 签名数据移入见证(witness)。 旧的 P2PKH 花费中,签名和公钥放在 scriptSig 里。SegWit v0 里,它们放在一个结构上独立于交易主体的见证字段中。这就是大规模修复交易延展性的那一步:第三方再也不能通过篡改签名编码在确认前改变交易 ID(txid)。
- 被签名的消息包含输入金额。 旧式 ECDSA 验证不承诺被花费输出持有多少聪。硬件钱包签名时只能相信宿主软件报告的输入金额,由此产生一类「多付手续费」攻击——恶意宿主可以骗签名器付出超出预期的钱。BIP-143 把输入金额写进签名哈希,堵住了这条路。
- 新的签名哈希计算模式。 新模式避开了特大旧式交易中的平方级哈希问题——旧模式下签名验证成本随交易大小平方增长。
一个值得知道的后果:P2WPKH 花费的 SegWit v0 见证里同时包含花费方的签名和公钥。首次花费前,地址只是公钥的 160 位哈希;首次花费后,公钥就永久躺在那笔花费交易的见证里。这是「后量子」语境下已暴露地址类的机制:一旦花费过,公钥对任何读链的人可见。
由 Johnson Lau 和 Pieter Wuille 撰写,与 BIP-141(SegWit 总纲)、BIP-144(见证数据的区块转发格式)、BIP-147(NULLDUMMY 软分叉规则)一同激活。
规范:BIP-143。
相关词条: BIP(比特币改进提案) · SegWit(隔离见证,BIP 141) · P2WPKH(付给见证公钥哈希) · P2WSH(付给见证脚本哈希) · P2PKH(付给公钥哈希) · ECDSA · 公钥(Public Key) · Taproot · 后量子比特币(Post-Quantum Bitcoin)