看 Youtube 會產生熵嗎
觀看影片(線上影片,如關閉 youtube 或本地保存)是否會產生足夠的(如果有)熵來創建安全加密密鑰?我了解一些活動,如記憶體使用、磁碟訪問、網路使用、使用滑鼠和鍵盤等……在 Linux 下會產生熵。我不知道的是,如果使用 CPU 和 GPU 也會產生熵?我也不知道這在Windows下是否相同。
確實如此,但實際上不可能評估多少:只是一點點,還是足夠安全?
PC 是一個極其複雜的東西,幾乎不可能在精確的時刻知道它的確切狀態,即使非常精確地觀察了它的外部行為(使用者操作、網路數據包……)。即使只知道 CPU 的確切狀態也非常困難:為現代 PC 或智能手機的 CPU 建構一個週期精確的模擬器是非常困難的,這比建構一個實現所有操作但不執行精確時序的模擬器要困難得多. 此外,這種複雜的晶片具有多個時鐘,並且存在一些不可避免的製造不精確性,導致這些時鐘之間的漂移(CPU jitter),這是HAVEGE的基礎。
僅依靠來自抖動的熵(在 CPU 內部和外圍設備之間)的問題在於它是不可靠的。根據系統配置、有多少活動以及環境溫度,可能會有或多或少的抖動。來自使用者輸入的熵是不可靠的,因為使用者可能在某種程度上是可預測的並且可能是可觀察的。來自網路輸入的熵值得懷疑,因為攻擊者可能能夠獲得它(例如,如果他們控制您的 Internet 訪問,因為您在網吧中,或者因為他們破壞了您的路由器 5 年未打更新檔的韌體)。
所有這些方法都有一個問題,即在啟動後不久,沒有或很少有熵有時間積累;解決這個問題的一種方法是將過去執行的熵保存在一個文件中,並在啟動時載入它。這樣,在系統安裝過程中可能會缺少熵,但是一旦系統為安全積累了足夠的熵,它就會永遠保持該熵。
Linux 和 Windows 等作業系統混合了核心中的所有熵源,並通過系統呼叫或類似方法(現代介面:
getrandom()
、BCryptGenRandom()
;不推薦使用的介面:/dev/urandom
、CryptGenRandom()
)公開它。您從這些系統介面獲得的熵比您自己拼湊的任何東西都更可靠,並且至少同樣值得信賴,因為它來自您無論如何都必須信任的作業系統核心。幸運的是,現代系統,至少在 PC/智能手機範圍內,有一個內置的硬體隨機發生器,實際上是為了產生熵而設計的。該系統混合了來自各種來源的所有熵,這(除了熵混合中的錯誤)為您提供至少與最強來源一樣強的熵。雖然混入了使用者活動和磁碟抖動等來源,但它們是否提供足夠的熵也沒關係,因為硬體 RNG 本身就足夠了。