MSTR Cat

区块链/等级 IV · 深入协议/4.2 升级/课程 1

Taproot与Schnorr签名

隐藏合约的密钥,以及小到能装进口袋的签名

材料一款能够查看原始交易十六进制数据的区块浏览器支持 Taproot 地址(bc1p)的钱包BIP341与BIP340规范文档

好奇

  1. 为什么在区块链上,一份复杂的多方协议看起来会和简单的个人支付完全一样?
  2. 多个私钥如何合并成一个公钥,同时始终不向观察者暴露这些私钥的存在?
  3. 究竟是哪种数学特性,能让十个人的签名与一个人的签名无法区分?

探索

  1. 在 Taproot 出现之前,每当币被花费时,复杂的支出条件都会被完整公开(对于裸脚本,这些条件甚至直接存放在输出中):多签支出会显示每位参与者的公钥,时间锁会显示其时长,哈希锁会显示其结构。这种公开透明给高级用户带来了隐私风险,并让冗余数据挤占区块空间。网络把所有脚本都当作一览无余的公开内容,迫使复杂的安排向每个节点和观察者广播其完整逻辑。
  2. Taproot(BIP341)改变了承诺模型。现在,一个输出指向单个32字节的公钥 Q,其计算方式为 P + t·G。其中,P 是由主要花费方控制的内部密钥,而 t 承诺了一棵可选的备用脚本树的默克尔根。在链上,该输出看起来与任何单密钥支付无异,其背后的复杂性都被隐藏起来。
  3. Schnorr 签名(BIP340)是这种高效性的基础。ECDSA 使用长度可变的 DER 编码,平均为71–72字节;与之不同,Schnorr 生成固定长度的64字节签名(使用非默认签名哈希类型时为65字节)。固定长度简化了解析,并降低了交易权重。Schnorr 方案的线性特性还支持密钥聚合:借助 MuSig2 等协议,多个公钥可以合并为一个聚合密钥,使一组参与者能够像单一实体一样签名,而不暴露各个参与者。
  4. 花费可以通过两条不同的路径进行。在密钥路径中,各方协作并使用聚合密钥签名;由此产生的交易与任何普通的单密钥支付都无法区分。不会暴露任何脚本,也不会附加额外数据。这为闪电网络通道或多签钱包的协作关闭保护了隐私,确保复杂的金融安排不会向区块链公共账本泄露元数据。
  5. 如果协作失败,就会启用脚本路径。花费方公开默克尔树中的某一个叶子,并附上其属于该树的证明。未使用的分支保持隐藏,从而保护备选条件的隐私。这种机制被称为默克尔化抽象语法树(MAST),它允许多种支出规则——例如延迟提款或紧急密钥——共存于同一个输出中,并且只有在确实必要时才会暴露。
  6. 其实际影响十分显著。Taproot 地址以“bc1p”开头。MuSig2(BIP327)对密钥聚合进行了标准化,使不同钱包厂商之间的多签能够互操作。FROST 等门限方案也在为类似目的而开发中。2021年11月,在区块高度709,632,网络采用了这一结构,使复杂脚本在协作使用时默认更小、更便宜且更具隐私性。

关键事实

  • Taproot(BIP341)于2021年11月在区块高度709,632激活。
  • Taproot 输出承诺于单个密钥 Q = P + t·G,其中 t 是对 P 以及(如存在)脚本树根计算得出的带标签哈希。
  • Schnorr 签名(BIP340)固定为64字节,消除了 DER 编码的开销。
  • 密钥路径花费不会暴露任何脚本,与单密钥支付无法区分。
  • 脚本路径花费只会暴露实际使用的那个脚本叶子,其他分支保持隐藏。
  • MuSig2(BIP327)支持 n-of-n 密钥聚合,使多签钱包能够互操作。

练习 九、六、三、一

9收集列出 Taproot 出现之前存在的9种不同的比特币支出条件或脚本,并注明每种在链上造成的具体隐私泄露或体积代价。
6归类根据这些条件在 Taproot 输出中的处理方式,将其分为6类:通过密钥路径完全隐藏、仅在发生争议时才显示、通过 MuSig2 进行聚合,或是通过其他结构变化来处理。
3提炼将这6个类别归纳为3个核心原因,说明为何将脚本隐藏在单个密钥之后能够提升网络效率并改善用户隐私。
1凝结用一句话说明 Taproot 中的默克尔树结构如何让复杂的金融协议无需公开其条款。

事实核查

日期、数字及数据均依据下方列出的已发表资料进行核实。

在互动学院中打开 →

EN PT ES JA KO RU DE FR MS