Открыть сервис

Уязвимость ROCA

Уязвимость ROCA (Return of Coppersmith’s Attack, «Возвращение атаки Копперсмита») — это криптографическая уязвимость в алгоритме генерации ключей RSA, реализованном в библиотеке RSALib, используемой в аппаратных токенах и смарт-картах Infineon Technologies. Уязвимость позволяет злоумышленнику вычислить закрытый ключ RSA по открытому ключу за практическое время (от нескольких часов до нескольких дней) для ключей длиной до 2048 бит. Впервые публично раскрыта в 2017 году исследователями из Центра кибербезопасности Чешского технического университета (CTU) и компании Masaryk University.

История

Уязвимость была обнаружена в 2017 году группой криптографов под руководством Марека Коваржика (Marek Kovář) и Михалом Шванда (Michal Švanda). Исследователи выявили, что в библиотеке RSALib, используемой в чипах Infineon, генерация простых чисел для RSA-ключей производится по нестандартному алгоритму, основанному на модифицированном решете Эратосфена и проверке простоты с помощью теста Миллера — Рабина. Этот алгоритм приводил к тому, что простые числа имели специфическую структуру, позволяющую применить атаку Копперсмита (Don Coppersmith, 1997) для факторизации модуля.

Уязвимость получила идентификатор CVE-2017-15361. Публичное раскрытие состоялось 16 октября 2017 года. Infineon выпустила обновление прошивки для своих продуктов, но проблема затронула миллионы устройств, включая смарт-карты, электронные паспорта, системы аутентификации (например, в Германии — eID-карты, в Эстонии — ID-карты, в России — некоторые модели токенов JaCarta и Rutoken).

Причина уязвимости

Алгоритм генерации ключей в RSALib

Библиотека RSALib генерирует простые числа p и q для RSA-ключа следующим образом:

  1. Выбирается случайное число k.
  2. Вычисляется p = k * M + (65537^a mod M), где M — произведение первых n простых чисел (например, для 2048-битных ключей n = 39, M — число длиной около 128 бит), a — случайный показатель.
  3. Число p проверяется на простоту тестом Миллера — Рабина с небольшим количеством раундов (обычно 5–10).

Из-за этой конструкции p и q имеют вид: p = 2 3 5 7 11 ... p_n * r + 1, где r — небольшое число (обычно < 2^32).

Атака Копперсмита

Криптограф Дон Копперсмит в 1997 году показал, что если известна часть битов простого множителя RSA-модуля, можно восстановить весь множитель за полиномиальное время. В случае ROCA, из-за структуры p и q, злоумышленник знает, что p ≡ 1 (mod M) для некоторого M. Это позволяет применить атаку с использованием решета числового поля (NFS) для факторизации модуля N.

На практике атака выполняется в два этапа:

  1. Поиск кандидатов для p — перебор возможных значений r (обычно до 2^32) и вычисление p = r * M + 1.
  2. Проверка — для каждого кандидата проверяется, делится ли N на p без остатка.

Для 2048-битных ключей перебор занимает около 5–10 дней на обычном ПК, для 1024-битных — несколько часов. Для 4096-битных ключей атака непрактична (требует миллионов лет).

Затронутые устройства и системы

Уязвимость ROCA затронула широкий спектр продуктов, использующих чипы Infineon с библиотекой RSALib:

  • Смарт-карты — банковские карты, карты доступа, SIM-карты (например, в Германии — карты медицинского страхования, в Эстонии — ID-карты).
  • Аппаратные токены — JaCarta (все модели, выпущенные до 2017 года), Rutoken (некоторые модели, например, Rutoken S), Aladdin eToken (частично).
  • Электронные паспорта — биометрические паспорта ряда стран (включая Россию, Германию, Эстонию, Словакию).
  • Системы электронной подписи — в госсекторе и корпоративном секторе.
  • Устройства IoT — некоторые модели роутеров, принтеров, IP-камер.

По оценкам, к моменту раскрытия уязвимости было выпущено около 100 миллионов затронутых устройств.

Последствия

