AES: общие сведения и режимы работы

AES (Advanced Encryption Standard) — симметричный алгоритм блочного шифрования, основанный на сети подстановок и перестановок (SP-network), работающий с блоками данных фиксированного размера 128 бит. В контексте Web Crypto API он является одним из базовых криптографических примитивов, используемых для шифрования данных, генерации защищённых ключей и реализации протоколов безопасного обмена информацией в браузере.

Алгоритм AES оперирует тремя основными размерами ключей:

  • 128 бит
  • 192 бит
  • 256 бит

Увеличение длины ключа напрямую влияет на криптостойкость, увеличивая количество раундов преобразований внутри алгоритма:

  • AES-128 — 10 раундов
  • AES-192 — 12 раундов
  • AES-256 — 14 раундов

Каждый раунд включает операции подстановки байтов, сдвига строк, смешивания столбцов и добавления раундового ключа.

В Web Crypto API AES реализован исключительно как симметричный алгоритм: один и тот же ключ используется как для шифрования, так и для расшифрования.

Поддерживаемые режимы AES в Web Crypto API

WebCrypto не предоставляет «голый» AES без режима. Алгоритм всегда используется в конкретной схеме работы с блоками данных. Поддерживаются следующие режимы:

AES-CBC (Cipher Block Chaining)

Режим цепочки блоков шифротекста.

Каждый блок открытого текста перед шифрованием XOR-ится с предыдущим блоком шифротекста. Для первого блока используется вектор инициализации (IV).

C_i = E_K(P_i C_{i-1})

Особенности:

  • требует случайного IV длиной 16 байт
  • не обеспечивает целостность данных
  • уязвим к атакам при неправильной обработке padding oracle
  • требует PKCS#7 padding (в WebCrypto реализуется автоматически)

Использование оправдано в устаревших протоколах и совместимости.


AES-GCM (Galois/Counter Mode)

Наиболее современный и рекомендуемый режим.

Комбинирует:

  • режим счётчика (CTR) для шифрования
  • GHASH-функцию для аутентификации данных

C_i = P_i E_K(_i)

Ключевая особенность — наличие аутентификационного тега (authentication tag), обеспечивающего целостность и подлинность данных.

Характеристики:

  • IV обычно 12 байт (рекомендуемый стандарт)
  • формирует authentication tag (128 бит по умолчанию)
  • защищает от подмены ciphertext
  • устойчив к модификациям данных

Используется как стандарт в TLS 1.3, современном хранении данных и API-безопасности.


AES-CTR (Counter Mode)

Режим счётчика превращает блочный шифр в потоковый.

Каждый блок шифруется путём XOR с результатом шифрования счётчика.

C_i = P_i E_K( + i)

Особенности:

  • не требует padding
  • обеспечивает высокую производительность
  • не содержит встроенной аутентификации
  • критична уникальность nonce

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


AES-KW (Key Wrap)

Специализированный режим для защиты криптографических ключей.

Используется для:

  • упаковки ключей (wrapping)
  • безопасного хранения ключевого материала

Работает по алгоритму RFC 3394 / RFC 5649.

Особенности:

  • не предназначен для шифрования произвольных данных
  • обеспечивает целостность и защиту ключа
  • применяется внутри криптографических систем

Работа AES в Web Crypto API

Web Crypto API предоставляет низкоуровневый интерфейс через объект SubtleCrypto.

Основные операции:

  • генерация ключей
  • импорт и экспорт ключей
  • шифрование
  • расшифрование

Генерация ключа AES

Ключ создаётся через generateKey.

Параметры:

  • name: алгоритм (AES-CBC, AES-GCM, AES-CTR, AES-KW)
  • length: 128 / 192 / 256
  • extractable: возможность экспорта ключа
  • keyUsages: назначение (encrypt, decrypt, wrapKey и др.)

Криптографическая модель ключа

Ключ в WebCrypto представлен объектом CryptoKey, который:

  • не содержит сырого значения в JS-области
  • управляется через secure context браузера
  • может быть ограничен по операциям

AES-GCM в WebCrypto: структура данных

При использовании AES-GCM участвуют три элемента:

  • ключ
  • IV (nonce)
  • authentication tag

Шифрование формирует:

  • ciphertext
  • tag (добавляется к результату или хранится отдельно)

Нарушение любого из параметров делает расшифрование невозможным.

Требования к IV и nonce

Корректность и безопасность AES напрямую зависит от уникальности вектора инициализации:

AES-CBC

  • IV должен быть случайным
  • повтор IV ослабляет конфиденциальность

AES-GCM

  • nonce должен быть уникальным на ключ
  • повтор nonce приводит к утечке ключа и plaintext

AES-CTR

  • nonce/счётчик должен быть уникальным
  • повтор приводит к восстановлению XOR-отношений между сообщениями

Padding и обработка данных

В Web Crypto API:

  • AES-CBC автоматически использует PKCS#7 padding
  • AES-GCM и AES-CTR padding не используют

Padding влияет на:

  • размер ciphertext
  • устойчивость к утечкам длины данных
  • совместимость с внешними системами

Криптографическая стойкость режимов

Сравнение свойств:

  • AES-CBC — конфиденциальность без целостности
  • AES-CTR — высокая скорость без защиты целостности
  • AES-GCM — конфиденциальность + аутентификация
  • AES-KW — защита ключей

Типовые ошибки при использовании AES

Повтор IV или nonce

Наиболее критическая ошибка, приводящая к:

  • восстановлению plaintext
  • анализу XOR-отношений
  • компрометации ключа (особенно GCM)

Отсутствие проверки authentication tag

В AES-GCM игнорирование проверки приводит к:

  • незаметной подмене данных
  • атаке на целостность сообщений

Использование AES-CBC без MAC

Создаёт уязвимости:

  • padding oracle
  • bit-flipping атаки

Практическая структура применения в WebCrypto

Типовой поток операций:

  1. генерация ключа AES
  2. генерация IV/nonce
  3. шифрование через encrypt
  4. передача ciphertext + IV (+ tag для GCM)
  5. расшифрование через decrypt

Ключевой принцип — хранение IV вместе с данными, но не в секрете.

Производительность AES

AES аппаратно ускоряется на большинстве современных CPU через AES-NI инструкции.

Особенности:

  • AES-GCM обычно быстрее CBC при одинаковых условиях
  • CTR демонстрирует высокую скорость на потоковых данных
  • overhead GCM минимален при аппаратной поддержке

Безопасностные свойства AES в WebCrypto

Web Crypto API обеспечивает:

  • изоляцию ключей от JavaScript runtime
  • защиту от прямого извлечения ключевого материала
  • выполнение криптографических операций в защищённом контексте браузера

Ключи невозможно прочитать напрямую, только использовать через API операций.

Совместимость режимов AES

Режимы AES применяются в разных протоколах:

  • TLS 1.2 — AES-CBC / AES-GCM
  • TLS 1.3 — AES-GCM
  • JWT (JWE) — AES-GCM / AES-KW
  • Web Storage encryption — AES-GCM
  • secure messaging — AES-CTR / AES-GCM