Side-channel атаки
Тема дорожной карты · Embedded / Системный программист
Side-channel атаки (SCA) — это атаки, извлекающие секреты не через ошибки в криптоалгоритме, а через побочные физические каналы: время выполнения, энергопотребление, электромагнитное излучение, акустика, ошибки кэширования. Embedded-устройства особенно уязвимы — они физически доступны злоумышленнику, который может подключить осциллограф, лазер, термокамеру. Знаменитые случаи — извлечение AES-ключей из смарт-карт через DPA (Differential Power Analysis) за минуты.
Как это работает
Основные классы SCA: Timing attacks — измеряем время операции (например, memcmp для проверки PIN, который ранний-выход на первом несовпадении байта). Power analysis (SPA/DPA) — измеряем потребление тока во время crypto-операций, статистикой выводим биты ключа из тысяч измерений. EM analysis — то же, но через антенну рядом с чипом. Fault injection — лазер, glitch на VCC, clock skew переключают регистры в нужное состояние, обходя проверки. Cache attacks (Spectre, Meltdown на больших процессорах) — таймингом cache hits выводим что было в памяти соседнего процесса.
Когда применять
Защита от SCA обязательна для устройств с ценными секретами в недоверенной среде: смарт-карты, аппаратные кошельки (Ledger, Trezor), HSM, чипы для платежных систем (EMV), DRM-модули. Для типичного IoT-сенсора SCA-защита часто overkill — модель угроз другая. Атакующий должен быть рядом с устройством, оборудование требует тысяч долларов и навыков — учитывайте экономику атаки.
Типичные ошибки
Naive memcmp для сравнения секретов — заменяйте на constant_time_memcmp. Branching на битах ключа в crypto-операциях — компилятор сгенерирует branch предсказание, которое утечёт через timing. Доверие к compiler -O0 — оптимизатор может ввести branch, которого не было в исходниках, всегда тестируйте release-сборку. Отсутствие защиты против fault injection (проверка только в одном месте) — атакующий glitch-ает эту проверку.