基於散列函式的流密碼的缺點
在here的回答中,有人提到:
如果你有一個帶有oracle-powers的散列函式,那麼通過散列K||n很容易從密鑰生成偽隨機流,其中K是密鑰,n是計數器。通過對這個依賴於密鑰的偽隨機流與要加密的數據進行異或運算,您就有了一個流密碼。
在同一篇文章中,還有關於使用加密雜湊函式創建流密碼的這一部分:
密碼散列函式是一種抵抗原像、第二原像和衝突的函式。據我所知,尚未證明這些條件足以建構流密碼。
據我所知,目前所有現有的對稱算法,尤其是 AES,只被認為是安全的。我們關於它們的安全性的唯一證據是它們在實踐中的使用,並且到目前為止已經嘗試過的攻擊並沒有災難性地降低這些算法的安全性。
“尚未證明這些條件足以建構流密碼”的問題真的是唯一的問題嗎?由散列函式引發的流密碼還有哪些其他問題?他們可能不太安全嗎?他們可能更慢嗎?他們可能使用了太多記憶體嗎?僅僅是研究過的其他加密算法可以保證更好的結果嗎?
我會假設具有更大塊大小的散列函式具有可以使用更長的鍵或更長的隨機數的優點。對於 SHA-512,可以使用 384 位的密鑰和 128 位長度的隨機數。另一種可能性是繼續使用 256 位密鑰,使用 128 位隨機數,並且與 AES-GCM 的 ~2^39 位相比,具有更好的最大消息大小為 2^128 塊(或 SHA-512 為 2^137 位)只有 96 位隨機數(在我看來這將是一個不錯的目標)。
“尚未證明這些條件足以建構流密碼”的問題真的是唯一的問題嗎?
因此,抗碰撞確實不足以建構安全的流密碼,標準範例是採用抗碰撞雜湊函式並附加 128 $ 0 $ 位到輸出。這顯然繼承了抗碰撞性,但也沒有提供與隨機無法區分的輸出。
他們可能更慢嗎?
這通常被認為是核心問題。計算散列函式通常比計算專用對稱結構(如 AES)慢 3-10 倍。這很可能是由於散列的性質具有“更強”的威脅模型,必須在對手知道計算中的所有值時提供安全性,而 AES 只需要在對手不知道一個輸入時提供安全性- 鑰匙。
他們可能不太安全嗎?
雖然我們可以使用在其輸出中不提供偽隨機性的散列函式,但我們使用的標準結構經過精心設計,可提供均勻隨機的輸出。
詳細的論點取決於底層結構,但我們通常可以建構一個安全的密鑰流生成器,作為 $ H(k|p|n|\text{ctr}) $ 用於具有適當填充的現代散列函式 $ p $ .
底層的安全假設與 HMAC 類似,要求 Merkle-Damgard 雜湊的內部壓縮函式是雙輸入 PRF,而基於 Sponge 的雜湊的內部排列是隨機排列,已經假設為抗碰撞。