Народный

Безопасность

AEAD — Authenticated Encryption with Associated Data

Класс симметричных шифров, дающих одновременно конфиденциальность, целостность и аутентификацию. Основа всех современных VPN и TLS 1.3: AES-GCM, ChaCha20-Poly1305.

Определение

AEAD (Authenticated Encryption with Associated Data) — это класс симметричных шифров, обеспечивающих одновременно три свойства: конфиденциальность (encryption), целостность (authentication) и привязку к дополнительным данным (associated data). Стандартизирован в RFC 5116 (2008).

В отличие от классических schemes «encrypt-then-MAC» или «encrypt-and-MAC», AEAD — это атомарная операция, в которой шифрование и MAC вычисляются параллельно в одном проходе. Это и безопаснее (меньше шансов на padding oracle / Vaudenay-attack), и быстрее (один проход по данным).

Как работает

Интерфейс AEAD-шифра:

encrypt(key, nonce, plaintext, associated_data) → ciphertext || tag
decrypt(key, nonce, ciphertext || tag, associated_data) → plaintext | ERROR

Четыре входа:

  • key — симметричный ключ (обычно 256 бит).
  • nonce — счётчик или случайное значение, никогда не повторяется для одного ключа. Обычно 96 бит.
  • plaintext — данные, которые шифруются и аутентифицируются.
  • associated_data (AD) — данные, которые не шифруются, но аутентифицируются (например, заголовки IP-пакета — нужно проверить, что их никто не подменил, но скрывать смысла нет).

На выходе — ciphertext той же длины, что plaintext, плюс authentication tag (обычно 16 байт), который привязан и к ciphertext, и к associated_data.

При расшифровке tag проверяется до того, как plaintext возвращается. Если tag не сходится — никаких частичных данных, никакого padding oracle, только ERROR. Это и есть «authenticated» в названии.

Распространённые AEAD-конструкции:

  • AES-256-GCM — AES в режиме Galois/Counter Mode. Стандарт TLS 1.3, IPsec ESP, IEEE 802.11 (Wi-Fi WPA3). Аппаратное ускорение через AES-NI (x86) и Crypto Extensions (ARM).
  • ChaCha20-Poly1305 — поток ChaCha20 + MAC Poly1305. Используется WireGuard, TLS 1.3 (fallback для систем без AES-NI), QUIC. Быстрее AES без аппаратного ускорения (мобильные ARM до 2017).
  • AES-GCM-SIV — nonce-misuse-resistant вариант. Если nonce случайно повторится, не катастрофа.
  • AEGIS-256 — новый, быстрее GCM на современных CPU. Добавлен в TLS 1.3 cipher suites в 2024.

Почему это важно для пользователя VPN

Все современные VPN-протоколы построены на AEAD. Историческая перспектива:

  • OpenVPN до 2.4 (~2017): использовал «encrypt-then-MAC» с AES-256-CBC + HMAC-SHA1. Уязвим к padding oracle (Vaudenay 2002), теоретически — к timing-атакам через MAC.
  • OpenVPN 2.4+: добавил AES-256-GCM по умолчанию. AEAD-режим.
  • IPsec до RFC 4106: ESP с отдельным MAC.
  • IPsec с RFC 4106 / 4543: AES-GCM как AEAD.
  • WireGuard (с рождения, 2018): ChaCha20-Poly1305, только AEAD.
  • Shadowsocks (старый): AES-256-CFB + HMAC извне — не AEAD, уязвим к replay-атакам, поэтому умер от active probing.
  • Shadowsocks-2022: AEAD-2022 (вариант ChaCha20-Poly1305 + ключ-deriv). Полноценно AEAD.
  • VLESS: нет собственного шифрования; AEAD приходит из TLS 1.3 (внешний слой).
  • TLS 1.3: только AEAD ciphers (TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_AES_128_GCM_SHA256). Все non-AEAD режимы выкинуты из стандарта.

Юзеру: если в описании VPN-протокола / клиента вы видите упоминание AES-256-CBC, RC4, 3DES, AES-128-CFB — это устаревшая криптография без AEAD. Современный VPN использует AEAD-режим (GCM или ChaCha20-Poly1305) по умолчанию. Не используйте конфиги, явно прописывающие старые шифры.

Связанные термины

AES-256-GCM, ChaCha20-Poly1305 — основные AEAD-шифры. TLS 1.3 — целиком на AEAD. WireGuard, Shadowsocks-2022 — используют AEAD. Noise Protocol Framework — handshake-фреймворк, выходом которого служит ключ для AEAD.

Источники