Hash

雜湊函式、雙射性和熵

  • September 23, 2021

對於那些不知道的人,雙射函式是每個輸入產生一個且只有一個輸出的函式。例如,分組密碼保證是雙射的,否則您無法解密。

當像 SHA256 或 SHA3 這樣的散列函式與輸入長度與其輸出相同時,AFAIK 這不是或至少不應該是雙射的。(那是對的嗎?)

如果散列不是雙射的,這是否意味著重複散列會失去熵?

假設您有 256 位熵,並通過 SHA256 傳遞它。你還有 256 位的熵嗎?假設你 SHA256 對其進行一百萬次散列。然後怎樣呢?

在我看來,答案應該是否定的,但是這又不會給基於散列的密碼學帶來問題嗎?

只是一個隨機的問題突然出現在我的腦海中。

這已經在這裡回答了 1 次迭代,在這裡進行了多次迭代,但是由於後一個答案提出了一個啟發式論點,我將在這裡留下引理 4 of Functional Graphs and their Applications in Generic Attacks on Iterated Hash Constructions,它給出了一個很好的近似值關於隨機映射統計的定理 2 和關於樹的高度的(3.10) :

**引理 4.**讓 $ f $ 是一個隨機映射 $ \mathcal{F}N $ . 表示 $ N = 2^n $ . 為了 $ k \le 2^{n/2} $ ,函式圖中第 k 次迭代圖像節點數的期望 $ f $ 是 $$ (1 - \tau_k)\cdot N \approx \left(\frac{2}{k} - \frac{2}{3}\frac{\log k}{k^2} - \frac{c}{k^2} - \dots \right) \cdot N,. $$ 它表明 $ \lim{k \to \infty} k\cdot (1 - \tau_k) = 2 $ . 因此, $$ \lim_{N \to \infty, k \to \infty, k \le \sqrt{N}}(1 - \tau_k)\cdot N \approx 2^{n - \log_2 k + 1},, $$ 在哪裡 $ \tau_k $ 滿足重複 $ \tau_0 = 0, \tau_{k+1} = e^{-1+\tau_k} $ , 和 $ c $ 是一個常數。

因此,雖然是的,但由於隨機函式的重複迭代而存在一些熵損失,但這種損失僅在迭代次數上呈對數增長。輸了,說, $ 32 $ 熵位,你需要迭代散列 $ 2^{32} $ 次。對於較大的輸出長度,例如 $ 256 $ 位,對於幾乎所有實際目的,這種損失可以忽略不計。

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