一些背景信息:我希望在Red Hat服务器上运行脚本以从/ dev/random读取一些数据,并使用Perl unpack()命令将其转换为十六进制字符串以供以后使用(基准数据库操作).我在/ dev/random上运行了一些"head -1",它似乎工作正常,但在调用它几次后,它就会有点挂起.几分钟后,它最终会输出一小段文字,然后完成.
我切换到/ dev/urandom(我真的不想,它更慢,我不需要那种随机性)并且它在前两次或三次调用时工作正常,然后它也开始挂起.我想知道它是否是轰炸它的"头部"命令,所以我尝试使用Perl做一些简单的I/O,它也悬挂着.作为最后的努力,我使用"dd"命令将一些信息直接转储到文件而不是终端.我所要求的只是1mb的数据,但在我杀死它之前花了3分钟才得到~400字节.
我检查了进程列表,CPU和内存基本没有动过.究竟是什么原因可能会导致/ dev/random这样废弃,以及我可以做些什么来防止/修复它?
编辑:谢谢你的帮助!似乎我随机和随机混淆了.我现在已经启动并运行了该脚本.看起来我今天学到了新东西.:)
Tim*_*Tim 48
在大多数Linux系统上,/dev/random由环境收集的实际熵提供动力.如果您的系统没有提供大量数据/dev/random,则可能意味着您没有产生足够的环境随机性来为其供电.
我不确定你为什么认为/dev/urandom"慢"或更高质量.它重用内部熵池来生成伪随机性 - 使其质量稍低 - 但它不会阻塞.通常,不需要高级或长期加密的应用程序可以/dev/urandom可靠地使用.
尝试等待一会儿再读/dev/urandom一遍.你可能已经耗尽了内部熵池的读数/dev/random,打破了两个生成器 - 允许你的系统创建更多的熵应该补充它们.
有关和的更多信息,请参阅维基百科./dev/random/dev/urandom
ako*_*nov 21
这个问题很老了.但仍然相关,所以我会给出答案.今天许多CPU都带有内置的硬件随机数发生器(RNG).同样,许多系统都带有可信平台模块(TPM),它也提供RNG.还有其他选项可以购买,但很可能你的计算机已经有了一些东西.
您可以在大多数Linux发行版中使用rng-utils包中的rngd来播种更多随机数据.例如在fedora 18上,我只需要做一些来启用TPM和CPU RNG(RDRAND指令)的播种:
# systemctl enable rngd
# systemctl start rngd
Run Code Online (Sandbox Code Playgroud)
您可以使用和不使用rngd来比较速度.从命令行运行是个好主意rngd -v -f.这将显示检测到的熵源.确保加载了支持源的所有必要模块.要使用TPM,需要通过tpm-tools激活它.更新:这是一个很好的howto.
顺便说一句,我在互联网上看到一些关于TPM RNG的担忧经常以不同的方式被打破,但没有读到针对英特尔,AMD和VIA芯片中发现的RNG的任何具体内容.如果您真的关心随机性质,那么使用多个来源将是最好的.
urandom适用于大多数用例(有时在早期启动期间除外).现在大多数程序都使用urandom而不是随机.即使是openssl 也是如此.查看关于urandom和随机接口比较的神话.
在最近的Fedora和RHEL/CentOS rng-tools中也支持抖动熵.您可以缺少硬件选项,或者只是信任它而不是硬件.
更新:更多熵的另一种选择是HAVEGED(质疑质量).在虚拟机上有一个kvm/qemu VirtIORNG(推荐).
har*_*rmv 10
使用/ dev/urandom,它的加密安全性.
好读:http://www.2uo.de/myths-about-urandom/
"如果你不确定是否应该使用/ dev/random或/ dev/urandom,那么你可能想要使用后者."
如果在早期开机时有疑问,那么你就会收集到足够的熵.getrandom()改为使用系统调用.[1]两全其美,
[1] git内核提交
| 归档时间: |
|
| 查看次数: |
41312 次 |
| 最近记录: |