13-10-2023
Файл UNIX-устройства | ||||||||||
/dev/random | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
Тип | символьное (c) | |||||||||
Коды | ||||||||||
|
Файл UNIX-устройства | ||||||||||
/dev/urandom | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|
Тип | символьное (c) | |||||||||
Коды | ||||||||||
|
Специальные файлы устройств |
---|
/dev/random и /dev/urandom — специальные символьные псевдоустройства в некоторых UNIX-подобных системах, впервые появившиеся в ядре Linux версии 1.3.30. Они предоставляют интерфейс к системному генератору случайных чисел, который выводит шум из драйверов устройств и других источников в «хаотичный» пул (англ. entropy pool). Генератор также сохраняет необходимое количество битов шума в этом пуле и формирует из него случайную либо псевдослучайную последовательность чисел.
Начиная с версии ядра Linux 4.8, генератор urandom был переведен на использование потокового шифра ChaCha20 вместо SP800-90A DRBG[1][2][3]
Разницу между ними можно описать так:
При чтении данных из устройства /dev/random выводятся только случайные байты, полностью состоящие из битов шума «хаотичного» пула ОС. Если «хаотичный» пул опустел, /dev/random ничего не выдаст, пока необходимое количество битов в пуле не будет создано, читающая /dev/random программа будет ждать появления очередного случайного байта.
В ядре Linux «хаотичный» пул получает энтропию из нескольких источников, в том числе из аппаратного генератора случайных чисел современных процессоров Intel[4].
Устройство /dev/random может быть необходимо пользователям, которые требуют очень высокого коэффициента случайности, например, при создании ключа шифрования, предполагающего длительное использование.
Чтение данных устройства /dev/urandom возвратит столько байтов, сколько было запрошено. В результате, если в пуле было недостаточно битов, теоретически возможно найти уязвимость алгоритма, использующего это устройство (на настоящее время нет опубликованных работ о такой атаке). Если это важно, следует использовать /dev/random.
Пример типичного использования /dev/urandom — заполнение массива «шумом»[5]:
Заполняем раздел случайными данными для удаления остаточной информации: dd if=/dev/urandom of=/dev/sdb3
Linux — специальные файлы (англ.)
/dev/random.