Hash

使用 TEA 建構雜湊函式

  • November 18, 2022

背景

TEA 使用 128 位主密鑰 $ K_{0\ldots3} $ . 所有奇數輪使用 $ K_0 $ , $ K_1 $ 作為輪子密鑰,所有偶數輪都使用 $ K_2 $ , $ K_3 $ . 一個循環的 TEA 應用於塊 $ A_i $ , $ B_i $ 是: $ A_{i+1} \leftarrow A_i + F_i(B_i, K_0, K_1) \hspace{0.5em};\hspace{0.5em} B_{i+1} \leftarrow B_i + F_i(A_i, K_2, K_3) $ . 哪裡有圓函式 $ F $ 是: $ F_i(b,k,k’) = (\text{ShiftLeft}(b,4) + k) \oplus (b + \Delta_i) \oplus (\text{ShiftRight}(b,5) + k’) $

考慮補充最重要的位 $ K_0 $ 和 $ K_1 $ . 請注意,翻轉最高有效位會通過加法和 XOR 運算傳播,翻轉兩次會取消修改。因此,以這種方式修改 128 位主密鑰不會影響加密過程。我們還可以補充最重要的位 $ K_2 $ , $ K_3 $ 沒有任何效果。這意味著每個 TEA 密鑰都有 3 個其他等效密鑰。

問題

如果我們定義一個名為 TEA 的新分組密碼 $ ’ $ 它在功能上與原始 TEA 相同,但經過以下修改(見下文),我們是否可以消除等效的關鍵問題並能夠安全地使用 TEA $ ’ $ 在 Davies-Meyer、Merkle-Damgard 構造中建構雜湊函式?

修改

茶 $ ’ $ 使用 126 位主密鑰, $ M_{0 \ldots 125} $ . 126 位主密鑰映射到子密鑰 $ K_{0 \ldots 3} $ 通過以下方式: $ K_0 $ 的最高位是 0,後面是主密鑰的前 31 位, $ M_{0 \ldots 30} $ . $ K_1 $ 由主密鑰的接下來的 32 位組成, $ M_{31 \dots 62} $ . $ K_2 $ 最高有效位為 0,接下來是主密鑰的 31 位, $ M_{63 \ldots 93} $ . $ K_3 $ 由主密鑰的最後 32 位組成, $ M_{94 \ldots 125} $ .

基本上只使用 126 位密鑰,並保留 MSB $ K_0 $ 和 $ K_2 $ 設置為 0。

正如您在評論中指出的那樣,這不安全,因為塊大小不足。64 位散列會受到極其微不足道的碰撞攻擊和可行的原像攻擊。

但是 TEA 也會遭受相關密鑰攻擊,考慮到極其簡單的密鑰安排,這完全不足為奇。即使是 AES,它有一個更複雜但仍然相對簡單的密鑰計劃,也會遭受相關密鑰攻擊,所以我認為你的建議不太可能有太大幫助。

在現實世界中,幾乎沒有人使用相關密鑰。WEP 是一個明顯的例外,它使用 RC4,這對他們來說非常脆弱,因此非常不安全。在大多數現代協議中,我們使用某種密鑰派生函式,要麼來自密鑰交換,要麼使用秘密輸入和鹽,因此我們在功能上永遠看不到相關密鑰。這就是為什麼相關密鑰攻擊雖然很有趣,但通常在攻擊現實世界協議方面的實際用途有限並且易於防禦。但是,使用基於分組密碼的散列函式,您絕對必須抵抗相關的密鑰攻擊,因為密鑰(消息)是攻擊者在 Davies-Meyer 構造中控制的部分。

如果您選擇了一個沒有相關密鑰攻擊的不同塊密碼,那麼它可能更適合 Davies-Meyer 構造。然而,應該注意的是,對散列函式和通用分組密碼的攻擊往往有些不同,因此您可以擁有一些在散列算法中使用時安全的分組密碼,而不是其他地方,反之亦然。因此,至少需要一些獨立的密碼分析。

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