FreeBSD 监狱没有获得熵池的原因是什么

FreeBSD 监狱没有获得熵池的原因是什么

我注意到 FreeBSD 脚本会生成熵,

如果它发现自己正在从监狱里逃走,就会跳出来。

# uname -srm  ## notice: install of mfsBSD (https://mfsbsd.vx.sk)
FreeBSD 11.2-RELEASE-p7 amd64

# grep jail /usr/libexec/save-entropy 
[ $(/sbin/sysctl -n security.jail.jailed) = 0 ] || exit 0

这可能是什么原因?

  • 宿主在监狱里有一定的随机性难道不安全吗?

  • 各个监狱共享随机值池不安全吗?

  • 监狱内运行的程序的随机性不会因此受到影响吗?

谢谢,

迈克尔

答案1

太长了;博士熵池仅在引导期间使用。您只有一个提供随机数的内核。由于监狱的使用模式,仅拥有一个熵池就可以确保更高程度的非确定性行为。

如果您信任其中使用的算法,/dev/random那么拥有多个熵池并不会带来任何优势。最好更快地耗尽公共池,然后生成新的(重新种子)。

用户态程序不应直接使用熵池。他们应该总是使用随机(4)和朋友。

带引号的较长版本:

/dev/随机设备是使用实现的西洋蓍草5.0 和 10.0 之间的实施。它变成了福尔图纳在 FreeBSD 10 中。主要升级是在 2014 年进行的修订版 273872。有一个小讨论黑客新闻大约时间。

rc.d/initrandom已删除,并附有评论:

重构 /dev/random 设备。主要要点包括:

  • 不再使用用户空间播种。这会在 PC/台式机设置启动时自动播种;这可能需要那些设置嵌入式盒子的人进行一些调整和智慧,但据信工作量很小。

  • 熵缓存被写入 /entropy(即使在安装过程中),并且内核在下次启动时使用它。

  • 写入 /boot/entropy 的熵文件可以由 loader(8) 加载

请记住,监狱主机仅运行系统的一个内核,然后运行您在监狱中选择的用户态二进制文件。当相同的内核服务于相同的监狱时,我们需要问改变每个监狱的熵是否有优势?

这涵盖了李鑫在里面讨论当改变发生时:

PRNG 的工作方式是,它使用一个或多个熵源“馈送”其内部状态,并通过 PRF 从内部状态生成一系列伪随机数。

FreeBSD 从多个来源收集熵:以太网、中断、软件中断等,以及系统可用的硬件 RNG,并使用所有这些熵来导出其 PRNG 的内部状态。

当从 /dev/random 读取时,本质上会消耗输入随机设备的熵,最终会导致重新播种。在理想的世界中,我们希望潜在攻击者的可预测性和可控性较低。

假设我们有很多进程正在运行,普通应用程序倾向于小块地读取 /dev/random ,并且以离散且近乎随机的方式执行此操作。另一方面,保存熵是在确定的时间以更大的块发生的。当多个监狱运行时,会从 /dev/random 设备读取大量大块数据,使其行为更具确定性,这可能会产生不良后果。

答案2

random(4) 设备是针对每个内核的,而不是针对每个监狱的,因此对于在监狱中运行的这些进程来说根本没有用处。

https://mailing.freebsd.hackers.narkive.com/iq0HeCDX/save-entropy-in-jail-environment

相关内容