关于 kernel.random.* 参数的一些问题

Mik*_*kov 5 kernel entropy-pool

我正在尝试了解 下的 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 时有什么区别?它只是挂了更长的时间,或者还有别的什么吗?

Fal*_*mot 5

引导 ID 参数实际上与熵统计数据无关。它只是唯一标识当前启动,如果您想知道计算机是否已重新启动或其他什么,这很有用。

熵池以实现定义的方式存储随机数据,该方式被设计为黑盒。一般来说,如果您依赖熵源,那么拥有尽可能多的熵是很好的;然而,拥有太多是浪费。如果您的服务器执行大量加密(例如生成 TLS 会话密钥,或经常生成 RSA 密钥甚至安全令牌)或出于其他原因一直需要强随机数,则您需要大量熵,甚至还有您需要的设备可以得到那个问题的千兆位流(来自物理来源)。

通常可以通过将新大小回显到池大小文件中来更改池大小。内核将存储它从各种来源获取的熵(相对事件计时是一种流行的方式),以及它从输入获取的熵/dev/random(通过RNDADDENTROPYioctl;仅写入该设备会更改数据,但不会添加标称位熵)。如果您有一个未充分利用的硬件熵源,您真的希望这个参数不是无限的。

write-wakeup-threshold 很少使用,但有利于排序;它提供的性能增益应该是最小的。它所做的是在池变低时唤醒阻止写入熵池的设备(即,将使用上述 ioctl 向池添加熵的源)。显然,它不一定具有增加熵的效果。

读唤醒阈值相反;这是在我们允许从 中读取任何内容之前需要可用的熵位数(即 entropy_avail 中指示的数字)/dev/random/dev/urandom忽略这个参数(因为从它读取是非阻塞的并且不等待熵,而是允许读取伪随机数据)。