/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 Jan 27 08:27 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 Jan 27 08:27 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++

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

IT

Образование

Актуально сейчас

Разное

Поиск по сайту

Подпишитесь на Telegram канал @aofeed чтобы следить за выходом новых статей и обновлением старых

Перейти на канал

@aofeed

Задать вопрос в Телеграм-группе

@aofeedchat

Контакты и сотрудничество:
Рекомендую наш хостинг beget.ru
Пишите на info@urn.su если Вы:
1. Хотите написать статью для нашего сайта или перевести статью на свой родной язык.
2. Хотите разместить на сайте рекламу, подходящуюю по тематике.
3. Реклама на моём сайте имеет максимальный уровень цензуры. Если Вы увидели рекламный блок недопустимый для просмотра детьми школьного возраста, вызывающий шок или вводящий в заблуждение - пожалуйста свяжитесь с нами по электронной почте
4. Нашли на сайте ошибку, неточности, баг и т.д. ... .......
5. Статьи можно расшарить в соцсетях, нажав на иконку сети: