一尘不染

我了解/ dev / urandom吗?

linux

我一直在阅读/dev/urandom,据我所知,我/dev/random利用网络数据包定时等事件创建了密码随机数。但是,我是否理解/dev/urandom使用PRNG并从中植入数字的权利/dev/random?还是/dev/random只要有一点就使用它-
当它们用完时会回落到PRNG并从哪里收集种子?


阅读 277

收藏
2020-06-07

共1个答案

一尘不染

urandom联机帮助页:

随机数发生器将来自设备驱动程序和其他来源的环境噪声收集到一个熵池中。发生器还保持熵池中噪声位数的估计。根据该熵池,创建随机数。

读取时,/ dev / random设备将仅返回熵池中估计的噪声位数内的随机字节。/ dev /
random应该适合需要非常高质量的随机性的应用,例如一次性填充或密钥生成。 当熵池为空时,从/ dev / random的读取将被阻塞,
直到收集到其他环境噪声为止。

从/ dev / urandom设备进行的读取不会阻止等待更多熵
。结果,如果在熵池中没有足够的熵,则返回值在理论上容易受到驱动程序使用的算法的加密攻击。当前未分类的文献中尚不提供有关如何执行此操作的知识,但从理论上讲,可能存在这种攻击。如果您的应用程序中有此问题,请改用/
dev / random。

两者都使用PRNG,尽管使用环境数据和熵池在天文上使破解PRNG更加困难,并且在不收集完全相同的环境数据的情况下也是不可能的。

根据经验,没有专门的昂贵硬件从例如量子事件中收集数据,就没有真正的随机数生成器(即生成真正不可预测的数字的RNG)之类的东西。尽管出于加密目的,/ dev
/ random或/ dev / urandom就足够了(使用的方法用于CPRNG加密伪随机数生成器)。

熵池和/ dev /
random的阻塞读取被用作安全措施,以确保无法预测随机数;例如,如果攻击者用尽了系统的熵池,则可以(尽管在当今的技术中这种可能性很小)可以预测/ dev
/ urandom的输出,该输出已经很长时间没有重新播种了(尽管这样做这还需要攻击者耗尽系统收集更多熵的能力,这在天文学上也是不可能的)。

2020-06-07