每个椭圆曲线签名生成都有不同的签名

时间:2018-07-30 11:15:19

标签: c# cryptography digital-signature elliptic-curve

我正在使用椭圆曲线生成签名。问题在于,每次使用相同的密钥对时,都会生成不同的签名。我尝试了Bouncy Castle库以及ECDsa。签名都经过了验证,但是每次使用相同的密钥对时,我都希望使用相同的签名。

每次都可以产生相同的签名吗?还是使用椭圆曲线不可能?

1 个答案:

答案 0 :(得分:1)

不,标准DSA是不确定的,对于ECDSA而言,这意味着它依赖于加密安全的随机数生成器(准确地说是in step 3 in the description on Wikipedia)。

如果常量用于其他输入,则ECDSA将泄漏私钥。这就是用于签名游戏which was cracked by the German Chaos Computer Club的Sony私钥所发生的情况(但仅限于第122页!)。当然,ECDSA无法确定是否使用了相同的数据。

有一种确定的方式来生成RFC 6979, " Deterministic Usage of the Digital Signature Algorithm (DSA) and Elliptic Curve Digital Signature Algorithm (ECDSA)"中指定的ECDSA签名。

您可以使用C#中的以下Bouncy Castle代码执行此操作:

ECDsaSigner signer = new ECDsaSigner(new HMacDsaKCalculator(new Sha256Digest()));

显然用于比特币等区块链技术。