每个椭圆曲线签名生成的不同签名
Different signature for each elliptic curve signature generation
我正在使用椭圆曲线生成签名。问题是每次使用相同的密钥对都会生成不同的签名。我尝试了 Bouncy Castle 库以及 ECDsa
。两者都验证了签名,但我每次使用相同的密钥对时都希望得到相同的签名。
怎么可能每次都生成相同的签名?或者这不可能使用椭圆曲线?
不,标准 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()));
显然用于比特币等区块链技术。
我正在使用椭圆曲线生成签名。问题是每次使用相同的密钥对都会生成不同的签名。我尝试了 Bouncy Castle 库以及 ECDsa
。两者都验证了签名,但我每次使用相同的密钥对时都希望得到相同的签名。
怎么可能每次都生成相同的签名?或者这不可能使用椭圆曲线?
不,标准 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()));
显然用于比特币等区块链技术。