/ dev / random数据是伪随机AES密码,并且熵来自何处?


8

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

我(通常)听说过熵收集方法,例如当“随机”选择的网络数据包到达时与视频卡cpu的状态相对应,并与数模转换器中的hiss因子相匹配,以及其他更晦涩的方法。

我相信,可以根据需要挖掘熵“池”,并将其用于植入伪随机数发生器...。

我没有深入的答案,但是我很想知道这是否是Unix / Linux所使用的通用方法?也许还暗示了熵收集工作面的实际情况。 ..然后,什么是送入..它是一个高级加密标准Rijndael加密熵?

上面我的喜剧的背景信息来自史蒂夫·吉布森(Steve Gibson)的《Security Now》!播客:第301集,随机播放,第2部分,共2部分 ... ...他只是一般地讲(但他的风格也是如此,细节和清晰度都很高,即使我也能理解他。听了前300集有助于:), ...我想知道这是否是Unix / Linux的工作方式...


Answers:


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内核源代码树中的文件。它得到了很好的评论,您的大部分要求都在此处得到了解释。


FreeBSD的/dev/random默认情况下是使用Yarrow算法的伪随机数生成器(但如果连接了RNG则可以指向硬件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)


谢谢。一个很好的概述,从源头上看,我认为我们在扭曲的通用反馈移位寄存器(安全的东西:)方面是安全的……除了钝性的“随机”输入池之外,似乎SHA哈希是生成“在整个池中,一次16个字(512位)”,然后混回到池中,然后池中又旋转了一些。...史蒂夫·吉布森(Steve Gibson)在他的播客中评论说:SHA-256使用/是我们拥有的最强大的最新哈希。...我没有发现是什么产生了/ dev / urandom输出,但是引导过程确实很重要
Peter.O 2011年

+1,好答案;我曾经尝试使用生成随机字符数据,cat /dev/random并且总是想知道为什么我的流在经过这么多字符后就停止了
Mike Pennington
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.