Tow*_*wer 67 unix linux random cryptography
我一直在阅读/dev/urandom
,据我所知,/dev/random
通过利用网络数据包时序等几个事件来创建加密随机数.但是,我是否理解/dev/urandom
使用PRNG,播种数字来自/dev/random
?或者/dev/random
只要有比特就可以使用它- 当它们用尽时它会回到一些PRNG,从那里收集种子?
Lie*_*yan 93
从urandom
联机帮助页:
随机数发生器将来自设备驱动程序和其他源的环境噪声收集到熵池中.生成器还保持对熵池中的噪声位数的估计.从该熵池中创建随机数.
读取时,/ dev/random设备仅返回熵池中估计的噪声位数内的随机字节./ dev/random应该适用于需要非常高质量随机性的用途,例如一次性密钥或密钥生成. 当熵池为空时,来自/ dev/random的读取将阻塞,直到收集到额外的环境噪声.
从/ dev/urandom设备读取不会阻止等待更多的熵.结果,如果熵池中没有足够的熵,则理论上返回的值易受对驱动程序使用的算法的加密攻击.目前未分类的文献中没有关于如何做到这一点的知识,但理论上可能存在这样的攻击.如果这是您的应用程序中的问题,请改用/ dev/random.
两者都使用PRNG,尽管使用环境数据和熵池使得它在天文学上更难以破解PRNG,并且在不收集完全相同的环境数据的情况下也是不可能的.
根据经验,如果没有从量子事件中收集数据的专门昂贵的硬件,就没有真正的随机数发生器(即产生真正不可预测数量的RNG); 虽然出于加密目的,/ dev/random或/ dev/urandom就足够了(使用的方法是CPRNG,加密伪随机数生成器).
使用/ dev/random的熵池和阻塞读取作为安全防护,以确保不可能预测随机数; 例如,如果一个攻击者耗尽了系统的熵池,那么尽管今天的技术极不可能,他可以预测/ dev/urandom的输出很长一段时间没有被重新接种(尽管如此)这也需要攻击者耗尽系统收集更多熵的能力,这也是天文数据不可思议的.
Tho*_*nin 31
实际上你在实践中需要的是FreeBSD /dev/urandom
提供的内容:它将读取足够长度的初始种子/dev/random
,然后使用PRNG.因此,它可能最初阻塞(刚刚在系统启动之后)但是一旦它收集了足够的熵,它就永远不会阻塞.这提供了大多数加密协议所需的随机性级别,而不是过度阻塞.
Linux /dev/urandom
是类似的,除了它永远不会阻塞,因此如果在启动后使用,可能会有返回低质量随机性的风险.另一方面,/dev/random
甚至可能在启动时间之后很长时间阻塞,这也是一个问题.我经常看到服务器神秘失速,因为有些软件坚持使用/dev/random
,而无键盘服务器没有获得足够的熵.
通常的Linux发行版会在关机时保存从中获取的随机种子/dev/urandom
,并在下次引导时将其注入,从而保证了随机提供的随机质量/dev/urandom
.只有在操作系统安装过程中,加密质量才会成为一个问题,而且通常不是因为安装涉及与执行安装的人进行多次交互,从而产生大量的熵.
总而言之,在Linux和FreeBSD下,你应该使用/dev/urandom
,而不是/dev/random
.
归档时间: |
|
查看次数: |
44846 次 |
最近记录: |