Linux

消耗熵會更容易破壞系統嗎?

  • March 1, 2016

熵對於 TCP 序列號和加密密鑰/參數生成等許多安全功能很重要。我的理解是,熵池被一個簡單的操作耗盡了,該操作cat /dev/random可能隱藏在惡意或編寫不佳的腳本中。這也可能由接管非特權本地帳戶並試圖深入系統的攻擊者完成。

由於大多數係統使用加密安全的偽數生成器 ( /dev/urandom) 而不是/dev/random,我想知道耗盡的熵池是否有任何安全後果。舉個例子:如果在生成過程中熵池較低,是否更容易猜測新生成的 SSL 證書的私鑰?我讀過man 4 random,但我仍然不確定係統如何處理熵。

這個問題的謬誤在於不存在“耗盡熵”之類的東西。(在任何意義上,在宇宙耗盡熵讓你生活在其中之前,你都不會耗盡熵。)

任何為密碼學設計的隨機生成器都需要兩個元素:熵源和“平滑”熵源的方法。熵源不是隨機位的來源,它們具有需要消除的偏差。無條件的熵源對密碼學沒有好處。調節,即將熵源變成均勻隨機位的源,是由密碼安全的偽隨機數生成器(簡稱 CSPRNG)完成的。一旦 CSPRNG 播種了足夠的熵,就可以至少在宇宙的幾個生命週期中執行¹。

Linux/dev/urandom使用一個 CSPRNG,它會定期用額外的熵重新播種。定期重新播種有助於在機器以某種方式洩漏隨機發生器的內部狀態的部分妥協的情況下。

Linux/dev/random使用一個 CSPRNG,它會定期用額外的熵重新播種。(聽起來很熟悉?)Linux 維護一個內部計算,假設 CSPRNG 算法被嚴重破壞並以快速的速率洩漏熵並阻塞/dev/random. 但是,如果您不信任 CSPRNG 背後的加密貨幣,那麼您甚至無法信任最初/dev/random給您的東西,或者您將使用的幾乎任何其他加密貨幣。

所以不,消耗熵不會讓你的系統更容易受到攻擊。

Linux 的唯一風險/dev/urandom是它很樂意在正確播種之前為您提供可預測的輸出。對於“普通”台式機或伺服器電腦上的日常使用,這不是問題,因為它們將熵池保存在磁碟上。如果您有一個新安裝的系統,或者一個從只讀媒體引導的實時系統,這是一個問題。(實時系統是生成長期密鑰的壞地方!)一旦系統有足夠的熵,那就永遠了。

如果您想要專業密碼學家對這個問題的看法,您可以閱讀Thomas PorninThomas Hühn 的.

¹ N位熵需要 2 N次計算才能計算出來。如果您每秒生成 10 億位,並且從 128 位的良好安全級別開始,則 1 個宇宙生命使您有時間生成大約 16 億位,即 2 96,遠低於限制。

引用自:https://unix.stackexchange.com/questions/266562