Объясните простым языком об энтропии
Если я запускаю эту команду в Ubuntu
sudo cat /proc/sys/kernel/random/entropy_avail
он возвращает число, которое указывает, сколько "энтропии" доступно ядру, но это все, что я знаю. В какой единице измеряется эта энтропия? Для чего его используют? Мне сказали, что "плохо", если это число "низкое". Насколько низко "низко" и какие "плохие" вещи произойдут, если это так? Каков хороший диапазон для этого? Как это определяется?
5 ответов
Ваша система собирает некоторые "реальные" случайные числа, отслеживая различные события: сетевую активность, аппаратный генератор случайных чисел (если имеется; например, процессоры 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 закончилась "реальная" энтропия.
Если вам нужен более простой обзор основной проблемы: некоторым приложениям (таким как шифрование) нужны случайные числа. Вы можете генерировать случайные числа, используя алгоритм - но хотя они кажутся случайными в одном смысле, они полностью предсказуемы в другом. Например, если я дам вам цифры 58209749445923078164062862089986280348253421170679, они выглядят довольно случайными. Но если вы поймете, что они на самом деле цифры ПИ, то вы будете знать, что следующим будет 8.
Для некоторых приложений это нормально, но для других приложений (особенно связанных с безопасностью) люди хотят подлинной непредсказуемой случайности - которая не может быть сгенерирована алгоритмом (то есть программой), так как это по определению предсказуемо. Это проблема в том, что ваш компьютер по сути является программой, так как он может получить подлинные случайные числа? Ответ заключается в том, чтобы измерить действительно случайные события из внешнего мира - например, разрывы между вашими нажатиями клавиш и использовать их для введения подлинной случайности в иначе предсказуемый генератор случайных чисел. "Энтропийный пул" можно рассматривать как хранилище этой случайности, которая накапливается при нажатии клавиш (или что-то еще используется) и истощается при генерации случайных чисел.
Энтропия - это технический термин для "Случайности". Компьютеры на самом деле не генерируют энтропию, а собирают ее, рассматривая такие вещи, как вариации скорости вращения жесткого диска (физические явления, которые очень трудно предсказать из-за трения и т. Д.) Когда компьютер хочет генерировать псевдослучайные данные, он будет Заполните математическую формулу с истинной энтропией, которую она нашла, измеряя щелчки мыши, вариации вращения жесткого диска и т. д. Грубо говоря 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
на старте.
Доступный только для чтения файл entropy_avail предоставляет доступную энтропию. Обычно это будет 4096 (бит), полный энтропийный пул.
Вы можете прочитать больше на: http://linux.die.net/man/4/random
Это уже устарело, но другие ответы на самом деле не решают этот вопрос. Энтропия — это мера того, насколько хорошо процесс выбора создает случайную величину. Энтропия определяется как значение S, такое, что лучшая атака угадывания потребует в среднем угадывания S/2. Об этом много где-то написано на SE ( например, здесь ).
Энтропия обычно измеряется в битах. Например, если S равно 256, энтропия равна 8 битам, и лучшая атака должна потребовать в среднем 128 попыток. На современных ядрах Linux (5.10+)entropy_avail
обычно возвращает 256 (бит), что говорит о том, что вы можете получить 256-битное случайное число из/dev/[u]random
, и что для его взлома , вероятно, потребуется в среднем 2255 попыток.
Однако является ли значение 256, сообщаемое ядром, действительно правильной мерой энтропии, а не просто количеством доступных бит, это другой вопрос. Джейсон Доненфельд (автор/сопровождающий кода) говорит, что «оценка энтропии принципиально невозможна».
Насколько низко это «слишком низко»? Что ж, если вам нужно 256-битное случайное число, а энтропия вашего генератора < 256 бит, это слишком мало. OTOH, вы можете просто объединить несколько «слишком низких» результатов, если вы уверены, что ваш генератор реализован правильно и значение энтропии правильное. Обратите внимание, что/dev/random
больше не блокируется в последних ядрах (5.6+), поэтому вы не можете просто ждать, пока получите необходимое количество бит.