Если я запустил эту команду в Ubuntu
sudo cat /proc/sys/kernel/random/entropy_avail
он возвращает число, указывающее, сколько «энтропии» доступно ядру, но это все, что я знаю. В каких единицах измеряется эта энтропия? Для чего его используют? Мне сказали, что это «плохо», если это число «мало». Насколько низко «низко» и какие «плохие» вещи произойдут, если он будет? Какой хороший диапазон для этого? Как это определяется?
Ваша система собирает некоторые «реальные» случайные числа, отслеживая различные события: сетевая активность, аппаратный генератор случайных чисел (если он доступен; например, процессоры VIA обычно имеют «настоящий» генератор случайных чисел) и так далее. Если передает их в пул энтропии ядра, который используется / dev / random. Приложения, которым требуется максимальная безопасность, как правило, используют / dev / random в качестве источника энтропии или, другими словами, источника случайности.
Если / dev / random исчерпывает доступную энтропию, он не может обслуживать больше случайности, и приложение, ожидающее случайности, останавливается, пока не станет доступно больше случайных вещей. За время своей карьеры я видел пример того, что демон Cyrus IMAP хотел использовать / dev / random для случайности, а его сеансы POP хотели генерировать случайные строки в соединениях APOP из / dev / random. В загруженной среде было больше попыток входа в систему, чем трафика для подачи / dev / random -> все застопорилось. В этом случае я установил rng-tools и активировал имеющийся у него rngd - который перелопатил полуслучайные числа из / dev / urandom в / dev / random в случае, если / dev / random исчерпал «настоящую» энтропию.
Если вам нужен более простой обзор основной проблемы: некоторым приложениям (например, шифрованию) требуются случайные числа. Вы можете генерировать случайные числа с помощью алгоритма, но хотя они кажутся случайными в одном смысле, в другом они полностью предсказуемы. Например, если я дам вам цифры 58209749445923078164062862089986280348253421170679, они будут выглядеть довольно случайно. Но если вы поймете, что это на самом деле цифры PI, тогда вы поймете, что следующей будет 8.
Для некоторых приложений это нормально, но для других приложений (особенно связанных с безопасностью) людям нужна настоящая непредсказуемая случайность, которая не может быть сгенерирована алгоритмом (то есть программой), поскольку она по определению предсказуема. Проблема в том, что ваш компьютер является программа, так как же она может получить подлинные случайные числа? Ответ заключается в измерении действительно случайных событий из внешнего мира - например, промежутков между вашими нажатиями клавиш и их использования для внесения подлинной случайности в генератор случайных чисел, который в противном случае предсказуем. «Пул энтропии» можно рассматривать как хранилище этой случайности, которое накапливается нажатиями клавиш (или чем-то еще, что используется) и истощается путем генерации случайных чисел.
Энтропия - это технический термин, обозначающий «случайность». Компьютеры на самом деле не генерируют энтропию, а собирают ее, глядя на такие вещи, как вариации скорости вращения жесткого диска (физическое явление, которое очень трудно предсказать из-за трения и т. Д.). Когда компьютер хочет сгенерировать псевдослучайные данные, он будет засеять математическую формулу с истинной энтропией, которая была найдена путем измерения щелчков мыши, вариаций вращения жесткого диска и т. д. Грубо говоря entropy_avail
это мера битов, доступных в настоящее время для чтения из /dev/random
Компьютеру требуется время, чтобы считывать энтропию из окружающей среды, если у него нет крутого оборудования, такого как шумный диод или что-то в этом роде.
Если у вас есть 4096 бит энтропии и вы /dev/random
вы можете рассчитывать на то, что сможете прочитать 512 байт энтропии (4096 бит) до того, как файл заблокируется, пока он ожидает большей энтропии.
Например, если вы «cat /dev/random
«Ваша энтропия сократится до нуля. Сначала вы получите 512 байтов случайного мусора, но это прекратится, и постепенно вы увидите больше случайных потоков данных.
Это не то, как люди должны действовать /dev/random
хотя. Обычно разработчики читают небольшой объем данных, например 128 бит, и используют его для заполнения какого-то алгоритма ГПСЧ. Вежливо не читать больше энтропию из /dev/random
чем вам нужно, так как для создания требуется так много времени и считается ценным. Таким образом, если вы неосторожно слейте воду cat
ting файл, как указано выше, вы вызовете другие приложения, которым необходимо читать из /dev/random
блокировать. На одной работающей системе мы заметили, что многие криптографические функции не работают. Мы обнаружили, что задание cron вызывает скрипт python, который продолжает инициализировать ramdom.random()
при каждом запуске, которое выполняется каждые несколько секунд. Чтобы исправить это, мы переписали скрипт python так, чтобы он работал как демон, который инициализировался только один раз, а задание cron считывало данные через XMLRPC, чтобы оно не продолжало чтение из /dev/random
на старте.
Доступный только для чтения файл entropy_avail дает доступную энтропию. Обычно это 4096 (бит), полный пул энтропии.
Вы можете прочитать больше на: http://linux.die.net/man/4/random