Hash
滑鼠/鍵盤輸入的迭代散列是否改善了其作為熵源的屬性?
在問題中,滑鼠移動座標是否可用作 RNG 的種子?這是一個很好的熵收集器和美白技術嗎?每張海報都談到收集滑鼠和鍵盤輸入作為熵的來源。這些回复很好地說明了這很危險並且需要大量樣本來確保足夠的熵用於加密目的。
我想知道如果採用以下方案,這些輸入作為熵源的質量是否會提高,如果是,提高多少?
想像一個系統,其中
X
有來自使用者的一些輸入(例如滑鼠座標對或鍵碼與目前時間戳相結合),並且H
是一些最新一代的散列函式,並且e
是我們在每次迭代後的目前熵池狀態。收集第一個輸入後,我們有:e = H(X1)
這具有低熵。我們從使用者那裡收集另一個樣本,這次與之前的熵結合併對其進行雜湊處理:
e = H( X2 + e )
或者:
e = H( X2 + H(X1) )
然後我們對收集到的每個新值繼續做同樣的事情,將它與之前的熵結合起來,並將它們散列在一起:
e = H( Xn + e )
或者:
e = H( Xn + H(Xn-1 + H(Xn-2 + H(Xn-3 + ...))) )
像這樣迭代地散列是否會改變所產生的熵質量的改進率,或者它與收集所有樣本並像這樣散列一次大致相同:
e = H( X1 + X2 + X3 ... Xn )
更新
這個答案對散列後熵會發生什麼?也有一個很好的分析,我認為適用於這裡:
如果我們有一個
SHA
沒有任何衝突的雜湊函式,那麼它對熵沒有影響;那是,H(X) = H(SHA(X));
擷取滑鼠和鍵盤輸入的最大問題是使用者在很短的時間內可能做的事情的數量是有限的。
假設您對使用者輸入 H(X1 + X2 + X3) 的 3 個字母數字字元進行散列(假設 + 表示連接,H 是加密散列函式)。從 000 到 ZZZ 的可能性數量約為 62^3。現在,如果您改為使用 H(X3 + H(X2 + H(X1))),那麼可能性的數量仍然是 62^3。你甚至可以使用pbkdf2 之類的東西,迭代次數非常可笑,而不會改變可能的輸出數量。