如何增加池 /dev/random 的最大大小

如何增加池 /dev/random 的最大大小

目前,我的最大大小为 4096 字节:

$ cat /proc/sys/kernel/random/poolsize           
4096

我需要生成许多 PGP 密钥,并且出于安全原因我确实需要使用 /dev/random。

我一直在寻找有关此池大小的一些内核标志,但没有找到任何东西。

答案1

要设置可写的内核参数,您可以交互地使用 sysctl:

sysctl kernel.random.poolsize=8192

或者您可以将该值回显到 /proc 文件系统:

echo 8192 > /proc/sys/kernel/random/poolsize

为了使更改在启动后生效,您可以添加一行 /etc/sysctl.conf(启动前您通常可以在该行中传递引导加载程序中的参数kernel):

kernel.random.poolsize=8192

完成前者后,您可以运行sysctl -p以使更改生效。这假设该参数是可写的或可以增加到超过当前值。如果不是,那么您必须重建内核或寻找替代方案。

但是,您的问题可能是无法快速填满池子以满足您的需求。您可能需要研究哈格德

这类问题可能会引起更多关注security.stackexchange.com我最近正在看这个问题您可能会感兴趣。

答案2

要更改较新的内核(2.6 及更高版本)中池的大小,您需要修补并重新编译内核,因为配置是硬编码的:

https://github.com/torvalds/linux/blob/27db64f65f1be2f2ee741a1bf20d8d13d62c167f/drivers/char/random.c#L284-L287


必须注意的是:熵池的大小与您的用例并不真正相关。相反,池的补充速度更为重要。但改变熵池的大小不会影响池的补充速度,因此增加池的大小几乎没有意义。

如果如你所说,你真的真的真的必须产生很多那么您应该获得专用的硬件 RNG,因为/dev/random这可能不是一个好的选择。

另外,如果你还没有读过,请阅读https://www.2uo.de/myths-about-urandom/虽然不是 100% 准确,但它可以让您了解/dev/random和之间的差异(或缺乏差异) /dev/urandom- 因为对您来说最正确的解决方案很可能是“使用/dev/urandom而不是/dev/random”(顺便说一下,默认情况下它做什么;更准确地说,它在非阻塞模式下openssl使用)getrandom

答案3

从 Linux 内核 2.6 开始注释/proc/sys/kernel/random/poolsize是只读的。

此外 Linux 内核5.10.119改变了常量的含义poolsize,在较新的内核中该值甚至更低:

$ cat /proc/sys/kernel/random/poolsize
256

但这并不意味着熵池会变小,明白吗内核 5.10.119 导致 /proc/sys/kernel/random/entropy_avail 和 poolsize 的值为 256” 了解详情。

相关内容