Skip to content

TSP

1. Общие сведения

1.1 Описание

TSP (Time Stamping Protocol) — протокол, используемый для получения доверенной метки времени в соответствии с RFC 3161. Метка времени позволяет подтвердить существование определённого документа или подписи на момент выдачи метки.

ООО "КРИПТО-ПРО" предоставляет сервис доверительного времени (TSP), доступный по следующему URL:

http://qs.cryptopro.ru/tsp/tsp.srf

Сервис может быть использован как часть процесса формирования электронной подписи (например, при создании CMS-подписей или CAdES).


2. Поддерживаемые стандарты и протоколы

2.1 Протоколы

  • RFC 3161 — Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP)
  • PKIX — Public Key Infrastructure X.509

2.2 Алгоритмы хэширования

Поддерживаемые алгоритмы хэширования: - GOST R 34.11-2012 (256 бит и 512 бит) - SHA-1, SHA-256, SHA-384, SHA-512

⚠️ SHA-1 не рекомендуется использовать из-за уязвимостей.


3. Формат запроса

Запрос к TSP-сервису представляет собой DER-кодированный объект типа TSTInfo, обёрнутый в PKCS#7 / CMS структуру согласно RFC 3161.

3.1 Структура запроса

TimeStampReq ::= SEQUENCE {
    version          INTEGER  { v1(1) },
    messageImprint   MessageImprint,
    reqPolicy        OBJECT IDENTIFIER OPTIONAL,
    nonce            INTEGER OPTIONAL,
    certReq          BOOLEAN DEFAULT FALSE,
    extensions       [0] IMPLICIT Extensions OPTIONAL
}

Где: - messageImprint — хэш данных, для которых запрашивается метка времени. - reqPolicy — идентификатор политики (OID), если требуется специальная политика метки времени. - nonce — случайное число, которое будет включено в ответ для предотвращения повторных атак. - certReq — флаг, указывающий, требуется ли сертификат TSA в ответе. - extensions — дополнительные параметры.


4. Формат ответа

Ответ от сервера также соответствует RFC 3161 и представляет собой DER-кодированный объект TimeStampResp.

4.1 Структура ответа

TimeStampResp ::= SEQUENCE {
    status               PKIStatusInfo,
    timeStampToken       TimeStampToken OPTIONAL
}
  • status — содержит код состояния операции (granted, rejected, waiting, и др.)
  • timeStampToken — токен метки времени, содержащий подписанную структуру TSTInfo.

Пример содержимого TSTInfo:

TSTInfo ::= SEQUENCE {
    version                      INTEGER { v1(1) },
    policy                       OBJECT IDENTIFIER,
    messageImprint               MessageImprint,
    serialNumber                 INTEGER,
    genTime                      GeneralizedTime,
    accuracy                     Accuracy OPTIONAL,
    ordering                     BOOLEAN DEFAULT FALSE,
    nonce                        INTEGER OPTIONAL,
    tspName                      GeneralName OPTIONAL,
    extensions                   [0] EXPLICIT Extensions OPTIONAL
}

5. Работа с сервисом

5.1 Получение метки времени через командную строку (OpenSSL)

Если используется OpenSSL, можно получить метку времени следующим образом:

Шаг 1: Создать хэш файла

openssl dgst -sha256 -binary file.txt > file.sha256

Шаг 2: Отправить запрос на TSP-сервер

openssl ts -query -data file.sha256 -sha256 -no_nonce -out request.tsq

Шаг 3: Отправить запрос на сервер с помощью curl

curl -H "Content-Type: application/timestamp-query" \
     --data-binary @request.tsq \
     http://qs.cryptopro.ru/tsp/tsp.srf > response.tsr

Шаг 4: Проверить ответ

openssl ts -reply -in response.tsr -text

5.2 Использование через CryptoPro CSP

Если вы работаете в среде Windows с установленным CryptoPro CSP, можно использовать утилиту cryptcp.

Пример:

cryptcp -ts http://qs.cryptopro.ru/tsp/tsp.srf -in file.sig -out timestamped.sig

Также можно добавлять метку времени к подписи при помощи CryptoAPI или CAPICOM.


6. Сертификаты

Сертификат TSP-сервера выдан УЦ ООО "КРИПТО-ПРО". Для проверки подписи метки времени необходимо иметь корневой или промежуточный сертификат УЦ.


7. Требования к клиентам

  • Поддержка протокола HTTP/1.1
  • Возможность отправлять и принимать данные в формате DER
  • Корректно сформированный запрос в формате RFC 3161
  • Наличие актуальных корневых сертификатов для проверки ответа

8. Ошибки и коды ответов

Код Описание
0 granted — запрос успешно выполнен
1 grantedWithMods — выполнено с модификациями
2 rejection — запрос отклонён
3 waiting — запрос принят, ожидает обработки
4 revocationWarning — есть предупреждение о отзыве
5 revocationNotification — уведомление об отзыве
6 signingCertificateMissing — нет необходимого сертификата
7 timeNotAvailable — время недоступно

9. Часто задаваемые вопросы

❓ Как проверить метку времени?

Используйте openssl ts -verify или аналогичные средства проверки подписи в вашем приложении.

❓ Можно ли использовать GOST-хэши?

Да, начиная с версий OpenSSL 1.1.1 и выше, поддерживается GOST R 34.11-2012.

❓ Какой максимальный размер данных для хэширования?

Хэш рассчитывается клиентом заранее, поэтому ограничений на размер исходных данных нет.