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

Pet*_*r.O 8 security random

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

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

我相信熵“池”会根据需要被利用,并用于为伪随机生成器提供种子....

我不是在寻求深入的答案,但我很想知道这是否是 Unix/Linux 使用的一般方法?...也许还有一些关于熵收集煤面实际发生的事情的提示。 ..然后,什么是送入..它是一个高级加密标准Rijndael加密熵?

我上面评论的背景信息来自Steve Gibson 的Security Now!播客:第 301 集随机播放,第 2 部分,第 2 部分......他只是泛泛而谈(但正如他的风格一样,足够详细和清晰,即使我也能理解他。听了前面的 300 集有帮助:), ...我想知道这是否是 Unix/Linux 的方式...

cam*_*amh 14

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

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

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

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

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


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

在 NetBSD 上,根据收集到的熵(从磁盘、网络、输入设备和/或磁带驱动器;可使用rndctl进行调整/dev/random提供随机数据,而在熵池为空时回退到 PRNG,类似于 Linux。参见random(4)rndctl(8)rnd(9)/dev/urandom

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

Mac OS X 也使用 Yarrow 算法/dev/random,但具有相同/dev/urandom的兼容性。“额外的熵由 SecurityServer 守护程序从内核的随机抖动测量中定期馈送到生成器。” 参见random(4)