ECDSA在区块链应用中的七宗罪

字数 703阅读 31

基于椭圆曲线secp256k1的ECDSA由于Bitcoin中的部署,逐渐成为区块链项目中默认的签名机制. 然而在Bitcoin诞生的时期, 工程项目中更多采用基于一条名为secp256r1的椭圆曲线的ECDSA签名机制, Bitcoin中最初采纳secp256k1的真正原因已不可知,我们只能进行揣测, 也许是secp256r1曲线中可能埋藏的由NSA引入的算法后门, 也许是非常适合secp256k1支持的自同态映射能够加速签名验证过程的特性.

在区块链场景中应用基于secp256k1的ECDSA,带来了诸多方面的挑战,稍有不慎,就可能在区块链网络中引发安全问题,或者数字货币资产的损失. 回顾区块链发挥过程中踩过的坑,我们总结了ECDSA签名机制在区块链场景中应用时的七宗罪:

  1. 如果签名过程中随机数值泄露, 则任何知道该随机数值的⼈可以使⽤该随机数产⽣签名值恢复私钥
  2. 如果同一个用户对两个不同的消息签名时,采用了相同的随机数,则则任何⼈都可以通过两个签名值恢复出私钥
  3. 如果两个用户执行ECDSA签名时采用了相同的随机数,则两人中的任何一方可以推算出另一方的私钥
  4. 如果相同的私钥和随机数被同时用于ECDSA签名和Schnorr签名,则任何⼈都能够恢复出私钥
  5. ECDSA签名值的可锻造性带来的安全隐患
  6. ECDSA签名值的DER编码的不唯一性会带来的安全隐患
  7. 如果验签时不要求提供被签名的消息,则任何人都可以伪造签名值

在介绍ECDSA七宗罪的原理之外,还介绍了应对措施. 值得一提的是, Craig Wright (澳本聪)曾经利用上述的第7个问题,伪造中本聪的签名,并进而仅此宣称自己是中本聪.

在各种安全问题之外, ECDSA签名机制也拥有非常适合区块链场景的特性,比如可以从签名值中恢复出公钥, 利用这个特性可以缩减每笔交易的大小,以太坊中利用了这个特性.

secp256k1和secp256r1的对比, 七宗罪的背后的数学原理和应对措施, 从ECDSA签名值恢复公钥的数学原理以及在libsecp256k1中的应用详情, 请移步链接: [这里放pdf文件的链接]

详细原文请点击:https://github.com/coinexchain/docs/blob/master/190722-secp256k1-ecdsa-dangers.pdf

本文由CoinEx Chain团队温隆写作,转载无需授权。