2013-03-14 70 views
1

我正在C中产生非常大的随机整数我发现/ dev/random是一个很好的来源,但它会阻塞熵池是否用尽。/dev/urandom看起来像是下一个goto,但随机性的质量并不如此。有没有一种方法可以使用/ dev/random中的整数来种子PRNG,以便我不必从/ dev/random中读取数据?我正在寻找密码安全的PRNG,虽然不是长期的。加密安全PRNG在C

+0

/dev/urandom是*假设*是加密安全的,并且基本上与您建议的一样 - 使用/ dev/random来种子PRNG。你是如何测试质量的? – 2013-03-14 19:36:48

回答

7

使用/dev/random的整数来播种PRNG正是/dev/urandom所做的。除非你有随意的弱点证据,否则你正在重新发明轮子。

尽管urandom确实比/dev/random弱,但是您提出的方案在完全相同的情况下很脆弱,所以与仅使用urandom相比,它没有什么好处。 urandom具有额外的好处,它可以连续混合新的熵到生成的数字中,因为新的熵可以从底层硬件获得。 FreeBSD的例子只有有一个urandom风格的设备。

最后,urandom已经存在很多年了,其来源已经由安全专家进行了审查,而替换者可以自行推出。

+0

谢谢,我会使用urandom。 – JessMcintosh 2013-03-14 22:24:40

0

这可能取决于平台。有些使用加密安全的PRNG已经用于/ dev/random。例子:FreeBSD,OpenBSD,OS X.你也可以看看Yarrow,Fortuna,ISAAC(基于RC4)。 如果你想更多地研究它,这是一个很好的开始:http://csrc.nist.gov/groups/ST/toolkit/index.html

0

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

那么问题就变成了你想要的熵多少,以及多快?因为“大数字”可能意味着任何事情,从一个项目的随机比特的Gb到“我需要100k /秒的恒定熵熵”,这项服务“

0

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