跳转到内容

ECDSA

来自BitcoinWiki

椭圆曲线数字签名算法

椭圆曲线数字签名算法ECDSA)是一种公钥签名方案。签名者用私钥对消息摘要生成签名,任何持有对应公钥的人都可验证。ECDSA提供认证与完整性,而不是加密;它不会隐藏消息。[1]

Bitcoin在许多Taproot以前及SegWit输出中使用secp256k1上的ECDSA。Taproot改用同一曲线上的BIP 340施诺尔签名。[2]

工作原理

曲线参数定义阶为n的基点G。私钥是整数d,公钥为Q = dG。签署摘要z时,签名者选择一次性秘密随机数k,计算R = kG,由其x坐标得到r,再算s = k⁻¹(z + rd) mod n。签名为(r,s)

验证会检查取值范围并从zsQ计算曲线点。它确认签名、消息与公钥的关系,但不会泄露私钥,也不证明持有人的现实身份。[1] 256位曲线私钥通常为32字节,secp256k1公钥压缩后33字节,未压缩65字节。

随机数安全

同一私钥对不同消息不得重复k,且k不能可预测。重复或偏差可能通过代数或统计攻击暴露私钥。此类问题曾导致PlayStation 3签名密钥被恢复,并在2013年影响部分Android比特币钱包。

RFC 6979规定确定性ECDSA:从私钥和摘要导出k,普通验证器无需改变。[3]它不能防护已泄露私钥、侧信道、错误曲线运算或受控设备;仍需恒定时间实现、公钥验证和经过测试的库。

在比特币中的使用

比特币使用Secp256k1。传统签名以DER编码两个整数,并附加比特币sighash类型。BIP 66把严格DER变成共识规则。low-S形式减少可塑性,因为(r,n-s)也可能通过验证。[4]

签署的是依交易而定的摘要,sighash模式决定覆盖哪些输入输出。Taproot没有淘汰ECDSA:旧输出继续使用它,Taproot则验证64字节BIP 340施诺尔签名。[5]

量子计算研究

足够大的容错量子计算机理论上可用Shor算法从公钥恢复私钥,现有硬件尚无此能力。

2026年9月的一篇预印本优化了可逆secp256k1点加法电路。在论文截止时,最佳基准使用1,151个逻辑量子比特和平均约130万个Toffoli门,使宽度乘门数指标比一个已发表对比低逾50%。作者明确指出核算方式不同,而且该模型不是完整Shor攻击成功率估计。物理纠错、完整攻击的大量调用、运行时间和硬件仍是额外成本。[6][7]

该研究改进估算,而非展示现实攻击。若相应硬件出现,已经公开的公钥会成为直接目标。长期协议风险应与今天的密钥盗窃和钓鱼区分。

参见

参考资料

  1. 1.0 1.1 SECG,“SEC 1: Elliptic Curve Cryptography”,2.0版,2009年。
  2. BIP 340,已部署。
  3. RFC 6979,2013年。
  4. Bitcoin Core secp256k1库,2026年9月16日查阅。
  5. BIP 341,已部署。
  6. Long等,“ECDSA.Fail”,2026年9月9日提交。
  7. CoinDesk,量子资源估算报道,2026年9月10日。