ECDSA随机数
摘要
在ECDSA过程中,需要一个随机数(也可能是确定性的不重复的哈希)来对消息签名。
如果你对不同的消息使用了同一个随机数,则私钥会暴露。
最出名的事件莫过于Sony PlayStation 3 Hack.
密码学背景
以下为几步简化的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
开发者应该尽可能熟悉底层的密码学知识以避免类似攻击
最后更新于