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

Обе гарантии касаются защищённого пакета и ничего за его пределами.

Две гарантии в одной конструкции

Шифрование отвечает, может ли наблюдатель это прочитать; целостность отвечает, было ли это изменено. Туннелю нужно и то и другое, потому что изменённое содержимое хуже нечитаемого. AEAD определяет, как объединить их под одним ключом, вместе со связанными данными, которые аутентифицируются, но не шифруются. Получатель отклоняет ввод, не прошедший проверку.

Связанные данные привязывают видимые поля к проверке. Какие именно поля, зависит от протокола, и это не обещание, что каждый внешний адрес стал секретным: поле может быть покрыто тегом и всё же читаться в сети.

Nonce — не деталь

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

Это условие гарантии, а не совет по реализации. Небрежные nonce не дают заявленного свойства.

Защита от повтора — отдельное состояние

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

Два механизма сотрудничают, не будучи одним, и один может быть правильным, пока другого нет.

Чего тег вам не говорит

Идентичность партнёра устанавливается сертификатами или заранее общими ключами, а не тем, что шифр аутентифицирован. Маршрутизация, разрешение имён и политика журналов оператора находятся за криптографической границей. Успешное согласование алгоритма говорит лишь, что обе стороны договорились о наборе, это о совместимости, а не о качестве реализации с любой стороны.

Пользователям: выбирайте поддерживаемую и обслуживаемую конфигурацию протокола. AEAD — свойство этой конфигурации, а не приглашение строить шифрование вручную вокруг туннеля.

Запишите, какой набор согласован, активна ли защита от повтора и как определяются стороны. Три факта, три разные гарантии.

Похожие статьи