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

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