Что такое энтропия linux

Энтропия (вычисления) — Entropy (computing)

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

СОДЕРЖАНИЕ

Ядро Linux

Linux , ядро генерирует энтропию от клавиатуры тайминги, мыши движений и IDE тайминги и делает случайные символьные данные , доступные для других процессов операционной системы через специальные файлы / DEV / случайных и / DEV / urandom. Эта возможность появилась в Linux версии 1.3.30.

Есть несколько патчей ядра Linux, позволяющих использовать больше источников энтропии. Проект audio_entropyd , включенный в некоторые операционные системы, такие как Fedora , позволяет использовать аудиоданные в качестве источника энтропии. Также доступны video_entropyd, который вычисляет случайные данные от видеоисточника, и энтропийный брокер, который включает в себя эти три и может использоваться для распределения энтропийных данных в системы, не способные запускать какие-либо из них (например, виртуальные машины ). Кроме того, можно использовать HAVEGE алгоритм через haveged для пула энтропии. В некоторых системах сетевые прерывания также могут использоваться как источник энтропии.

Ядро OpenBSD

OpenBSD имеет интегрированную криптографию как одну из своих основных целей и всегда работал над увеличением своей энтропии для шифрования, а также над рандомизацией многих частей ОС, включая различные внутренние операции ее ядра. Примерно в 2011 году два случайных устройства были отброшены и связаны в один источник, поскольку он мог производить сотни мегабайт в секунду случайных данных высокого качества в средней системе. Это делало исчерпание случайных данных программами пользовательского уровня в OpenBSD, если изначально была собрана достаточная энтропия.

Ядро Hurd

Драйвер, перенесенный из ядра Linux, стал доступным для ядра Hurd .

Солярис

/ dev / random и / dev / urandom были доступны как пакеты или исправления Sun для Solaris начиная с Solaris 2.6 и были стандартной функцией, начиная с Solaris 9. Начиная с Solaris 10, администраторы могут удалять существующие источники энтропии или определять новые с помощью криптографическая структура на уровне ядра.

Сторонний модуль ядра, реализующий / dev / random, также доступен для выпусков, начиная с Solaris 2.4.

OS / 2

Для OS / 2 существует программный пакет, который позволяет программным процессам извлекать случайные данные.

Выпуски Microsoft Windows новее, чем Windows 95, используют CryptoAPI для сбора энтропии аналогично / dev / random в ядре Linux.

CryptoAPI Windows использует двоичный ключ реестра HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Cryptography \ RNG \ Seed для хранения начального значения из всех его источников энтропии.

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

Программисты, использующие CAPI, могут получить энтропию, вызвав CryptGenRandom () CAPI после его правильной инициализации.

CryptoAPI устарел в Windows Vista и более поздних версиях . Новый API называется Cryptography API: Next Generation (CNG). CNG Windows использует двоичный ключ реестра HKEY_LOCAL_MACHINE \ SYSTEM \ RNG \ Seed для хранения начального значения.

Читайте также:  Как сгенерировать ssh keys для git windows

Более новая версия Windows может использовать различные источники энтропии:

  • TPM, если он доступен и включен на материнской плате
  • Энтропия из интерфейса UEFI (при загрузке из UEFI)
  • Инструкция RDRAND CPU, если доступна
  • Аппаратные системные часы ( RTC )
  • Содержание таблицы OEM0 ACPI
  • Прерывание тайминги
  • Тайминги клавиатуры и движения мыши

Встроенные системы

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

(Де) централизованные системы

Истинный генератор случайных чисел (TRNG) может быть (де) центральная служба. Одним из примеров централизованной системы, в которой может быть получено случайное число, является служба маяка случайности от Национального института стандартов и технологий . Платформа Cardano использует участников своего децентрализованного протокола Proof-of-Stake для генерации случайных чисел.

Другие системы

Есть несколько программных пакетов, которые позволяют использовать процесс пользовательского пространства для сбора случайных символов, в точности то, что делает / dev / random, например EGD, демон сбора энтропии.

Аппаратная энтропия

Современные процессоры и оборудование часто имеют встроенные генераторы, которые могут обеспечивать высококачественную и высокоскоростную энтропию для операционных систем. В системах, основанных на ядре Linux , можно прочитать энтропию, сгенерированную таким устройством, через / dev / hw_random. Однако иногда / dev / hw_random может работать медленно;

Некоторые компании производят устройства для генерации энтропии, и некоторые из них поставляются с драйверами для Linux.

В системе Linux можно установить пакет rng-tools , который поддерживает генераторы истинных случайных чисел (TRNG), имеющиеся в процессорах, поддерживающих инструкцию RDRAND , доверенных платформенных модулях и в некоторых наборах микросхем Intel , AMD или VIA , эффективно увеличивая энтропию, собранную в / dev / random и потенциально улучшает криптографический потенциал. Это особенно полезно для безголовых систем , у которых нет других источников энтропии.

Практические последствия

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

Размер пула энтропии в Linux можно просмотреть в файле / proc / sys / kernel / random / entropy_avail и обычно должен быть не менее 2000 бит (из максимального числа 4096). Энтропия часто меняется.

Администраторы, отвечающие за системы с низкой или нулевой энтропией, не должны пытаться использовать / dev / urandom вместо / dev / random, так как это может привести к тому, что соединения SSL / TLS будут иметь шифрование более низкого уровня.

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

На серверах с низкой энтропией процесс может казаться зависшим, когда он ожидает появления случайных символов в / dev / random (в системах на базе Linux). Например, в Debian была известная проблема , из- за которой в некоторых случаях exim4 зависал .

Читайте также:  Не устанавливается windows 10 ошибка second boot

Безопасность

Источники энтропии могут быть использованы для атак по времени клавиатуры.

Энтропия может повлиять на криптографию (TLS / SSL) сервера : если сервер не может использовать надлежащий источник случайности, ключи, сгенерированные сервером, будут небезопасными. В некоторых случаях взломщик (злоумышленник) может угадать некоторые биты энтропии по выходным данным генератора псевдослучайных чисел (PRNG), и это происходит, когда в PRNG вводится недостаточно энтропии.

Возможные источники

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

Для производных Unix / BSD существует решение на основе USB, которое использует процессор ARM Cortex для фильтрации / защиты потока битов, генерируемых двумя источниками генератора энтропии в системе.

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

Источник

Использование простого демона энтропии 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) после неоднократного выполнения цикла. Сначала может показаться, что в конечном итоге он может создать предсказуемые данные; одна из целей данного руководства – опровергнуть это заблуждение.

Читайте также:  Linux list all disks

Установка 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 успешных чисел.

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

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

Источник

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