В основе Iron лежит механизм «sealing» — упаковки произвольных данных в криптографически защищённую строку. Архитектура построена на двух ключевых слоях:
Данные проходят последовательную обработку: сериализация → шифрование → вычисление MAC → кодирование в безопасный формат. Каждый слой конфигурируется отдельно, что позволяет тонко управлять балансом между безопасностью и производительностью.
Основной алгоритм шифрования в Iron — симметричный блочный шифр AES. В типовой конфигурации используется режим CBC с 256-битным ключом.
AES-256
Характеристики используемой схемы:
AES применяется к сериализованным данным после их преобразования в байтовую последовательность. Важное свойство — одинаковые входные данные не приводят к одинаковым шифротекстам благодаря случайному IV.
Конфигурация шифрования в Iron определяется набором параметров:
encryption: выбор алгоритма шифрованияpassword: исходный секрет для генерации ключаsaltBits: размер соли для ключевого деривационного
процессаiterations: количество итераций PBKDF2algorithm: хэш-функция для HMAC и деривации ключаКаждый параметр влияет на устойчивость к атакам перебора и на производительность операций seal/unseal.
Базовая схема шифрования использует AES-256-CBC. Ключ генерируется через PBKDF2 из пароля и соли:
K = PBKDF2(password, salt, iterations)
Далее ключ используется для симметричного шифрования:
C = AES_{256-CBC}(K, IV, P)
где:
Настройка AES в Iron обычно не требует ручной замены алгоритма, однако параметры режима могут быть переопределены через конфигурацию.
Поверх шифрования добавляется слой проверки целостности через HMAC. Он защищает от модификации зашифрованных данных.
HMAC = H(K_{mac}, C)
Где:
Используемая хэш-функция обычно SHA-256:
SHA-256
Выбор более сильного алгоритма увеличивает криптостойкость, но снижает скорость обработки. SHA-1 в современных конфигурациях рассматривается как устаревший вариант.
Ключевой этап настройки алгоритма — контроль функции деривации ключа. PBKDF2 используется для превращения пароля в криптографический ключ фиксированной длины.
DK = PBKDF2(P, S, c, dkLen)
Где:
Увеличение числа итераций повышает стойкость к brute-force атакам, но увеличивает время выполнения операций seal/unseal.
Практическая настройка включает:
В зависимости от требований к системе используются разные профили настройки алгоритма.
Характеризуется балансом скорости и защиты, применяется в некритичных системах.
Подходит для хранения сессионных токенов и чувствительных данных.
Используется в системах с повышенными требованиями к безопасности, где производительность вторична.
Изменение каждого параметра влияет на криптографические свойства:
iterations усиливает защиту от перебораsaltBits снижает риск предвычисленийСистема Iron не позволяет использовать слабые комбинации в современных конфигурациях без явного понижения уровня безопасности, что делает алгоритм предсказуемо защищённым при корректной настройке.
const Iron = require('@hapi/iron');
const options = {
password: 'secure-password-should-be-long',
encryption: {
algorithm: 'aes-256-cbc'
},
integrity: {
algorithm: 'sha256'
},
ttl: 24 * 60 * 60 * 1000,
timestampSkewSec: 60,
localtimeOffsetMsec: 0,
saltBits: 256,
iterations: 100000
};
Такая конфигурация задаёт строгую криптографическую модель с акцентом на устойчивость к перебору и подделке данных, сохраняя совместимость с типовой реализацией Iron.