具有相同输入 openssl 的不同签名

different signature with same input openssl

我正在使用 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

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

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

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