Пространство имен KJUR.asn1.tsp в библиотеке Jsrsasign
реализует структуры ASN.1, необходимые для работы с протоколом TSP
(Time-Stamp Protocol, RFC 3161). Этот протокол применяется для создания
доверенных временных меток, фиксирующих факт существования данных в
определённый момент времени.
Архитектура модуля ориентирована на формирование и разбор ASN.1-структур запросов и ответов службы временных меток, включая контроль целостности данных, криптографические хэши и параметры подписи.
Модуль построен вокруг набора классов, соответствующих ASN.1-структурам протокола:
TimeStampReqTimeStampRespTSTInfoMessageImprintAccuracyPKIStatusInfoКаждый класс наследует базовую логику ASN.1-объектов Jsrsasign и предоставляет методы сериализации в DER/HEX и, в ряде случаев, вспомогательные методы построения вложенных структур.
Класс TimeStampReq соответствует ASN.1-структуре запроса
RFC 3161.
Запрос временной метки включает:
version — версия протокола (обычно 1)messageImprint — хэш данных и алгоритм хэшированияreqPolicy — идентификатор политики TSA
(опционально)nonce — случайное число для защиты от повторовcertReq — флаг запроса сертификата TSAВнутренний объект MessageImprint описывает хэшируемые
данные:
hashAlgorithm — OID алгоритма (например, SHA-256)hashedMessage — результат хэширования данныхСоздание запроса обычно опирается на передачу конфигурационного объекта:
Основной метод сериализации:
Используется при передаче запроса в TSA (Time Stamping Authority).
Класс TimeStampResp инкапсулирует ответ службы временных
меток.
status — результат обработки запроса
(PKIStatusInfo)timeStampToken — криптографический токен CMS (если
запрос успешен)Объект PKIStatusInfo описывает состояние обработки
запроса.
status — код состояния (0–5 по RFC 3161)statusString — текстовое описаниеfailInfo — дополнительная информация об ошибкеTSTInfo представляет собой основную структуру временной
метки внутри CMS-токена.
version — версия структурыpolicy — OID политики TSAmessageImprint — исходный хэш данныхserialNumber — уникальный номер меткиgenTime — точное время генерацииaccuracy — точность времениordering — признак упорядоченности метокnonce — исходное значение noncetsa — идентификатор TSAПоле genTime критически важно для временной метки и
кодируется в формате ASN.1 GeneralizedTime. Jsrsasign обеспечивает
корректную сериализацию времени в UTC-формате.
Класс Accuracy описывает допустимую погрешность
времени.
seconds — секундыmillis — миллисекундыmicros — микросекундыЭти значения кодируются как отдельные ASN.1 INTEGER поля и могут комбинироваться.
Класс MessageImprint является ключевым элементом как
запроса, так и ответа.
hashAlgorithm — алгоритм хэширования (OID)hashedMessage — бинарный хэшВ Jsrsasign алгоритм хэширования представляется ASN.1-структурой
AlgorithmIdentifier, включающей:
Все основные классы KJUR.asn1.tsp используют единый
подход к сериализации.
Базовый метод:
Используется для передачи данных в TSA и хранения токенов.
Каждый объект строится на основе:
ASN1ObjectASN1SequenceASN1IntegerASN1OctetStringASN1UTCTime / ASN1GeneralizedTimeЭта модель обеспечивает строгую совместимость с RFC 3161.
Процесс формирования временной метки включает последовательную вложенность объектов:
MessageImprint формирует хэш данныхTimeStampReq инкапсулирует запросTimeStampResptimeStampToken содержится CMS-структураTSTInfo извлекается из CMS и содержит итоговую
меткуМодуль KJUR.asn1.tsp отличается следующими
характеристиками:
Используются:
MessageImprintTimeStampReqИспользуются:
TimeStampRespPKIStatusInfoTSTInfoТиповая структура TSTInfo в ASN.1 выглядит следующим образом:
SEQUENCE
Jsrsasign отражает эту структуру через вложенные ASN.1 классы, сохраняя иерархию без упрощений.
OID (Object Identifier) используется для:
В Jsrsasign OID передаётся строкой и преобразуется в ASN.1 OBJECT IDENTIFIER автоматически.
TimeStampResp часто содержит CMS SignedData, внутри
которого находится:
Jsrsasign обеспечивает совместное использование модулей:
KJUR.asn1.cmsKJUR.asn1.tspчто позволяет извлекать временные метки из подписанных контейнеров.
Поле nonce в TimeStampReq и
TSTInfo используется для:
Jsrsasign не накладывает ограничений на генерацию nonce, но обеспечивает корректную сериализацию в ASN.1 INTEGER.
Все структуры в KJUR.asn1.tsp кодируются в DER:
Результат сериализации всегда детерминирован, что критично для криптографической верификации.