Криптография
Атаки по побочным каналам
В 1996 году Пол Кочер взломал RSA, просто измеряя время работы сервера по сети - без единого математического вычисления.
- Kochcr 1996: RSA взломан по timing без единой математической атаки - просто измерением времени работы сервера
- Lucky Thirteen 2013: TLS уязвим к атаке через разницу в 1 миллисекунду обработки разных padding-паттернов
- Spectre/Meltdown 2018: спекулятивное выполнение CPU позволяет читать память ОС - Amazon/Google/Microsoft экстренно патчили облака
- GnuPG 2003: Брайан Сонг восстановил 512-битный RSA ключ измеряя время дешифровки по сети
Timing-атаки
Пол Кочер в 1996 году показал: время выполнения RSA-операций зависит от битов приватного ключа. Алгоритм square-and-multiply делает умножение только для единичных битов ключа. Измеряя время 1000+ операций, статистически восстанавливается весь ключ. Атака работала против ранних реализаций OpenSSL и Netscape SSL.
Lucky Thirteen 2013: атака на TLS MAC-then-encrypt (CBC). Разные паттерны padding давали разное время обработки - доли микросекунды. Через 2^23 запросов восстанавливался plaintext. Уязвимы были OpenSSL, GnuTLS, NSS. Исправление: AEAD вместо MAC-then-encrypt (TLS 1.3 убрал CBC полностью). Bleichenbacher timing: разница 1мс между 'неправильный padding' и 'неправильный MAC' достаточна для атаки.
Как Montgomery ladder защищает от timing-атак на RSA?
Анализ потребления мощности
SPA (Simple Power Analysis) и DPA (Differential Power Analysis) - атаки Кочера 1999 года на смарт-карты. SPA: один замер тока показывает паттерн вычислений - квадрат vs умножение RSA визуально различимы на осциллографе. DPA: статистический анализ тысяч замеров выявляет корреляцию между предположением о ключе и реальным потреблением. Взлом DES на смарт-карте за секунды.
EM Analysis работает без физического контакта: антенна вблизи смарт-карты улавливает электромагнитное излучение, коррелирующее с вычислениями. Атаки продемонстрированы на расстоянии 15 см. Fault injection: искусственное возмущение питания или лазерный импульс вызывают вычислительные ошибки. Дифференциальный анализ ошибок (DFA) восстанавливает AES-ключ из ~50 правильных + 1 ошибочного шифрования.
В чём принципиальная разница между SPA и DPA?
Кэш-атаки и Spectre
FLUSH+RELOAD 2014: два процесса делят физическую память (shared libraries). Атакующий сбрасывает кэш строки flush(), жертва выполняет AES, атакующий измеряет время доступа к той же памяти. Cache hit (быстро) означает жертва обратилась к этой строке - раскрывает биты ключа. AES T-table реализация взломана за миллисекунды на co-located виртуальных машинах.
Spectre и Meltdown 2018: спекулятивное выполнение процессора оставляет следы в кэше. Spectre позволяет читать память любого процесса в той же системе. Meltdown - memory kernel любого процесса. Патч KPTI замедлил Linux серверы на 5-30% на x86. Cloud providers экстренно применили патчи в январе 2018 (Amazon AWS, Google Cloud, Microsoft Azure). AES-NI инструкции (аппаратный AES) защищены от кэш-атак - именно поэтому они рекомендуются.
Почему AES T-table реализация уязвима к кэш-атакам?
Constant-time программирование
Constant-time код - код, время выполнения которого не зависит от секретных данных. Три правила: 1) нет ветвлений по секретным битам (if/switch), 2) нет обращений к памяти по секретным адресам (table lookups), 3) нет операций с переменным временем (div на некоторых CPU). Выполнение этих правил вручную крайне сложно - компиляторы могут оптимизировать 'правильный' код обратно в уязвимый.
Инструменты верификации: CTGRIND, dudect, DATA (Differential Address Trace Analysis). Языки Rust и Go предоставляют некоторые CT примитивы, но компилятор всё равно может нарушить CT через оптимизации. Библиотека libsodium имеет репутацию constant-time реализации всех примитивов. BoringSSL (Google) и LibreSSL тоже строго соблюдают CT. Стандарт FIPS 140-3 требует защиты от timing-атак для сертифицированных модулей.
Почему компилятор может нарушить constant-time свойства кода?
Побочные каналы обходят математику
- Timing-атаки: square-and-multiply раскрывает биты ключа через время - защита: Montgomery ladder, constant-time
- DPA/SPA: статистический анализ потребления тока смарт-карты восстанавливает ключ за секунды
- FLUSH+RELOAD и Spectre: кэш CPU как побочный канал - AES T-tables уязвимы, AES-NI защищён
- Constant-time код: никаких ветвлений и table lookups по секретным данным - libsodium как эталон
Связанные темы
Побочные каналы обходят математическую стойкость криптоалгоритмов через физические характеристики реализации
- RSA на практике — Timing-атаки Кочера направлены непосредственно на RSA square-and-multiply
- Криптографическая практика — libsodium и BoringSSL реализуют constant-time примитивы
- Атаки на асимметричные системы — Физические атаки дополняют математический криптоанализ RSA/ECC
Вопросы для размышления
- Если hardware AES-NI защищён от кэш-атак, но реализован производителем чипа закрытым образом - как убедиться что в нём нет backdoor? Этот вопрос актуален для процессоров в критической инфраструктуре.