Hash

從不同來源創建控制雜湊字元串,使用這種方式比較時是否有區別、優點或缺點?

  • September 2, 2022

我想從幾個輸入/源創建應該形成一個雜湊值,以便稍後控制不同的想法。

例子:

  1. 字元串 + 文件
  2. 字元串 + 字元串
  3. 文件+文件
  4. 字元串 + 文件 + 字元串

從現在的邏輯來看,有不同的方法可以做到這一點:

  1. CREATE HASH [(HASH(String)) + (HASH(File))] = HASH-RESULT
  2. CREATE HASH [( (HASH(String)) (HASH(File)) )] = HASH-RESULT
  3. CREATE HASH [(String + File)] = HASH-RESULT
  4. CREATE HASH [( (String)(File) )] = HASH-RESULT

我用不同的方法(連接、加法、求和等)用相同的來源得到不同的結果。

這是一個關於散列的邏輯問題,我需要一個意見。

這種方法是否有優點或缺點或安全原因,或者我將使用哪種方法無關緊要?

我希望我能傳達我的問題,這與算法無關

這是這篇文章的一個擴展問題:

我有不止一種結果不同的解決方案/方式/方法。

如何在 bash 中創建具有多個源/輸入的雜湊/sha256sum,最好的方法是什麼?

假設文件和字元串沒有區別(我們將使用 $ s_1 $ 和 $ s_2 $ ),我們可以看看擁有速度和前像和碰撞攻擊。

我們假設 + 為串聯求和,空格為串聯,並替換通常的 $ \mathbin| $ 用串聯來消除歧義。

我們從簡單的開始;

  1. >

創建雜湊

$$ (String + File) $$= 雜湊結果

$$ h = H(s_1) + H(s_2) $$

明顯的攻擊正在替換 $ s_1 $ 和 $ s_2 $ 和 $ s_2 $ 和 $ s_1 $ 我們將得到相同的雜湊值,因為加法是可交換的;

$$ H(s_1) + H(s_2) = H(s_2) + H(s_1) $$

  • 這是給定雜湊值的第二次原像攻擊,並且
  • 如果攻擊者可以自由選擇碰撞攻擊 $ h $ 價值。對於給定的 $ h $ 值,我們需要找到兩個輸入的總和等於 $ h = H(a) + H(b) $

此外,加法有一點溢出的可能性。要是 $ \ell $ 大小是必需的(即輸出大小 $ H $ ) 必須修剪結果。這也可能會產生一些額外的碰撞、前圖像情況。

如果我們看隨機選擇,如果我們假設加法是模數,我們將有經典的生日計算 $ 2^\ell $

此外,出於性能原因,這使用了雜湊函式的雙重呼叫。

  1. >

創建雜湊

$$ ( (String)(File) ) $$= 雜湊結果

$$ h = H(s_1 \mathbin| s_2) $$如果沒有使用好的分隔符,這具有通常的串聯和通常的碰撞問題;

$$ h = H(\texttt{abcdef} \mathbin| \texttt{zod}) = H(\texttt{abc} \mathbin| \texttt{defzod}) $$減輕輸入中不存在的定界符是首選

$$ h = H(\texttt{abcdef} \mathbin| <delimeter> \mathbin| \texttt{zod}) $$

  1. >

創建雜湊

$$ (HASH(String)) + (HASH(File)) $$= 雜湊結果

$$ h = H(H(s_1) + H(s_2)) $$這個結構使用三重呼叫。儘管如此,對 3ed 案例的攻擊仍然存在問題,因為最後一個雜湊的輸入沒有改變。 2. >

創建雜湊

$$ ( (HASH(String)) (HASH(File)) ) $$= 雜湊結果

$$ h = H(H(s_1) \mathbin| H(s_2)) $$它與使用三重雜湊函式呼叫的情況 4 具有相同的問題。不過,緩解措施仍然有效。


結論

帶定界符的案例4是這裡的最佳選擇

$$ h = H(\texttt{abcdef} \mathbin| <delimeter> \mathbin| \texttt{zod}) $$

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