/dev/random OS X 10.9.4 支持 Ivy Bridge 的 RDRAND

/dev/random OS X 10.9.4 支持 Ivy Bridge 的 RDRAND

据我所知,英特尔有一个RDRAND 指令库

但是 OS X 内核真的将它用于 /dev/random 设备吗(就像 Linux 至少将它用于 /dev/hwrng 一样)?

答案1

根据man 4 random

随机设备实现了 Yarrow 伪随机数生成器算法并维护其熵池。SecurityServer 守护进程会定期从内核的随机抖动测量中向生成器提供额外的熵。SecurityServer 还负责定期将一些熵保存到磁盘并在启动期间重新加载,以便在系统运行初期提供熵。

附注:/dev/urandom 与 OSX 中的 /dev/random 相同。(在 中也一样man 4 random

/dev/urandom is a compatibility nod to Linux.

Yarrow 伪随机数生成器利用鼠标移动或键盘输入等正常活动产生的“熵收集”来生成随机数。FreeBSD 有一个实现您可以阅读以了解 Yarrow 伪随机数生成器在实践中是如何实现的。

但是,您询问的是 OSX 在其实现中是否使用了 RDRAND 指令,但由于 OSX 是闭源的,我们只能依赖他们告诉我们的内容,而且我找不到任何地方提及 OSX 使用哪些库来生成随机数。

看起来你希望得到保证(就像我们大多数人一样),即 /dev/random 给出的数字实际上是加密安全的,这样当我们制作 DSA 或 RSA 密钥时,我们知道除了目标受众之外,没有人可以访问。不幸的是,无论你能找到什么关于 OSX 如何生成随机数的信息,我们都无法验证它,因为我们没有来源。

正如 Linux 源代码 3.13.0 中所述:

特定架构的硬件 RNG 几乎肯定会比我们在软件中实现的更快,但无法验证它是否安全实现(与使用 NSA 已知的密钥对序列号进行 AES 加密相反)。因此,如果我们需要速度,它是有用的,但前提是我们愿意相信硬件制造商没有安装后门。

如果你想了解在 Linux 中不依赖硬件时如何实际执行此操作,请阅读根/驱动程序/char/random.c在源代码中。注释非常有用,可以让你了解正在发生的事情,并让你全面了解背后的理论。

总而言之,如果你想更好地保证你的随机数是加密安全的,我建议你使用在线真随机数生成器或者使用 Linux 来制作你的密钥(你也可以从真正的随机数生成器添加输入)。

相关内容