Hap*_*oul 3 c# cryptography digital-signature elliptic-curve
我正在使用椭圆曲线来生成签名。问题是它每次使用相同的密钥对都会生成不同的签名。我尝试了 Bouncy Castle 库以及ECDsa. 签名得到了两者的验证,但我每次使用相同的密钥对时都想要相同的签名。
怎样才能每次生成相同的签名?或者使用椭圆曲线这是不可能的吗?
不,标准 DSA 是不确定的,这对于 ECDSA 来说意味着它依赖于加密安全的随机数生成器(准确地说,在维基百科描述的步骤 3 中)。
如果常量与不同的输入一起使用,那么 ECDSA 将泄漏私钥。这就是用于签署游戏的索尼私钥所发生的情况,该私钥已被德国混沌计算机俱乐部破解(但仅限于第 122 页!)。当然,ECDSA 无法判断是否使用了相同的数据。
RFC 6979“数字签名算法 (DSA) 和椭圆曲线数字签名算法 (ECDSA) 的确定性使用”中指定了一种生成 ECDSA 签名的确定性方法。
您可以使用以下 C# 中的 Bouncy Castle 代码来执行此操作:
ECDsaSigner signer = new ECDsaSigner(new HMacDsaKCalculator(new Sha256Digest()));
Run Code Online (Sandbox Code Playgroud)
它显然用于比特币等区块链技术。
| 归档时间: |
|
| 查看次数: |
2073 次 |
| 最近记录: |