Dev urandom как использовать
Специальные символьные файлы /dev/random и /dev/urandom (имеются начиная с Linux 1.3.30) предоставляют интерфейс к генератору случайных чисел, встроенному в ядро. Файла /dev/random имеет старший номер устройства~1, и младший номер устройства~8. Файл /dev/urandom имеет старший номер устройства~1 и младший номер устройства~9.
Генератор случайных чисел собирает окружающий шум с драйверов устройств и из других источников в пул энтропии. Генератор также постоянно оценивает количество бит шума в пуле энтропии. Именно с помощью этого пула создаются случайные числа.
При чтении устройство /dev/random возвращает единичные случайные байты, количество битов шума в которых равно количеству бит шума в пуле энтропии. /dev/random следует использовать, если требуется высокий коэффициент случайности, например, при использовании одноразовой шифровки (one-time pad) или при генерации ключа. Если пул энтропии пуст, попытка чтения /dev/random приведёт к задержке, пока не будет собран дополнительный окружающий шум.
При чтении устройство /dev/urandom возвратит столько байтов, сколько было запрошено. Как результат, если в пуле недостаточная энтропия, то возвращённые значения теоретически нестойки к криптографической атаке на алгоритмы, используемые драйвером. О том, как это сделать, не сказано в современной несекретной литературе, но теоретически возможно, что такая атака может существовать. Если это важно для вашего приложения, используйте лучше /dev/random .
КОНФИГУРИРОВАНИЕ
Если в вашей системе ещё не созданы /dev/random и /dev/urandom , то их можно создать следующими командами:
mknod -m 644 /dev/random c 1 8 mknod -m 644 /dev/urandom c 1 9 chown root:root /dev/random /dev/urandom
Когда Linux-система запускается без участия человека, пул энтропии может оказаться в довольно предсказуемом состоянии. Это снижает значимый объем шума в пуле энтропии ниже оцениваемого. Для преодоления этого эффекта информация в пуле энтропии сохраняется во время выключения и восстанавливается во время запуска системы. Для этого добавьте следующие строки в скрипт, который выполняется при запуске Linux системы:
echo "Initializing kernel random number generator. " # Инициализировать генератор случайных чисел ядра значениями # последнего выключения (или запуска системы). Загрузить и # затем сохранить 512 байт, которые составляют пул энтропии. if [ -f /var/random-seed ]; then cat /var/random-seed >/dev/urandom fi dd if=/dev/urandom of=/var/random-seed count=1
Также добавьте следующие строки в скрипт, который выполняется при завершении работы Linux системы:
# Сохранить источник случайности для генератора случайных чисел # при завершении работы. Сохранить 512 байт, которые составляют # пул энтропии для генератора случайных чисел. echo "Saving random seed. " dd if=/dev/urandom of=/var/random-seed count=1
Как правильно использовать /dev/random?
Всем привет.
Есть несколько файлов в одной директории, у них есть некоторая строка, которую я хочу заменить на случайные символы.
Беда заключается в том, что если использовать $RANDOM , то в нескольких файлах будет одно и тоже сгенерированное значение,
Погуглил, нашел /dev/random , но как его вставить в этот скриптец?
grep -rl 'по какому слову будет поиск' ./reports* | xargs sed -i s/что нужно заменить/$RANDOM/g
- Вопрос задан более трёх лет назад
- 467 просмотров
6 комментариев
Простой 6 комментариев
Dev urandom как использовать
Специальные символьные файлы /dev/random и /dev/urandom (появились в Linux 1.3.30) предоставляют интерфейс к генератору случайных чисел, встроенному в ядро. Файл /dev/random имеет старший номер устройства 1 и младший номер устройства 8. Файл /dev/urandom имеет старший номер устройства 1 и младший номер устройства 9. Генератор случайных чисел собирает окружающий шум от работы драйверов устройств и из других источников в пул энтропии. Генератор также постоянно оценивает количество битов шума в пуле энтропии. Именно с помощью этого пула создаются случайные числа. При чтении из устройства /dev/random возвращаются произвольные байты, количество битов шума в которых равно количеству битов шума в пуле энтропии. /dev/random следует использовать, если требуется очень высокий коэффициент случайности, например, в качестве данных однократного заполнения или при генерации ключа. Если пул энтропии пуст, попытка чтения /dev/random приведёт к задержке, пока не будет собран дополнительный окружающий шум.Если вызов open(2) для /dev/random запускается с флагом O_NONBLOCK, то последующий read(2) не будет выполнять блокировку, если количество запрашиваемых байт недостаточно. Вместо этого будут возвращены имеющиеся байты. Если ни одного байта нет, то read(2) вернёт -1 и значение errno будет равно EAGAIN. При чтении из устройства /dev/urandom блокирования в ожидании данных не происходит. Как результат, если в пуле недостаточная энтропия, то задействуется генератор псевдослучайных чисел для создания запрашиваемых байт. Эти возвращённые значения теоретически нестойки к криптографической атаке на алгоритмы, используемые драйвером. О том, как это сделать, не сказано в современной не секретной литературе, но теоретически возможно, что такая атака может существовать. Если это важно для вашего приложения, используйте лучше /dev/random. Флаг O_NONBLOCK не учитывается при открытии /dev/urandom. При вызове read(2) для устройства /dev/urandom сигналы не обрабатываются до тех пор, пока запрошенные произвольные байты не будут сгенерированы. Начиная с Linux 3.16, вызов read(2) может прочитать из /dev/urandom почти 32 МБ. Из /dev/random будет прочитано не более 512 байт (340 байт для ядер Linux до версии 2.6.12). При записи в /dev/random или /dev/urandom выполняется обновление пула энтропии записываемыми данными, но при этом не увеличивается счётчик энтропии. Это означает, что изменения отразятся в обоих файлах, но это не ускорит процесс чтения из /dev/random.
Использование
Если вы не знаете, что выбрать — /dev/random или /dev/urandom, то лучше использовать последнее. Как правило, /dev/urandom нужно использовать везде, за исключением создания долго существующих ключей GPG/SSL/SSH. Если файл начальных чисел (seed file) сохраняется между перезагрузками как рекомендуется далее (во всех основных дистрибутивах Linux это делается начиная с 2000 года), то результат шифрования стоек от атакующего, не имеющего локально привилегированного доступа, до перезагрузки машины, и вполне подходит для ключей шифрования сетевых сеансов. Так как чтение из /dev/random может привести к блокировке, пользователи хотели бы открывать его в неблокирующем режиме (или выполнять чтение с задержкой), и иметь механизм оповещения, если желаемый уровень энтропии в данный момент недоступен. Генератор случайных чисел ядра проектировался для создания небольших объёмов высококачественного начального материала для генератора псевдослучайных чисел (CPRNG). Целью ставилась безопасность, а не скорость, и поэтому он плохо подходит для генерации большого количества произвольных данных. Пользователи должны быть очень экономны при чтении начального материала из /dev/urandom (и /dev/random); ненужное чтение большого количества данных из этого устройства негативно отразится на других пользователях устройства. Количество начального материала, требуемое для генерации ключей шифрования, равно эффективному размеру ключа. Например, 307 2-битный закрытый ключ RSA или Diffie-Hellman имеет эффективный размер ключа бит (для его подбора требуется просмотреть 2^128 значений), поэтому генератору ключа нужно только 128 бит (16 байт) начального материала из /dev/random. Так как разумно добавить некоторый запас прочности к выше указанному минимуму как защиту против недостатков в алгоритме CPRNG, никакой доступный криптографический примитив сегодня не может обещать больше чем 256 бит безопасности, поэтому если какая-то программа читает больше чем 256 бит (32 байта) из пула случайных чисел ядра за вызов, или за разумный интервал повторного посева (не менее одной минуты), то это нужно считать признаком того, что шифрование в ней реализовано НЕДОСТАТОЧНО продуманно.
Настройка
Если в системе нет /dev/random и /dev/urandom, то их можно создать следующими командами:
mknod -m 666 /dev/random c 1 8 mknod -m 666 /dev/urandom c 1 9 chown root:root /dev/random /dev/urandom
Когда Linux-система запускается без участия человека, пул энтропии может оказаться в довольно предсказуемом состоянии. Это снижает значимый объём шума в пуле энтропии ниже оцениваемого. Для преодоления этого эффекта можно сохранять информацию пула энтропии во время выключения и восстанавливать во время запуска системы. Для этого добавьте строки в сценарий, который выполняется при запуске Linux-системы:
echo "Initializing random number generator. " random_seed=/var/run/random-seed # Carry a random seed from start-up to start-up # Load and then save the whole entropy pool if [ -f $random_seed ]; then cat $random_seed >/dev/urandom else touch $random_seed fi chmod 600 $random_seed poolfile=/proc/sys/kernel/random/poolsize [ -r $poolfile ] && bits=$(cat $poolfile) || bits=4096 bytes=$(expr $bits / 8) dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
Также добавьте следующие строки в сценарий, который выполняется при завершении работы Linux-системы:
# Carry a random seed from shut-down to start-up # Save the whole entropy pool echo "Saving random seed. " random_seed=/var/run/random-seed touch $random_seed chmod 600 $random_seed poolfile=/proc/sys/kernel/random/poolsize [ -r $poolfile ] && bits=$(cat $poolfile) || bits=4096 bytes=$(expr $bits / 8) dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
В примерах выше мы предполагаем, что используется ядро Linux 2.6.0 или новее, в котором /proc/sys/kernel/random/poolsize содержит размер пула энтропии в битах (смотрите ниже).
Интерфейс в /proc
Файлы в каталоге /proc/sys/kernel/random (начиная с 2.3.16) предоставляют дополнительный интерфейс к устройству /dev/random. Файл entropy_avail, доступный только для чтения, показывает количество доступной энтропии. Обычно для заполненного пула энтропии значение равно 4096 (бит). Файл poolsize содержит размер пула энтропии. Формат файла зависит от версии ядра: Linux 2.4: В файле содержится размер пула энтропии в байтах. Обычно это число 512, но так как файл доступен на запись, значение можно изменить, подстроив его под доступный алгоритм. Возможные значения — 32, 64, 128, 256, 512, 1024 или 2048. Linux 2.6: Файл доступен только на чтение и содержит размер пула энтропии в битах. Значение равно 4096. В файле read_wakeup_threshold содержится количество бит энтропии, требуемое для пробуждения процессов, которые спят в ожидании энтропии из /dev/random. Значение по умолчанию равно 64. В файле write_wakeup_threshold содержится количество бит энтропии, менее которого мы пробуждаем процессы, которые выполнили вызовы select(2) или poll(2) для ожидания записи в /dev/random. Эти значения можно изменить, записав новые числа в эти файлы. Файлы uuid и boot_id, доступные только для чтения, содержат произвольные строки вида 6fd5a44b-35f4-4ad4-a9b9-6b9be13e1fe9. Значение первого генерируется заново при каждом чтении, а значение второго генерируется только один раз.
Интерфейс ioctl(2)
Для файловых дескрипторов, соединённых с файлами /dev/random и /dev/urandom, определены запросы ioctl(2), перечисленные ниже. Все выполняемые запросы обращаются к входному пулу энтропии, который относится к и к /dev/random, и к /dev/urandom. Для выполнения всех запросов (кроме RNDGETENTCNT) требуется мандат CAP_SYS_ADMIN. RNDGETENTCNT Возвращает счётчик энтропии входного пула, возвращается содержимое из файла entropy_avail в proc. Результат сохраняется в int, указанный в параметре. RNDADDTOENTCNT Увеличивает или уменьшает счётчик энтропии входного пула на значение аргумента. RNDGETPOOL Удалён из Linux 2.6.9. RNDADDENTROPY Вносит дополнительную энтропию во входной пул, увеличивая счётчик энтропии. Запись в /dev/random или /dev/urandom добавляет только данные, но не увеличивает счётчик энтропии (в этом отличие). Используется следующая структура:
struct rand_pool_info < int entropy_count; int buf_size; __u32 buf[0]; >;
Здесь entropy_count — добавляемое (или вычитаемое) значение к счётчику энтропии, а buf — буфер с размером buf_size, из которого в пул энтропии добавляются данные. RNDZAPENTCNT, RNDCLEARPOOL Обнуляет счётчики всех пулов и добавляет в них некоторые системные данные (такие как время).
/dev/random и /dev/urandom
При чтении данных в устройстве /dev/random создаются только случайные байты, состоящие из битов шума «хаотичного» пула. Устройство /dev/random может быть необходимо пользователям, которые требуют очень высокого коэффициента случайности, например, при создании ключа доступа и т. п. Если «хаотичный» пул опустел, чтение /dev/random блокируется, пока необходимое количество битов в пуле не будет создано.
Чтение данных устройства /dev/urandom возвратит столько байтов, сколько было запрошено. В результате, если в пуле было недостаточно битов, теоретически возможно будет найти уязвимость алгоритма, использующего это устройство. Если это важно, следует использовать /dev/random.
Wikimedia Foundation . 2010 .
Смотреть что такое «/dev/random и /dev/urandom» в других словарях:
- /dev/urandom — /dev/random ist unter vielen UNIX und UNIX ähnlichen Betriebssystemen eine spezielle Datei, von der Benutzer Programme Zufallszahlen lesen können. Sie ist eine einheitliche Schnittstelle zu einem systemweiten Zufallszahlengenerator. Dieser… … Deutsch Wikipedia
- /dev/random — ist unter vielen UNIX und UNIX ähnlichen Betriebssystemen eine spezielle Datei, von der Benutzer Programme Zufallszahlen lesen können. Sie ist eine einheitliche Schnittstelle zu einem systemweiten Zufallszahlengenerator. Dieser Zufallsgenerator… … Deutsch Wikipedia
- /dev/random — In Unix like operating systems, /dev/random is a special file that serves as a random number generator or as a pseudorandom number generator. It allows access to environmental noise collected from device drivers and other sources.[citation… … Wikipedia
- /dev — Gerätedatei (von engl. device file) sind spezielle Dateien, die unter fast allen Unix Derivaten und vielen anderen Betriebssystemen genutzt werden. Sie ermöglichen eine einfache Kommunikation zwischen Userspace, zum Beispiel gewöhnlichen… … Deutsch Wikipedia
- /dev/zero — Gerätedatei (von engl. device file) sind spezielle Dateien, die unter fast allen Unix Derivaten und vielen anderen Betriebssystemen genutzt werden. Sie ermöglichen eine einfache Kommunikation zwischen Userspace, zum Beispiel gewöhnlichen… … Deutsch Wikipedia
- Dev/zero — Gerätedatei (von engl. device file) sind spezielle Dateien, die unter fast allen Unix Derivaten und vielen anderen Betriebssystemen genutzt werden. Sie ermöglichen eine einfache Kommunikation zwischen Userspace, zum Beispiel gewöhnlichen… … Deutsch Wikipedia
- Hardware random number generator — This SSL Accelerator computer card uses a hardware random number generator to generate cryptographic keys to encrypt data sent over computer networks. In computing, a hardware random number generator is an apparatus that generates random numbers… … Wikipedia
- Entropy (computing) — In computing, entropy is the randomness collected by an operating system or application for use in cryptography or other uses that require random data. This randomness is often collected from hardware sources, either pre existing ones such as… … Wikipedia
- Device file — In Unix like operating systems, a device file or special file is an interface for a device driver that appears in a file system as if it were an ordinary file. There are also special device files in MS DOS and Microsoft Windows. They allow… … Wikipedia
- dd (Unix) — In computing, dd is a common Unix program whose primary purpose is the low level copying and conversion of raw data. According to the manual page for Version 7 Unix,[1] it will convert and copy a file . It is used to copy a specified number of… … Wikipedia