為什麼在 RSA 填充中使用隨機數而不在 AES 中使用?
我注意到人們在 RSA-OAEP 填充方案中使用隨機數來避免確定性加密。但是在 pkcs#7 中,人們只使用填充大小而不是一些隨機位。它不會使 AES 具有確定性嗎?
它們是不同的概念,有不同的方法。像任何分組密碼一樣,AES 是一種原語,並且通過使用分組密碼操作模式執行加密。像 ECB,CBC,CTR,GCM,EAX…
pkcs#7 填充或任何其他填充,用於將最後一個塊填充到具有模糊刪除的塊大小,不是為隨機化而設計的。甚至可以設計一種隨機填充機制,它最多可以影響 2 個塊,而不會浪費其他塊。因此不是一個好的隨機化點。事實上,CTR 和 OFB 根本不使用填充。
隨機化(機率加密)是通過使用 IV/nonce 實現的。
由於不安全的 ECB 不使用 IV,因此它在選擇的 CPA 攻擊(Ind-CPA) 下不具有不可區分性。這是現代密碼學的最低要求,但還不夠。其他模式有IND-CPA。
與其他認證加密模式一樣,AES-GCM 可以具有 IND-CCA2。我們更喜歡使用經過身份驗證的加密(帶有關聯數據(AEAD))。常見的模式有 AES-GCM、ChaCha20-Poly1305、EAX 和 CCM。TLS 1.3 標準具有 AES-GCM、AES-CCM 和 ChaCha20-Poly1305 AEAD 密碼模式。
請注意,經過身份驗證的加密是一個更強的概念,AEAD > IND-CCA。
應該注意 IV/nonce 是必要的,但對於安全性來說還不夠。例如,CBC IV 必須不僅僅是一個隨機數,它必須是不可預測的。對於 CTR 模式,(key,IV) 對絕不能重複使用(類似於 GCM 模式,因為它在內部使用 CTR 模式)。有一種對抗nonce誤用的模式: SIV(Synthetic Initialization Vector)模式,它稱為抗nonce-misuse authenticated-encryption。