Алгоритмы 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 практически
линейно масштабируемыми по нагрузке на современных системах.