Hash

是H(k||m)⊕kH(ķ||米)⊕ķH(k || m) oplus k安全的?

  • October 11, 2021

眾所周知 $ H(k || m) $ (當使用 SHA1 時)是一個不安全的 MAC 函式,因為它容易受到散列長度擴展的影響。

但是關於 $ H(k || m) \oplus k $ ? 現在似乎不可能進行正常的雜湊長度擴展。即使多次使用同一個鍵,我認為只要輸出 $ H $ 足夠隨機。我對嗎?

考慮 $ H $ 定義為:SHA-512,其輸出與輸入消息的前 512 位進行異或(短消息用零填充)。有了這樣的 $ H $ ,建議的 MAC 是不安全的。然而,據我們所知,這 $ H $ 從標準的角度來看,並不比 SHA-512 差。

論據:觀察如果 $ H(m_1\mathbin|m_2)=\operatorname{SHA-512}(m_1\mathbin|m_2)\oplus m_1 $ 和 $ \operatorname{MAC}_k(m)=H(k\mathbin|m)\oplus k $ ,然後對於 512 位密鑰¹ $ k $ 它擁有 $ \operatorname{MAC}_k(m)=\operatorname{SHA-512}(k\mathbin|m) $ . 因此這 $ \operatorname{MAC} $ 容易受到長度擴展攻擊²。

因此,無法證明 $ H(k\mathbin|m)\oplus k $ 是一個安全的 MAC,無需深入了解內部結構 $ H $ .

我相當有信心提議的 MAC 結構對於 SHA-2 系列的雜湊,甚至對於 SHA-1 來說實際上是安全的。我們可能希望在雜湊具有Merkle-Damgård結構的假設下證明安全性,這是一種由塊密碼建構的壓縮函式 $ E $ 根據Davies-Meyer構造,具有適當的塊和密鑰大小 $ E $ . 我認為這在理想的密碼模型下是可能的,但不是標準的安全模型 $ E $ . 問題在於將密鑰與分組密碼的輸出進行異或運算會削弱它。例如解密模式下的 AES-128 就是這種情況,其中 XOR 消除了一輪的安全性。


¹ 對於任意大小的密鑰, $ \operatorname{MAC}k(m)=\operatorname{SHA-512}(k\mathbin|m)\oplus F{|k|}(m) $ 在哪裡 $ F_{|k|}(m) $ 是 $ 0^{\min(|k|,512)} $ ,其次是第一個 $ \min(\max(512-|k|,0),|m|) $ 位 $ m $ , 其次是 $ 0^{\max(512-|k|-|m|,0)} $ . 這仍然允許攻擊。

² 與我最初寫的相反,我們無法恢復 $ k $ 從查詢。

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