/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 Mar 15 20:15 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 Mar 15 20:15 9W4FRtMB.conf

Похожие статьи
Linux
FAQ
Debian
Ubuntu
CentOS
Rocky
Bash
Настройка сети
Файлы, директории, ссылки…
Изучить свободное место на диске
Объединить .pdf файлы
diff: сравнение файлов
find: поиск файлов
wget: скачивание файлов
kill: завершить процесс
curl
make
signal: системные сигналы
env: переменные окружения
localectl: язык
systemctl: Список активных сервисов
Firewall
SCP: обмен файлами;
SSH: удалённый доступ
cron: задания по расписанию
sudo
Мониторинг ресурсов
C
C++