如何检查可用的熵?


14

在linux系统上,您可以使用以下命令检查可用的(有用以了解您是否/dev/random出于任何PRNG目的进行窃听)

cat /proc/sys/kernel/random/entropy_avail

但是,/proc在Mac(AFAIK)上没有类似的功能。如何在Mac上检查可用的系统熵?我正在运行OS X 10.7.3(Lion)


在Kyle的回答下更新我的一些评论-Mac不显示此信息的原因之一是(在大多数情况下)不需要此信息。/dev/random如果池中没有足够的熵,Linux系统将阻止对的调用。在Mac上,它会定期使用SecurityServer守护程序继续添加到熵池中。

但是,它也指出,如果守护程序由于某种原因而失败,则输出质量将下降而不会出现任何失败的迹象

但是,其输出的质量取决于适当熵的定期添加。如果SecurityServer系统守护程序由于任何原因失败,则输出质量将随着时间的流逝而受到损害,而随机设备本身没有任何明确的指示。

因此,即使不容易获得熵的数量,也不意味着它不存在,并且在某些情况下它的知识可能会有所帮助。


您是否真的需要检查,或者只是确保有足够的东西可以使用?请参阅developer.apple.com/library/mac/#documentation/Darwin/Reference/…Quote“类人动物程序员可以通过收集他们选择的熵(例如来自击键或鼠标时间)并将其random直接植入种子中来抵消这种风险。重要的随机数。”
克里斯·瑞

我只需要确保有足够的使用空间即可。
rm -rf 2012年

Answers:


6

这不是解决方案,而是澄清了如何在Linux中收集和使用熵。

Linux实际上有两个不同的熵池:

/dev/random/dev/urandom

前者是一个真正的随机池,由系统熵源提供。
后者更多是PRNG,例如BSD和OS X上的PRNG。

但是,即使是urandom,也需要“真实”随机熵的种子才能生成高质量的伪随机数据。在最近的内核上,/ dev / random中完全没有熵仍然不会阻止urandom,但是urandom将重新使用最后一个有效种子,直到有更多的熵可用为止。因为urandom是非阻塞的,所以大多数需要稳定的熵流的服务都使用它,而不是依赖于/ dev / random。

但是,仍然存在一些服务,例如各种SSL套件,这些服务无法与伪随机熵相提并论,但是需要真正不可预测的熵源。在这种情况下,不能使用urandom(或任何其他PRNG),并且/ dev / random起作用。


2

Mac OS X仅使用Yarrow。甚至FreeBSD都走得更远,并切换到名为“ Fortuna”的改进版本。

arrow草的强度受钥匙尺寸的限制。例如,Yarrow-160的有效密钥大小为160位。如果安全性需要256位,则Yarrow-160无法执行此工作。

总而言之,这再次提醒了苹果公司的工作重点不包括安全性/鲁棒性。


1

Mac OS X与FreeBSD一样,不依赖外部熵。相反,它使用基于Yarrow算法的伪随机数生成器。因为它使用的是算法而不是熵池,所以无需确保存在“足够的”熵- 您将始终能够在不阻塞的情况下从/ dev / random进行读取

因此,要回答您的问题,除非您是“偏执狂”,并且需要将熵基于外部来源(按键/鼠标移动/等),在这种情况下,您必须自己动手,才能获得/ dev /的可用熵量随机使用始终是无限的。


4
这并不完全正确。使用算法不会使其具有无限的熵。它们的意思是,在Linux上,当熵池不足时它会阻塞,而在Mac上,“ SecurityServer守护程序会定期从内核的随机抖动测量中将额外的熵馈送到生成器。” 因此,从根本上说,它可以解决问题,还可以将一些熵保存到磁盘中,以便在启动后立即使用。它还说,尽管Yarrow具有弹性,但质量取决于常规的熵加-如果它是真正的无限熵,则不需
要这样做

1
它进一步说:“如果SecurityServer系统守护程序由于任何原因而失败,则输出质量将随着时间的推移而受到损害,而随机设备本身没有任何明确的指示。”我承认OSX使得不必担心实际情况变得容易熵值,但并不意味着没有熵值…顺便说一句,我在上面的引言中指的是此手册页
rm -rf 2012年

@RM是的,我在思考是否会阻止对/ dev / random的调用,而不是熵的质量
Kyle Cronin'4

>除非您是“偏执狂”
-Mac
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.