stringtranslate.com

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

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

Ядро Linux

Ядро 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

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]

ОС/2

Существует пакет программного обеспечения для 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]

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

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

  1. ^ случайный(4) - справочная страница Linux. Архивировано 11 октября 2007 г. на Wayback Machine (die.net).
  2. ^ «Тенденции робототехники »Недостающая энтропия». Архивировано из оригинала 6 декабря 2022 г. Проверено 23 мая 2023 г.
  3. ^ "Демон аудиоэнтропии" . 23 марта 2021 г. Архивировано из оригинала 23 марта 2021 г.
  4. ^ «База данных пакетов Fedora - аудиоэнтропид» .[ постоянная мертвая ссылка ]
  5. ^ "видео_энтропид". 23 марта 2021 г. Архивировано из оригинала 23 марта 2021 г.
  6. ^ "Энтропийный брокер". 29 мая 2020 г. Архивировано из оригинала 29 мая 2020 г.
  7. ^ «haveged - простой демон энтропии» . Архивировано из оригинала 27 октября 2012 года . Проверено 3 апреля 2011 г.
  8. ^ «Энтропия и случайные устройства | LinuxLink от TimeSys - ваш встроенный ресурс Linux» . Архивировано из оригинала 02 апреля 2016 г. Проверено 15 октября 2007 г.
  9. ^ /dev/{,u}случайный драйвер для GNU/Hurd. Архивировано 18 сентября 2007 г. на Wayback Machine (ibofobi.dk).
  10. ^ ab "Solaris /dev/random посредством эмуляции". Архивировано из оригинала 4 ноября 2007 г. Проверено 15 октября 2007 г.
  11. ^ "Солярис /dev/random". Архивировано из оригинала 11 мая 2008 г. Проверено 17 октября 2007 г.
  12. ^ «Демон сбора энтропии Rexx для OS / 2» . r6.ca. ​Архивировано из оригинала 31 октября 2007 г. Проверено 15 октября 2007 г.
  13. Малайтер, Райан (9 ноября 2001 г.). «Альтернатива уничтожения командной строки GPL для Windows». Архивировано из оригинала 27 октября 2021 года . Проверено 23 мая 2023 г.
  14. ^ «Источник энтропии на платформах Windows с установленным CryptoAPI» . www.mail-archive.com . Архивировано из оригинала 2 октября 2018 г. Проверено 23 мая 2023 г.
  15. Малайтер, Райан (15 февраля 2002 г.). «Как Windows GnuPG генерирует случайные числа в генераторе ключей?». Архивировано из оригинала 1 декабря 2021 года . Проверено 23 мая 2023 г.
  16. ^ «[или-cvs] Получите энтропию в Windows» . archives.seul.org . Архивировано из оригинала 7 мая 2013 г. Проверено 23 мая 2023 г.
  17. ^ «О приложениях CNG — Win32» . Архивировано из оригинала 17 мая 2018 г. Проверено 17 мая 2018 г.
  18. ^ «Протокол сбора энтропии UEFI — драйверы Windows» . Архивировано из оригинала 17 мая 2018 г. Проверено 17 мая 2018 г.
  19. ^ «Функция CryptGenRandom (Wincrypt.h) — приложения Win32» . Архивировано из оригинала 12 августа 2020 г. Проверено 31 августа 2020 г.
  20. ^ Константин, Лукиан. «Миллионы встроенных устройств используют одни и те же жестко запрограммированные закрытые ключи SSH и TLS». Сетевой мир . Архивировано из оригинала 05.11.2018 . Проверено 5 ноября 2018 г.
  21. ^ «Решение масштабируемой случайности» . iohk.io. ​6 июня 2017 года. Архивировано из оригинала 17 апреля 2021 года . Проверено 14 сентября 2020 г.
  22. ^ «Случайные числа». dwheeler.com . Архивировано из оригинала 30 декабря 2022 г. Проверено 23 мая 2023 г.
  23. ^ «'Re: Проблема энтропии SSL/TLS' - MARC» . marc.info . Архивировано из оригинала 15 ноября 2018 г. Проверено 23 мая 2023 г.
  24. ^ "Re: /dev/hw_random". Архивировано из оригинала 31 октября 2007 г. Проверено 15 октября 2007 г.
  25. ^ "Re: /dev/hw_random". Архивировано из оригинала 12 ноября 2007 г. Проверено 15 октября 2007 г.
  26. ^ «Источники случайного шума». Архивировано из оригинала 21 ноября 2007 г. Проверено 15 октября 2007 г.
  27. ^ http://random.com.hr/products/random/hg324.html. Архивировано 13 мая 2008 г. в Wayback Machine.
  28. ^ "rng-инструменты" . Архивировано из оригинала 21 октября 2007 г. Проверено 16 октября 2007 г.
  29. ^ «Поддержка Linux для генератора случайных чисел в наборах микросхем i8xx — Документация по ядру Linux» . www.kernel.org . 2000. Архивировано из оригинала 31 июля 2013 года.
  30. ^ «Re: [exim] нет ответа на STARTTLS». lists.exim.org . Архивировано из оригинала 22 июля 2012 г. Проверено 23 мая 2023 г.
  31. ^ Случайная (4) справочная страница Linux. Архивировано 11 октября 2007 г. на Wayback Machine , die.net.
  32. ^ «Проблема энтропии SSL/TLS, также известная как тайм-ауты всплывающих окон (было: проблема sasl ldap)» - MARC» . marc.info . Архивировано из оригинала 15 ноября 2018 г. Проверено 23 мая 2023 г.
  33. ^ Йозефссон, Саймон; [TLS] Re: Короткие эфермальные ключи Диффи-Хеллмана. Архивировано 11 ноября 2007 г. на Wayback Machine (список рассылки ietf.org).
  34. ^ "[gnutls-dev] gnutls_rsa_params_init зависает. Регенерация rsa-params один раз в день слишком частая?". lists.gnupg.org . 14 декабря 2004 г. Архивировано из оригинала 17 января 2007 г.
  35. ^ Залевский, Михал; Источник энтропии Unix можно использовать для атак по времени нажатия клавиш. Архивировано 19 июля 2011 г. на Wayback Machine , 2003 г.
  36. ^ Re: истощение энтропии (было: пассивное прослушивание SSL/TLS). Архивировано 17 мая 2011 г. на Wayback Machine , 2005 г.
  37. ^ «Создайте свой собственный криптографически безопасный протокол сервера/клиента - 4.8.3. Сбор энтропии» . Архивировано из оригинала 23 июля 2012 г. Проверено 8 января 2020 г.{{cite web}}: CS1 maint: bot: original URL status unknown (link)
  38. ^ «Ключ энтропии Simtec Electronics: USB-генератор истинных случайных чисел» . www.entropykey.co.uk . Архивировано из оригинала 22 июля 2010 года.
  39. ^ «Случайность 101: LavaRand в производстве» . Блог Cloudflare . 6 ноября 2017 г. Архивировано из оригинала 1 мая 2023 г. Проверено 23 мая 2023 г.

Внешние ссылки