1

我正在努力在 C 中生成非常大的随机整数。我发现 /dev/random 是一个很好的来源,但如果熵池耗尽,它会阻塞。/dev/urandom 似乎是下一个 goto,但相比之下随机性的质量并不好。有没有办法可以使用 /dev/random 中的整数来播种 PRNG,这样我就不必继续从 /dev/random 读取?我正在寻找一种加密安全的 PRNG,尽管不是长期的。

4

4 回答 4

7

使用整数 from/dev/random播种 PRNG正是这样/dev/urandom做的。除非您有证据表明 urandom 存在特定弱点,否则您就是在重新发明轮子。

虽然 urandom 确实比 弱/dev/random,但您提出的方案以完全相同的方式弱,因此与仅使用 urandom 相比,它没有任何好处。urandom 有一个额外的好处,它可以不断地将新熵混合到生成的数字中,因为新熵可以从底层硬件获得。例如 FreeBSD只有一个 urandom 风格的设备。

最后,urandom 已经存在很多年了,并且它的来源已经过安全专家的审查,这不是一个可以自己滚动的替代品。

于 2013-03-14T19:38:22.073 回答
0

如果您只是想要一个大的熵池,您可以做一些基本的事情,例如从嘈杂的数据流(例如繁忙环境的视频或音频)中获取数据块的 SHA1。

那么问题就变成了你想要多少熵,以及多快?因为“大数字”可能意味着从项目的 Gb 随机位到“我需要 100k/sec 的恒定熵流来提供此服务”

于 2013-03-14T19:45:26.687 回答
0

如果你有硬件来做就更好了。检查您的 CPU 或任何其他模块是否支持加密随机数生成。/dev/random 和 /dev/urandom 在密码学方面都不安全。您不应将它们用作应用程序中的源。

于 2013-03-15T02:01:14.910 回答
0

它可能取决于平台。有些人已经为 /dev/random 使用了加密安全 PRNG。示例:FreeBSD、OpenBSD、OS X。您还可以查看 Yarrow、Fortuna、ISAAC(基于 RC4)。如果您想进行更多研究,这是一个很好的起点:http: //csrc.nist.gov/groups/ST/toolkit/index.html

于 2013-03-14T19:42:19.063 回答