Для пользователей

  • Компрометация ключей — злоумышленник, получив открытый ключ (например, из сертификата), может вычислить закрытый ключ и подписывать документы от имени владельца, расшифровывать переписку, выдавать себя за другое лицо.
  • Невозможность обновления — для многих устройств (например, смарт-карт) обновление прошивки невозможно, требуется замена устройства.
  • Юридические риски — в странах, где электронная подпись приравнивается к собственноручной (например, в России по закону «Об электронной подписи»), компрометация ключа может привести к оспариванию подписанных документов.

Для производителей

  • Финансовые потери — Infineon потратила миллионы евро на выпуск обновлений и замену устройств.
  • Репутационный ущерб — уязвимость подорвала доверие к продукции компании.
  • Судебные иски — в США и Европе были поданы коллективные иски от пользователей и организаций.

Для государств

  • Эстония — в 2017 году была вынуждена приостановить выпуск ID-карт и заменить около 800 000 карт (почти всё население страны). Процесс занял несколько месяцев.
  • Германия — потребовалась замена миллионов электронных паспортов и карт медицинского страхования.
  • Россия — уязвимость затронула токены JaCarta и Rutoken, используемые в госсекторе (например, для электронной подписи в ФНС, Росреестре). Были выпущены обновления прошивки, но для старых устройств требовалась замена.

Методы защиты

Для пользователей

  1. Проверка ключей — можно проверить, уязвимы ли RSA-ключи, с помощью онлайн-инструментов (например, на сайте roca.crocs.fi.muni.cz) или утилиты roca-detect (открытый исходный код).
  2. Обновление прошивки — для устройств, поддерживающих обновление (например, токены JaCarta), необходимо установить последнюю версию прошивки от производителя.
  3. Замена устройства — если обновление невозможно, устройство должно быть заменено на новое, не содержащее уязвимость.
  4. Генерация новых ключей — после обновления или замены необходимо сгенерировать новые RSA-ключи (желательно длиной 4096 бит или использовать алгоритмы на эллиптических кривых — ECDSA, Ed25519).

Для производителей

  • Использование стандартных библиотек — например, OpenSSL, Bouncy Castle, которые не содержат уязвимости ROCA.
  • Увеличение энтропии — генерация простых чисел с использованием аппаратных генераторов случайных чисел (TRNG).
  • Тестирование — обязательное тестирование сгенерированных ключей на наличие уязвимостей (например, с помощью теста ROCA).

Критика и ограничения

  • Не все ключи уязвимы — атака работает только для ключей, сгенерированных библиотекой RSALib. Ключи, сгенерированные другими библиотеками (OpenSSL, GnuTLS), не затронуты.
  • Время атаки — для 4096-битных ключей атака непрактична, но для 2048-битных — вполне реализуема.
  • Необходимость открытого ключа — злоумышленник должен иметь доступ к открытому ключу (например, из сертификата X.509). Если ключ хранится только на устройстве, атака невозможна.
  • Обновление прошивки не всегда возможно — для многих устройств (например, смарт-карт) обновление невозможно физически, требуется замена.

Интересные факты

  • Название «ROCA» — это аббревиатура от «Return of Coppersmith’s Attack», но также является отсылкой к слову «rock» (скала) — намёк на «твёрдость» уязвимости.
  • Исследователи из CTU опубликовали онлайн-сервис для проверки ключей, который за первые дни после раскрытия обработал более 1 миллиона запросов.
  • В 2018 году за обнаружение уязвимости группа исследователей получила премию Internet Security Award от Европейского агентства по кибербезопасности (ENISA).
  • Уязвимость ROCA стала одной из причин, по которой многие страны начали переходить на алгоритмы на эллиптических кривых (ECC) вместо RSA.

Источники

  • M. Kovář, M. Švanda, et al. «The Return of Coppersmith’s Attack: Practical Factorization of Widely Used RSA Moduli» (2017).
  • CVE-2017-15361 — запись в базе уязвимостей.
  • Infineon Technologies — официальное уведомление о безопасности (2017).
  • ENISA — «Internet Security Award 2018».
  • Отчёты правительств Эстонии, Германии, России о замене уязвимых устройств.

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →