Представлена техника атаки для определения ключей ECDSA и DSA
Как сообщает opennet.ru исследователи из компании NCC Group разработали новый метод атаки по сторонним каналам (CVE-2018-0495, PDF), позволяющий воссоздать применяемые для создания цифровых подписей закрытые ключи ECDSA и DSA, используя технику извлечения информации из процессорного кэша для оценки изменения задержки при выполнении вычислений.
Для атаки необходимо наличие непривилегированного доступа к хосту, на котором выполняется генерация цифровой подписи, или к соседней виртуальной машине. В ходе атаки в момент создания очередной цифровой подписи осуществляется определение значения базовых параметров, путем перебора нахождения вероятных значений в кэше и оценки времени выполнения математических вычислений. Проверяемые значения выбираются с учетом того, что в библиотеках используются математическая операция вычисления модуля, время выполнения которой меняется в зависимости от выбранных значений.
Для успешного воссоздания 256-разрядного закрытого ключа ECDSA достаточно наблюдения за созданием нескольких тысяч цифровых подписей (например, можно анализировать работу во время установки TLS или SSH соединений с использованием ECDSA). Рабочий прототип эксплота предоставлен для OpenSSL. Для защиты от атаки предлагается использовать в процессе математических вычислений дополнительное случайное число, на которое выполняется умножение секретного параметра, а затем инвертируется результат.
Наибольшую опасность уязвимость представляет для систем виртуализации, в которых атакующий потенциально может определить серверный SSH-ключ или закрытые ключи TLS, применяемые в другой виртуальной машине. Но в реальных условиях атака достаточно трудна в проведении и ее успешность зависит от множества сопуствующих факторов, таких как необходимость привязки виртуальной машины атакующего к тому же физическому CPU.
Проблеме подвержены библиотеки OpenSSL, LibreSSL, Libgcrypt (ECDSA), Mozilla NSS, Botan (ECDSA), WolfCrypt (ECDSA), LibTomCrypt (ECDSA), LibSunEC (ECDSA), MatrixSSL (ECDSA), BoringSSL (DSA) и CryptLib. Обновления с устранением уязвимости уже выпущены для LibreSSL 2.7.4/2.6.5, BoringSSL и Libgcrypt 1.8.3/1.7.10 (GnuPG). Уязвимость не затрагивает библиотеки Nettle (ECDSA), BearSSL и Libsecp256k1, так как математические вычисления в них всегда выполняются за постоянное время. Библиотека NaCl не подвержена проблемам, так как не поддерживает цифровые подписи ECDSA и DSA (в NaCl применяется только алгоритм Ed25519).