Объясните простым языком об энтропии

28

Если я запускаю эту команду в Ubuntu

sudo cat /proc/sys/kernel/random/entropy_avail

он возвращает число, которое указывает, сколько "энтропии" доступно ядру, но это все, что я знаю. В какой единице измеряется эта энтропия? Для чего это используется? Мне сказали, что "плохо", если это число "низкое". Насколько низко «низко» и какие «плохие» вещи произойдут, если это так? Каков хороший диапазон для этого? Как это определяется?

Джош Линдси
источник

Ответы:

22

Ваша система собирает некоторые «реальные» случайные числа, отслеживая различные события: сетевую активность, аппаратный генератор случайных чисел (если имеется; например, процессоры VIA обычно имеют «настоящий» генератор случайных чисел) и так далее. If передает их в пул энтропии ядра, который используется / 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 закончилась «реальная» энтропия.

Янне Пиккарайнен
источник
19

Если вам нужен более простой обзор основной проблемы: некоторым приложениям (таким как шифрование) нужны случайные числа. Вы можете генерировать случайные числа, используя алгоритм - но хотя они кажутся случайными в одном смысле, они полностью предсказуемы в другом. Например, если я дам вам цифры 58209749445923078164062862089986280348253421170679, они выглядят довольно случайными. Но если вы поймете, что они на самом деле цифры ПИ, то вы будете знать, что следующим будет 8.

Для некоторых приложений это нормально, но для других приложений (особенно связанных с безопасностью) люди хотят подлинной непредсказуемой случайности - которая не может быть сгенерирована алгоритмом (то есть программой), так как это по определению предсказуемо. Это проблема в том, что ваш компьютер по сути является программой, так как он может получить подлинные случайные числа? Ответ заключается в том, чтобы измерить действительно случайные события из внешнего мира - например, разрывы между вашими нажатиями клавиш и использовать их для введения подлинной случайности в иначе предсказуемый генератор случайных чисел. «Энтропийный пул» можно рассматривать как хранилище этой случайности, которая накапливается при нажатии клавиш (или что-то еще используется) и истощается при генерации случайных чисел.

JustinP
источник
2
Хорошее объяснение ...
Прадипта
Но PI иррациональна, и она будет включать в себя каждую последовательность, включая вышеуказанную последовательность, за которой следует 9 (вместо 8).
Аджай Брахмакшатрия
9

Энтропия - это технический термин для «Случайности». Компьютеры на самом деле не генерируют энтропию, а собирают ее, рассматривая такие вещи, как вариации скорости вращения жесткого диска (физические явления, которые очень трудно предсказать из-за трения и т. Д.) Когда компьютер хочет генерировать псевдослучайные данные, он будет Заполнить математическую формулу с истинной энтропией, которую она нашла, измеряя щелчки мыши, вариации вращения жесткого диска и т. д. Грубо говоря, 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.

Карлос Д. Гарза
источник
1
«Чтобы исправить это, мы переписали скрипт python, чтобы он работал как демон, который инициализировался только один раз, и задание cron считывало данные через XMLRPC, чтобы при запуске не продолжалось чтение из / dev / random». --- За исключением приведенной мною части, которую сложно оценить, потому что неясно, действительно ли ваш сценарий нуждался в случайности или нет, ваш ответ очень ясен и ясен.
Крейг Хикс,
8

Доступный только для чтения файл entropy_avail предоставляет доступную энтропию. Обычно это будет 4096 (бит), полный энтропийный пул.

Вы можете прочитать больше на: http://linux.die.net/man/4/random

Prix
источник