我用來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