/dev/random 数据是伪随机 AES 密码吗?熵从何而来?

/dev/random 数据是伪随机 AES 密码吗?熵从何而来?

我目前对熵池的理解是它真正随机地收集数据的传输速度很慢。我想知道 Unix 和 Linux 如何收集熵,以及 /dev/random 如何使用该熵。

我听说过(一般)熵收集方法,例如当“随机”选择的网络数据包到达时显卡 CPU 的状态,与数模转换器中的嘶嘶声因子相匹配,以及其他更迟钝的方法。

我相信熵“池”是根据需要进行挖掘的,并用于为伪随机生成器提供种子......

我并不是在寻求深入的答案,但我有兴趣知道这是否是 Unix/Linux 使用的一般方法?..也许还有一些关于熵收集采煤工作面实际情况的提示。 .. 进而,什么是输入的熵吗?它是 AES Rijndael 密码吗?

我上面评论的背景信息来自史蒂夫·吉布森的现在安全!播客:第 301 集随机播放,第 2 部分(共 2 部分)...他只是泛泛而谈(但正如他的风格一样,有足够的细节和清晰度,以至于我也能理解他。听了前面的 300 集有帮助:),...我想知道这是否Unix/Linux 就是这样做的...

答案1

Linux 有两个可供用户空间使用的随机数生成器,/dev/random以及/dev/urandom.

/dev/random是“真”随机性的来源 - 即它不是由伪随机数生成器生成的。输入驱动程序和中断处理程序通过函数add_input_randomness和 向其中输入熵add_interrupt_randomness。如果熵耗尽,读取该设备的进程将被阻塞。

/dev/urandom是一个伪随机数生成器。它由与 相同的熵池提供/dev/random,但当熵池用完时,它会切换到密码学上强大的生成器。

用户空间应用程序可以通过写入来输入熵池/dev/{,u}random

阅读一下随机(4)手册页和文件drivers/char/random.c在内核源代码树中。它的评论很好,你问的大部分问题都在那里得到了解释。


FreeBSD/dev/random默认情况下是一个使用 Yarrow 算法的伪随机数生成器(但如果已连接,则可以指向硬件 RNG)。软件生成器从以太网和串行连接以及硬件中断中获取熵(可通过 更改sysctl kern.random)。只要内部状态未知,Yarrow 算法就被认为是安全的,因此/dev/random应该始终输出高质量的数据而不会阻塞。看随机(4)

在NetBSD上,/dev/random提供基于随机数据仅有的收集的熵(从磁盘、网络、输入设备和/或磁带驱动器;可使用rndctl),而/dev/urandom当熵池为空时则回退到 PRNG,类似于 Linux。看随机(4),RNDCTL(8),研究组(9)

OpenBSD 有四个生成器:/dev/random一个是硬件生成器,/dev/srandom一个是安全随机数据生成器(在熵池上使用 MD5:“磁盘和网络设备中断等”),/dev/urandom类似,但当熵池为空时会回退到 PRNG。第四个,/dev/arandom,也是一个 PRNG,但是使用RC4。看随机(4),arc4随机(3)

Mac OS X 也使用 Yarrow 算法/dev/random,但具有相同的/dev/urandom兼容性工作原理。 “SecurityServer 守护进程根据内核的随机抖动测量定期将额外的熵馈送到生成器。”看随机(4)

相关内容