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

Modified on: Thu, 01 Aug 2019 09:20:03 +0800

我正在尝试理解/proc/sys/kernel/random/下的linux内核参数,但是我遇到了一些麻烦。你能帮我解决一些问题吗?

  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时有什么区别?它只是挂了一段时间,或者还有其他什么东西?
  5. 醇>

最佳答案

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

熵池以实现定义的方式存储随机数据,该方式被设计为黑盒子。一般来说,如果你依赖于熵源,你可以拥有尽可能多的熵。然而,拥有太多是浪费。如果你的服务器进行了大量的加密(例如生成TLS会话密钥,或频繁生成RSA密钥甚至安全令牌)或者由于某些其他原因需要强大的随机数,你需要大量的熵,甚至有设备你可以获得该问题的千兆流(来自物理来源)。

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

写入唤醒阈值很少使用,但有利于排序;它提供的性能提升应该是最小的。它的作用是唤醒设备阻塞以写入熵池(即,当池变低时,将使用上述ioctl向池中添加熵的源)。显然,它不一定具有添加熵的效果。

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


相关问答

添加新评论