使用強散列函式對 ECB 加密進行散列會產生安全的 MAC 嗎?
是否將 SHA-256 之類的強雜湊函式應用於消息的 ECB 加密(使用一些密鑰 $ K $ ) 生產一個安全的mac?例如,給定一條消息 $ m $ , 會不會是一個簡單的 mac 構造 $ H(E_K(m)) $ 如果我們使用強雜湊,則被認為是安全的 mac $ H $ 像 SHA-256?
與標準 HMAC 相比,這種結構看起來更簡單,甚至可能執行得更快一些。此外,這個 mac 方案似乎也不容易受到長度擴展攻擊,因為不知道 $ K $ ,似乎攻擊者無法將輸入“擴展”到散列函式 $ H $ 由於的輸出 $ E_K(m) $ 永遠不會“暴露”給攻擊者,而只是作為內部的一些中間計算步驟而被消耗 $ H(E_K(m)) $ .
當然,標準 $ \text{HMAC}(K,m) $ 對於“弱散列函式”的使用,構造可能更安全,所以我有目的地要求 $ H $ 在我的構造中,它應該是一個“強”的散列函式(例如,SHA-256),它應該是抗碰撞的,(當然)也是抗原像的。
同樣,這個鍵 $ K $ 僅用於生成 mac,而不是“共享”用於其他地方的其他加密目的。這是因為如果某些“應用程序的其他部分”重用 $ K $ 對於其他地方的一般加密,攻擊者可能會利用它來確定 $ c=E_K(p) $ 對於一些已知的或選擇的(甚至“派生的”)明文 $ p $ , 從而微不足道地偽造一些資訊 $ m = p $ 連同其有效的mac $ H(c) $ .
**編輯:這基本上是這個方案的反面……
不,建議的結構是不安全的,除非塊大小 $ b $ 分組密碼的大小異常大,或者比 MAC 寬得多。假設 $ p $ 已知的不同消息/MAC 對 $ (m_i,h_i) $ 和 $ b $ 位消息 $ m_i $ 和 $ h_i $ 至少 $ b $ -bit,有一個以預期成本為主的簡單攻擊 $ 2^b/p $ 之間的雜湊和搜尋 $ h_i $ .
攻擊只是散列任意不同的 $ b $ 位值 $ c $ 直到 $ H(c) $ 其中一個 $ h_i $ . 很有可能,相應的加密 $ m_i $ 是 $ c $ . 這允許簡單地計算 MAC $ m_i\mathbin|m_i $ 作為 $ H(c\mathbin|c) $ ,這算作偽造。
當分組密碼為 $ 64 $ -bit,例如 3 鍵 3DES 或 IDEA。使用 AES-256 和 $ p=2^{40} $ ,它的成本是合理的 $ 2^{88} $ 散列和搜尋 $ p $ 價值觀。
注意:問題中所述的構造僅適用於大小為 $ b $ . 常見的塊加密填充(例如附加一位然後 $ 0 $ 至 $ b-1 $ 到達塊末尾所需的零位)可以解決此問題,但攻擊很容易適應。