Linux entropy что это

Использование простого демона энтропии Haveged

Кратко об энтропии и случайных данных

Алгоритм Linux PRNG (Linux pseudo random number generator, генератор псевдослучайных чисел Linux, ГСЧ) разработан специально для генерирования случайностей из аппаратных прерываний. Аппаратные (или внешние) прерывания – это события, исходящие от внешних источников, – клавиатуры, мыши, I/O диска или сети, – в произвольный момент. Случайность, созданная PRNG, в основном необходима для функционирования механизмов шифрования (SSL/TLS), но этим сфера её применения не ограничивается. Даже простые программы (например, виртуальные карточные игры) зависят от энтропии.

В Linux есть два общих устройства: /dev/random и /dev/urandom. Случайность создаётся инструментом /dev/random (он предназначен для блокирования) и ожидает соответствующего уровня энтропии для своего вывода. Если энтропия находится на достаточном уровне, /dev/urandom произведёт такой же уровень случайности; однако /dev/urandom продолжит генерировать случайные данные (поскольку является неблокирующим устройством) даже если пул энтропии иссякает. Это может привести к снижению качества случайностей и увеличивает шансы повтора предыдущих данных. Снижение уровня энтропии очень опасно для производственного сервера, особенно если этот сервер выполняет криптографические функции. Для примера предположим, что существует облачный сервер, на котором запущены следующие демоны (все они используют SSL/TLS или блочные шифры):

  • Веб-сервер
  • Почтовый сервер входящих/исходящих сообщений
  • SSH/SFTP

Если какому-либо из этих демонов понадобится случайность в тот момент, когда энтропия иссякла, он перейдёт в режим ожидания, что может вызвать чрезмерные задержки в работе приложения. И это ещё не всё: многие современные приложения в такой ситуации могут либо обратиться к собственным случайным данным, созданным при инициализации программы, либо использовать /dev/urandom, чтобы избежать блокирования, что станет причиной снижения надежности случайных данных. Это может отрицательно повлиять на безопасность соединений и увеличивает шансы криптографической атаки.

Пользовательское решение для заполнения пулов энтропии

Linux уже предоставляет довольно качественные случайные данные при помощи вышеописанного ПО, но поскольку автономные компьютеры обычно не имеют клавиатуры или мыши, генерируемая на них энтропия гораздо ниже, поскольку создаётся диском или I/O сети. Очень немногие автономные машины имеют специальное аппаратное обеспечение для ГСЧ, поэтому существует несколько пользовательских решений для создания дополнительной энтропии при помощи аппаратных прерываний, т.к. некоторые устройства (например, звуковые и видеокарты) создают больше так называемого «шума», чем жёсткий диск. К сожалению, даже это не решает проблему виртуальных серверов. Но тут на помощь приходит инструмент haveged. Основанный на алгоритме HAVEGE (а ранее – на его библиотеке), haveged позволяет генерировать случайные данные, руководствуясь изменениями во времени выполнения кода на процессоре. Так как обработать один и тот же блок кода в течение точно такого же времени почти невозможно (даже в той же среде на том же оборудовании), сроки выполнения одной или нескольких программ отлично подходят для генерации случайных данных. Инструмент haveged создаёт источник случайных данных с учетом различий в счётчика времени процессора (TSC) после неоднократного выполнения цикла. Сначала может показаться, что в конечном итоге он может создать предсказуемые данные; одна из целей данного руководства – опровергнуть это заблуждение.

Читайте также:  Установка оригинальной windows 10

Установка haveged в Debian/Ubuntu

Установить haveged в Debian или Ubuntu можно при помощи простой команды:

# apt-get install haveged

Примечание: Если этот пакет недоступен из репозитория, придётся скомпилировать его из исходников (об этом – в отдельном разделе руководства).

После установки пакета можно просто отредактировать конфигурационный файл, расположенный в /etc/default/haveged; установите следующие опции (если они не установлены по умолчанию):

В завершение настройте автоматический запуск программы:

# update-rc.d haveged defaults

Установка haveged в RHEL/CentOS/Fedora

Чтобы установить haveged в системы RHEL или CentOS, нужно добавить репозиторий EPEL, руководствуясь инструкциями официального сайта.

Примечание: Пользователям Fedora не нужно добавлять EPEL.

Установив и включив EPEL, установите haveged при помощи команды:

# yum install haveged

Пользователи Fedora могут сразу запустить эту команду. Как правило, стандартные настройки не нуждаются в редактировании, потому просто настройте автоматический запуск haveged при загрузке системы:

# chkconfig haveged on

Установка haveged из исходного кода

