A128CBC-HS256, A192CBC-HS384, A256CBC-HS512

Алгоритм A128CBC-HS256 относится к семейству JWE Content Encryption Algorithms, объединяющих симметричное шифрование AES в режиме CBC и механизм целостности на основе HMAC-SHA-256. В контексте библиотеки JOSE в JavaScript этот алгоритм применяется для защиты полезной нагрузки JSON Web Encryption с одновременным обеспечением конфиденциальности и криптографической целостности.

Структура ключевого материала

Внутренний Content Encryption Key (CEK) имеет длину 256 бит и делится на две части:

  • 128 бит — ключ для HMAC (Integrity Key)
  • 128 бит — ключ для AES-128-CBC (Encryption Key)

Такое разделение выполняется детерминированно после генерации CEK и является обязательным элементом спецификации.

Механизм шифрования

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

  1. Генерация CEK (32 байта)
  2. Разделение CEK на MAC-ключ и ключ шифрования
  3. Шифрование plaintext через AES-128-CBC с использованием случайного IV
  4. Формирование аутентификационного тега через HMAC-SHA-256

= _{128}((, ))

Итоговый тег обрезается до 128 бит, что соответствует требованиям JWE.

Особенности применения в JOSE (JavaScript)

В библиотеке jose алгоритм используется как один из стандартных режимов шифрования JWE Compact Serialization.

Пример создания зашифрованного объекта:

import { CompactEncrypt } from 'jose'

const encoder = new TextEncoder()

const jwe = await new CompactEncrypt(
  encoder.encode('секретные данные')
)
  .setProtectedHeader({ alg: 'dir', enc: 'A128CBC-HS256' })
  .encrypt(sharedKey)

В данном контексте sharedKey должен соответствовать длине 256 бит для CEK или быть материалом для его вывода в зависимости от выбранного режима согласования ключей.


A192CBC-HS384

Алгоритм A192CBC-HS384 расширяет предыдущий подход, увеличивая размер ключей и криптографическую стойкость за счёт использования AES-192-CBC и HMAC-SHA-384.

Структура CEK

CEK в этом алгоритме составляет 384 бита и делится следующим образом:

  • 192 бита — ключ HMAC (Integrity Key)
  • 192 бита — ключ AES-192-CBC (Encryption Key)

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

Процесс формирования тега

Используется HMAC-SHA-384 с последующим усечением результата до 192 бит:

= _{192}((, ))

AAD (Additional Authenticated Data) включает заголовок JWE и другие аутентифицируемые параметры, не подлежащие шифрованию.

Особенности реализации в jose

Библиотека автоматически управляет разбиением CEK и применением соответствующих примитивов криптографии через WebCrypto или Node.js crypto API.

Пример использования:

import { CompactEncrypt } from 'jose'

const data = new TextEncoder().encode('данные')

const jwe = await new CompactEncrypt(data)
  .setProtectedHeader({ alg: 'dir', enc: 'A192CBC-HS384' })
  .encrypt(keyMaterial)

Особенность данного алгоритма заключается в повышенной длине блока ключей и увеличенной длине MAC-тега, что повышает устойчивость к коллизиям HMAC.


A256CBC-HS512

Алгоритм A256CBC-HS512 представляет наиболее криптографически тяжёлую конфигурацию в семействе CBC-HMAC конструкций JWE. Он использует AES-256-CBC совместно с HMAC-SHA-512.

Структура CEK

CEK составляет 512 бит и делится на две равные части:

  • 256 бит — MAC-ключ
  • 256 бит — ключ AES-256-CBC

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

Формирование аутентификационного тега

= _{256}((, ))

Увеличенная длина HMAC обеспечивает более высокий криптографический запас прочности при атаке на целостность сообщений.

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

Использование данного алгоритма идентично предыдущим вариантам, отличие заключается только в параметре enc.

import { CompactEncrypt } from 'jose'

const payload = new TextEncoder().encode('конфиденциальный контент')

const jwe = await new CompactEncrypt(payload)
  .setProtectedHeader({ alg: 'dir', enc: 'A256CBC-HS512' })
  .encrypt(secretKey)

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

  • AES-256 обеспечивает максимальную длину ключа среди CBC-режимов в JWE
  • HMAC-SHA-512 обеспечивает более широкий внутренний хеш-диапазон
  • Усечённый тег 256 бит снижает вероятность успешной подмены ciphertext до практического нуля при корректной генерации ключей

Общие особенности CBC-HMAC конструкции в JOSE

Семейство AxxxCBC-HSyyy основано на принципе разделения обязанностей:

  • AES-CBC отвечает за конфиденциальность
  • HMAC отвечает за целостность и аутентификацию

Ключевая особенность заключается в том, что MAC вычисляется не только по ciphertext, но и по дополнительным аутентифицируемым данным:

=

Это предотвращает подмену заголовков JWE, включая алгоритмы и параметры шифрования.


Особенности реализации в библиотеке jose

Библиотека jose абстрагирует все криптографические детали:

  • автоматическая генерация CEK
  • корректное разделение ключей
  • управление IV для AES-CBC
  • вычисление HMAC с усечением
  • формирование JWE Compact / General Serialization

При работе через Node.js используется нативный crypto, при работе в браузере — WebCrypto API.

Внутренне алгоритм не требует ручного управления MAC или padding, однако корректность входных ключей критична: длины должны строго соответствовать спецификации:

  • A128CBC-HS256 → 256 бит CEK
  • A192CBC-HS384 → 384 бит CEK
  • A256CBC-HS512 → 512 бит CEK