AES-GCM Key Wrap: A128GCMKW, A192GCMKW, A256GCMKW

AES-GCM Key Wrap относится к классу алгоритмов управления ключами в спецификации JWE (JSON Web Encryption), определённой в RFC 7516 и RFC 7518. Семейство алгоритмов A128GCMKW, A192GCMKW, A256GCMKW используется для шифрования контентного ключа (Content Encryption Key, CEK) с помощью симметричного ключа и режима AES-GCM.

AES-GCM Key Wrap сочетает две криптографические идеи: механизм обёртки ключей (Key Wrap) и аутентифицированное шифрование AES-GCM. В отличие от классических схем AES Key Wrap (например, A128KW), здесь применяется режим Galois/Counter Mode, обеспечивающий одновременно конфиденциальность и целостность данных.

В основе лежит AES в режиме GCM, который выполняет:

  • шифрование ключевого материала
  • генерацию аутентификационного тега
  • защиту от модификации за счёт GHASH-функции

Каждый вариант алгоритма отличается длиной симметричного ключа:

  • A128GCMKW — 128-битный ключ AES
  • A192GCMKW — 192-битный ключ AES
  • A256GCMKW — 256-битный ключ AES

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

Структура операции Key Wrap

Процесс обёртки ключа включает несколько этапов:

  1. Генерация случайного CEK (Content Encryption Key)
  2. Формирование дополнительного аутентифицированного контекста (AAD)
  3. Генерация nonce (IV) для AES-GCM
  4. Шифрование CEK с использованием AES-GCM
  5. Получение зашифрованного ключа и authentication tag

Результатом является компактная структура, включающая:

  • зашифрованный CEK
  • IV (initialization vector)
  • authentication tag

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

В JSON Web Encryption алгоритм AES-GCM Key Wrap указывается в заголовке:

  • alg: A128GCMKW / A192GCMKW / A256GCMKW
  • enc: алгоритм шифрования содержимого (например, A256GCM)

Пример логики:

  • alg отвечает за защиту ключа
  • enc отвечает за защиту полезной нагрузки

Такое разделение позволяет использовать разные уровни криптографической защиты для ключа и данных.

Применение в библиотеке jose (JavaScript)

Библиотека jose реализует полный стек JOSE: JWS, JWE, JWK и JWA. AES-GCM Key Wrap поддерживается как один из стандартных алгоритмов управления ключами.

Шифрование с использованием A256GCMKW

import { EncryptJWT } from 'jose'

const payload = {
  sub: 'user-123',
  role: 'admin'
}

const jwe = await new EncryptJWT(payload)
  .setProtectedHeader({ alg: 'A256GCMKW', enc: 'A256GCM' })
  .encrypt(secretKey)

В этом сценарии:

  • secretKey — симметричный ключ для обёртки CEK
  • enc определяет шифрование полезной нагрузки
  • alg определяет механизм защиты CEK

Формирование ключей

Ключи для AES-GCMKW должны соответствовать длине алгоритма:

  • A128GCMKW → 128 бит (16 байт)
  • A192GCMKW → 192 бит (24 байта)
  • A256GCMKW → 256 бит (32 байта)

Пример генерации ключа:

import { generateSecret } from 'jose'

const key = await generateSecret('A256GCMKW')

Генерация обеспечивает корректную длину и формат ключа для последующего использования в JWE.

Дешифрование и восстановление CEK

При расшифровке выполняется обратная операция:

  1. Извлечение защищённого CEK
  2. Проверка authentication tag
  3. Расшифровка CEK с использованием AES-GCM
  4. Использование CEK для расшифровки payload

Пример:

import { jwtDecrypt } from 'jose'

const { payload } = await jwtDecrypt(jwe, secretKey)

Здесь библиотека автоматически:

  • определяет alg
  • применяет AES-GCM Key Wrap
  • восстанавливает CEK
  • расшифровывает содержимое

Особенности реализации AES-GCMKW

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

Каждая операция требует уникального IV (nonce). Повторное использование nonce с одним ключом критически нарушает безопасность AES-GCM, приводя к утечке информации о ключе и данных.

Аутентификационный тег

Tag защищает:

  • зашифрованный CEK
  • дополнительные данные (AAD)
  • структуру JWE

Любое изменение приводит к ошибке проверки целостности.

Связь с AAD

AAD (Additional Authenticated Data) включает заголовок JWE. Он не шифруется, но участвует в вычислении authentication tag.

Различия между A128GCMKW, A192GCMKW и A256GCMKW

Алгоритм Размер ключа Уровень безопасности Производительность
A128GCMKW 128 бит базовый уровень высокая
A192GCMKW 192 бит повышенный уровень средняя
A256GCMKW 256 бит максимальный уровень ниже

A256GCMKW считается наиболее устойчивым к современным атакам перебора, однако выбор алгоритма часто зависит от требований системы и регуляторных ограничений.

Внутреннее представление JWE с GCMKW

Компактная сериализация JWE включает:

protected header
encrypted key
initialization vector
ciphertext
authentication tag

AES-GCM Key Wrap влияет именно на encrypted key компонент.

Ошибки и особенности интеграции

Типовые проблемы при использовании AES-GCMKW в jose:

  • несоответствие длины ключа алгоритму
  • повторное использование nonce
  • неправильная конфигурация alg/enc
  • попытка использовать асимметричный ключ с GCMKW

Библиотека jose строго валидирует параметры и отклоняет некорректные комбинации.

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

AES-GCMKW обеспечивает:

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

Комбинация AES + GCM делает алгоритм одновременно быстрым и безопасным для прикладных сценариев JWE.

Применение в реальных системах

AES-GCM Key Wrap используется в:

  • OAuth 2.0 токенах (JWE access tokens)
  • защищённых API-сообщениях
  • системах обмена ключами
  • микросервисной архитектуре с JWT/JWE

Библиотека jose обеспечивает совместимость с другими реализациями JOSE, включая серверные и клиентские криптосистемы на основе стандарта RFC 7518.