Kernel
關於 kernel.random.* 參數的一些問題
我正在嘗試了解 linux 核心參數
/proc/sys/kernel/random/
,但我遇到了一些麻煩。你能幫我弄清楚一些事情嗎?
- 參數是
boot_id
乾什麼用的?我只找到了它在啟動時生成的資訊,但我找不到原因。- 我知道熵池大小是恆定的(4096 位)並且無法更改。為什麼數量這麼少?難道不是,比方說,1048576 或更多?也許有很多可用的熵不是很好嗎?
- 它類似於第二個問題,但涉及
entropy_avail
參數——不填充整個熵池的目的是什麼?當我檢查參數時,它在 1000 位左右振盪,但池大小為 4096。當entropy_avail
達到設置的門檻值時write_wakeup_threshold
,它會下降一點(通常為 100),然後再次上升到write_wakeup_threshold
參數中指定的點。那麼為什麼我們在熵池大小中需要這個 4096 呢?- 有什麼理由我應該增加或減少
read_wakeup_threshold
和write_wakeup_threshold
參數的值嗎?第一個只是休眠想要從/dev/random
設備獲取熵的程序,但是當我將其設置為 64、128 或 256 時有什麼區別?它只是掛了更長的時間,或者可能還有其他原因?
引導 ID 參數實際上與熵統計無關。它只是唯一標識目前啟動,如果您想知道電腦是否已重新啟動或其他什麼,這很有用。
熵池以實現定義的方式儲存隨機數據,該方式被設計為被視為黑盒。一般來說,如果你依賴於熵源,那麼盡可能多地擁有熵是很好的。然而,擁有太多是浪費。如果您的伺服器執行大量加密(例如,生成 TLS 會話密鑰,或經常生成 RSA 密鑰甚至安全令牌)或出於某種其他原因一直需要強隨機數,那麼您需要大量熵,甚至還有設備可以得到它的千兆比特流(來自物理源)。
池大小通常可以通過將新大小回顯到池大小文件中來更改。核心將儲存它從各種來源獲得的熵(相對事件時間是一種流行的方式),以及它從輸入獲得的熵
/dev/random
(通過RNDADDENTROPY
ioctl;僅寫入該設備會更改數據但不會添加標稱位熵)。如果你有一個未充分利用的硬體熵源,你真的希望這個參數不是無限的。write-wakeup-threshold 很少使用,但有利於排序;它提供的性能增益應該是最小的。它所做的是在池變低時喚醒阻塞寫入熵池的設備(即,將使用上述 ioctl 將熵添加到池中的源)。顯然,它不一定會產生增加熵的效果。
read-wakeup-threshold 是相反的;這是在我們允許從
/dev/random
./dev/urandom
忽略此參數(因為從中讀取是非阻塞的並且不等待熵,而是允許讀取偽隨機數據)。