Поле iv содержит инициализационный вектор, используемый симметричными режимами шифрования для обеспечения уникальности шифротекста при одинаковом ключе и одинаковом открытом тексте.
В контексте SJCL (Stanford Javascript Crypto Library) iv
имеет критическое значение для режимов, требующих случайности:
Основные свойства:
Пример структуры:
{
"iv": "base64-encoded-string"
}
Использование повторного IV с одним ключом в режимах CTR/CCM приводит к критическим утечкам информации, вплоть до восстановления исходного текста.
Поле salt используется при деривации ключей из
пароля, чаще всего через PBKDF2, который реализован в SJCL как
sjcl.misc.pbkdf2.
Назначение salt:
Особенности:
Типичная структура:
{
"salt": "base64-encoded-string"
}
При расшифровке salt используется вместе с iter,
ks и паролем для восстановления ключа.
Поле ct содержит зашифрованный текст (ciphertext), результат применения симметричного шифрования к исходным данным.
Особенности:
Структура:
{
"ct": "base64-encoded-ciphertext"
}
В CCM-режиме SJCL ciphertext логически связан с тегом аутентификации,
хотя сам тег хранится отдельно через ts.
Поле adata содержит дополнительные аутентифицированные данные, которые не шифруются, но включаются в вычисление MAC (Message Authentication Code).
Назначение:
Ключевые свойства:
Пример:
{
"adata": "{\"alg\":\"AES\",\"version\":1}"
}
В SJCL adata обычно сериализуется в строку JSON и затем
кодируется в бинарное представление перед включением в
MAC-вычисления.
Поле ks определяет размер ключа в словах по 32 бита (word size в SJCL).
Важный нюанс:
Типичные значения:
Пример:
{
"ks": 8
}
Используется при:
Связь с криптографией:
Поле iter задаёт количество итераций функции деривации ключа PBKDF2.
Назначение:
Особенности:
Пример:
{
"iter": 10000
}
Рекомендации:
В SJCL iter используется только в контексте паролей, не в прямом шифровании ключом.
Поле mode определяет режим работы блочного шифра AES.
SJCL поддерживает несколько режимов:
ccm — основной и рекомендуемый режимocb2 — устаревший режим (патентные ограничения)gcm — отсутствует в стандартной SJCL реализации (в
отличие от WebCrypto)Пример:
{
"mode": "ccm"
}
Роль mode:
CCM (Counter with CBC-MAC):
OCB2:
Поле ts определяет размер аутентификационного тега (authentication tag size) в битах.
Назначение:
Типичные значения:
Пример:
{
"ts": 128
}
Особенности:
Взаимосвязь с adata:
adataТипичный объект шифрования в SJCL выглядит как связка этих полей:
{
"iv": "...",
"v": 1,
"iter": 10000,
"ks": 8,
"ts": 128,
"mode": "ccm",
"adata": "...",
"ct": "...",
"salt": "..."
}
Логика взаимодействия:
salt + iter + ks → формирование ключа из пароляiv + mode → настройка режима шифрованияct → результат шифрованияadata + ts → защита целостностиКлючевой принцип структуры SJCL — объединение конфиденциальности (ct) и аутентичности (ts + adata) в одном объекте, при этом обеспечивая воспроизводимость через параметры деривации ключа (salt, iter, ks).