当前位置: 首页>>技术教程>>正文


如何使/dev/random在Ubuntu虚拟机上工作?

问题描述

显然,/dev /random基于硬件中断或物理硬件的类似不可预测的方面。由于虚拟机没有物理硬件,因此在虚拟机中运行cat /dev/random不会产生任何结果。我将Ubuntu Server 11.04与libvirt /KVM用作主机和来宾。

我需要在VM内使用set-up Ke​​rberos,但是krb5_newrealm永远挂起“正在加载随机数据”,因为系统未生成任何内容。

有谁知道如何解决这个问题?是否可以将主机的/dev /random(非常随意)传递给vm,以便vm可以使用其随机数据?

我读过一些软件替代品,但是它们对于密码学不是很好,因为它们不够随机。

编辑:看来,vm上的cat /dev /random确实会产生输出,只是非常非常缓慢。在“正在加载随机数据”的过程中等待了大约两个小时,我才有了set-up。最终,它足够继续。我仍然对加快这一过程的方法感兴趣。

最佳回答

应该是’just work’。即使虚拟机没有专用的物理硬件,它仍然可以访问几个非常好的随机性源。例如,它可以使用CPU的TSC来定时从虚拟磁盘读取数据,这最终将定时对物理磁盘进行计时到十亿分之一秒。这些时间取决于硬盘驱动器中的湍流气流剪切,这是无法预料的。

类似的逻辑适用于网络流量。即使接口是虚拟化的,只要数据包起源于物理网络(并且不是本地设备,例如起源于另一个虚拟机),数据包的时间就取决于网卡上晶体振荡器之间的相位偏移。和驱动TSC的晶体振荡器。这取决于两个石英晶体中微观区域的温度变化。这也是不可预测的。

如果由于某种原因它不起作用,最简单的解决方案是编写一个程序来挖掘熵并将其添加到系统池中。网络接口是您最可靠的来源。例如,您可以将代码编写为:

1) Query the TSC.

2) Issue a DNS query to a server known not to be on the same physical machine.

3) Query the TSC when the query completes.

4) Repeat this a few times, accumulating all the TSC values.

5) Perform a secure hash on the accumulated TSC functions.

6) Pass the secure hash function’s output to the system’s entropy pool.

7) Monitor the entropy pool level, and wait until it’s low. When it is, go back to step 1.

Linux使用简单的IOCTL调用将熵添加到池中,检查池的级别,等等。您可能拥有rngd,它可以从管道中获取熵并将其提供给系统池。您可以从任意来源填充管道,无论是来自您自己的熵来源的TSC还是’wget’请求。

次佳回答

我在所有执行加密操作的无头服务器(例如TLS握手,kerberos等)上都使用了hadged。它应该在大多数Ubuntu版本的软件包存储库中:http://packages.ubuntu.com/search?keywords=haveged&searchon=names&suite=all&section=all

Haveged使用HAVAGE算法从现代处理器的内部状态中提取熵。以下是详细说明:http://www.irisa.fr/caps/projects/hipsor/

您可以使用ent包检查生成的熵的随机性。在我的系统上,haved产生的熵通过ent的所有随机性测试

第三种回答

是的,您可以从以下渠道播种:

http://manpages.ubuntu.com/manpages/jaunty/man4/random.4.html

您可以将其放入/dev /urandom中,它应该为熵池设定种子。我可以通过以下方式确认这一点:

root@mx01-ewr:/proc/sys/kernel/random# cat entropy_avail 
128
root@mx01-ewr:/proc/sys/kernel/random# cat /dev/xvda >/dev/urandom  &
[1] 16187 # just using this as a source of data, you could do ssh hostIP 'cat /dev/random' >... etc
root@mx01-ewr:/proc/sys/kernel/random# cat entropy_avail 
1221
root@mx01-ewr:/proc/sys/kernel/random# cat entropy_avail 
1398

如果使ssh命令通过路由器,则它会产生熵* :),这会带来额外的好处。

第四种回答

这对我有用

在VM中运行krb5_newrealm可能需要很长时间才能完成(显示“正在加载随机数据”消息之后)。您可以使用以下技巧来加快速度。

$ sudo aptitude install rng-tools -y
$ sudo rngd -r /dev/urandom -o /dev/random  # don't do this in production!

发表在http://fossies.org/linux/john/doc/Kerberos-Auditing-HOWTO.md

参考资料

本文由Ubuntu问答整理, 博文地址: https://ubuntuqa.com/article/8587.html,未经允许,请勿转载。