Kernel
核心 5.10.119 導致 /proc/sys/kernel/random/entropy_avail 和 poolsize 的值為 256
更新到核心 5.10.119 後,/proc/sys/kernel/random/entropy_avail 卡在 256 並且在移動滑鼠時不會改變。它曾經超過3000。
# cat /proc/sys/kernel/random/entropy_avail 256
此外,/proc/sys/kernel/random/poolsize 下降到 256。它曾經是 4096。
這是一個錯誤嗎?你能相信這個只有 256 個可用熵的核心的新隨機數生成器嗎?
無意與馬庫斯的完整答案競爭。只是為了解釋發生了什麼並證明您注意到的不是錯誤。
預設池大小是硬編碼的,
drivers/char/random.c
但實際上在 5.10.119 中發生了一些變化:高達 5.10.118:
#define INPUT_POOL_SHIFT 12 #define INPUT_POOL_WORDS (1 << (INPUT_POOL_SHIFT-5)) ... static int sysctl_poolsize = INPUT_POOL_WORDS * 32;
(2^7)x32=4096
在 5.10.119 下,poolsize 的計算方式有所不同:
POOL_BITS = BLAKE2S_HASH_SIZE * 8 ... static int sysctl_poolsize = POOL_BITS;
BLAKE2S_HASH_SIZE = 32 定義在 include/crypto/blake2s.h
8x32=256您注意到的不是錯誤……它:一個功能!
順便說一句,這只是一個預設值,如果您知道它不符合您的需求,請隨時更改它。
注意:此更改涉及主線,因為 5.17-rc1 從 119 向後移植到 5.10,但也到最近的 LTS:從 44 到 5.15。5.4 似乎並不關心(還?),當然,5.16 永遠不會。
正如@TooTea 在評論中所建議的那樣,移動的原因可以作為初始送出的一部分閱讀,簡而言之:
- 提高安全性(如果池的狀態洩漏,其內容可以被控制並完全歸零。)
- 更好的性能(在高端 CPU 上高達 225%)
這是通過直接呼叫 BLAKE2 替換 4096 LFSR 來實現的。
BLAKE2s 輸出 256 位,這應該給我們適當的最小熵累積量,以及對主動攻擊的足夠寬的抗碰撞餘量。