0Pricing
Cryptology Academy · Урок

Истощение энтропии и ошибки из-за слабых ключей

Изучите ошибку RNG в Debian OpenSSL и другие реальные сбои генерации случайных данных

«Истощение энтропии и ошибки из-за слабых ключей» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.

Что такое истощение энтропии

Истощение энтропии происходит, когда системе не хватает непредсказуемых входных данных для инициализации CSPRNG. Это случается на недавно запущенных встраиваемых устройствах, виртуализированных серверах или системах без пользовательского ввода. Вывод RNG становится предсказуемым.

Сбой OpenSSL в Debian (CVE-2008-0166)

В 2006 году разработчик Debian удалил строку, отмеченную Valgrind: MD_Update(&m, buf, j). Эта строка была источником энтропии. В результате OpenSSL в Debian инициализировался только с использованием PID (максимум 32 768 значений). Все ключи, созданные в 2006–2008 годах, принадлежат множеству из 32 768 возможных вариантов.

Последствия сбоя в Debian

Ключи RSA, DSA и ECDSA, ключи узлов SSH, сертификаты TLS и ключи SSL VPN, созданные в системах Debian/Ubuntu в 2006–2008 годах, были скомпрометированы. Затронутые системы: Debian Etch, Debian Lenny, Ubuntu 7.04–8.04. Были опубликованы чёрные списки, а сертификаты отозваны.

Проблема генератора случайных чисел в виртуальных машинах

Виртуальные машины можно клонировать с одинаковым состоянием диска. Если обе виртуальные машины генерируют ключи из одного и того же состояния CSPRNG, они создают одинаковые ключи. Теперь гипервизоры добавляют энтропию через VirtIO RNG или таблицы ACPI, однако неправильно настроенные виртуальные машины всё ещё сталкиваются с этим риском при запуске.

Встраиваемые системы и IoT

Устройства IoT (маршрутизаторы, камеры) часто создают ключи SSH/TLS при первом запуске, ещё до накопления энтропии. Исследования выявили миллионы устройств, использующих несколько тысяч одинаковых пар ключей RSA, поскольку все они инициализировались из одного и того же начального состояния с низкой энтропией.

Атака с использованием GCD на ключи RSA

Ленстра и соавторы (2012) собрали 11,7 миллиона сертификатов TLS и вычислили попарные GCD. Были обнаружены 12 720 ключей RSA с общим простым множителем — это означает, что оба ключа можно было полностью разложить на множители. Были взломаны 0,2 % всех открытых ключей. Причина: недостаточная энтропия при запуске.

Повторное использование одноразового числа в ECDSA

ECDSA требует уникального случайного одноразового числа k для каждой подписи. Если k используется повторно (или является слабым), закрытый ключ можно немедленно восстановить: d = (s1-s2)^{-1} * (z1-z2) * k / (r1-r2) mod n. В PS3 от Sony использовалось постоянное значение k — все игры можно было подписывать с помощью восстановленного ключа.

Ошибка кошельков Bitcoin на Android (2013)

Java SecureRandom на Android 4.x в определённых условиях инициализировался системным временем. Несколько приложений для кошельков Bitcoin создавали подписи с одним и тем же одноразовым числом k, раскрывая закрытые ключи. Были украдены миллионы долларов. Google исправила реализацию SecureRandom.

Обнаружение слабых ключей

Инструменты: ssh-vulnkey (проверяет ключи по чёрному списку слабых ключей Debian), badkeys (проверяет сертификаты TLS на наличие известных слабых простых множителей), алгоритм GCD-batch для массовой проверки ключей RSA. Журналы Certificate Transparency позволяют проводить анализ в масштабе всей совокупности сертификатов.

Меры защиты

Используйте getrandom(GRND_RANDOM) при первой генерации ключа. После ожидания первоначальной инициализации читайте данные из /dev/urandom (проверьте, что /proc/sys/kernel/random/entropy_avail > 128). Используйте аппаратный RNG (RDRAND) как дополнительный источник энтропии. Никогда не создавайте ключи сразу после первого запуска без задержки.

Сохранение файла с начальным значением

Сохраняйте состояние CSPRNG между перезапусками: при завершении работы сохраните 32 байта из /dev/urandom в файл с начальным значением; при запуске прочитайте их и передайте обратно генератору. Это обеспечивает непрерывность энтропии между холодными запусками. Linux делает это автоматически, а встраиваемые системы часто не делают.

Быстрая проверка

Какова была первопричина сбоя энтропии OpenSSL в Debian?

Повторение

Истощение энтропии приводит к созданию предсказуемых ключей. Реальные взломы: OpenSSL в Debian (начальное значение только из PID), атаки GCD на устройства IoT, повторное использование одноразового числа ECDSA в PS3, кошельки Bitcoin на Android. Всегда инициализируйте генератор из энтропии OS и тщательно проверяйте создание ключей во встраиваемых системах. Далее: безопасное создание ключей, одноразовых чисел и IV.

Часто задаваемые вопросы

Урок «Истощение энтропии и ошибки из-за слабых ключей» бесплатный?

Да — полный текст урока «Истощение энтропии и ошибки из-за слабых ключей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.

Чему я научусь в уроке «Истощение энтропии и ошибки из-за слабых ключей»?

Изучите ошибку RNG в Debian OpenSSL и другие реальные сбои генерации случайных данных Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cryptology Academy?

Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Истощение энтропии и ошибки из-за слабых ключей»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cryptology Academy?

Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Истинная случайность и псевдослучайность
  2. Криптографически стойкие PRNG
  3. Истощение энтропии и ошибки из-за слабых ключей
  4. Безопасная генерация ключей, одноразовых чисел и векторов инициализации
← Назад к Cryptology Academy