Authenticated-Encryption
為什麼不只加密消息和消息的散列以實現加密完整性?
我一直將 MAC 視為提供完整性和身份驗證的一種方式。您只需將其明確附加到某些消息中即可。
但是,當您執行 Encrypt Then Mac 時,情況顯然並非如此。當您這樣做時,您為已經具有身份驗證的東西提供身份驗證(要解密,我們需要知道密鑰)。那麼,當我們可以使用散列代替時,為什麼要使用 MAC: $ E(m | h(m)) $ ? (即,加密附加到消息雜湊的消息)
我將分部分進行:
但是,當您執行 Encrypt Then Mac 時,情況顯然並非如此。當您這樣做時,您為已經具有身份驗證的東西提供身份驗證(要解密,我們需要知道密鑰)。
加密本身不提供身份驗證。
當我們可以使用雜湊代替時,為什麼要使用 MAC:E(m|h(m))?
這是您建議的一個簡單反例。假設我知道 m=“Transfer $ 1000 to Mikeazo”,並且您使用流密碼(或流式模式)來加密它和消息的雜湊值。我知道如何計算 h(向 Mikeazo 轉賬 9999 美元)。我也知道要在加密中翻轉哪些位以使所有內容都可以檢查。
現在,您可能會認為這種攻擊是有效的,因為我假設了流密碼以及其他模式(例如 CBC)。好吧,這裡是關於 CBC 攻擊的詳細資訊。
當我們設計密碼原語時,我們希望它們盡可能安全,如果可能的話,甚至可以證明是安全的(給定一組合理的假設)。這就是為什麼我們會做類似 Encrypt-then-MAC 之類的事情,而不是您的提議。Encrypt-then-MAC 被證明是安全的。