加密安全PRNG';C中的s

加密安全PRNG';C中的s,c,cryptography,seed,prng,C,Cryptography,Seed,Prng,我正在用C语言生成非常大的随机整数。我发现/dev/random是一个很好的源,但是如果熵池耗尽,它就会阻塞/dev/Uradom似乎是下一个goto,但相比之下,随机性的质量并没有那么好。有没有一种方法可以使用/dev/random中的整数为PRNG种子,这样我就不必一直从/dev/random读取数据?我正在寻找一个加密安全的PRNG,虽然不是长期的。使用/dev/random中的整数来为PRNG种子,这正是/dev/uradom所做的。除非你有证据表明天王星有一个特别的弱点,否则你就是在重

我正在用C语言生成非常大的随机整数。我发现/dev/random是一个很好的源,但是如果熵池耗尽,它就会阻塞/dev/Uradom似乎是下一个goto,但相比之下,随机性的质量并没有那么好。有没有一种方法可以使用/dev/random中的整数为PRNG种子,这样我就不必一直从/dev/random读取数据?我正在寻找一个加密安全的PRNG,虽然不是长期的。

使用
/dev/random
中的整数来为PRNG种子,这正是
/dev/uradom
所做的。除非你有证据表明天王星有一个特别的弱点,否则你就是在重新发明轮子

虽然urandom确实比
/dev/random
弱,但您提出的方案在同样的方面也很弱,因此它与仅仅使用urandom没有任何好处。Uradom还有一个额外的好处,即当底层硬件提供新的熵时,它可以将新的熵不断地混合到生成的数字中。例如,FreeBSD只有一个Uradom风格的设备

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

使用
/dev/random
中的整数来种子PRNG正是
/dev/urandom
所做的。除非你有证据表明天王星有一个特别的弱点,否则你就是在重新发明轮子

虽然urandom确实比
/dev/random
弱,但您提出的方案在同样的方面也很弱,因此它与仅仅使用urandom没有任何好处。Uradom还有一个额外的好处,即当底层硬件提供新的熵时,它可以将新的熵不断地混合到生成的数字中。例如,FreeBSD只有一个Uradom风格的设备


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

这可能取决于平台。有些人已经为/dev/random使用了加密安全PRNG。示例:FreeBSD、OpenBSD、OSX。您还可以查看Yarrow、Fortuna、ISAAC(基于RC4)。
如果您想进一步研究,这是一个很好的起点:

这可能取决于平台。有些人已经为/dev/random使用了加密安全PRNG。示例:FreeBSD、OpenBSD、OSX。您还可以查看Yarrow、Fortuna、ISAAC(基于RC4)。
如果你想进一步研究它,这是一个很好的起点:

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


然后问题就变成了你需要多少熵,需要多快?因为“大数字”可能意味着任何东西,从一个项目的一个Gb的随机位到“我需要100k/秒的恒定熵流来提供这项服务”

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


然后问题就变成了你需要多少熵,需要多快?因为“大数字”可能意味着任何东西,从一个项目的一个Gb的随机位,到“我需要100k/秒的恒定熵流来提供这项服务”

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

如果您有硬件来做这件事会更好。检查您的CPU或任何其他模块是否支持加密随机数生成。就密码学而言,/dev/random和/dev/urandom都不安全。您不应该在应用程序中使用它们作为源代码。

/dev/urandom应该是加密安全的,本质上与您的建议相同-使用/dev/random来为PRNG种子。您是如何测试质量的?/dev/urandom应该是加密安全的,并且本质上与您建议的相同—使用/dev/random为PRNG种子。你是怎么测试质量的?谢谢,那我就用urandom。谢谢,那我就用urandom。