Метод seal формирует защищённое (зашифрованное и
подписанное) представление произвольного значения, превращая его в
строку, пригодную для безопасного хранения или передачи. Внутри
выполняется сериализация данных, их криптографическая защита и упаковка
в единый токен.
Iron.seal(object, password, options)
В современных версиях библиотеки метод возвращает
Promise, что позволяет использовать его с
async/await.
const sealed = await Iron.seal(object, password, options);
Первый аргумент — данные, которые необходимо защитить.
Object | string | number | boolean | BufferОсобенности:
Ключ, используемый для шифрования и формирования HMAC-подписи.
stringОсобенности:
Объект конфигурации, определяющий параметры криптографической обработки.
ObjectОсновные поля:
Алгоритм симметричного шифрования.
aes-256-cbcАлгоритм контроля целостности (HMAC).
sha256Время жизни зашифрованного значения.
numberДопустимое отклонение времени при проверке TTL.
numberРазмер соли в битах.
numberКоличество итераций при деривации ключа.
numberФункция генерации случайных значений.
functionМетод seal возвращает зашифрованную строку.
Тип: string
Формат: компактная строка, содержащая:
При использовании async/await результатом является
Promise<string>.
Строка, возвращаемая методом, не является просто шифротекстом. Она представляет собой контейнер, включающий несколько слоёв:
Такой формат позволяет библиотеке автоматически выполнять обратное преобразование без необходимости вручную указывать параметры расшифровки.
Метод может завершиться ошибкой в следующих случаях:
object или
passwordОшибки выбрасываются как исключения или отклонения промиса.
import Iron from '@hapi/iron';
const data = {
id: 42,
role: 'admin'
};
const password = 'strong-secret-password';
const options = {
encryption: 'aes-256-cbc',
integrity: 'sha256',
ttl: 60 * 60 * 1000
};
const sealed = await Iron.seal(data, password, options);
console.log(sealed);
Результирующая строка может быть использована для хранения в cookie, базе данных или передаче через небезопасные каналы.
Изменение любого из параметров options приводит к
формированию полностью другого токена:
encryption изменяет способ шифрованияiterationCount влияет на производительность и
стойкостьsaltBits меняет исходный криптографический
материалttl не влияет на структуру строки, но влияет
на валидность при расшифровкеДаже при одинаковых входных данных результат метода каждый раз отличается из-за использования случайной соли и инициализационных векторов.
Метод seal объединяет несколько механизмов:
Это обеспечивает одновременно защиту от чтения и подделки данных.
При указании ttl в опциях в зашифрованную структуру
включается временная метка. При расшифровке выполняется проверка:
timestampSkewSecСтрока, созданная seal, является полностью
самодостаточной:
passwordЭто делает возможным безопасное использование в распределённых системах, где отсутствует единое состояние конфигурации.