20.04.2021

Выявлен метод клонирования ключей из криптографических токенов на базе чипов NXP

Исследователи безопасности из компании NinjaLab разработали новый вид атаки по сторонним каналам (CVE-2021-3011), позволяющей клонировать ECDSA-ключи, хранимые в USB-токенах на базе чипов NXP. Атака продемонстрирована для токенов двухфакторной аутентификции Google Titan на базе чипа NXP A700X, но теоретически применима и для криптографических токенов Yubico и Feitian, использующих тот же чип.

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

В частности, характер изменения сигнала позволяет выделить информацию об отдельных битах во время выполнения умножения на скаляр при операциях с эллиптической кривой. Для ECDSA определения даже нескольких битов с информацией о векторе инициализации (nonce) достаточно для совершения атаки по последовательному восстановлению всего закрытого ключа. Для восстановления секретного ключа в токене Google Titan достаточно анализа около 6000 операций с цифровыми подписями на основе ключа ECDSA, используемых для двухфакторной аутентификации FIDO U2F при подключении к учётной записи Google.

Для поиска слабых мест в реализации алгоритма ECDSA в чипах NXP ECDSA использовалась открытая платформа для создания смарткарт NXP J3D081 (JavaCard), которая очень похожа на чипы NXP A700X и использует идентичную криптографическую библиотеку, но при этом предоставляет больше возможностей для изучения работы движка ECDSA. Для восстановления ключа из JavaCard оказалось достаточно анализа около 4000 операций.

Для проведения атаки необходимо наличие физического доступа к токену, т.е. токен на длительное время должен оказаться доступен для исследования атакующим. Более того, чип экранирован алюминиевым экраном, поэтому требуется разбор корпуса, что затрудняет скрытие следов атаки, например, токены Google Titan запаяны в пластик и без видимых следов разобрать их не получится (как вариант предлагается печать на 3D-принтере нового корпуса). На восстановления ключа для одной учётной записи FIDO U2F необходимо около 6 часов плюс ещё около 4 часов требуется для разборки и сборки токена.

Для атаки также требуется достаточно дорогое оборудование, стоимостью приблизительно 10 тысяч евро, навыки по реверс инжинирингу микросхем и специальное программное обеспечение, которое публично не распространяется (возможность атаки подтверждена Google и NXP). В процессе атаки использовался измерительный комплекс Langer ICR HH 500-6, применяемый для испытаний микросхем на электромагнитную совместимость, усилитель Langer BT 706, микроманипулятор Thorlabs PT3/M с разрешением 10 мкм и четырёхканальный осциллограф PicoScope 6404D.

В качестве реализуемого на стороне сервера метода для частичной защиты от применения клонированных токенов при двухфакторной аутентификции предлагается использовать механизм счётчиков, описанный в спецификации FIDO U2F. Стандарт FIDO U2F изначально подразумевает наличие только одного набора ключей, что обусловлено тем, что протокол поддерживает только две базовые операции — регистрация и аутентификация.

На стадии регистрации генерируется новая пара ключей, закрытый ключ сохраняется в токене, а открытый передаётся на сервер. Операция аутентификации на стороне токена создаёт цифровую подпись ECDSA для переданных сервером данных, которая затем может быть проверена на сервере при помощи открытого ключа. Закрытый ключ всегда остаётся в токене и не может быть скопирован, поэтому при необходимости привязки нового токена создаётся новая пара ключей, а старый ключ помещается в список отозванных ключей.

Суть предлагаемого в FIDO U2F механизма защиты от клонирования ключей в том, что токен ведёт счётчик выполненных операций и передаёт его на сервер, который сравнивает переданное значение и значение, сохранённое при выполнении прошлой операции с тем же токеном. Если переданное значение оказалось меньше сохранённого, то делается вывод о наличии нескольких устройств с идентичной парой ключей. Данный механизм уже используется при аутентификации в сервисах Google и позволяет блокировать учётные записи при выявлении активности с клонированных токенов.

Среди подверженных атаке продуктов отмечены:

  • Google Titan Security Key
  • Yubico Yubikey Neo
  • Feitian FIDO NFC USB-A / K9
  • Feitian MultiPass FIDO / K13
  • Feitian ePass FIDO USB-C / K21
  • Feitian FIDO NFC USB-C / K40
  • NXP J3D081_M59_DF
  • NXP J3A081
  • NXP J2E081_M64
  • NXP J3D145_M59
  • NXP J3D081_M59
  • NXP J3E145_M64
  • NXP J3E081_M64_DF