Openssl

OpenSSL 簽名每次都不同

  • February 8, 2016

我有一個文件,我正在為使用 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 方案則沒有。

引用自:https://crypto.stackexchange.com/questions/32551