我用来makepasswd
在虚拟机中生成一堆随机密码。
升级到 Stretch/Debian 9 后,该脚本要么生成一两个密码,然后停止,要么根本不生成。
再次生成另一个密码似乎需要相当长的时间。
第一次调用它:
makepasswd
ndmBXpfp3
它立即按预期生成一个随机字符串。
第二次:
makepasswd
它一直在那里等待……一直等待。
答案1
它似乎makepasswd
从使用 openssl API 生成(伪)随机数,变成了现在使用基于/dev/random
.
问题是虚拟机和物联网(可能)活动度较低,并且无法生成足够的熵来满足脚本/makepasswd
饮用/dev/random
虽然我试图找到一个选项让它从 中获取随机数/dev/urandom
,但它没有。
所以我只得到了一个旧版本makepasswd
,因为它是一个 perl 脚本,并将该脚本指向/opt/bin/makepasswd
我的系统;该脚本现在可以正常工作,在几秒钟内生成我需要的 +100 个密码。
从源码中可以看出:
新的makepasswd
:
my $buf = $RNG->bytes($bytes);
老的makepasswd
:
my $buf = Crypt::OpenSSL::Random::random_pseudo_bytes($bytes);
有趣的是,版权附近的数据和版本都没有改变,这让我一度偏离了轨道。
在他们两个中:
$Program = 'makepasswd';
$Version = '1.10';
$Author = 'Rob Levin <[email protected]>';
$Date = "Monday, 7 April 1999 at 22:56 (UCT)";
$Copyright = '1997-1999';
然而,从changelog.Debian.gz
Convert from Crypt::OpenSSL::Random to Bytes::Random::Secure (closes:
#792535).
-- Colin Watson <[email protected]> Thu, 16 Jul 2015 11:45:20 +0100
答案2
haveged
另一种替代解决方案是安装守护进程来加速密钥生成过程,而不是修改 makepasswd 源。要安装它:
sudo apt-get install haveged
安装后,makepasswd
也可以正常工作。
haveged
现在,VM 和 iOT(例如树莓派)中需要守护进程,其中熵为通常情况下低的。
来自 Debian man haveged
,:
NAME
haveged
- 生成随机数并提供给 Linux 的随机设备。描述
haveged
使用 HAVEGE(硬件易失性熵收集和扩展)算法生成不可预测的随机数流,该随机数流是从硬件事件对隐藏处理器状态(缓存、分支预测器、内存转换表等)的间接影响中获取的。该算法在用户空间中运行,文件系统访问输出流不需要特殊权限。Linux 汇集随机性以通过
/dev/random
和/dev/urandom
设备接口进行分配。填充池的标准机制/dev/random
可能不足以满足对高需求或有限用户交互的系统的需求。在这些情况下,每当随机位的供应低于设备的低水位线时,haveged
可以作为特权守护进程运行以填充池。/dev/random
/dev/random