TimeStampResponse в протоколе RFC 3161 представляет собой ASN.1 структуру ответа службы временных меток (TSA), которая возвращается клиенту после запроса TimeStampRequest. В библиотеке Jsrsasign эта структура разбирается и обрабатывается как объект, содержащий статус выполнения запроса и криптографически защищённый токен временной метки.
Основная задача TimeStampResponse заключается в том, чтобы подтвердить факт существования определённых данных на момент времени, зафиксированный доверенным источником. Вся структура делится на две крупные части: информация о статусе обработки запроса и сам токен временной метки, который представляет собой CMS SignedData.
Первым ключевым элементом TimeStampResponse является структура PKIStatusInfo. Она определяет результат обработки запроса TSA-сервером.
Состав PKIStatusInfo:
status (PKIStatus) Целочисленное значение, отражающее итог выполнения запроса:
statusString (PKIFreeText) Опциональное текстовое поле, содержащее человекочитаемое описание результата. Может включать несколько строк с пояснениями от TSA.
failInfo (PKIFailureInfo) Битовое поле, уточняющее причину ошибки при отклонении запроса. Используется только при статусах отказа. Возможные флаги включают:
В Jsrsasign данный блок обычно интерпретируется как объект, содержащий числовой статус и дополнительные строки диагностики, которые можно извлечь после парсинга DER-структуры.
Вторая и наиболее важная часть TimeStampResponse — это TimeStampToken. Он присутствует только в случае успешной обработки запроса (status = 0 или 1) и содержит саму подпись временной метки.
TimeStampToken реализуется как структура CMS (Cryptographic Message Syntax), а именно SignedData.
Внутреннее устройство TimeStampToken:
ContentInfo
SignedData
Особенность TimeStampToken заключается в том, что он содержит не произвольные данные, а специально сформированное значение TSTInfo.
Внутри SignedData находится структура TSTInfo, которая и несёт смысл временной метки.
Ключевые поля TSTInfo:
version — версия структуры (обычно 1)
policy — OID политики TSA
messageImprint
serialNumber — уникальный номер временной метки
genTime — зафиксированное время создания метки
accuracy — точность времени (в секундах, миллисекундах, микросекундах)
nonce — случайное значение для защиты от повторов
tsa — идентификатор центра времени (опционально)
extensions — дополнительные расширения
Именно genTime является ключевым элементом, подтверждающим существование данных на конкретный момент времени.
В Jsrsasign работа с TimeStampResponse обычно осуществляется через модуль TSP (Time Stamping Protocol), входящий в пространство имён KJUR.asn1.tsp.
Объект TimeStampResponse после декодирования DER/PEM представляет собой JavaScript-структуру, где основные элементы доступны как свойства:
При наличии токена он дополнительно декодируется как CMS SignedData через встроенные парсеры Jsrsasign.
TimeStampResponse кодируется в ASN.1 DER формате. При парсинге библиотека последовательно извлекает:
Внутренне Jsrsasign использует ASN.1 парсер, который преобразует бинарные данные в объектную структуру. Для CMS части применяется отдельный разборщик SignedData, так как формат повторно используется в S/MIME и PKCS#7.
TimeStampResponse всегда является ответом на TimeStampRequest. Связь между ними обеспечивается через поле messageImprint:
Если хеши не совпадают, TimeStampResponse не формируется как успешный и возвращается ошибка в PKIStatusInfo.
При работе с TimeStampResponse в Jsrsasign важно учитывать несколько особенностей:
Jsrsasign предоставляет низкоуровневые средства для декодирования ASN.1, но проверка криптографической целостности требует корректной обработки всей цепочки CMS.
Обобщённая логическая структура выглядит следующим образом:
TimeStampResponse
PKIStatusInfo
TimeStampToken (опционально)
ContentInfo
SignedData
TSTInfo
TimeStampResponse является связующим звеном между криптографическим запросом и доказательством времени существования данных. Его структура построена таким образом, чтобы обеспечивать:
В Jsrsasign эта структура выступает как комплексный объект, объединяющий ASN.1 декодирование, CMS обработку и извлечение временных атрибутов.