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

Nic*_*ick 21 ubuntu virtual-machines kerberos random-number-generator

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

我需要在 VM 中设置 Kerberos,但krb5_newrealm只是永远挂起“加载随机数据”,因为系统没有生成任何数据。

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

我读过有一些软件替代品,但它们不适合密码学,因为它们不够随机。

编辑:看起来 vm 上的 cat /dev/random 确实产生输出,只是非常非常缓慢。我在“加载随机数据”时等待了大约两个小时来设置我的领域。最终它足以继续。不过,我仍然对加速这一过程的方法感兴趣。

Dav*_*rtz 10

它应该“正常工作”。即使 vm 没有专用的物理硬件,它仍然可以访问几个非常好的随机源。例如,它可以使用 CPU 的 TSC 来计时它从虚拟磁盘的读取,这最终会将物理磁盘计时到十亿分之一秒。这些时间取决于硬盘驱动器中的湍流气流剪切,这是不可预测的。

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

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

1) 查询TSC。

2) 向已知不在同一台物理机器上的服务器发出 DNS 查询。

3) 当查询完成时查询 TSC。

4) 重复几次,累积所有的 TSC 值。

5) 对累积的 TSC 函数执行安全散列。

6) 将安全哈希函数的输出传递给系统的熵池。

7) 监控熵池水平,等到它变低。如果是,请返回步骤 1。

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


Fra*_*k L 10

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

hasged 使用 HAVAGE 算法从现代处理器的内部状态中提取熵。这是一个深入的解释:http : //www.irisa.fr/caps/projects/hipsor/

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


pol*_*ial 7

是的,你可以播种它,来自:

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
Run Code Online (Sandbox Code Playgroud)

如果你让 ssh 命令通过路由器,它会产生熵 *:)


小智 5

这对我有用

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

$ sudo aptitude install rng-tools -y
$ sudo rngd -r /dev/urandom -o /dev/random  # don't do this in production!
Run Code Online (Sandbox Code Playgroud)

发布于http://fossies.org/linux/john/doc/Kerberos-Auditing-HOWTO.md