Block-Cipher

為什麼選擇經過身份驗證的加密模式而不是單獨的 MAC?

  • October 8, 2011

選擇經過身份驗證的加密操作模式(例如 GCM)而不是傳統加密模式加獨立 MAC 的加密原因是什麼,反之亦然?

假設沒有選擇其中一個的實施理由(加密庫支持兩者,沒有向後兼容性限制等)。

如果您仔細查看認證加密模式的定義,您會發現它們實際上都是對稱加密和 MAC 的組合。

使用傳統加密和獨立 MAC 有一些棘手的問題,沒有一個是無法解決的:

  • 加密方式會使用密鑰,MAC也會使用密鑰;使用相同的密鑰可能會觸發不需要的弱點(例如,如果加密使用 CBC 模式並且 MAC 是 CBC-MAC)。解決方案:通過Key Derivation Function從“主密鑰”導出加密密鑰和 MAC 密鑰。
  • 加密使用初始化向量,MAC 也可以使用自己的 IV。再一次,對兩者使用相同的 IV 可能意味著弱點,特別是因為對兩個 IV 的要求可能不同。解決方案:使用 KDF 從“主 IV”中導出兩個 IV;或使用無 IV 的 MAC,例如 HMAC(這是 HMAC 的巨大優勢:沒有 IV;因此,很難弄錯 HMAC)。
  • MAC 可能(理論上)洩漏有關已處理數據的資訊。這是整個mac-then-encrypt 或 encrypt-then-mac辯論。解決方案:encrypt-then-mac 是“正確的事情”,但很容易因為忘記 MAC 加密 IV 和/或加密算法標識符而出錯。SSL/TLS做了“錯誤的事情”,但因為 HMAC 與基於塊密碼的加密“完全不同”而僥倖逃脫。

Authenticated Encryption 模式旨在解決這些問題並做“正確的事情”,以便對使用者的要求盡可能輕(例如,單個 IV 僅帶有“非重複”子句,不需要不可預測的隨機性或統一性)分配)。

**總結:**認證加密不應該反對傳統加密結合獨立MAC;認證加密是“結合傳統加密和獨立MAC,正確完成”。

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