Kernel

關於 kernel.random.* 參數的一些問題

  • February 13, 2016

我正在嘗試了解 linux 核心參數/proc/sys/kernel/random/,但我遇到了一些麻煩。你能幫我弄清楚一些事情嗎?

  1. 參數是boot_id乾什麼用的?我只找到了它在啟動時生成的資訊,但我找不到原因。
  2. 我知道熵池大小是恆定的(4096 位)並且無法更改。為什麼數量這麼少?難道不是,比方說,1048576 或更多?也許有很多可用的熵不是很好嗎?
  3. 它類似於第二個問題,但涉及entropy_avail參數——不填充整個熵池的目的是什麼?當我檢查參數時,它在 1000 位左右振盪,但池大小為 4096。當entropy_avail達到設置的門檻值時write_wakeup_threshold,它會下降一點(通常為 100),然後再次上升到write_wakeup_threshold參數中指定的點。那麼為什麼我們在熵池大小中需要這個 4096 呢?
  4. 有什麼理由我應該增加或減少read_wakeup_thresholdwrite_wakeup_threshold參數的值嗎?第一個只是休眠想要從/dev/random設備獲取熵的程序,但是當我將其設置為 64、128 或 256 時有什麼區別?它只是掛了更長的時間,或者可能還有其他原因?

引導 ID 參數實際上與熵統計無關。它只是唯一標識目前啟動,如果您想知道電腦是否已重新啟動或其他什麼,這很有用。

熵池以實現定義的方式儲存隨機數據,該方式被設計為被視為黑盒。一般來說,如果你依賴於熵源,那麼盡可能多地擁有熵是很好的。然而,擁有太多是浪費。如果您的伺服器執行大量加密(例如,生成 TLS 會話密鑰,或經常生成 RSA 密鑰甚至安全令牌)或出於某種其他原因一直需要強隨機數,那麼您需要大量熵,甚至還有設備可以得到它的千兆比特流(來自物理源)。

池大小通常可以通過將新大小回顯到池大小文件中來更改。核心將儲存它從各種來源獲得的熵(相對事件時間是一種流行的方式),以及它從輸入獲得的熵/dev/random(通過RNDADDENTROPYioctl;僅寫入該設備會更改數據但不會添加標稱位熵)。如果你有一個未充分利用的硬體熵源,你真的希望這個參數不是無限的。

write-wakeup-threshold 很少使用,但有利於排序;它提供的性能增益應該是最小的。它所做的是在池變低時喚醒阻塞寫入熵池的設備(即,將使用上述 ioctl 將熵添加到池中的源)。顯然,它不一定會產生增加熵的效果。

read-wakeup-threshold 是相反的;這是在我們允許從/dev/random. /dev/urandom忽略此參數(因為從中讀取是非阻塞的並且不等待熵,而是允許讀取偽隨機數據)。

引用自:https://serverfault.com/questions/605275