0Pricing
Cryptology Academy · Урок

Атаки повторной передачи и уязвимости повторного использования nonce

Узнайте, как повторное использование nonce в GCM и других режимах может полностью нарушить конфиденциальность шифротекста.

«Атаки повторной передачи и уязвимости повторного использования nonce» — бесплатный урок Cryptology Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cryptology Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cryptology Academy содержит 4 уроков всего.

Назначение одноразового значения в криптографии

Одноразовое значение (число, используемое один раз) гарантирует, что одно и то же сообщение с открытым текстом при двукратном шифровании даст разные шифротексты. Это необходимо для семантической безопасности: злоумышленник, наблюдающий несколько шифротекстов, не получает сведений о том, шифруют ли они одинаковые или разные открытые тексты. В потоковых шифрах и блочных шифрах в режиме CTR одноразовое значение инициализирует генерацию гаммы, поэтому оно критически важно для безопасности.

Одноразовое значение GCM как инициализация счётчика

В AES-GCM 96-битное одноразовое значение используется для инициализации счётчика шифрования в режиме CTR, а также участвует в вычислении аутентификации GHASH. Значение счётчика для каждого блока AES получают увеличением значения, производного от одноразового значения. Если для двух шифрований использовать одно и то же одноразовое значение и ключ, будет сгенерирована одна и та же гамма, поэтому XOR их шифротекстов окажется равен XOR их открытых текстов.

Катастрофические последствия повторного использования одноразового значения в GCM

Для двух шифротекстов GCM, зашифрованных с использованием одной и той же пары (ключ, одноразовое значение), XOR равен XOR их открытых текстов. Если злоумышленнику известен один открытый текст (что часто бывает при атаках с выбранным открытым текстом), он немедленно восстанавливает другой. Даже без известного открытого текста XOR шифротекстов раскрывает языковые закономерности и может быть атакован с помощью методов подбора фрагментов. Это один из самых катастрофических способов неправильного использования криптографии.

Восстановление ключа аутентификации при повторном использовании одноразового значения

Повторное использование одноразового значения в GCM имеет ещё одно катастрофическое последствие, помимо восстановления открытого текста. Ключ аутентификации GHASH H выводится исключительно из ключа шифрования. Если два сообщения используют одну и ту же пару (ключ, одноразовое значение), злоумышленник может решить полиномиальные уравнения и восстановить H. Зная H, злоумышленник может подделывать корректные теги аутентификации GCM для произвольных шифротекстов, полностью нарушая целостность сообщений.

Формирование одноразового значения в TLS 1.3

TLS 1.3 учитывает риски повторного использования одноразовых значений в реализациях TLS 1.2. TLS 1.3 формирует одноразовые значения GCM, выполняя XOR 12-байтового IV записи (полученного из рукопожатия) с 8-байтовым порядковым номером (дополненным нулями до 12 байт). Поскольку порядковые номера увеличиваются для каждой записи, каждая запись использует уникальное одноразовое значение. Это устраняет риск генерации случайных одноразовых значений и одновременно обеспечивает их уникальность с помощью механизма порядковых номеров.

Обзор атак повторной передачи

Атака повторной передачи перехватывает корректное сообщение или токен аутентификации и позднее передаёт его снова, чтобы добиться мошеннического результата. Примеры: повторная передача банковской операции для двойного списания средств, повторная передача корректного ответа аутентификации для выдачи себя за пользователя или повторная передача подписанной команды устройству. Злоумышленнику не нужно понимать или изменять сообщение: для проведения атаки достаточно повторно передать перехваченные данные.

Метки времени для предотвращения повторных передач

Включение метки времени в аутентифицированные сообщения обеспечивает защиту от повторной передачи. Получатель принимает сообщения только в течение короткого временного интервала (например, в течение 5 минут от указанной метки времени). Сообщение, повторно переданное через несколько часов, выходит за пределы этого интервала и отклоняется. Метка времени должна быть аутентифицирована (находиться внутри HMAC или дополнительных данных AEAD), чтобы злоумышленник не мог изменить её и создать видимость актуальности.

Порядковые номера для предотвращения повторных передач

