MSTR Cat

区块链/等级 II · 运作机制/2.1 密码学/课程 4

数字签名:ECDSA与Schnorr

一种无需暴露密钥即可授权支出的数学机制

材料一个显示见证数据的区块浏览器一笔原生 SegWit 支出和一笔 Taproot 密钥路径支出,用于比较

好奇

  1. 签名如何在不泄露该秘密数字的情况下证明对它的控制权?
  2. 为何索尼的 PlayStation 3 以及几款安卓比特币钱包会因随机数(nonce)被重复使用或可被预测而泄露私钥?
  3. 与 ECDSA 相比,是什么让 Schnorr 签名更小、更快,并且具备聚合功能?

探索

  1. 数字签名能够在不泄露私钥的情况下证明对该私钥的所有权。在比特币中,要花费一笔交易输出,就需要用与该输出锁定脚本中的公钥相对应的私钥对交易哈希进行签名。任何人都可以使用该公钥和消息哈希来验证签名。这一机制确保只有密钥持有者才能授权转账,同时保护隐私。
  2. ECDSA标准由ANSI X9.62(1999年)制定,自2009年起便成为比特币的主要签名算法。该算法会根据消息哈希值与一个随机数k生成一对数值(r, s)。其中r值为点k·G的x坐标;s值则为k⁻¹(hash + x·r) mod n,这里的x即为私钥。由于每次签名都需要一个新的随机数k,若重复使用或泄露该随机数,攻击者便可以直接计算出私钥。
  3. 2010年,fail0verflow团队证明索尼在所有签名中重复使用了同一个随机数,导致索尼PlayStation 3的签名密钥被攻破。2013年8月,由于Android的SecureRandom存在缺陷、会产生可预测的随机数,比特币也遭遇了类似的盗窃事件。RFC 6979(2013年)通过从私钥和消息哈希中确定性地推导出k解决了这一问题,从而不再依赖外部随机性来源。
  4. ECDSA签名具有延展性:对于给定的r值,存在两个有效的s值(s和n−s)。第三方可以换入等效签名,在不使交易失效的情况下改变其交易ID。比特币的策略规则要求进行“low-S”规范化,将s限制在曲线阶的下半部分。这一约束确保每条消息在每个随机数下只有一个规范签名。
  5. Schnorr签名由Claus-Peter Schnorr申请专利(美国专利1991年获批,2008年到期),并在BIP340中针对比特币完成标准化,生成固定长度的64字节签名,没有DER编码的额外开销。它具有线性特性:借助严谨的协议,多个公钥可以合并为一个聚合密钥,其签名也可以合并为一个签名。这使得MuSig2多签方案成为可能——在链上看起来与单签输出无异,从而减小交易体积并增强隐私。
  6. Taproot于2021年11月(区块高度709,632)激活,为P2TR输出引入了原生Schnorr签名支持。密钥路径支出的见证数据中仅需一个64字节的签名,而P2WPKH支出则需要71-72字节的ECDSA签名外加33字节的公钥。固定长度简化了解析,而且Schnorr支持批量验证,即把来自不同密钥的多个签名放在一起验证,比逐一验证更快——Bitcoin Core目前尚未使用这一功能。

关键事实

  • ECDSA(ANSI X9.62,1999)生成的签名为DER编码格式,长度约为71–72字节;而Schnorr(BIP340)生成的签名则为固定长度的64字节。
  • 重复使用或泄露 ECDSA 随机数 k 会暴露私钥:索尼 PS3(2010年)及安卓钱包被盗事件(2013年8月)。
  • RFC 6979 能够从私钥和消息哈希值中确定性地生成 k,从而无需依赖随机数生成器。
  • ECDSA签名具有延展性;比特币的策略规则强制要求“low-S”,以确保规范编码。
  • Schnorr签名具有线性特性:密钥和签名可以聚合(MuSig2),并可批量验证以提高效率。
  • Taproot于2021年11月(区块高度709,632)激活,为P2TR输出引入了原生Schnorr签名支持。

练习 九、六、三、一

9收集列出9种数字签名方案或密钥类型。注明其标准化机构、发布年份、输出大小以及是否支持聚合功能。
6归类按照验证复杂度将这9种分为6类:固定长度线性型、可变长度可延展型、可变长度规范型、可批量验证型、仅限单方型,以及混合型。
3提炼将这6类归纳为签名大小、隐私与计算效率之间的3个核心权衡。
1凝结用一句话说明,数字签名在密钥控制权方面保证了什么,又不会泄露什么。

事实核查

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

在互动学院中打开 →

EN PT ES JA KO RU DE FR MS