Классические каналы: время выполнения, зависящее от секретных битов (Kocher, 1996), зависящие от секрета обращения к памяти, которые наблюдают через общие кеши (Flush+Reload и подобные атаки), трассы энергопотребления и электромагнитного излучения смарт-карт и микроконтроллеров, а также внесение сбоев (скачки напряжения или тактовой частоты, лазер, Rowhammer), из-за которого устройство выдаёт ошибочную подпись, а по ней можно вычислить ключ. Удалённые атаки по времени тоже осуществимы на практике: Lucky Thirteen (2013) атаковала проверку дополнения CBC в TLS по сети.
Асимметричная криптография особенно уязвима, потому что умножение на скаляр и модульное возведение в степень проходят в цикле по битам ключа или nonce. Защита: код с постоянным временем выполнения (без ветвлений и индексов памяти, зависящих от секрета, и без инструкций с переменным временем выполнения), ослепление (blinding) скаляров и сообщений, полные формулы сложения в сочетании с однородными лестницами, а против сбоев — проверка подписи перед её выдачей и nonce с подмешанной случайностью (hedged).
Практическое правило для разработчиков: используйте поддерживаемые библиотеки, в которых давно и последовательно работают над постоянным временем выполнения (BoringSSL, OpenSSL, libsodium, пакеты crypto в Go, RustCrypto, библиотеки noble), и никогда не реализуйте арифметику заново. В языках с JIT-компиляцией или сборкой мусора постоянное время выполнения обеспечивается лишь по мере возможности, и это важно на общих хостах и в браузерах.