Kernel

核心 5.10.119 導致 /proc/sys/kernel/random/entropy_avail 和 poolsize 的值為 256

  • June 3, 2022

更新到核心 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 位,這應該給我們適當的最小熵累積量,以及對主動攻擊的足夠寬的抗碰撞餘量。

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