Hash

給定多個雜湊前綴的蠻力攻擊

  • June 18, 2015

(上下文:我正在審核一些我懷疑不安全的程式碼,但我希望能夠對此進行量化。)

假設您有一個 56 位的密鑰 ( $secret),並假設您已將以下資訊透露給不受信任的各方:

  • $salt- 一個容易發現的字元串
  • $prefix– 前 32 位sha1($secret + $salt)

根據前面的問題,攻擊者可以使用($salt,$prefix)作為篩選器來縮小可能的列表來執行離線攻擊$candidates。這個篩子會減少候選人的數量 $ 2^{56} $ 到 $ 2^{(56-32)}=2^{24} $ .

現在假設您揭示了(都基於相同的)的多種變體。攻擊者現在有多個篩子;如果反复應用,每個篩子將進一步縮小可能的列表。($salt,$prefix)``$secret``$candidates

我想了解$candidates過濾到 true 的速度有多快$secret。例如,如果你有兩個前綴, $candidates應該剩下幾個?如果你有三個前綴,應該剩下幾個?

如果你有兩個前綴,說 $ p_1 $ 和 $ p_2 $ 假設一個設計良好的散列函式,這將為您提供兩個可能的候選者列表 $ L_1,L_2 $ 每個大小大致 $ 2^{24}. $ 正確的值在這兩個列表中。因為假設相關變數的一致性和固定,所以不太可能有虛假的候選人,比如列表 $ L_1 $ , 一個隨機量來自的機率 $ {0,1}^{56} $ 不在 $ L_1 $ 是

$$ \left(1-\frac{2^{24}}{2^{56}}\right)=\left(1-\frac{1}{2^{32}}\right), $$ 自從 $ \lim_{n\rightarrow \infty}\left(1+\frac{x}{n}\right)^n=\exp(x). $ 因此機率 $ 2^{24} $ 中的元素 $ L_2 $ 都落在外面 $ L_1 $ 是 $$ \left(1-\frac{1}{2^{32}}\right)^{2^{24}}=\left[\left(1-\frac{1}{2^{32}}\right)^{2^{32}}\right]^{2^{-8}}\approx \exp(-2^{-8}) \approx 0.9961 $$ 所以只有在大約 250 次試驗中的一次中,除了正確的候選者之外,還會有一個虛假的候選者。 **編輯:**人們普遍認為 SHA-1 就是這樣一種功能,並得到了實驗的支持。忽略我之前提到的通用雜湊函式。

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