显然,/ dev / random是基于硬件中断或物理硬件的类似不可预知的方面。 由于虚拟机没有物理硬件,因此在虚拟机内运行cat /dev/random不会产生任何结果。 我使用Ubuntu Server 11.04作为主机和客户机,使用libvirt / KVM。
我需要在VM内设置Kerberos,但krb5_newrealm只是永远挂起“加载随机数据”,因为系统没有产生任何数据。
有谁知道如何解决这个问题? 是可以通过主机的/ dev /随机(这是非常健谈)进入虚拟机,所以虚拟机可以使用它的随机数据?
我已经读过,有一些软件的select,但它们不适合密码学,因为它们不够随机。
编辑:看来,猫/ dev /随机在虚拟机确实产生输出,只是非常非常缓慢。 在“载入随机数据”的时候,我等待了大约两个小时,从而获得了我的领域设置。 最终它足够继续。 我仍然对加速这个方法感兴趣。
它应该“只是工作”。 即使虚拟机没有专用的物理硬件,它仍然可以访问几个非常好的随机性来源。 例如,它可以使用CPU的TSC来从虚拟磁盘读取时间,这将最终将物理磁盘定时调整到十亿分之一秒。 这些时间取决于硬盘驱动器中的湍stream气stream剪切,这是不可预测的。
类似的逻辑适用于networkingstream量。 即使接口是虚拟化的,只要数据包始于物理networking(并且不是本地的,例如源于另一个虚拟机),数据包的时间取决于网卡上的晶体振荡器之间的相位偏移和驱动TSC的晶体振荡器。 这取决于两个石英晶体的微观区域温度变化。 这也是不可预测的。
如果由于某种原因无法正常工作,最简单的解决方法是编写一个程序来挖掘熵,并将其添加到系统池中。 networking接口是您最可靠的来源。 例如,您可以编写代码来:
1)查询TSC。
2)向已知不在同一物理机器上的服务器发出DNS查询。
3)查询完成后查询TSC。
4)重复这个几次,累积所有的TSC值。
5)对累积的TSCfunction执行安全散列。
6)将安全散列函数的输出传递给系统的熵池。
7)监测熵池水平,等到它低。 如果是,请返回步骤1。
Linux有简单的IOCTL调用来为池添加熵,检查池的级别,等等。 您可能有rngd ,可以从pipe道获取熵并将其提供给系统池。 您可以从任何您想要的来源填充pipe道,无论是来自您自己的熵源的TSC还是“wget”请求。
我使用所有执行encryption操作的无头服务器(例如TLS握手,kerberos等)。 它应该在大多数Ubuntu版本的软件包仓库中: http : //packages.ubuntu.com/search?keywords=haveged&searchon=names&suite=all§ion=all
已经使用HAVAGEalgorithm从现代处理器的内部状态中提取熵。 这是一个深入的解释: http : //www.irisa.fr/caps/projects/hipsor/
你可以用ent包检查生成的熵的随机性。 在我的系统上,生成的信息熵通过了所有的随机性testing
是的,你可以播种,从:
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命令通过路由器,所以它会产生熵* 🙂
这对我有效
在虚拟机内部运行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
X86的答案是确保您的虚拟机不捕获RdRand或RdSeed。 你相信你的VM很多东西,这是其中之一。
在后期的Snady Bridge CPU上,一个足够近的RNGd将会(或者可以被告知)使用RdRand或者RdSeed,并且一个未处理的RdRand或者RdSeed被获取到虚拟机中。 / dev / random然后与一个真正的(不是虚拟的)熵源一起工作。
这不是偶然的。 在英特尔体系结构文档中就是这样。
对于基于设备的硬件熵源(IE使用内核驱动程序共享),您需要VM来正确虚拟化物理源。 我不知道如果他们这样做,如果是的话,哪些设备。
如果您的RNGd在下面没有drng选项,请更新它。 如果你的硬件没有快速的硬件RNG,你就注定要失败了,为了安全起见,你应该考虑使用不同的硬件。
# rngd --help Usage: rngd [OPTION...] Check and feed random data from hardware device to kernel entropy pool. -b, --background Become a daemon (default) **-d, --no-drng=1|0 Do not use drng as a source of random number input** (default: 0) -f, --foreground Do not fork and become a daemon -n, --no-tpm=1|0 Do not use tpm as a source of random number input (default: 0) -o, --random-device=file Kernel device used for random number output (default: /dev/random) -p, --pid-file=file File used for recording daemon PID, and multiple exclusion (default: /var/run/rngd.pid) -q, --quiet Suppress error messages -r, --rng-device=file Kernel device used for random number input (default: /dev/hwrng) -s, --random-step=nnn Number of bytes written to random-device at a time (default: 64) -v, --verbose Report available entropy sources -W, --fill-watermark=n Do not stop feeding entropy to random-device until at least n bits of entropy are available in the pool (default: 2048), 0 <= n <= 4096 -?, --help Give this help list --usage Give a short usage message -V, --version Print program version Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. Report bugs to Jeff Garzik <[email protected]>.
我也遇到了krb5_newrealm挂起的问题。 基于上面的答案,这对我来说很好:
cat /dev/sda > /dev/urandom
一旦你完成了对随机数据的需求,你可能想要杀死它。 / dev / sda可能拥有比你需要的更多的数据。
注意:我不确定以这种方式生成的随机数据实际上是多么随机的。