Hash

MJH 雙塊長雜湊函式是如何構造的?

  • March 26, 2022

我正在尋找有關 MJH 雙塊長度散列函式的資訊,但我能找到的最好的免費資源是使用 AES 指令集的高效散列第 18 頁上的圖表(送出給 ECRYPT II 散列研討會 2011)。

這個函式有原始碼嗎?描述雜湊函式時使用的標準符號是什麼(M、V、Z)?

我查看了介紹 MJH 構造的論文(MJH: A Faster Alternative to MDC-2)。

它實際上呈現的圖表與論文Efficient hashing using the AES Instruction Set您所引用的不同 - 那裡 $ V_2 $ 和 $ M $ 被交換。我將在這裡描述原始版本,以及下面的變體。

MJH 的核心是一個壓縮函式,使用類似於 JH 雜湊函式(SHA-3 決賽入圍者之一)的類似結構,因此得名。

JH建築

給定一個(非壓縮)函式 $ F : { 0,1}^{2n} \to {0,1}^{2n} $ ,我們定義壓縮函式 $ JH[F] : {0,1}^{3n} \to {0,1}^{2n} $ 作為 $ JH[F](V_1, V_2, M) := (Z_1, Z_2) $ , 和 $ (X_1, X_2) = (V_1, V_2 \oplus M) $ , $ (Y_1, Y_2) = F(X_1, X_2) $ 和 $ (Z_1, Z_2) := (Y_1 \oplus M, Y_2) $ .

圖表

JH 散列函式中,F 是一個特製的(固定的)排列。

MJH的 $ F[\sigma, \theta] $

給定一個 $ n $ -位塊密碼 $ E $ 帶鑰匙尺寸 $ k = n $ , $ \sigma : {0,1}^{n} \to {0,1}^n $ 對合(即 $ \sigma \circ \sigma = \mathrm{id} $ ) 沒有固定點(即 $ \sigma(X) \neq X $ ) – 一個範例是具有非零常數的 XOR – 和 $ \theta \in \mathbb{F}_{2^n} \setminus{0,1} $ 一個常數(所以乘以 $ \theta $ 是另一種非平凡的排列)。

我們定義 $ F[\sigma, \theta] : {0,1}^{2n} \to {0,1}^{2n} $ 作為 $ F(X, K) = (L, R) $ , 和 $ L = E_K(X) \oplus X $ 和 $ R := \theta(E_K(\sigma(X)) \oplus \sigma(X) ) \oplus X $ .

在此處輸入圖像描述

(這 $ E_K(X) \oplus X $ 部分本質上是Davies-Meyer 結構,使其成為單向的,即使 $ K $ 是已知的。它實際上在這裡使用了兩次。)

最終的雜湊函式

結合這些想法,我們得到了我們的壓縮函式 $ \tilde F[\sigma, \theta] := JH[F[\sigma, \theta]] : {0,1}^{3n} \to {0,1}^{2n} $ .

在此處輸入圖像描述

然後我們在這個壓縮函式上應用已知的Merkle-Damgård caining 構造,接收我們最終的雜湊函式 $ H[\sigma, \theta] = MD[\tilde F[\sigma, \theta]] $ .

在此處輸入圖像描述

(此圖片來自維基共享資源,其他圖片由我製作。)

在實踐中,我們現在還必須選擇一些特定的 $ \sigma $ 和 $ \theta $ ,特定的分組密碼,以及 MD 的初始化向量和填充 - 安全證明仍然適用於所有這些(如果分組密碼是好的)。

更長的密鑰變體

該論文還描述了密鑰長度時要使用的壓縮函式的變體 $ k $ 大於塊大小 $ n $ . 然後我們使用大小的消息塊 $ k $ , 並將這些塊分成兩部分 $ z, z’ $ . $ z $ (大小 $ n $ ) 和以前一樣被用來異或到加密前狀態的左半部分和加密後的右半部分,而 $ z’ $ (大小 $ k-n $ ) 附加到狀態的右半部分以形成分組密碼的密鑰。

通過使用更大的(散列)塊大小,這個更長的變體可以比原始變體更有效。

高效散列中描述的變體

為了 $ n = k $ , 這和原來的壓縮函式是一樣的,但是在 MD 構造中它的使用方式不同:這裡消息塊是在關鍵位置傳遞的,而不是被異或到之前的狀態部分和加密後。(這個 XOR’ing 使用原始狀態的一半。)

這給出了一個更明顯的概括 $ k \geq n $ 在這種情況下,因為我們不必拆分消息塊並組成密鑰,而只需將較長的密鑰傳遞給塊密碼。

不過,我沒有檢查 MJH 論文中給出的證明是否也適用於這個變體,而且我不知道Efficient Hashing的作者實際測量了哪個版本。

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