Compact Serialization в спецификации JWE (JSON Web Encryption) определяет компактное представление зашифрованного сообщения в виде одной строки. В библиотеке Jsrsasign этот формат используется для передачи зашифрованных данных между системами, где важна минимальная длина и совместимость с URL-safe строками.
Структура JWE Compact Serialization всегда состоит из пяти частей, разделённых точками:
BASE64URL(Protected Header).
BASE64URL(Encrypted Key).
BASE64URL(Initialization Vector).
BASE64URL(Ciphertext).
BASE64URL(Authentication Tag)
Каждый сегмент кодируется в Base64URL без паддинга и имеет строго определённое назначение.
Первая часть содержит заголовок в формате JSON, закодированный в Base64URL. Он описывает параметры шифрования и криптографические алгоритмы, используемые для формирования JWE.
Типичный пример заголовка:
{
"alg": "RSA-OAEP",
"enc": "A256GCM"
}
После кодирования JSON превращается в первую часть JWE строки.
Вторая часть представляет собой зашифрованный ключ симметричного шифрования (Content Encryption Key, CEK).
В зависимости от алгоритма alg:
Если значение отсутствует, часть всё равно присутствует как пустая строка между точками.
Третья часть содержит вектор инициализации, необходимый для алгоритмов симметричного шифрования (например, AES-GCM).
IV обеспечивает уникальность шифрования при каждом новом сообщении, предотвращая повторное использование одного и того же ключевого потока.
Длина IV зависит от выбранного алгоритма, например:
Четвёртая часть — это непосредственно зашифрованные данные.
Исходный открытый текст перед шифрованием объединяется с Protected Header (через процесс AAD — Additional Authenticated Data), после чего шифруется симметрическим алгоритмом.
Ciphertext не содержит структурной информации и представляет собой результат блочного или потокового шифрования.
Пятая часть используется только в режимах AEAD (Authenticated Encryption with Associated Data), таких как AES-GCM.
Authentication Tag обеспечивает:
При расшифровке изменение любого байта в предыдущих частях приводит к невалидному тегу и ошибке проверки.
Финальная строка формируется простым объединением пяти компонентов:
protectedHeader.encryptedKey.iv.ciphertext.authTag
Каждый элемент обязателен для полного JWE Compact Serialization, даже если его значение пустое.
eyJhbGciOiJSU0EtT0FFUCIsImVuYyI6IkEyNTZHQ00ifQ.
OKOawDo13gRp2ojaHV7LFp.
48V1_ALb6US04U3b.
5eym8TW_c8SuK9PmQ.
XFBoMYUZodetZdvTiFvSkQ
В этом примере:
В Jsrsasign работа с Compact Serialization реализована через объекты JWE, где каждая часть генерируется или извлекается автоматически при вызове функций шифрования и расшифрования.
Внутренний процесс включает:
При декодировании выполняется обратная операция с обязательной проверкой тега.
Compact Serialization накладывает ряд структурных ограничений:
Эти ограничения компенсируются компактностью и удобством передачи в URL, HTTP заголовках и токенах.
В альтернативном формате JWE JSON Serialization данные представляются структурированным JSON-объектом с возможностью множественных recipients и расширенных полей.
Compact Serialization:
JSON Serialization: