如何确定哪些进程正在使用来自 /dev/urandom 的多少熵

Mat*_*ine 5 linux random

Doingfuser -v /dev/urandom告诉我哪些进程当前已/dev/urandom打开,但仅此而已。是否有任何东西可以确定每个人随着时间的推移消耗了多少熵?例如,可能一个进程每分钟消耗大约 1 位熵,而另一个进程每秒消耗大约 8 位;我想要一些确定的方法。

Gil*_*il' 8

简短的回答是 0,因为没有消耗熵。

有一个普遍的误解,认为熵会被消耗——每次读取随机位时,都会从随机源中移除一些熵。这是错误的。你不会“消耗”熵。是的,Linux 文档弄错了

在 Linux 系统的生命周期中,有两个阶段:

  1. 最初,没有足够的熵。/dev/random会阻塞直到它认为它已经积累了足够的熵;/dev/urandom愉快地提供低熵数据。
  2. 一段时间后,随机生成器池中存在足够的熵。/dev/random分配一个虚假的“熵韭菜”率并不时阻止;/dev/urandom愉快地提供加密质量的随机数据。

FreeBSD 做对了:在 FreeBSD 上,/dev/random(或/dev/urandom,这是同一件事)如果没有足够的熵就会阻塞,一旦阻塞,它就会不断地喷出随机数据。在 Linux 上,既不是/dev/random也不/dev/urandom是有用的东西。

在实践中,使用/dev/urandom,并确保在配置系统时提供熵池(来自磁盘、网络和鼠标活动、来自硬件源、来自外部机器,......)。

虽然您可以尝试读取从 中读取的字节数/dev/urandom,但这完全没有意义。读取/dev/urandom不会耗尽熵池。每个消费者在您想命名的任何时间单位中使用 0 位熵。

  • 虽然答案是正确的,但它有点错过了我认为的要点。内核确实对可用的熵量进行了估计(从 /proc/sys/kernel/random/entropy_avail 中读取) - 虽然这不是一个合理的做法,但从 /dev/urandom 读取会消耗它并使进程从 /开发/随机块。因此,尝试说明哪些​​进程读取了 /dev/urandom 以及读取了多少是完全合理的,即使它没有加密意义。 (6认同)