Rsa

AEAD:在驗證 MAC 之前解密內容加密密鑰是否安全?

  • September 27, 2019

JSON Web Encryption (JWE)標准定義了許多具有相同基本形式的加密模式:

  1. 首先,生成唯一的內容加密密鑰 (CEK),並用於以 AEAD 模式(例如,帶有 HMAC 或 AES-GCM 的 AES-CBC)對有效載荷和相關數據進行加密。如果使用單獨的分組密碼和 MAC,則將每個單獨的密鑰連接起來形成 CEK。
  2. 然後,CEK 用接收者的公鑰加密(例如,使用帶有 PKCS#1 v1.5 填充的 RSA)並將結果添加到密文中。

我的問題是:雖然底層對稱密碼提供經過身份驗證的加密,但接收者必須先解密 CEK ,然後才能驗證底層 AEAD 結構上的 MAC。僅用於密鑰包裝時帶有適當填充的 RSA 是否已經提供經過身份驗證的加密?

不,無論填充如何,RSA加密都不提供真實性。原因很簡單,任何人都可以使用公鑰進行加密。這與使用的非對稱算法無關。您需要對數據進行簽名以獲得真實性。

AEAD所做的是保護例如免受填充預言機攻擊。這些可以在 CBC 模式加密上執行,這也可能會花費您的機密性(讓您一無所有)。

但是,在這種情況下,還必須保護 RSA 實現免受填充預言攻擊。這基本上意味著應該使用 OAEP(或者可能是 RSA-KEM)而不是 PKCS#1 v1.5 兼容填充。否則,PKCS#1 v1.5 取消填充必須以不可能填充 oracle 攻擊的方式執行。


關於這個特定的協議,簽名似乎是由一個單獨的文件處理的:JSON Web Signature (JWS)。第 11.4 節稱為“11.4. Adaptive Chosen-Ciphertext Attacks”並解釋了上述對 PKCS#1 的攻擊。

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