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

标签 c# cryptography digital-signature elliptic-curve

我正在使用椭圆曲线生成签名。问题是每次使用相同的 key 对都会生成不同的签名。我尝试了 Bouncy CaSTLe 图书馆以及 ECDsa .两者都验证了签名,但每次我使用相同的 key 对时,我都想要相同的签名。

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

最佳答案

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

如果常量用于不同的输入,则 ECDSA 将泄露私钥。这就是用于签署游戏的索尼私钥发生的事情,which was cracked by the German Chaos Computer Club (但仅在第 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()));

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

关于c# - 每个椭圆曲线签名生成的不同签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51592748/

相关文章:

c# - 采用 MVC 4 或 5 的 MEF - 可插拔架构 (2014)

c# - FK 上的 Linq 值不能为空

c# - 使用 Func 的责任链

node.js - 如何解密 HMAC?

java - PKCS#11 实例化问题

c# - 如何在有限的空间内嵌入数字签名

c# - 数据库中的最佳货币格式

c - 在 cryptoki 库中提取或设置私钥参数

python - 使用乘法和减法加密和解密图像

c# - 将数字签名字段添加到 PDF