27

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

 4 years ago
source link: https://www.tuicool.com/articles/j2uayqb
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

基于椭圆曲线 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 中的应用详情 , 请点击【阅读原文】


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK