Параметры тегов аутентификации и их длина

В схемах симметричного шифрования с аутентификацией (AEAD — Authenticated Encryption with Associated Data) результатом шифрования является не только зашифрованный текст, но и дополнительное значение — тег аутентификации. Он обеспечивает проверку целостности и подлинности данных: любое изменение шифртекста, IV, связанного контекста или самого тега приводит к невозможности успешного расшифрования.

В Stanford JS Crypto Library (SJCL) тег аутентификации является обязательной частью режимов CCM и GCM и настраивается через параметр длины тега.

Роль тега аутентификации в криптографической схеме

Тег аутентификации формируется как криптографический результат обработки:

  • шифртекста
  • вектора инициализации (IV)
  • дополнительной аутентифицируемой информации (AAD)
  • секретного ключа

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

В случае SJCL, режимы CCM и GCM обеспечивают одновременно:

  • конфиденциальность (шифрование)
  • целостность (проверка тега)

Параметр длины тега в SJCL

В SJCL длина тега задаётся параметром:

  • ts (tag size) — размер тега в битах

Этот параметр является частью JSON-структуры, возвращаемой функцией sjcl.encrypt, и используется при расшифровании через sjcl.decrypt.

Пример структуры результата шифрования:

{
  "iv": "...",
  "v": 1,
  "iter": 10000,
  "ks": 128,
  "ts": 64,
  "mode": "ccm",
  "adata": "",
  "cipher": "aes",
  "salt": "...",
  "ct": "..."
}

Здесь ts определяет длину тега аутентификации.

Поддерживаемые значения длины тега

В зависимости от режима работы SJCL допускает различные длины тега:

CCM (Counter with CBC-MAC)

Режим CCM в SJCL поддерживает следующие значения ts:

  • 64 бита (минимальное значение, часто используемое по умолчанию)
  • 96 бит
  • 128 бит

Некоторые реализации допускают промежуточные значения с шагом в 8 бит, но практическая совместимость обычно ограничивается стандартными уровнями.

GCM (Galois/Counter Mode)

В режиме GCM стандартом де-факто является:

  • 128 бит (полный тег)

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

Значение длины тега для безопасности

Криптографическая стойкость тега определяется вероятностью успешной подделки:

[ P_{forge} = 2^{-t}]

где ( t ) — длина тега в битах.

Примеры вероятностей:

  • 64 бита → ( 2^{-64} ) ≈ 5.4 × 10⁻²⁰
  • 96 бит → ( 2^{-96} )
  • 128 бит → ( 2^{-128} )

На практике важен не только теоретический уровень, но и устойчивость к:

  • многократным попыткам подбора
  • атаке на усечённые теги
  • повторному использованию IV (особенно критично для GCM)

Усечение тега и его последствия

В некоторых сценариях длина тега уменьшается ради:

  • уменьшения размера передаваемых данных
  • оптимизации сетевых протоколов
  • снижения накладных расходов на хранение

Однако усечение тега приводит к экспоненциальному росту вероятности подделки.

Например, переход:

  • с 128 бит до 64 бит

уменьшает безопасность не линейно, а в (2^{64}) раз.

Даже при небольшом количестве попыток атака становится практически осуществимой при наличии активного оракула расшифрования.

Связь параметра ts с API SJCL

Шифрование

При использовании sjcl.encrypt параметры могут задаваться явно:

const encrypted = sjcl.encrypt("password", "plaintext", {
  mode: "ccm",
  ts: 128,
  ks: 256,
  iter: 10000
});

Если ts не задан, библиотека использует значение по умолчанию, зависящее от режима.

Расшифрование

При расшифровании структура с ts обязательна:

const decrypted = sjcl.decrypt("password", encrypted);

Любое несоответствие длины тега приводит к ошибке проверки целостности.

Влияние длины тега на производительность

Увеличение ts влияет на:

  • вычислительную стоимость генерации тега
  • размер выходных данных
  • время проверки целостности

Однако влияние на производительность обычно минимально по сравнению с:

  • генерацией ключей
  • операциями блочного шифра AES

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

Взаимодействие тега с IV и ключами

Тег аутентификации тесно связан с другими параметрами:

IV (Initialization Vector)

  • должен быть уникальным для каждого шифрования
  • повторное использование IV в CCM/GCM может привести к компрометации тега и ключа

Ключ

  • определяет криптографическую стойкость всей схемы
  • длина ключа (ks) не компенсирует слабый тег

Связанная аутентифицируемая информация (AAD)

  • входит в вычисление тега
  • позволяет защищать метаданные без их шифрования

Ошибки при работе с параметром ts

Несоответствие длины тега

При изменении ts между шифрованием и расшифрованием возникает ошибка проверки целостности:

  • данные считаются подделанными
  • расшифрование прерывается

Нестандартные значения

Использование нестандартных значений может приводить к:

  • несовместимости между реализациями
  • невозможности восстановления данных в других криптографических библиотеках

Слишком короткий тег

При выборе минимальных значений:

  • резко возрастает риск подделки
  • атакующий может использовать статистические методы перебора

Практические рекомендации по выбору длины тега

При проектировании систем на SJCL учитываются следующие принципы:

  • 128 бит — стандарт для максимальной стойкости
  • 96 бит — компромисс между безопасностью и размером
  • 64 бит — только для ограниченных сценариев с низким риском атак

При этом критически важно учитывать:

  • наличие активного противника
  • возможность повторных попыток расшифрования
  • длительность хранения зашифрованных данных

Внутреннее представление тега в SJCL

Внутри SJCL тег:

  • вычисляется на основе CBC-MAC (для CCM)
  • либо GHASH (для GCM)
  • затем обрезается до длины ts

После этого он кодируется в Base64 и включается в итоговый JSON как часть структуры шифртекста.

Поле ct содержит только шифртекст, а не тег. Тег хранится неявно внутри алгоритма и проверяется при расшифровании.

Совместимость и переносимость

При интеграции SJCL с другими системами важно учитывать:

  • GCM в OpenSSL, WebCrypto и SJCL обычно использует 128-битный тег
  • CCM может иметь вариации длины тега
  • несовпадение ts приводит к несовместимости даже при одинаковом шифртексте

Усиленные сценарии использования

В системах с повышенными требованиями к безопасности:

  • ts = 128
  • строгая уникальность IV
  • минимизация повторного шифрования одинаковых данных
  • обязательная проверка AAD

В таких условиях тег аутентификации становится центральным элементом защиты от подделки и модификации данных, определяя устойчивость всей схемы AEAD в SJCL.