2

我需要为我正在编写的应用程序提供合理的高质量随机数据。Linux 为此提供了 /dev/random 文件,这是理想的;但是,由于我的服务器是单服务虚拟机,它的熵源非常有限,这意味着 /dev/random 很快就会耗尽。

我注意到,如果我从 /dev/random 读取数据,在等待更多熵的设备阻塞之前,我只会得到 16 个左右的随机字节:

[duke@poopz ~]# hexdump /dev/random
0000000 f4d3 8e1e 447a e0e3 d937 a595 1df9 d6c5
<process blocks...>

如果我终止此过程,离开一小时并重复该命令,则再次仅产生 16 个左右字节的随机数据。

但是- 如果我让命令运行相同的时间,则会收集更多的随机数据。我由此假设,在给定的时间段内,系统会产生大量熵,但 Linux 仅在您实际从 /dev/random 读取时才使用它,如果不是,则丢弃它。如果是这种情况,我的问题是:

是否可以将 Linux 配置为缓冲 /dev/random 以便从中读取产生更大的高质量随机数据突发?

在我的程序中缓冲 /dev/random 对我来说并不难,但我觉得在系统级别这样做会更优雅。我还想知道让 Linux 在内存中缓冲其随机数据是否会产生安全隐患。

4

3 回答 3

2

听起来您需要一个熵守护程序来从其他来源提供熵池。

于 2011-04-12T12:43:16.267 回答
1

使用 /dev/urandom。

/dev/random 的对应物是 /dev/urandom(“解锁”/非阻塞随机源 [4]),它重用内部池以产生更多伪随机位。这意味着调用不会阻塞,但输出包含的熵可能比从 /dev/random 中相应读取的少。虽然它仍被用作适用于大多数加密目的的伪随机数生成器,但不建议用于生成长期加密密钥。

于 2011-04-12T10:41:30.943 回答
1

你有,或者你可以购买,一个与 Linux 兼容的硬件随机数生成器吗?这可能是您潜在问题的解决方案。见http://www.linuxcertified.com/hw_random.html

于 2011-04-12T10:50:08.797 回答