Sealed-токен в Iron представляет собой компактную строку, в которой
зашифрованные данные объединены с метаданными о криптографических
операциях. Внешне это выглядит как последовательность сегментов,
разделённых символом *, где каждый сегмент несёт строго
определённую смысловую нагрузку.
Базовая форма:
Fe26.2*<key id>*<encrypted key>*<iv>*<ciphertext>*<mac>*<expiration>
Несмотря на кажущуюся простоту, каждый элемент является результатом отдельного этапа криптографического преобразования.
Первый элемент строки:
Fe26.2
Он фиксирует версию алгоритма Iron. Это критически важная часть, так как формат и правила обработки токена могут меняться между версиями. Проверка версии происходит до любых других операций.
Следующий сегмент:
<key id>
Используется для выбора правильного секретного ключа из набора доступных. В системах с ротацией ключей это позволяет серверу корректно расшифровать данные даже при смене секретов.
Ключевой момент: идентификатор не является секретом и может безопасно передаваться вместе с токеном.
<encrypted key>
Этот элемент содержит симметричный ключ, зашифрованный мастер-ключом системы. Iron использует концепцию обёртывания ключей: данные шифруются временным ключом, а сам ключ дополнительно защищается.
Такой подход повышает безопасность при масштабировании систем.
<iv>
IV (Initialization Vector) используется для предотвращения детерминированности шифрования. Даже одинаковые входные данные при разных IV дают разные результаты шифрования.
В Iron IV всегда уникален для каждого токена, что исключает повторяемость шифротекста.
<ciphertext>
Основной сегмент, содержащий зашифрованные пользовательские данные. Это результат симметричного шифрования (обычно AES).
Важно:
<mac>
Криптографическая подпись токена. Используется для проверки целостности данных.
MAC защищает от:
Проверка MAC выполняется до попытки расшифровки.
<expiration>
Финальный сегмент отвечает за срок жизни токена. Обычно содержит timestamp или TTL-значение.
При обработке токена выполняется проверка:
Процесс создания sealed-токена можно разложить на последовательность операций:
Формирование строки всегда строго детерминировано:
version * keyId * encryptedKey * iv * ciphertext * mac * ttl
Любое нарушение порядка делает токен недействительным, поскольку MAC рассчитывается на основе конкретной структуры.
Символ * выбран не случайно:
Каждый бинарный сегмент токена кодируется в текстовую форму (обычно Base64URL). Это обеспечивает:
При восстановлении данных выполняется строгая последовательность:
*Любое несоответствие на любом этапе приводит к отклонению токена без раскрытия внутреннего состояния.
Фиксированная структура sealed-токена решает сразу несколько задач:
Комбинация шифрования, подписи и строгого формата делает токен устойчивым к классическим атакам на сессионные данные и передачу состояния между сервисами.