Не все системы имеют доступ к предварительно упакованным двоичным файлам haveged. В таком случае нужно использовать tarball исходного кода. На самом деле, это довольно просто. Сначала нужно посетить страницу загрузки и выбрать последний релиз тарбола (на момент написания статьи это 1.7). Загрузив тарбол, распакуйте его в текущий рабочий каталог.

# tar zxvf /path/to/haveged-x.x.tar.gz

Теперь можно скомпилировать и установить его:

# cd /path/to/haveged-x.x
# ./configure
# make
# make install

По умолчанию haveged устанавливается с префиксом /usr/local, потому нужно добавить в /etc/rc.local (или аналог в вашей системе) следующее, чтобы настроить автоматический запуск программы при загрузке системы:

# Autostart haveged
/usr/local/sbin/haveged -w 1024

Примечание: В случае необходимости отредактируйте путь.

Запустите ту же команду вручную как root, чтобы запустить демон без перезагрузки системы (или же просто перезапустите систему, если вы используете Windows-подобную систему).

Тестирование энтропии и качества случайных данных

После установки haveged пул энтропии системы будет заполнен случайными данными. Однако невозможно достичь надежного уровня безопасности, если слепо доверять установке, потому следует протестировать сгенерированные случайные данные. В этой проверке применяется метод FIPS-140, используемый rngtest и доступный в большинстве основных дистрибутивов Linux под разными именами, одно из которых – rng-tools:

# cat /dev/random | rngtest -c 1000

На экране появится следующий вывод:

rngtest 2-unofficial-mt.14
Copyright (c) 2004 by Henrique de Moraes Holschuh
This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
rngtest: starting FIPS tests.
rngtest: bits received from input: 20000032
rngtest: FIPS 140-2 successes: 999
rngtest: FIPS 140-2 failures: 1
rngtest: FIPS 140-2(2001-10-10) Monobit: 0
rngtest: FIPS 140-2(2001-10-10) Poker: 0
rngtest: FIPS 140-2(2001-10-10) Runs: 1
rngtest: FIPS 140-2(2001-10-10) Long run: 0
rngtest: FIPS 140-2(2001-10-10) Continuous run: 0
rngtest: input channel speed: (min=1.139; avg=22.274; max=19073.486)Mibits/s
rngtest: FIPS tests speed: (min=19.827; avg=110.859; max=115.597)Mibits/s
rngtest: Program run time: 1028784 microseconds

Небольшое количество неудачных результатов допускается в любом генераторе случайных чисел, но в среднем hovered выдаёт 998-1000 успешных чисел.

Читайте также:  Драйвер мфу xerox pe16 для windows 10

Чтобы протестировать доступную энтропию, запустите команду:

Демон haveged заполнит пул энтропии, как только значение доступных битов приблизится к 1024. Таким образом, хотя это число будет колебаться, оно не опустится ниже 1000 или около того, если только вы не используете слишком много случайных данных (для генерации ключей SSH, и т.д.).

Источник

Где взять энтропию для /dev/random и как её протестировать?

Наличие качественной энтропии крайне необходимо для ОС и критически влияет непосредственно на её безопасность, при использовании техник «случайное выравнивание адресного пространства» (ASLR)! Очень много случайных чисел также необходимо для криптографических операций: шифрования трафика, создания ключей и прочего.

Откуда брать случайные числа:

  • Аппаратные True Random Number Generators — основанные на законах квантовой механики.
  • clrng — PRNG с системных таймеров.
  • timer_entropyd — PRNG с системных таймеров.
  • CONFIG_PAX_LATENT_ENTROPY — PRNG с системных таймеров и перерываний.
  • audio-entropyd — микрофон, звуковые сигналы.
  • video_entropyd — видеокамера, с разницы между двумя случайными кадрами.
  • MWC64X — PRNG использующие GPU с OpenCL.
  • clRNG — PRNG использующие GPU с OpenCL.
  • Прочие источники энтропии и тесты её качества.

В системе одновременно можно запускать сразу несколько сервисов для создания энтропии.

Для безопасной работы необходимо >200бит/с энтропии!

Если не секрет, откуда берёте энтропию Вы?

у меня 5 костей кубиков есть, их кидаю.

Биологические RNG, которые заставляют пользователя стучать по клаве, дёргать мышкой и производить прочие действия не рассматриваем.

потому что требуют вовлечения пользователя же.

А мы вообще за детерминизм!

Продам немного энтропии — не дорого.

можно попробывать архивнуть cat /dev/sda в /dev/null bzip-ом.

Существуют специальные генераторы на основе радиоактивных материалов.

Но мне кажется, достаточно простого усиленного теплового белого шума, пропущенного через отбеливающий фильтр для устранения неслучайных помех.

дефолт, но иногда пользовался audio-entropyd, обнаружилось, что он эксклюзивно захватывает ALSA-устройства и после этого некоторые приложения не могут в звук

