Мое текущее понимание энтропийного пула состоит в том, что он собирает действительно случайные биты данных с медленной скоростью. Я хотел бы знать, как Unix и Linux собирают энтропию и как эта энтропия используется / dev / random.
Я слышал (обычно) о методах сбора энтропии, таких как состояние процессора видеокарты, когда поступает «случайно» выбранный сетевой пакет, сопоставленный с коэффициентом шипения в цифро-аналоговом преобразователе, и другие, еще более тупые методы.
Я считаю, что энтропийный «пул» используется по мере необходимости и используется для создания генератора случайных чисел псевдо…
Я не после подробного ответа, но мне интересно знать, является ли это общий подход, используемый Unix / Linux? .. и, возможно, некоторые намеки о том, что на самом деле происходит на угольной шахте сбора энтропии. ... а потом, в какую энтропию поступает .. Это шифр AES Rijndael?
Справочная информация о моих комментах, приведенная выше, была получена от « Безопасности сейчас» Стива Гибсона ! подкаст: Эпизод # 301 Going Random, часть 2 из 2 ... Он говорил только обобщенно (но как и его стиль, с достаточной детализацией и ясностью, чтобы даже я мог его понять. Выслушать предыдущие 300 эпизодов помогает :), ... и я хотел бы знать, так ли это в Unix / Linux ...
Ответы:
В Linux есть два генератора случайных чисел, доступных для пользователей,
/dev/random
и/dev/urandom
./dev/random
является источником "истинной" случайности - т.е. она не генерируется генератором псевдослучайных чисел. Энтропия подается в это драйвером ввода и обработчиком прерываний через функцииadd_input_randomness
иadd_interrupt_randomness
. Процессы чтения этого устройства будут блокироваться, если энтропия иссякнет./dev/urandom
генератор псевдослучайных чисел Он питается тем же энтропийным пулом, что и/dev/random
, но когда он заканчивается, он переключается на криптографически сильный генератор.Приложения пользовательского пространства могут поступать в пул энтропии, записывая в
/dev/{,u}random
.Прочтите справочную страницу random (4) и файл
drivers/char/random.c
в дереве исходного кода ядра. Это хорошо прокомментировано, и большая часть того, что вы спрашиваете, объясняется там.FreeBSD
/dev/random
по умолчанию является генератором псевдослучайных чисел, использующим алгоритм Ярроу (но может указывать на аппаратный ГСЧ, если он подключен). Программный генератор получает энтропию от Ethernet и последовательных соединений и аппаратных прерываний (с возможностью изменения черезsysctl kern.random
). Считается, что алгоритм Ярроу является безопасным, пока его внутреннее состояние неизвестно, поэтому/dev/random
всегда должен выводить высококачественные данные без блокировки. Смотрите случайным образом (4) .В NetBSD
/dev/random
предоставляет случайные данные, основанные только на собранной энтропии (с дисков, сети, устройств ввода и / или накопителей на магнитной ленте; настраивается с помощью rndctl ), а/dev/urandom
в случае пустого пула энтропии возвращается к PRNG, как в Linux. См. Random (4) , rndctl (8) , rnd (9) .OpenBSD имеет четыре генератора:
/dev/random
это аппаратный генератор,/dev/srandom
это безопасный генератор случайных данных (использующий MD5 в пуле энтропии: «диск и сетевое устройство прерывается и т. Д.»), Но/dev/urandom
он аналогичен PRNG, когда пул энтропии пуст. Четвертый,/dev/arandom
тоже PRNG, но с использованием RC4 . Смотрите random (4) , arc4random (3) .Mac OS X также использует алгоритм Ярроу для
/dev/random
, но имеет идентичную работу/dev/urandom
для совместимости. «Дополнительная энтропия регулярно подается на генератор демоном SecurityServer из измерений случайного джиттера ядра». Смотрите случайным образом (4) .источник
cat /dev/random
и всегда задавался вопросом, почему мой поток остановился после стольких символов