/dev/random и /dev/urandom
Введение | |
Различие между /dev/random и /dev/urandom | |
Примеры | |
Сгенерировать несколько случайных букв | |
Создать файл со случайным именем | |
Похожие статьи |
Введение
/dev/random
и
/dev/urandom
— специальные символьные псевдоустройства в некоторых UNIX-подобных системах, впервые появившиеся в ядре Linux версии 1.3.30.
Они предоставляют интерфейс к системному генератору случайных чисел, который выводит шум из драйверов устройств и других источников в «хаотичный» пул (англ. entropy pool).
Генератор также сохраняет необходимое количество битов шума в этом пуле и формирует из него случайную либо псевдослучайную последовательность чисел.
Начиная с версии ядра Linux 4.8, генератор urandom был переведен на использование потокового шифра ChaCha20 вместо SP800-90A DRBG
Различие между /dev/random и /dev/urandom
Разницу между ними можно описать так*:
/dev/random — генератор случайных чисел;
/dev/urandom — генератор псевдослучайных чисел.
* - псевдослучайность urandom зависит от системы. Во многих случаях random и urandom генерируют символы по одному и тому же алгоритму.
При чтении данных из устройства
/dev/random
выводятся только случайные байты, полностью состоящие из битов шума «хаотичного» пула ОС.
Если «хаотичный» пул опустел,
/dev/random
ничего не выдаст, пока необходимое количество битов в пуле не будет создано.
Читающая /dev/random программа будет
ждать появления очередного случайного байта.
Получается, что с random есть риск остановки работы программы, которого не в urandom
В ядре Linux «хаотичный» пул получает энтропию из нескольких источников, в том числе из аппаратного генератора случайных чисел современных процессоров Intel.
Устройство
/dev/random
может быть необходимо пользователям, которые требуют очень высокого коэффициента случайности, например, при создании ключа шифрования, предполагающего длительное использование.
Чтение данных устройства
/dev/urandom
возвратит столько байтов, сколько было запрошено.
В результате, если в пуле было недостаточно битов, теоретически возможно найти уязвимость алгоритма, использующего это устройство (на настоящее время нет опубликованных работ о такой атаке). Если это важно, следует использовать /dev/random.
Примеры
Пример типичного использования
/dev/urandom
— заполнение массива «шумом»:
Заполняем раздел случайными данными для удаления остаточной информации:
dd if=/dev/urandom of=/dev/sdb3
Сгенерировать 30 случайных символов
head -c 30 /dev/urandom
$e6���m|�����#��K�S�9�ޜ���-%
Повторный вызов должен выдать совершенно другой результат
head -c 30 /dev/urandom
�|7� ��Ee3J+H3i�2�v�%
Сгенерировать несколько случайных букв
Чтобы сгенерировать только случайные буквы можно воспользоваться командой
tr
Например, случайные восемь букв произвольного регистра
cat /dev/urandom | tr -dc A-Za-z | head -c8
rUhHAOow
Или ещё короче
< /dev/urandom tr -dc A-Za-z | head -c8
ZYEiQHfJ
Создать файл со случайным именем
Чтобы сгенерировать файл со случайным именем и расширением .conf
touch $(cat /dev/urandom | tr -dc A-Za-z | head -c8).conf
ll
-rw-r--r-- 1 andrei hhusers 0 Sep 09 07:16 QIIcrXgV.conf
Подробнее про файлы в Linux вы можете прочитать здесь
Тот же самый результат можно получить с помощью
Make файла
Для разнообразия создадим скрытый файл
CONFIG_FILE := .$(shell < /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c8).conf .PHONY: config config: @touch "${CONFIG_FILE}" @ls -la
В этом файле используются помимо /dev/urandom используются shell и tr
make config
-rw-rw-r--. 1 andrei andrei 0 Sep 09 07:16 9W4FRtMB.conf
РЕКЛАМА от Яндекса. Может быть недоступна в вашем регионе
Конец рекламы от Яндекса. Если в блоке пусто считайте это рекламой моей телеги