Энтропия - это технический термин для «Случайности». Компьютеры на самом деле не генерируют энтропию, а собирают ее, рассматривая такие вещи, как вариации скорости вращения жесткого диска (физические явления, которые очень трудно предсказать из-за трения и т. Д.) Когда компьютер хочет генерировать псевдослучайные данные, он будет Заполнить математическую формулу с истинной энтропией, которую она нашла, измеряя щелчки мыши, вариации вращения жесткого диска и т. д. Грубо говоря, entropy_avail
это мера битов, доступных в настоящее время для чтения из/dev/random
Компьютеру требуется время для считывания энтропии из окружающей среды, если у него нет классного оборудования, такого как шумный диод или что-то в этом роде.
Если у вас есть 4096 битов энтропии, и вы /dev/random
можете рассчитывать, что сможете прочитать 512 байт энтропии (4096 битов) до того, как файл блокируется, пока он ожидает большей энтропии.
Например, если вы « cat /dev/random
», ваша энтропия сократится до нуля. Сначала вы получите 512 байт случайного мусора, но он остановится, и постепенно вы увидите больше случайных данных.
Это не то, как люди должны работать, /dev/random
хотя. Обычно разработчики читают небольшой объем данных, например 128 бит, и используют его для заполнения какого-то алгоритма PRNG. Вежливо не читать больше энтропии, /dev/random
чем нужно, так как это занимает много времени и считается ценным. Таким образом, если вы истощите его, небрежно cat
отметив файл, как описано выше, вы заставите другие приложения, которые должны читать, /dev/random
заблокировать. В одной из работающих систем мы заметили, что многие криптографические функции перестали работать. Мы обнаружили, что задание cron вызывает скрипт Python, который продолжал инициализироватьсяramdom.random()
на каждом запуске, который запускался каждые несколько секунд. Чтобы это исправить, мы переписали скрипт python, чтобы он работал как демон, который инициализировался только один раз, и задание cron считывало данные через XMLRPC, чтобы при запуске не прекращать чтение /dev/random
.