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

Hap*_*oul 3 c# cryptography digital-signature elliptic-curve

我正在使用椭圆曲线来生成签名。问题是它每次使用相同的密钥对都会生成不同的签名。我尝试了 Bouncy Castle 库以及ECDsa. 签名得到了两者的验证,但我每次使用相同的密钥对时都想要相同的签名。

怎样才能每次生成相同的签名?或者使用椭圆曲线这是不可能的吗?

Maa*_*wes 6

不,标准 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)

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