video_entropyd мне кажется способен дать достаточно качественной энтропии. Веб камерой в это время не попользуешься.

audio-entropyd надо указать устройство микрофона, вывод звука должен работать.

Где-то встречал инфу, что в компах/в процах т.н. HWRNG реализован банальным free-running осциллятором, а-ля мультивибратор на двух транзюках. У таких схем без дополнительных ухищрений частота и скважность гуляет вообще от всего, вплоть до погоды на Марсе. 🙂

Если не секрет, откуда берёте энтропию Вы?

Но мне кажется, достаточно простого усиленного теплового белого шума, пропущенного через отбеливающий фильтр для устранения неслучайных помех.

audio-entropyd тоже фильтрует случайные и не случайные помехи.

Проблема где взять качественную энтропию дома, желательно без покупных девайсов.

Аппаратных, не радиоактивных куча, в ввиде PCI-E платы или USB, десятки-сотни Мбит/с дают:

а можно ли этим аппаратным железкам доверять? 🙂

Не знаю откуда берёт «энтропию» мой ПК, но я так думаю что для настольного ПК можно генерировать псевдослучайные числа основанные на передвижении мыши.

Проблема где взять качественную энтропию дома, желательно без покупных девайсов.

А чем тогда вам тот же audio-entropyd не угодил? И вообще, для домашних нужд обычных источников хватает.

Читайте также:  Lenovo energy management g700 windows 10

Проблема — это когда встраиваемое устройство не имеет таковых источников вовсе (хотя бы на первоначальном этапе работы), а криптография нужна.

“We cannot trust” Intel and Via’s chip-based crypto, FreeBSD developers say

А чем тогда вам тот же audio-entropyd не угодил? И вообще, для домашних нужд обычных источников хватает.

а вдруг агенты NSA из соседнего здания будут направленно транслировать в ваш микрофон специальные звуки и портить энтропию?

Если не секрет, откуда берёте энтропию Вы?

Из сертифицированного ГСЧ.

Есть тесты для проверки.

Можно использовать несколько источников энтропии одновременно, смешивая их в /dev/random

А им доверять можно?

Где уважение к Ъ?

Скопипастить сюда тяжело?

Серверы, собранные из специально не предназначенных для этого комплектующих, обычно имеют два недостатка. У них отсутствует аппаратный сторожевой таймер и часто не хватает энтропии для ряда сервисов. Нехватка энтропии особенно актуальна для не сильно нагруженных серверов. Это связанно с тем, что ядро Linux в качестве источника энтропии использует активность системы, а именно: сетевого оборудования, дисковой подсистемы и аппаратных прерываний.

Также в домашнем сервере часто возникает необходимость иметь более экономный, по сравнению с Wi-Fi, радиомодуль для коммуникации с автономными датчиками.

Существует большой выбор устройств, с помощью которых можно решить любую из этих проблем, но подключение каждого из них требует отдельный порт. Оценив ситуацию, в итоге решил разработать устройство 3-в-1 подключаемое в RS232 (COM) порт. Остальные требования получились следующими:

Аппаратный сторожевой таймер, пригодный для работы со стандартным демоном watchdog;

Генератор истинных случайных чисел на базе эффекта обратного лавинного пробоя p-n перехода;

Радиомодуль nRF24L01+ для сбора данных с автономных датчиков.

А чем тогда вам тот же audio-entropyd не угодил?

Он мне не не нравится, video-entropyd намного качественнее и больше энтропии даёт. Я тишину люблю.

И вообще, для домашних нужд обычных источников хватает.

Для нужд PAX ASLR и https не хватит если нет в системе аппаратного RNG.

Проблема — это когда встраиваемое устройство не имеет таковых источников вовсе (хотя бы на первоначальном этапе работы), а криптография нужна.

pax_extra_latent_entropy параметр при загрузки ядра.

Камера и звук чаще всего тоже

Звук как источник энтропии можно использовать в шумных местах, офисах где много народа, вывести микрофон за окно на шумную улицу.

Видео, намного более привлекательно, поставил камеру на окошко, ветер листву на тополях качает, энтропия создаётся в больших объёмах.

а вдруг агенты NSA из соседнего здания будут направленно транслировать в ваш микрофон специальные звуки и портить энтропию?

В соседней квартире жила бабка, так ее агенты КГБ лучами облучали.

Мы говорим о доме или о секретном ядерном бункере?

Если не секрет, откуда берёте энтропию Вы?

«Шуршащий» диод + АЦП — «хватит всем» ардуинам, RPi, . 🙂

В любой тишине есть шум. Даже если вместо микрофона подключить резистор.

А это еще что? В Линуксе такого нет.

вот в дом-то как раз проще звуки транслировать, чем в секретный ядерный бункер 😀

Источник

Оцените статью