Криптография

Атаки по побочным каналам

В 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? Этот вопрос актуален для процессоров в критической инфраструктуре.

Связанные уроки

  • alg-35-bit-manipulation
Атаки по побочным каналам

0

1

Войти