Openssl
OpenSSL 簽名每次都不同
我有一個文件,我正在為使用 OpenSSL 生成簽名,每次生成簽名時,都與上次不同。
openssl dgst -sha1 -sign update_key.pem TERM010134.bin > Update.sig
誰能告訴我為什麼會這樣?
這取決於您使用的算法(由密鑰類型確定)和填充。
如果密鑰是 DSA 密鑰或用於 ECDSA 的 ECC 密鑰,則這些算法通常使用隨機簽名來保持安全,而 OpenSSL 就是這樣做的。(有一種變體方案可以使 k 唯一且不可預測,但不會使其真正隨機化,但它沒有被廣泛使用,也沒有在 OpenSSL 中實現。)
如果密鑰是 RSA 密鑰,OpenSSL 支持 3 種 RSA 填充,除了
none
:(pkcs1
更準確地說是 PKCS#1 到 v1.5 的 type-1 方案,現在改名為 RSASSA-PKCS1-v1_5)pss
、和x931
.dgst -sign
對於 RSA 預設為pkcs
,這是確定性的,不應產生變化的結果;如果確實如此,請使用詳細資訊編輯您的問題(最好使用測試密鑰)。只有當您指定時-sigopt rsa_padding_mode:pss
,您才能獲得隨機結果。注意 RSA加密是不同的,OpenSSL 支持除了
none
:pkcs1
(這一次意味著 RSAES-PKCS1-v1_5) 和之外的兩個填充oaep
,兩者都是隨機的;較新的 OAEP 以一種可證明安全的方式隨機化,而較舊的 v1_5 方案則沒有。