Порядковые номера обеспечивают более надёжную защиту от повторных передач, чем метки времени, поскольку обнаруживают не только старые повторные передачи, но и дубликаты и доставки не по порядку. Получатель хранит ожидаемый следующий порядковый номер и скользящее окно недавно просмотренных номеров. Каждое сообщение должно иметь порядковый номер в пределах допустимого окна, который ещё не встречался ранее. TLS использует порядковые номера для предотвращения повторной передачи записей внутри сеанса.

Генерация безопасных одноразовых значений

Для AES-GCM рекомендуемая стратегия генерации случайных одноразовых значений — получать 96 бит из криптографически стойкого генератора псевдослучайных чисел (CSPRNG). Для случайных одноразовых значений длиной 96 бит вероятность коллизии, обусловленная парадоксом дней рождения, достигает 2^-32 после 2^32 шифрований (около 4 миллиардов). Для приложений с большим объёмом операций перейдите на одноразовое значение на основе счётчика или используйте другой AEAD (например, XChaCha20-Poly1305 с 192-битным одноразовым значением), чтобы увеличить безопасный предел.

Детерминированные одноразовые значения: управление счётчиком

Детерминированные одноразовые значения на основе счётчика позволяют избежать проблем, связанных с парадоксом дней рождения, но требуют тщательного управления состоянием. Счётчик необходимо сохранять между перезапусками приложения; счётчик, сбрасываемый в ноль при перезапуске, немедленно приводит к повторному использованию одноразового значения с тем же ключом. Счётчик необходимо атомарно обновить до использования одноразового значения, а не после. В распределённых системах одноразовые значения на основе счётчика требуют координации, чтобы два узла не использовали одно и то же значение счётчика.

XChaCha20-Poly1305 для более длинных одноразовых значений

XChaCha20-Poly1305 увеличивает длину одноразового значения ChaCha20-Poly1305 с 96 до 192 бит. Для случайных одноразовых значений длиной 192 бита вероятность коллизии из-за парадокса дней рождения ничтожно мала даже после 2^96 шифрований (астрономически большого числа сообщений). Благодаря этому генерация случайных одноразовых значений безопасна без практических опасений, связанных с парадоксом дней рождения. Функция crypto_secretbox библиотеки libsodium (XSalsa20-Poly1305) использует 192-битные одноразовые значения по той же причине.

Последствия повторного использования одноразового значения GCM

Что может восстановить злоумышленник, если два шифротекста GCM созданы с использованием одного и того же ключа и одноразового значения?

Краткое повторение темы одноразовых значений и атак повторной передачи

Кратко о повторном использовании одноразовых значений: одноразовые значения обеспечивают уникальность шифротекстов; повторное использование одноразового значения GCM раскрывает XOR открытых текстов и нарушает аутентификацию, позволяя восстановить H; TLS 1.3 использует XOR порядкового номера и IV, чтобы гарантировать уникальность одноразовых значений; при атаках повторной передачи корректные сообщения передаются снова без изменений; метки времени и порядковые номера в аутентифицированных сообщениях предотвращают повторные передачи; для GCM используйте случайные одноразовые значения длиной 96 бит, учитывая порог по парадоксу дней рождения, или XChaCha20 для большего пространства случайных одноразовых значений.

Часто задаваемые вопросы

Урок «Атаки повторной передачи и уязвимости повторного использования nonce» бесплатный?

Да — полный текст урока «Атаки повторной передачи и уязвимости повторного использования nonce» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cryptology Academy, подпишись на CoddyKit PRO. Курс Cryptology Academy содержит 4 уроков всего.

Чему я научусь в уроке «Атаки повторной передачи и уязвимости повторного использования nonce»?

Узнайте, как повторное использование nonce в GCM и других режимах может полностью нарушить конфиденциальность шифротекста. Ты практикуешь Cryptology Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cryptology Academy?

Предыдущий опыт не требуется. Cryptology Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Атаки повторной передачи и уязвимости повторного использования nonce»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cryptology Academy?

Да. Каждый урок Cryptology Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Атаки Padding Oracle подробно
  2. Атаки повторной передачи и уязвимости повторного использования nonce
  3. Атаки по времени в коде на уровне приложения
  4. Основные схемы неправильного использования криптографии
← Назад к Cryptology Academy