ECDSA随机数
最后更新于
最后更新于
在ECDSA过程中,需要一个随机数(也可能是确定性的不重复的哈希)来对消息签名。
如果你对不同的消息使用了同一个随机数,则私钥会暴露。
最出名的事件莫过于.
以下为几步简化的ECDSA过程:
私钥 d_A,由RNG生成的随机数
公钥 Q_A:
计算消息M
的哈希值h = hash(M)
生成随机数k
计算随机点R = kG
将点R的横坐标R.x
记为r
, 然后计算s
这样就得到了签名(r,s)
.
计算消息M
的哈希值h = hash(M)
计算其逆
恢复在签名时使用的随机点
检查是否有R'.x == r
显然,如果我们对不同的消息M
使用了相同的k
(也意味着r
相同),可以通过下列几步解出私钥:
使用ECDSA签名时绝不使用相同的随机数
或者,使用确定性ECDSA
开发者应该尽可能熟悉底层的密码学知识以避免类似攻击