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