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

Posted

技术标签:

【中文标题】每个椭圆曲线签名生成的不同签名【英文标题】:Different signature for each elliptic curve signature generation 【发布时间】:2018-07-30 11:15:19 【问题描述】:

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

怎样才能每次都生成相同的签名?还是用椭圆曲线做不到?

【问题讨论】:

【参考方案1】:

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

如果常量与不同的输入一起使用,那么 ECDSA 将泄露私钥。这就是用于签署游戏的 Sony 私钥 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()));

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

【讨论】:

以上是关于每个椭圆曲线签名生成的不同签名的主要内容,如果未能解决你的问题,请参考以下文章

椭圆曲线数字签名应用原理

算法2_非对称加密算法之ECDSA(椭圆曲线数字签名算法)

密码技术--椭圆曲线EDCSA数字签名及Go语言应用

编出个区块链:实现区块链的椭圆曲线签名和认证

区块链教程区块链信息安全3椭圆曲线加解密及签名算法的技术原理一

Java - 使用 ECDSA(椭圆曲线)创建 XML 数字签名