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, который выполняет:
Каждый вариант алгоритма отличается длиной симметричного ключа:
Увеличение длины ключа повышает криптографическую стойкость, но может незначительно влиять на производительность.
Процесс обёртки ключа включает несколько этапов:
Результатом является компактная структура, включающая:
В JSON Web Encryption алгоритм AES-GCM Key Wrap указывается в заголовке:
Пример логики:
Такое разделение позволяет использовать разные уровни криптографической защиты для ключа и данных.
Библиотека jose реализует полный стек JOSE: JWS, JWE, JWK и JWA. AES-GCM Key Wrap поддерживается как один из стандартных алгоритмов управления ключами.
import { EncryptJWT } from 'jose'
const payload = {
sub: 'user-123',
role: 'admin'
}
const jwe = await new EncryptJWT(payload)
.setProtectedHeader({ alg: 'A256GCMKW', enc: 'A256GCM' })
.encrypt(secretKey)
В этом сценарии:
Ключи для AES-GCMKW должны соответствовать длине алгоритма:
Пример генерации ключа:
import { generateSecret } from 'jose'
const key = await generateSecret('A256GCMKW')
Генерация обеспечивает корректную длину и формат ключа для последующего использования в JWE.
При расшифровке выполняется обратная операция:
Пример:
import { jwtDecrypt } from 'jose'
const { payload } = await jwtDecrypt(jwe, secretKey)
Здесь библиотека автоматически:
Каждая операция требует уникального IV (nonce). Повторное использование nonce с одним ключом критически нарушает безопасность AES-GCM, приводя к утечке информации о ключе и данных.
Tag защищает:
Любое изменение приводит к ошибке проверки целостности.
AAD (Additional Authenticated Data) включает заголовок JWE. Он не шифруется, но участвует в вычислении authentication tag.
| Алгоритм | Размер ключа | Уровень безопасности | Производительность |
|---|---|---|---|
| A128GCMKW | 128 бит | базовый уровень | высокая |
| A192GCMKW | 192 бит | повышенный уровень | средняя |
| A256GCMKW | 256 бит | максимальный уровень | ниже |
A256GCMKW считается наиболее устойчивым к современным атакам перебора, однако выбор алгоритма часто зависит от требований системы и регуляторных ограничений.
Компактная сериализация JWE включает:
protected header
encrypted key
initialization vector
ciphertext
authentication tag
AES-GCM Key Wrap влияет именно на encrypted key компонент.
Типовые проблемы при использовании AES-GCMKW в jose:
Библиотека jose строго валидирует параметры и отклоняет некорректные комбинации.
AES-GCMKW обеспечивает:
Комбинация AES + GCM делает алгоритм одновременно быстрым и безопасным для прикладных сценариев JWE.
AES-GCM Key Wrap используется в:
Библиотека jose обеспечивает совместимость с другими реализациями JOSE, включая серверные и клиентские криптосистемы на основе стандарта RFC 7518.