Rsa

RSASSA-PSS 簽名和 RSA-PSS 簽名有什麼區別?

  • April 7, 2019

我閱讀了 RFC 8017 並了解了 pkcsv1.5 和 pss 填充技術。我知道在 RSASSA-PSS 簽名方案中,簽名將附加在 M 的末尾。

在某些網站上,我讀到 RSASSA-PSS 和 RSA-PSS 都是一樣的,這是真的嗎?如果不是 RSASSA-PSS 和 RSA-PSS 之間的根本區別,您能否也請提供 API 以使用 OpenSSL 對 RSASSA-PSS 進行簽名和驗證。

謝謝你。

一些作者區分:

  • RSA-PSS,由 Bellare 和 Rogaway 於 1996 年分析$$ 1 $$並於 1998 年為 IEEE P1363 提出$$ 2 $$,大致定義為 $ H(r \mathbin| m) $ , 和
  • RSASSA-PSS,在IEEE P1363-2000RSA PKCS #1 v2.1中標準化,大致定義為 $ H(r \mathbin| H(m)) $ .

這種區別很重要:RSA-PSS 僅依賴於目標碰撞阻力$$ 3 $$(或通用單向散列函式……$$ 4 $$) 的 $ H $ , 而 RSASSA-PSS 依賴於 $ H $ .

另一種查看方式是 RSASSA-PSS——像 RSASSA-PKCS1-v1_5 和任何其他簽名方案,其中消息僅通過 $ H(m) $ ——易受碰撞 $ H $ . 這意味著壞消息 $ H $ 是MD5,很多人在實踐中使用了很多年。學術密碼學家公開展示了使用對 RSASSA-PKCS1-v1_5 的 MD5 碰撞攻擊來偽造證書$$ 5 $$$$ 6 $$; 美國和以色列使用自主研發的MD5碰撞攻擊偽造微軟軟體更新簽名證書$$ 7 $$破壞伊朗的核計劃。但據任何人所知,MD5 的目標抗碰撞性直到今天仍然有效,因此即使使用 MD5,RSA-PSS 也會阻止整個證書偽造途徑。

為什麼 IEEE P1363-2000 和 RSA PKCS #1 v2.1 標準化 $ H(r \mathbin| H(m)) $ 代替 $ H(r \mathbin| m) $ 對我來說是個謎。巧合的是,這種標準化發生在 RSA, Inc. 接受 NSA 的 10e6 美元賄賂以將 Dual_EC_DRBG 部署到其所有 RSA-BSAFE 客戶的同時$$ 8 $$.

像 Ed25519 這樣的現代簽名方案使用了設計原則 $ H(r \mathbin| m) $ 為了只依靠像PSS這樣較弱的屬性目標碰撞阻力或至少增強的目標碰撞阻力$$ 9 $$,因此被宣傳為具有抗碰撞能力。(有關這些和相關概念的歷史的更多資訊,請參見先前的答案。)

只有一種標準加密機制同時使用RSA 陷門函式係列PSS 填充方案,即 PKCS#1 v2.1 及更高版本定義的 RSASSA-PSS(RFC 8017是該標準的目前版本)。所以“RSASSA-PSS”是密碼機制的正式名稱,“RSA-PSS”是“RSASSA-PSS”的明確縮寫。


我知道在 RSASSA-PSS 簽名方案中,簽名將附加在 M 的末尾。

情況不一定如此。RSASSA-PSS 簽名生成將 RSA 密鑰和消息作為輸入,並生成簽名作為輸出(除非它失敗,在這種情況下它會生成失敗指示符但沒有輸出)。如果需要,您可以將簽名附加到消息中,但您不必這樣做。事實上,您不應該只是將簽名附加到消息中:如果您想將消息和簽名一起儲存或傳輸,請始終以明確的方式對它們進行編碼。有多種方法可以做到這一點,例如使用指示消息長度和簽名長度的標頭,然後連接此標頭、消息和簽名。但是如果你想使用不同的編碼,那很好。

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