椭圆曲线简单总结
写这篇文章原因是老是忘记每个符号代表什么,所以搞一个简单的对照表
元素 | 符号 |
---|---|
参考起始点 | G ,可以是任意一点 |
私钥dA | 一个随机数dA |
公钥QA | QA = dA x G |
随机数 | k |
消息摘要 | z |
P点 | k * G |
签名 | (R, S) R 是 P点的x坐标 \(S = k^{-1} (z + dA * R)\) |
点A + 点B:两点连线再取X轴镜像值
k * G: k个点G相加
验证签名: \(P = S^{-1} * z * G + S^{-1} * R * QA\)
- 获取到的P点X坐标如果和签名的R相同,就说明正确。
带入\(P = k * G 和 Qa = dA * G\)
- \(k * G = S^{-1} * z * G + S ^ {-1} * dA * R * dA * G\)
- \(k = S^{-1} * (z + dA * R)\)
两边求逆,有
- \(S = k^{-1} * (z + dA * R)\), 即一开始签名所用公式
- 索尼PS3漏洞成因: 使用了相同的随机数,导致在相同点G的情况下点R将相同。因此可以通过使用两个签名相减 的方式获取到k值,从而获得私钥dA
- 总结: 在自定义的过程中需要保证随机数一定是随机的,不能随便用重复的