Алгоритмы контентного шифрования: A128GCM, A192GCM, A256GCM

Алгоритмы A128GCM, A192GCM, A256GCM относятся к семейству симметричного шифрования AES в режиме Galois/Counter Mode (GCM), который используется в спецификации JWE (JSON Web Encryption) из экосистемы JOSE (JSON Object Signing and Encryption).

В рамках JOSE эти алгоритмы применяются для шифрования содержимого (Content Encryption Key, CEK и payload), обеспечивая одновременно конфиденциальность и целостность данных.


Общая структура JWE и роль Content Encryption Algorithm

JWE состоит из пяти компонентов:

  • Protected Header
  • Encrypted Key
  • Initialization Vector (IV)
  • Ciphertext
  • Authentication Tag

Алгоритмы A128GCM, A192GCM, A256GCM определяют способ шифрования payload с использованием симметричного ключа CEK.

Ключевой момент:

AES-GCM выполняет одновременно шифрование и аутентификацию данных без необходимости отдельного HMAC.


AES-GCM как режим шифрования

GCM (Galois/Counter Mode) объединяет два механизма:

  • CTR (Counter Mode) — потоковое шифрование
  • GHASH — проверка целостности

Это обеспечивает:

  • Конфиденциальность данных
  • Аутентификацию ciphertext и AAD (Additional Authenticated Data)
  • Высокую производительность благодаря параллелизации

Алгоритм A128GCM

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

  • Длина ключа AES: 128 бит
  • Размер IV: 96 бит (рекомендуемый стандарт JOSE)
  • Размер authentication tag: 128 бит

Особенности

  • Быстрее остальных вариантов
  • Подходит для большинства веб-сценариев
  • Обеспечивает базовый уровень криптостойкости, достаточный для многих приложений

В JWE

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

alg: "A128GCM"

Алгоритм A192GCM

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

  • Длина ключа AES: 192 бит
  • Размер IV: 96 бит
  • Authentication tag: 128 бит

Особенности

  • Более высокий уровень безопасности по сравнению с A128GCM
  • Реже используется на практике
  • Может быть менее оптимизирован в некоторых криптографических библиотеках

Применение

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


Алгоритм A256GCM

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

  • Длина ключа AES: 256 бит
  • Размер IV: 96 бит
  • Authentication tag: 128 бит

Особенности

  • Наиболее криптостойкий вариант из трёх
  • Широко используется в финансовых и государственных системах
  • Более высокая вычислительная нагрузка по сравнению с A128GCM

В JWE

alg: "A256GCM"

Сравнение A128GCM, A192GCM и A256GCM

Алгоритм Длина ключа Производительность Уровень безопасности
A128GCM 128 бит Высокая Базовый
A192GCM 192 бит Средняя Повышенный
A256GCM 256 бит Ниже Максимальный

Использование JOSE в JavaScript

Библиотека jose реализует полную поддержку JWE, включая AES-GCM алгоритмы.

Основные сущности:

  • EncryptJWT — создание зашифрованного JWT
  • jwtDecrypt — расшифровка JWE
  • generateSecret — генерация ключей
  • compactEncrypt — низкоуровневое шифрование

Пример шифрования с A256GCM

import { compactEncrypt, importJWK } from 'jose'

const secret = {
  kty: 'oct',
  k: 'base64url-encoded-key'
}

const key = await importJWK(secret, 'A256GCM')

const encoder = new TextEncoder()

const encrypted = await new compactEncrypt(
  encoder.encode('confidential data')
)
  .setProtectedHeader({ alg: 'dir', enc: 'A256GCM' })
  .encrypt(key)

Пример расшифровки

import { compactDecrypt } from 'jose'

const { plaintext } = await compactDecrypt(jwe, key)

console.log(new TextDecoder().decode(plaintext))

Особенности реализации AES-GCM в JOSE

Initialization Vector (IV)

  • Генерируется случайно для каждого сообщения
  • Рекомендуемая длина: 96 бит
  • Критически важен для безопасности

Authentication Tag

  • Проверяет целостность ciphertext и AAD
  • Генерируется автоматически

Additional Authenticated Data (AAD)

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


Режимы использования CEK

В JOSE AES-GCM может использоваться в двух сценариях:

Direct encryption (alg: “dir”)

  • Один общий симметричный ключ
  • CEK == ключ шифрования

Key wrapping + CEK

  • CEK генерируется случайно
  • Затем шифруется другим алгоритмом (например RSA-OAEP)

Практическое значение выбора алгоритма

Выбор между A128GCM, A192GCM и A256GCM зависит от:

  • требований к безопасности
  • регуляторных ограничений
  • производительности сервера
  • объёма данных

В большинстве веб-приложений используется A128GCM, тогда как A256GCM применяется в системах с повышенной чувствительностью данных.


Криптографические свойства AES-GCM

  • Индистингвишабельность под выбранным открытым текстом (IND-CPA)
  • Аутентификация сообщений (INT-CTXT)
  • Устойчивость к модификациям ciphertext

Ошибки и уязвимости при использовании

Типовые ошибки реализации:

  • повторное использование IV с одинаковым ключом
  • слабая генерация ключей CEK
  • отсутствие проверки authentication tag
  • хранение ключей в открытом виде

Любая из этих ошибок полностью разрушает криптостойкость схемы AES-GCM.


Взаимодействие с другими JOSE компонентами

AES-GCM часто комбинируется с:

  • RSA-OAEP (зашифрование CEK)
  • ECDH-ES (обмен ключами)
  • PBKDF2 (генерация ключей из пароля)

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

В библиотеке jose используется WebCrypto API:

  • аппаратное ускорение AES-GCM в браузерах
  • оптимизация через нативные криптографические вызовы Node.js
  • отсутствие ручной реализации алгоритма

Это делает A128GCM и A256GCM практически линейно масштабируемыми по нагрузке на современных системах.