Я использую его makepasswd
для генерации набора случайных паролей в виртуальной машине.
После обновления до Stretch/Debian 9 скрипт либо генерирует один или два пароля и останавливается, либо не генерирует вообще.
Похоже, что на генерацию нового пароля уходит довольно много времени.
Первый раз звоню:
makepasswd
ndmBXpfp3
Как и ожидалось, он немедленно генерирует случайную строку.
Второй раз:
makepasswd
И он продолжает ждать... и ждать.
решение1
Похоже, makepasswd
что использование API 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
Другим альтернативным решением, вместо изменения исходников makepasswd, является установка демона haveged
для ускорения процесса генерации ключей. Чтобы установить его:
sudo apt-get install haveged
После установки makepasswd
тоже работает как надо.
Демон haveged
теперь требуется в виртуальных машинах и устройствах Интернета вещей (например, Raspberry), где энтропияобычнонизкий.
Из Debian man haveged
:
ИМЯ
haveged
- Генерация случайных чисел и передача их на случайное устройство Linux.DESCRIPTION
haveged
генерирует непредсказуемый поток случайных чисел, собранных из косвенных эффектов аппаратных событий на скрытое состояние процессора (кэши, предикторы ветвлений, таблицы трансляции памяти и т. д.) с использованием алгоритма HAVEGE (HArdware Volatile Entropy Gathering and Expansion). Алгоритм работает в пространстве пользователя, для доступа файловой системы к выходному потоку не требуется специальных привилегий.Linux собирает случайность для распределения интерфейсами устройств
/dev/random
и/dev/urandom
. Стандартные механизмы заполнения/dev/random
пула могут быть недостаточными для удовлетворения спроса на системах с высокими потребностями или ограниченным взаимодействием с пользователем. В таких обстоятельствахhaveged
может быть запущен как привилегированный демон для заполнения/dev/random
пула всякий раз, когда запас случайных битов в/dev/random
падает ниже нижней отметки устройства.