随机和 urandom 设备

用途

安全随机输出的源。

描述

/dev/random/dev/urandom 字符设备提供从写入设备的中断计时或输入生成的加密安全随机输出。

/dev/random 设备旨在提供高质量的加密安全随机输出,并且仅返回有足够 (等量或更大量) 随机输入可用于生成输出的输出。 如果没有足够的随机输入可用,那么将阻止从 /dev/random 设备读取,直到可以满足请求为止,除非在打开设备时指定了 O_NONBLOCK 标志,在这种情况下,将返回可能生成的尽可能多的高质量输出,并返回错误代码 EAGAIN。

/dev/urandom 设备提供可靠的随机输出源,但是如果没有足够的可用输入,那么不会从相等数量的随机输入生成输出。 从 /dev/urandom 设备读取始终返回请求的输出数量而不阻塞。 如果没有足够的随机输入,则随机数字生成器将处理备用输入以提供加密安全输出,其强度将反映随机数字生成器所使用的算法的强度。 与从随机输入生成的输出相比,没有随机输入生成的输出在理论上不太安全,因此应该将 /dev/random 用于需要对输出安全性具有高度置信度的应用程序。

写入任一设备的数据被添加到存储的随机输入的池中,并且可用于生成输出。 对于这两个设备,写操作的行为完全相同,并且不会阻止。

实现细节

/dev/random/dev/urandom 设备是在装入随机数生成器时根据设备配置子系统指定的主号码和次号码创建的,因此在尝试查找或打开设备时应始终使用设备名称。 卸载随机数生成器时,会删除这些设备。 使用 shutdown 命令关闭系统时,将从 /dev/urandom 设备获取输出,并在下次引导时装入随机数生成器以向生成器提供启动熵时将其写回 /dev/random 设备,从而提高引导后存储的随机输入的质量。

当存储的随机输入池低于半满时,将从中断计时收集输入,并继续收集直到该池再次满为止。 在收集计时时,此过程会对所有外部中断产生轻微的性能影响,当计时停止时,会停止此操作。 写入任意一个随机设备的数据也会对存储的随机输入池产生影响,并会影响输出,因此写入这些设备应该是特权操作。 这由设备的许可权强制实施,因此管理员可以将其更改为完全不允许使用 (如果需要)。