我目前对熵池的理解是它以缓慢的速度收集真正随机的数据位。我想知道 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)。
| 归档时间: |
|
| 查看次数: |
1806 次 |
| 最近记录: |