Hash

如果一個具有高熵的 SHA256 散列然後用一個由低熵製成的散列,那麼得到的散列是更高/相同/更低的熵嗎?

  • August 22, 2017

如果要使用轉換為十六進制的 256 次硬幣翻轉來創建 SHA256 雜湊(據我所知,它就像在 SHA256 中可以擷取的那樣“熵化”),然後將該雜湊作為字元串,將其與雜湊結合單詞“cat”並散列生成的 512 個字元串,該練習得到的散列會比我們開始的“完美”散列更隨機嗎?

我的想法是最終的字元串將擷取與我們開始的原始隨機性相同的數量,因為無法擷取“額外”熵並且失去了。是這樣嗎?我是否正確地考慮了這一點?將具有高熵的事物與更簡單的事物進行散列會導致較低的隨機性還是只會上升?

感謝任何可以幫助更好地解釋這一點的人。

確定性函式 $ f(X) $ 隨機變數 $ X $ 從來沒有比原始隨機變數更大的熵 $ X $ .

(旁注:如果你不熟悉隨機變數期望的技術術語,或者的定義,我建議你先閱讀一些基本的機率論——這篇文章的其餘部分沒有意義沒有這些關鍵字!在續集中,“熵”可以表示香農熵或最小熵——兩者都有效,並且在均勻分佈上一致,但密碼學主要在最小熵中起作用。請參閱此答案以簡要討論什麼熵意味著從加密的角度來看。)

充其量,如果 $ X $ 是隨機的 $ k $ - 具有均勻分佈的位串,因此 $ k $ 熵位,可能的最大值,如果 $ f\colon {0,1}^k \to {0,1}^k $ 是一個排列(又名雙射),那麼 $ f(X) $ 也有 $ k $ 一點點的熵。如果 $ f $ 不是排列,那麼 $ f(X) $ 嚴格小於 $ k $ 一點點的熵——儘管可能不會少很多。

在這種情況下, $ f $ 是 SHA-256,我們可以通過統一隨機選擇的地圖對其進行建模 $ F\colon {0,1}^k \to {0,1}^k $ . 幾乎可以肯定少於 $ 2^k $ 不同的輸出,因為很少有這樣的可能值 $ F $ 是排列。具體來說,修復一個輸出 $ y \in {0,1}^k $ ; 對於每個輸入 $ x \in {0,1}^k $ , 我們有 $ \Pr[F(x) = y] = 1/2^k $ , 和 $ F(x) $ 是每個的獨立隨機變數 $ x $ , 所以

$$ \begin{align*} \Pr&[\exists x. F(x) = y] = 1 - \Pr[\forall x. F(x) \ne y] \ &= 1 - \Pr[F(0) \ne y],\Pr[F(1) \ne y]\cdots\Pr[F(2^k - 1) \ne y] \ &= 1 - (1 - 1/2^k)^{2^k}. \end{align*} $$ 根據期望的線性,這也是不同輸出的期望分數。作為 $ k \to \infty $ ,這收斂到 $ 1 - e^{-1} \approx 0.632 $ . 因此,在一個統一的隨機選擇 $ F $ , 的期望熵 $ F(X) $ , 或者 $ \mathbb E_F\bigl[H[F(X)]\bigr] $ , 大約比熵小一點 $ X $ , 或者 $ H[X] $ , 在哪裡 $ H $ 是熵運算元。

迭代 SHA-256 怎麼樣?我們是否每次都會損失一點熵,所以 $ \operatorname{SHA-256}^{256} $ 熵為零?不,如果我們獨立選擇另一個函式 $ G\colon {0,1}^k \to {0,1}^k $ ,然後在一個統一的隨機選擇 $ F $ 和 $ G $ , 的期望熵 $ F(G(X)) $ 可能比熵少大約兩位 $ X $ . 但這對於迭代 SHA-256 來說是一個糟糕的模型,因為我們僅限於這種情況 $ F = G $ , 在這種情況下 $ F $ 和 $ G $ 盡可能遠離獨立。

相反,對於任何固定功能,很有可能 $ F $ , 有很多循環 $ F $ 是一個排列,並且僅限於 $ F $ 從而保留熵。通常有一個主要的大循環,這有助於繪製一個巨大的毛茸茸的 rho: $ \rho $ . 在極限為 $ \ell \to \infty $ , $ F^\ell(X) $ 地圖 $ X $ 到一個循環上的一個獨立的均勻隨機點,循環的選擇由該循環上的點數加權並導致該循環。

但在密碼學工程的實踐中呢?通常我們對待 $ \operatorname{SHA-256}(X) $ 作為一個統一的隨機變數,獨立於系統中的所有其他事物(除非長度擴展攻擊可能相關),其熵等於 $ X $ ,或 256,以較小者為準。

如果你有兩個 N 位值,一個 $ K < N $ 熵位和另一個與 $ T<N $ 熵位,那麼結果將大約是 $ \text{max}(N,T+K) $ 一點熵。此外,由於碰撞,重新散列以大約 0.7 的速率損失熵(想想球和箱子的機率),所以熵稍微少一些。

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