跳转到正文
buybitcoinsmart

术语表 /协议与升级

Schnorr 签名

又称 BIP340。

Schnorr 签名是什么?
Schnorr 签名是比特币随 Taproot 采用的64字节签名方案,其决定性特征是线性:多个密钥和签名可以相加为一个。

规定于 BIP-340。

ECDSA 签名长度为71或72字节,且无法合并;Schnorr 签名长度始终为64字节,且可以合并。正是这一差别,使得两名签名者,乃至十五名签名者,可以生成一个对单个公钥验证通过的单一签名,链上没有任何信息表明签名者有多少人。比特币通过 BIP-340获得了这一方案,该提案创建于2020年1月,自区块709,632起强制执行。

运作方式

该方案使用比特币一直使用的同一条椭圆曲线 secp256k1,以及同样的私钥。改变的是围绕它们的代数运算。

签名时,您先选取一个秘密随机数(nonce),将其生成的点作为 R 公布,然后根据该随机数、R 与公钥和消息一起的哈希值以及您的私钥,计算出一个数 s。签名就是 R 和 s,各自以32字节写出,固定的64字节长度即由此而来。验证时将同一方程重新整理,并检查两个点是否一致。ECDSA 在这一过程中需要做一次模逆运算;Schnorr 不需要,而正是这一缺失的模逆运算,使整个方案保持线性。

线性是其实际收益所在。将两个私钥相加,其和即可为两个公钥之和签名,因此一个群体可以共用一个表面上的密钥。它还支持批量验证:节点验证区块时,可以在一次聚合运算中检查数百个签名,而不必逐个检查,这在初始区块下载期间尤为重要。

BIP-340中有两处细节是为防止常见的陷阱而设。公钥采用仅 x 坐标的形式,为32字节,y 坐标隐含在内,这消除了同一密钥存在两种编码时曾带来的歧义。此外,所有哈希都是带标签的哈希,前面加有域字符串,因此为某一用途所作的签名,永远不会被当作有效签名在另一个恰好对相似字节取哈希的协议中重放。

nonce 仍然是最危险的环节。在两条不同的消息中重复使用同一个 nonce,只需简单的算术就会暴露私钥,这与 ECDSA 完全一样,因此 BIP-340规定了一种确定性的推导方式,并混入可选的辅助随机数,而不是把选择权留给实现者。

这一切没有在2009年出现,是有原因的。Claus Schnorr 持有该方案的美国专利4,995,082,直到2008年2月才到期,比比特币白皮书问世早几个月。当时 ECDSA 是不受专利限制的标准,因此比特币采用了次优的选择,并等了十二年才加以纠正。

购买比特币时为何重要

对单密钥钱包而言,这一影响微乎其微;对任何保管大额资产的人来说,它却是比特币新增的最有用的密码学技术。

首先是跨多台设备持有比特币的成本。按旧方式花费的2-of-3多重签名,每笔交易都要公布两个签名和三个公钥,因此每次转移资金,您都要为整套策略付费。通过 Taproot 以合作方式花费时,只公布一个签名,其他密钥不会出现。如果您整合小额资金,节省的费用会不断累积,而长期持有者最终做的正是这件事。

其次是对隐私的影响,这一影响更大。链上分析公司按形态对地址分类,而多重签名一直是一种十分显眼的形态。本站评测的硬件钱包可以在此类安排中充当共同签名方,而在 Taproot 之前,您妥善保护自己这一行为本身,就会让观察者知道您持有值得保护的资产。以合作方式进行的 Schnorr 花费消除了这一破绽,同时不削弱任何安全性。

对于继承规划,权衡也随之改变。由于 Taproot 树中未使用的分支不产生任何成本,您可以为家人添加一条带时间延迟的恢复路径,而无需在每次普通花费时为此付费。这是一个真正全新的选项,在设计之前,值得先阅读本站的安全指南,因为巧妙的托管方案的失败方式是失去访问权限,而不是被盗。

MuSig2:两名签名者,一个签名

MuSig2 已标准化为 BIP-327,是把线性特性变成钱包可以实际使用的功能的协议。

直接把公钥相加并不安全。如果某位参与者在公布自己的密钥之前就得知了其他所有人的密钥,就可以构造出一个能抵消其他人密钥的密钥,最终得以独自签名。这就是流氓密钥攻击,MuSig2 的应对办法是用由整个密钥集合推导出的系数给每个密钥加权,使任何参与者都无法自由选择自己的密钥。

签名流程分为两轮。各方先发送 nonce 承诺,再各自发送部分签名,这些部分签名相加后,就是对聚合密钥有效的一个 Schnorr 签名。分为两轮很重要,因为第一轮可以提前完成,这使该方案可用于需要频繁交换签名的闪电网络通道。

最终上链的是一个64字节的签名,用于花费一个密钥路径输出。双方合作的一次花费约需57.5虚拟字节,低于其他任何输入类型,而且观察者无法判断授权者是一个人还是一个委员会。

Schnorr 签名 vs 签名

在比特币中,单说“签名”通常仍指 ECDSA,两种方案目前都在日常使用。位于以1、3或 bc1q 开头的地址上的比特币,用 ECDSA 花费,与2010年时完全一样。位于 bc1p 地址上的比特币,则用 Schnorr 花费。同时持有两类地址的钱包(大多数有一定使用历史的钱包都是如此)会在同一次会话中生成两种签名,且不会提示。任何人若说比特币只使用 ECDSA,那描述的只是2021年11月之前的协议状态。

Schnorr 签名 vs MuSig2

Schnorr 是签名方案;MuSig2 是构建在其上的一种协议。您可以一直使用单密钥的 Schnorr 而从不接触 MuSig2,目前所有普通的 Taproot 钱包都是这样做的。只有当多方希望看起来像一方时,才会用到 MuSig2,而且它并不是基于同一特性构建的唯一选择:允许缺少一名签名者的门限方案,以及用于原子交换和闪电网络的适配器签名,是各自独立的构造,利用的是同样的线性特性。

请勿混淆

常见问题

Schnorr 签名比 ECDSA 更安全吗?

两者基于同一条曲线和相同的密钥长度,因此安全级别相当。Schnorr 的优势在于安全性证明更简洁、长度固定为64字节,并且可以合并密钥,这正是比特币采用它的原因。

比特币为什么一开始没有使用 Schnorr 签名?

原因是专利。Claus Schnorr 持有该方案的美国专利4,995,082,直到2008年2月才到期,比比特币白皮书问世早了几个月,因此在比特币上线时,ECDSA 是当时可用的、不受专利限制的标准。

我需要做些什么才能使用 Schnorr 签名?

不需要,只需使用 Taproot 地址。从 bc1p 输出发起的任何支出都会自动生成 Schnorr 签名,而对于存放在较旧地址类型中的比特币,您的钱包仍会继续生成 ECDSA 签名。

接着阅读

相关术语

协议与升级中的更多术语

阅读本页英文版