В вычислениях энтропия — это случайность, собираемая операционной системой или приложением для использования в криптографии или других целях, требующих случайных данных. Эта случайность часто собирается из аппаратных источников (изменение шума вентилятора или жесткого диска), либо уже существующих, таких как движения мыши, либо специально предусмотренных генераторов случайности. Недостаток энтропии может оказать негативное влияние на производительность и безопасность.
Ядро Linux генерирует энтропию на основе таймингов клавиатуры , движений мыши и таймингов интегрированной приводной электроники (IDE) и делает случайные символьные данные доступными для других процессов операционной системы через специальные файлы /dev/random и /dev/urandom. Эта возможность была представлена в Linux версии 1.3.30. [1]
Существуют некоторые патчи ядра Linux, позволяющие использовать больше источников энтропии. [2] Проект audio_entropyd, [3] который включен в некоторые операционные системы, такие как Fedora , позволяет использовать аудиоданные в качестве источника энтропии. [4] Также доступен video_entropyd, [5] который вычисляет случайные данные от видеоисточника и энтропийного брокера, [6] который включает в себя эти три и может использоваться для распределения энтропийных данных по системам, не способным запускать ни один из них (например, виртуальные машины ). Кроме того, можно использовать алгоритм HAVEGE для объединения энтропии. [7] В некоторых системах сетевые прерывания также могут использоваться в качестве источника энтропии. [8]
OpenBSD включила криптографию в качестве одной из своих основных целей и всегда работала над увеличением энтропии шифрования, а также над рандомизацией многих частей ОС, включая различные внутренние операции ее ядра. Примерно в 2011 году два случайных устройства были отключены и объединены в один источник, поскольку в средней системе они могли генерировать сотни мегабайт в секунду высококачественных случайных данных. [ необходимы пояснения ] Это сделало невозможным истощение случайных данных программами пользовательского пространства в OpenBSD после того, как изначально было собрано достаточно энтропии.
Драйвер, перенесенный из ядра Linux, доступен для ядра Hurd . [9]
/dev/random и /dev/urandom доступны в виде пакетов или исправлений Sun для Solaris, начиная с Solaris 2.6, [10] и являются стандартной функцией, начиная с Solaris 9. [11] Начиная с Solaris 10, администраторы могут удалять существующие источники энтропии. или определить новые с помощью криптографической инфраструктуры уровня ядра.
Сторонний модуль ядра, реализующий /dev/random, также доступен для выпусков, начиная с Solaris 2.4. [10]
Существует пакет программного обеспечения для OS/2 , который позволяет программным процессам извлекать случайные данные. [12]
Выпуски Microsoft Windows , более новые, чем Windows 95, используют CryptoAPI для сбора энтропии аналогично /dev/random ядра Linux. [13]
CryptoAPI Windows использует двоичный ключ реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Cryptography\RNG\Seed для хранения начального значения из всех источников энтропии. [14]
Поскольку CryptoAPI имеет закрытый исходный код , некоторые бесплатные и открытые программные приложения, работающие на платформе Windows, используют другие меры для получения случайности. Например, GnuPG, начиная с версии 1.06, использует различные источники, такие как количество свободных байтов в памяти, которые в сочетании со случайным начальным числом генерируют желаемую случайность, в которой он нуждается. [15]
Программисты, использующие CAPI, могут получить энтропию, вызвав CryptGenRandom () CAPI после его правильной инициализации. [16]
CryptoAPI устарел, начиная с Windows Vista и выше. Новый API называется Cryptography API: Next Generation (CNG). [17] CNG в Windows использует двоичный ключ реестра HKEY_LOCAL_MACHINE\SYSTEM\RNG\Seed для хранения начального значения.
Более новая версия Windows может использовать различные источники энтропии:
Встроенным системам сложно собрать достаточно энтропии, поскольку они часто представляют собой очень простые устройства с коротким временем загрузки, а операции генерации ключей, требующие достаточной энтропии, часто являются одним из первых действий, которые может выполнить система. На этих устройствах могут отсутствовать общие источники энтропии или они не будут активны достаточно долго во время загрузки, чтобы обеспечить наличие достаточной энтропии. Во встроенных устройствах часто отсутствуют вращающиеся диски, устройства пользовательского интерфейса и даже вентиляторы, а сетевой интерфейс, если таковой имеется, не будет активен достаточно долго, чтобы обеспечить большую энтропию. Из-за отсутствия простого доступа к энтропии некоторые устройства могут использовать жестко запрограммированные ключи для начального генератора случайных чисел или начального генератора случайных чисел на основе легко угадываемых уникальных идентификаторов, таких как MAC-адрес устройства. Простое исследование [ какое? ] продемонстрировал широкое использование слабых ключей, обнаружив, что многие встроенные системы, такие как маршрутизаторы, используют одни и те же ключи. Считалось, что количество найденных слабых ключей было бы намного выше, если бы простые и часто определяемые злоумышленником одноразовые уникальные идентификаторы не были включены в энтропию некоторых из этих систем. [20]
Настоящий генератор случайных чисел (TRNG) может быть (де)центральным сервисом. Одним из примеров централизованной системы, в которой можно получить случайное число, является служба случайных маяков Национального института стандартов и технологий . Платформа Cardano использует участников своего децентрализованного протокола доказательства доли для генерации случайных чисел. [21]
Существуют некоторые программные пакеты, которые позволяют использовать процесс пользовательского пространства для сбора случайных символов, именно то, что делает /dev/random, например EGD, демон сбора энтропии. [22]
Современные процессоры и оборудование часто оснащены встроенными генераторами, которые могут обеспечить высококачественную и высокоскоростную энтропию для операционных систем. В системах на базе ядра Linux можно считать энтропию, сгенерированную таким устройством, через /dev/hw_random. [23] Однако иногда /dev/hw_random может работать медленно; [24] [25]
Некоторые компании производят устройства генерации энтропии, и некоторые из них поставляются с драйверами для Linux. [26] [27]
В системе Linux можно установить пакет rng-tools [28] , который поддерживает настоящие генераторы случайных чисел (TRNG), присутствующие в процессорах, поддерживающих инструкцию RDRAND , модулях доверенной платформы и в некоторых наборах микросхем Intel , AMD или VIA , [29] эффективно увеличивая энтропию, собранную в /dev/random, и потенциально улучшая криптографический потенциал. Это особенно полезно в безголовых системах , у которых нет других источников энтропии.
Системные администраторы , особенно те, кто контролирует интернет-серверы, должны гарантировать, что серверные процессы не остановятся из-за истощения энтропии. Энтропия на серверах , использующих ядро Linux или любой другой процесс ядра или пользовательского пространства, который генерирует энтропию из консоли и подсистемы хранения, часто не идеальна из-за отсутствия мыши и клавиатуры, поэтому серверам приходится генерировать свою энтропию из ограниченный набор ресурсов, таких как тайминги IDE.
Размер пула энтропии в Linux можно просмотреть через файл /proc/sys/kernel/random/entropy_avail и обычно он должен составлять не менее 2000 бит (из максимального значения 4096). [30] [31] Энтропия часто меняется.
Администраторы, ответственные за системы с низкой или нулевой энтропией, не должны пытаться использовать /dev/urandom вместо /dev/random, поскольку это может привести к тому, что соединения SSL/TLS будут иметь шифрование более низкого уровня. [32]
Некоторые программные системы часто меняют свои ключи Диффи-Хеллмана , и в некоторых случаях это может помочь серверу продолжать нормально функционировать даже при наличии узкого места в энтропии. [33]
На серверах с низкой энтропией процесс может оказаться зависшим, когда он ожидает появления случайных символов в /dev/random (в системах на базе Linux). Например, в Debian была известная проблема , из-за которой в некоторых случаях из-за этого exim4 зависал. [34]
Источники энтропии можно использовать для атак по времени с клавиатуры. [35]
Энтропия может повлиять на криптографию (TLS/SSL) сервера : если сервер не может использовать правильный источник случайности, ключи, сгенерированные сервером, будут небезопасными. В некоторых случаях взломщик (злоумышленник) может угадать некоторые биты энтропии из выходных данных генератора псевдослучайных чисел (ГПСЧ), и это происходит, когда в ГПСЧ введено недостаточно энтропии. [36]
Обычно используемые источники энтропии включают в себя мышь, клавиатуру и тайминги IDE, но есть и другие потенциальные источники. Например, можно было бы собирать энтропию с микрофона компьютера или построить датчик для измерения турбулентности воздуха внутри жесткого диска . [37]
Для производных Unix/BSD существует решение на основе USB, которое использует процессор ARM Cortex для фильтрации/защиты потока битов, генерируемого двумя источниками генератора энтропии в системе. [38]
Cloudflare использует изображение со стойки с 80 лавовыми лампами в качестве дополнительного источника энтропии. [39]
{{cite web}}
: CS1 maint: bot: original URL status unknown (link)