【问题标题】:different signature with same input openssl具有相同输入openssl的不同签名
【发布时间】:2020-05-28 08:54:12
【问题描述】:

我正在使用 Openssl (OpenSSL 1.0.2s 28 May 2019),我想签署一条消息。

$ echo foo > a.txt
$ openssl dgst -sha256 -hex -sign chiave_priv_1.pem a.txt
EC-SHA256(a.txt)= 3045022100c7d6e61942d3104838b70cda870fb53870c36aa7075be518e9d0d098370d989802202dddd3e0fbba70be84d4540e20c43116cf0db1cee69b2ed422c9403cdac8bd54

$ openssl dgst -sha256 -hex -sign chiave_priv_1.pem a.txt
EC-SHA256(a.txt)= 3046022100fa1df4a9d3f07b0105e5923ef9c7a6f52dc5fa3b60beda7d1ed8a5eec805d3f402210097941741cdaa06ff650e48912eb05d37bc74aab8cf24951a543c88a357bb7f30

我重复签名两次,得到两个不同的输出

【问题讨论】:

    标签: openssl public-key-encryption signature private-key ecdsa


    【解决方案1】:

    如果您使用 DSA 密钥或 ECC 密钥,则签名是随机的。据我所知,这是故意的。

    如果您使用 RSA 密钥,则取决于您的填充类型。默认填充是 pkcs 并且应该生成确定性签名。如果您更改填充类型(例如 -sigopt rsa_padding_mode:pss),那么您也会得到随机结果。

    【讨论】:

    • 谢谢,我想复制比特币的签名,它是 ECDSA (ECC)
    • 我没有足够的知识来回答这个问题。您所能做的就是验证签名是否正确,您将无法重新生成完全相同的签名。
    • @monkeyUser+ DSA 和 ECDSA 签名根据其标准(FIPS 186 和 X9.62)正式随机;可以使用“合成”k 代替,参见 RFC 6979,至少一些比特币软件可以,但 OpenSSL 没有。比特币通常对交易进行签名,当它对消息进行签名时,它会修改输入并更改签名的表示。两种类型的比特币签名都使用 double SHA256,而不是 OpenSSL 使用的标准单一签名,因此您必须对此进行调整。手工做这件事很难,但如果你愿意,你可以在 bitcoin.SX 上阅读几十个关于它的 Q。
    • @dave_thompson_085 谢谢!我想通过openssl获得签名,我会检查文档。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-30
    • 1970-01-01
    • 2015-03-04
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    相关资源
    最近更新 更多