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

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

Ядро Linux

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

Есть несколько патчей ядра Linux, позволяющих использовать больше источников энтропии.[2] В audio_entropyd проект, который включен в некоторые операционные системы, такие как Fedora, позволяет использовать аудиоданные в качестве источника энтропии.[3] Также доступны video_entropyd который вычисляет случайные данные из видеоисточника и энтропиброкер который включает в себя эти три и может использоваться для распределения данных энтропии в системы, не способные выполнять какие-либо из них (например, виртуальные машины ). Кроме того, можно использовать Иметь алгоритм через кованый объединить энтропию.[4] В некоторых системах сетевые прерывания также могут использоваться как источник энтропии.[5]

Ядро OpenBSD

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

Ядро Hurd

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

Солярис

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

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

OS / 2

Есть программный пакет для OS / 2 что позволяет программным процессам получать случайные данные.[9]

Windows

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

CryptoAPI Windows использует двоичный реестр ключ HKEY_LOCAL_MACHINESOFTWAREM MicrosoftCryptographyRNGSeed для хранения начального значения из всех источников энтропии.[11]

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

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

CryptoAPI устарел с Виндоус виста и выше. Новый API называется Cryptography API: Next Generation (CNG).[14] CNG Windows использует двоичный реестр ключ HKEY_LOCAL_MACHINESYSTEMRNGSeed для хранения засеянного значения.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Смотрите также

Рекомендации

  1. ^ random (4) - справочная страница Linux (die.net)
  2. ^ Робототехнические тенденции »Отсутствующая энтропия
  3. ^ База данных пакетов Fedora - audio-entropyd[постоянная мертвая ссылка ]
  4. ^ "haveged - простой демон энтропии". Получено 3 апреля 2011.
  5. ^ Энтропия и случайные устройства | LinuxLink от TimeSys - ваш встроенный ресурс Linux
  6. ^ / dev / {, u} случайный драйвер для GNU / Hurd (ibofobi.dk)
  7. ^ а б Solaris / dev / random через эмуляцию
  8. ^ "Solaris / dev / random". Архивировано из оригинал на 2008-05-11. Получено 2007-10-17.
  9. ^ Rexx Entropy Gathering Daemon для OS / 2
  10. ^ Альтернатива уничтожения командной строки GPL для Windows
  11. ^ Источник энтропии на платформах Windows с установленным CryptoAPI
  12. ^ Как Windows GnuPG генерирует случайные числа при генерации ключей?
  13. ^ http://www.cs.berkeley.edu/~daw/rnd/cryptoapi-rand http://archives.seul.org/or/cvs/Mar-2004/msg00078.html
  14. ^ [1]
  15. ^ https://docs.microsoft.com/en-us/windows-hardware/drivers/bringup/uefi-entropy-gathering-protocol
  16. ^ https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptgenrandom
  17. ^ Константин, Лучиан. «Миллионы встроенных устройств используют одни и те же жестко запрограммированные закрытые ключи SSH и TLS». Сетевой мир. Получено 2018-11-05.
  18. ^ «Решение масштабируемой случайности». iohk.io. 6 июня 2017 г.. Получено 14 сентября, 2020.
  19. ^ Безопасные программы HOWTO - Случайные числа
  20. ^ 'Re: проблема энтропии SSL / TLS', - MARC
  21. ^ Re: / dev / hw_random
  22. ^ Re: / dev / hw_random
  23. ^ http://www.std.com/~reinhold/truenoise.html http://random.com.hr/products/random/hg324.html В архиве 2008-05-13 на Wayback Machine
  24. ^ [2]
  25. ^ Re: [exim] нет ответа на STARTTLS
  26. ^ random (4) Справочная страница Linux, die.net
  27. ^ Проблема с энтропией SSL / TLS, также известная как таймауты всплывающих окон (было: проблема sasl ldap)
  28. ^ Йозефссон, Саймон; [TLS] Re: Короткие эфермальные ключи Диффи-Хеллмана (список рассылки ietf.org)
  29. ^ [gnutls-dev] gnutls_rsa_params_init зависает. Не слишком ли часто регенерировать rsa-params один раз в день?, lists.gnupg.org
  30. ^ Залевски, Михал; Источник энтропии Unix может использоваться для атак по нажатию клавиши, 2003
  31. ^ Re: истощение энтропии (было: пассивное сниффинг SSL / TLS) В архиве 2011-05-17 на Wayback Machine, 2005
  32. ^ Создайте свой собственный криптографически безопасный протокол сервер / клиент - 4.8.3. Сбор энтропии
  33. ^ http://www.entropykey.co.uk В архиве 22 июля 2010 г. Wayback Machine

внешняя ссылка