Entropy

添加已知或低熵數據時,通過散列損失了多少熵?

  • February 18, 2014

(我更新了標題,因為我認為這個問題有些混亂)

這是問題:

例如,如果我有一個 64K 字節長的比特流,並且有大約 16 * 8 位的熵隨機分佈在該字節流中,那麼我有 16 * 8 位的熵。

但是,如果我對那個字節流進行 SHA256,我現在總共只有 32 個字節,而不是 64K 字節。

一些資訊當然失去了,但也許所有的熵都被保留了?

另一種看待問題的方式是,SHA256(10GB,16 字節熵)的熵等於 SHA256(16 字節,16 字節熵),如果不是,究竟失去了多少?

我很難找到任何估計熵損失的文獻,只是各種加密工程師揮手說這一切都很好。

這是查看它的算法方式:

#!/bin/sh
HASHV=`echo <random secret> | sha256`
echo $HASHV
while(true) ;
do
HASHV=`echo "$HASHV 00000000000000000000000000000000" | sha256`
echo $HASHV
done

HASHV 的熵會隨著時間的推移而減少嗎?

有人有什麼具體的嗎?(對論文、書籍等的引用非常豐富)

相關問題:

想像散列函式效果的一種簡單方法是截斷。一個“好的”散列函式應該表現得像一個隨機預言機。如果你的源有熵 $ s $ 位,那麼這意味著源以某種方式假設 $ 2^s $ 可能的值。當使用隨機預言機處理時 $ n $ -bit 輸出,你強制 $ 2^s $ 輸入值到 $ 2^n $ 可能的輸出。

什麼時候 $ s $ 小於 $ n/2 $ , 那麼預計雜湊函式會產生 $ 2^s $ 不同的價值觀,以及你所有的 $ s $ 保留了一些熵。什麼時候 $ s $ 達到 $ n/2 $ ,碰撞開始出現,每次碰撞都意味著一小部分熵損失。不過,您仍然保留了其中的大部分內容。什麼時候 $ s $ 達到 $ n $ (例如,您使用 SHA-256 對具有 256 位熵的輸入進行散列),那麼預計您會得到大約 $ 0.6·2^s $ 不同的輸出(您在碰撞中失去了三分之一的輸入),因此產生的熵將比 $ n - 1 $ 位。什麼時候 $ s $ 高於 $ n $ ,輸出熵仍然會上升,但永遠不會超過 $ 2^n $ : 你不能超過 $ 2^n $ 不同的輸出 $ n $ 位…

總而言之,在對輸入進行雜湊處理時,您幾乎保留了所有輸入熵,最多保留雜湊函式的輸出大小。為了簡單起見:當您使用 SHA-256 散列時,輸入熵 $ s $ 位,那麼你得到的輸出熵至少等於 $ s-1 $ 和 255 位。

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