makepasswd 在 Debian Stretch 中无法正常工作

Rui*_*iro 5 debian random openssl

我正在使用makepasswd在 VM 中生成一堆随机密码。

升级到 Stretch/Debian 9 后,脚本要么生成一个或两个密码,然后停止,要么根本不生成。

再次生成另一个密码似乎需要相当(好)的时间。

第一次调用它:

makepasswd
ndmBXpfp3
Run Code Online (Sandbox Code Playgroud)

它按预期立即生成一个随机字符串。

第二次:

makepasswd
Run Code Online (Sandbox Code Playgroud)

它一直在那里等待……等待。

Rui*_*iro 6

似乎makepasswd已从使用 openssl API 生成(伪)随机数更改为现在使用基于/dev/random.

问题是 VM 和 iOT(可能)活动性低,并且不会产生足够的熵来满足脚本/makepasswd/dev/random

虽然我试图找到一个选项,让它从 中喝随机数/dev/urandom,但它没有。

所以我得到了一个旧版本的makepasswd,因为它是一个 perl 脚本,并将该脚本指向/opt/bin/makepasswd我的系统;并且脚本现在像往常一样工作,在几秒钟内生成我需要的 +100 个密码。

从源码可以看出:

makepasswd

 my $buf = $RNG->bytes($bytes);
Run Code Online (Sandbox Code Playgroud)

makepasswd:

 my $buf = Crypt::OpenSSL::Random::random_pseudo_bytes($bytes);
Run Code Online (Sandbox Code Playgroud)

有趣的是,版权附近的数据和版本并没有改变,这让我暂时偏离了轨道。

在他们两个中:

$Program        = 'makepasswd';
$Version        = '1.10';
$Author         = 'Rob Levin <levin@openproject.net>';
$Date           = "Monday, 7 April 1999 at 22:56 (UCT)";
$Copyright      = '1997-1999';
Run Code Online (Sandbox Code Playgroud)

然而,从 changelog.Debian.gz

Convert from Crypt::OpenSSL::Random to Bytes::Random::Secure (closes:
#792535).

 -- Colin Watson <cjwatson@debian.org>  Thu, 16 Jul 2015 11:45:20 +0100
Run Code Online (Sandbox Code Playgroud)


Rui*_*iro 3

另一种替代解决方案是安装守护进程haveged来加速密钥生成过程,而不是修改 makepasswd 源。要安装它:

sudo apt-get install haveged
Run Code Online (Sandbox Code Playgroud)

安装后,makepasswd也可以正常工作。

haveged现在,在熵通常较低的 VM 和 iOT(例如树莓派)中需要该守护进程。

来自 Debian man haveged,:

NAME
haveged- 生成随机数并提供给 Linux 的随机设备。

描述
haveged 使用 HAVEGE(硬件易失性熵收集和扩展)算法生成不可预测的随机数流,该随机数流是从硬件事件对隐藏处理器状态(缓存、分支预测器、内存转换表等)的间接影响中获取的。该算法在用户空间中运行,文件系统访问输出流不需要特殊权限。

/dev/randomLinux 汇集随机性以通过和 设备接口进行分配 /dev/urandom 。填充池的标准机制 /dev/random可能不足以满足对高需求或有限用户交互的系统的需求。在这些情况下,每当随机位的供应低于设备的低水位线时haveged ,可以作为特权守护进程运行以填充池。/dev/random/dev/random