目前,我的最大大小为 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 及更高版本)中池的大小,您需要修补并重新编译内核,因为配置是硬编码的:
必须注意的是:熵池的大小与您的用例并不真正相关。相反,池的补充速度更为重要。但改变熵池的大小不会影响池的补充速度,因此增加池的大小几乎没有意义。
如果如你所说,你真的真的真的必须产生很多那么您应该获得专用的硬件 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” 了解详情。