Меры защиты: маскирование, ослепление и код с постоянным временем выполнения
Реализуйте маскирование, ослепление точек и сравнения с постоянным временем выполнения
«Меры защиты: маскирование, ослепление и код с постоянным временем выполнения» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.
Три семейства мер защиты
Меры защиты от атак по побочным каналам делятся на три семейства: маскирование (рандомизация промежуточных значений), ослепление (рандомизация входных и выходных данных) и код с постоянным временем выполнения (устранение зависимости времени выполнения от данных).
Булево маскирование
Выполните XOR каждого промежуточного значения со свежей случайной маской r. Обрабатывайте замаскированное значение x⊕r, а в конце снимите маску. Теперь трасса энергопотребления зависит от x⊕r, а не от x.
Арифметическое маскирование умножений
Для операций умножения используйте мультипликативные маски: заменяйте x на x·r mod p. Схема маскирования должна быть совместима с каждой алгебраической операцией шифра.
Ослепление RSA
Перед расшифрованием шифротекста c выберите случайное r и вычислите c' = c·r^e mod n. Расшифруйте c', чтобы получить m·r mod n, а затем разделите результат на r. Фактическое возведение в степень никогда не работает с исходным c.
Ослепление точек ECC
Рандомизируйте проективные координаты: вместо аффинной точки (x,y) используйте (λx : λy : λ) со случайным λ. Скалярное умножение выполняется над рандомизированными координатами, поэтому трасса энергопотребления каждый раз изменяется.
Правила программирования с постоянным временем выполнения
1. Никаких ветвлений, зависящих от секрета. 2. Никаких индексов памяти, зависящих от секрета. 3. Никаких досрочных выходов. 4. Используйте доступные платформенные операции с постоянным временем выполнения (например, crypto_verify_32).
Сравнение с постоянным временем выполнения в Python
Никогда не используйте == или hmac.compare_digest для необработанных байтов на участках кода, чувствительных к времени выполнения. Используйте:
import hmac
def constant_time_compare(a: bytes, b: bytes) -> bool:
"""Uses HMAC double-HMAC trick for constant-time equality."""
# hmac.compare_digest is constant-time in CPython
return hmac.compare_digest(a, b)
# Example
secret = b"expected_mac_value"
received = b"attacker_provided__"
print(constant_time_compare(secret, received)) # False, but no timing leakПроблемы компилятора и архитектуры
Компиляторы могут удалить код с постоянным временем выполнения во время оптимизации. Используйте изменяемые через внешние средства записи, барьеры памяти или встроенные ассемблерные операции. В компиляторах C есть -fno-delete-null-pointer-checks, но универсальной гарантии постоянного времени выполнения нет.
Перемешивание и фиктивные операции
Случайным образом меняйте порядок обращений к таблицам замен или вставляйте фиктивные операции, которые потребляют энергию, не влияя на результат. Это повышает сложность DPA, но не устраняет утечку полностью.
Аппаратные меры защиты
Специализированные криптографические ускорители (ARM TrustZone, аппаратный AES в STM32) применяют маскирование на уровне микросхемы. Реализации на ASIC используют металлическое экранирование и активную сетку для обнаружения физического зондирования.
Проверка знаний
Какая мера защиты предотвращает временные атаки на RSA, рандомизируя шифротекст перед возведением в степень?
Итоги урока
Маскирование рандомизирует промежуточные значения, ослепление — входные данные RSA/ECC, а код с постоянным временем выполнения устраняет ветвления, зависящие от времени. Многоуровневая защита объединяет все три подхода. Аппаратные ускорители применяют их на уровне микросхемы, обеспечивая наиболее сильные гарантии.
Часто задаваемые вопросы
Урок «Меры защиты: маскирование, ослепление и код с постоянным временем выполнения» бесплатный?
Да — полный текст урока «Меры защиты: маскирование, ослепление и код с постоянным временем выполнения» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.
Чему я научусь в уроке «Меры защиты: маскирование, ослепление и код с постоянным временем выполнения»?
Реализуйте маскирование, ослепление точек и сравнения с постоянным временем выполнения Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Cryptology Academy?
Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Меры защиты: маскирование, ослепление и код с постоянным временем выполнения»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Cryptology Academy?
Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Атаки по времени: извлечение ключей по времени выполнения
- Анализ энергопотребления: SPA и DPA
- Электромагнитные и акустические побочные каналы
- Меры защиты: маскирование, ослепление и код с постоянным временем выполнения