Aes
ECB vs CBC 用於加密高熵數據
我有一個主 AES 密鑰,我需要用這個密鑰加密其他 AES 密鑰。ECB 加密高度隨機數據(密鑰)是否安全?如果我改用 CBC,我會得到什麼好處?
特別是,以下方法是否安全,哪一種更安全以及為什麼:
- AES-ECB(隨機數據)
- AES-CBC(隨機數據,iv = 零)
- AES-CBC(隨機數據,iv = 隨機)
如果您查看為密鑰包裝設計的模式或將其列為密鑰應用程序的模式,您會看到一個共同特徵是它們是經過身份驗證的加密模式,可提供消息機密性和真實性。見,例如:
這樣做的一個原因是,從惡意客戶端的角度來看,沒有消息身份驗證的密鑰管理系統提供:
- 解密預言機:在請求解密 DEK的幌子下,客戶端可以請求使用主密鑰對對抗選擇的密文進行解密;
- 加密預言機,雖然取決於 KMS 的設計,但可能僅適用於隨機選擇的明文:
- 一些系統允許客戶端送出以對抗方式選擇的 DEK 進行加密,因此這些系統提供了完整的加密預言機。
- 其他人只允許客戶端獲取新的隨機 DEK 及其加密,但這很可能對對手有用
ECB 和 CBC 都不能抵禦選擇密文攻擊。因此,使用 GCM 或 SIV 等經過身份驗證的加密模式似乎是明智的,這樣 KMS 就可以拒絕惡意的、客戶端偽造的加密 DEK。
ECB 非常適合加密隨機數據。ECB 的要點是,只要不重複輸入塊,它就是安全的。它通常用作密鑰包裝方法,這似乎是您的案例。
請注意,即使是密鑰包裝,ECB 模式也經常被錯誤地使用。例如,因為密鑰嵌入在結構中(例如,PKCS#1 編碼的 RSA 密鑰)。在這種情況下,ECB 模式可能不僅會洩露結構的數據,還會洩露密鑰的數據。
即使包裝 AES 密鑰,因為 ECB 和 CBC 都不是經過身份驗證的密碼,您仍然可能會遇到麻煩。因此,如果攻擊者能夠更改加密值,您就有麻煩了。填充預言也可能適用 - 所以不要取消填充 AES-192 位密鑰(使用 1.5 個塊!)。
基本上你可以接受你提到的任何選項——但這取決於整個系統。如果只是為了安全起見,我仍然會選擇帶有隨機 IV 的 CBC。也就是說,如果以上是您唯一的選擇,那麼還有更好的選擇(例如密鑰包裝模式 -由 Louis Casillas 首次提到- 或 SIV 模式)。