КриптоПро | Использование КриптоПро TSP

КриптоПро | Использование КриптоПро TSP ЭЦП

Краткое описание протокола tsp

Протокол TSP (Time-Stamp Protocol) является протоколом типа «запрос-ответ». Весь обмен заключается в двух сообщениях. Клиент инициирует взаимодействие, посылая серверу запрос на штамп времени, на что сервер возвращает ответ, содержащий выпущенный штамп или не содержащий его в случае ошибки.

Что имеем на входе?

  1. КриптоПро CSP версии 5.0 — для поддержки Российских криптографических алгоритмов (подписи, которые выпустили в аккредитованном УЦ в РФ)

  2. КриптоПро TSP Client 2.0 — нужен для штампа времени

  3. КриптоПро OCSP Client 2.0 — проверит не отозван ли сертификат на момент подписания

  4. КриптоПро .NET Client — таков путь

  5. Любой сервис по проверке ЭП — я использовал Контур.Крипто как основной сервис для проверки ЭП и КриптоАРМ как локальный. А еще можно проверить ЭП на сайте Госуслуг

  6. КЭП по ГОСТ Р 34.11-2022/34.10-2022 256 bit, которую выпустил любой удостоверяющий центр

Лицензирование ПО и версии

Важное вступление

В гайде описывается формирование отсоединенной подписи в формате PKCS7 (рядом с файлом появится файл в формате .sig). Такую подпись может запросить нотариус, ЦБ и любой кому нужно долгосрочное хранения подписанного документа. Удобство такой подписи в том, что при улучшении ее до УКЭП CAdES-X Long Type 1 (CMS Advanced Electronic Signatures [1]) в нее добавляется штамп времени, который генерирует TSA (Time-Stamp Protocol [2]) и статус сертификата на момент подписания (OCSP [3]) — подлинность такой подписи можно подтвердить по прошествии длительного периода (Усовершенствованная квалифицированная подпись [4]).

Код основан на репозиториях corefx и DotnetCoreSampleProject — в последнем проще протестировать свои изменения перед переносом в основной проект и он будет отправной точкой по сборке corefx. Судя по записям с форума компании [5], решение для .

Так, а что надо на выходе?

А на выходе надо получить готовое решение, которое сделает отсоединенную ЭП в формате .sig со штампом времени на подпись и доказательством подлинности. Для этого зададим следующие критерии:

  1. ЭП проходит проверку на портале Госуслуг, через сервис для подтверждения подлинности ЭП формата PKCS#7 в электронных документах;

  2. КриптоАРМ после проверки подписи

    1. Заполнит поле «Время создания ЭП» — в конце проверки появится окно, где можно выбрать ЭП и кратко посмотреть ее свойства

      Стобец "Время создация ЭП"
      Стобец «Время создация ЭП»
    2. В информации о подписи и сертификате (двойной клик по записе в таблице) на вкладке «Штампы времени» в выпадающем списке есть оба значения и по ним заполнена информация:

      1. Подпись:

        КриптоПро | Использование КриптоПро TSP
      2. Доказательства подлинности:

        КриптоПро | Использование КриптоПро TSP
    3. В протоколе проверки подписи есть блоки «Доказательства подлинности», «Штамп времени на подпись» и «Время подписания». Для сравнения: если документ подписан просто КЭП, то отчет по проверке будет достаточно коротким в сравнении с УКЭП.

  3. Контур.Крипто при проверке подписи выдаст сообщение, что совершенствованная подпись подтверждена, сертификат на момент подписания действовал и указано время создания подпись:

    Усовершенствованная подпись подтверждена
    Усовершенствованная подпись подтверждена

Done.

Гайд написан с исследовательской целью — проверить возможность подписания документов УКЭП с помощью самописного сервиса на .NET Core 3.1 с формированием штампов подлинности и времени подписания документов.

Безусловно это решение не стоит брать в работу «как есть» и нужны некоторые доработки, но в целом оно работает и подписывает документы подписью УКЭП.

Ii — сборка проекта со сборкой corefx для windows

  1. Выполните 1-3 и 6-й шаги из I этапа;

  2. Склонируйте репозиторий corefx в .

  3. Выполните сборку запустив .corefxbuild.cmd — на этом этапе потребуется предустановленный DIA SDK

  4. Выполните шаги 5, 7-9 из I этапа. Вместо условного пути .packages укажите .corefxartifactspackagesDebugNonShipping, а вместо .runtime укажите .corefxartifactsbinruntimenetcoreapp-Windows_NT-Debug-x64

На этом месте у вас должно получиться решение, которое поддерживает ГОСТ Р 34.11-2022 256 bit.

Для чего нужны штампы времени

  • Фиксация времени создания электронного документа. Применение штампа времени позволяет зафиксировать время создания электронного документа. Для этого после создания документа необходимо сформировать запрос на получение штампа времени. Полученный штамп времени обеспечит доказательство факта существования электронного документа на момент времени, указанный в штампе.
  • Фиксация времени формирования электронной цифровой подписи (электронной подписи) электронного документа. Штамп времени может использоваться в качестве доказательства, определяющего момент подписания электронного документа (1-ФЗ «Об ЭЦП», Статья 4; 63-ФЗ «Об ЭП», Статья 11). Для этого после создания электронной цифровой подписи (электронной подписи) документа необходимо сформировать запрос на получение штампа времени. Полученный штамп времени обеспечит доказательство, определяющее момент времени подписания электронного документа.
  • Фиксация времени выполнения какой-либо операции, связанной с обработкой электронного документа. Штамп времени на электронный документ может быть получен при выполнении какой-либо операции, связанной с его обработкой, при необходимости зафиксировать время выполнения этой операции. Например, штамп времени может быть получен при поступлении от пользователя электронного документа на сервер электронного документооборота, либо при предоставлении документа какому-либо пользователю.
  • Долговременное хранение электронных документов, в том числе и после истечения срока действия сертификатов проверки подписи пользователя. Использование штампов времени позволяет обеспечить доказательство времени формирования электронной цифровой подписи (электронной подписи) электронного документа. Если дополнительно на момент времени формирования ЭЦП (ЭП) рядом со значением ЭЦП (ЭП) и штампом времени сохранить и доказательство действительности сертификата (например, получить и сохранить OCSP-ответ), то проверку указанной ЭЦП (ЭП) можно обеспечить на момент времени её формирования (полная аналогия с бумажным документооборотом). И такую подпись можно будет успешно проверять в течение срока действия ключа проверки подписи Службы штампов времени. А что делать, когда сертификат Службы штампов времени истечет? Ответ прост: до истечения этого сертификата получить ещё один штамп времени на указанный документ (уже с использованием нового закрытого ключа и сертификата Службы штампов времени): этот новый штамп зафиксирует время, на которое старый сертификат службы штампов времени был действителен, и обеспечит целостность этого электронного документа при дальнейшем хранении в течение срока действия сертификата нового штампа времени.

Запрос на штамп времени

Запрос на штамп времени включает следующие поля:

Идентификатор политики определяет, по какой политике должен быть выдан штамп времени. Политики штампов времени задаются сервером штампов времени и устанавливают набор правил, по которым выдаются штампы времени, а также области их применения.

Например, в системе может быть определено несколько политик с разными идентификаторами и следующим описанием:

  • Политика для тестовых штампов. Штампы по этой политике выдаются всем пользователям, но могут использоваться только для тестовых целей, а система документооборота не будет принимать такие штампы.
  • Основная политика штампов. Штампы по этой политике выдаются всем зарегистрированным пользователям системы, стоимость одного штампа составляет 5 копеек, точность времени в штампе составляет 10 секунд, а система документооборота будет принимать такие штампы для документов, не являющихся важными.
  • Точная политика штампов. Штампы по этой политике выдаются пользователям, допущенным к работе с важными документами, стоимость одного штампа составляет 25 копеек, точность времени в штампе составляет 1 секунду, а система документооборота будет принимать такие штампы для любых документов.

Поле Nonce позволяет клиенту проверить своевременность полученного ответа, в котором сервер штампов времени должен разместить то же самое значение nonce, которое было в запросе.

Как хранить штампы времени совместно с документами

В RFC 3161 «Internet X.509 Public Key Infrastructure Time-Stamp Protocol (TSP)» описан вариант хранения штампа времени на документ с ЭЦП (ЭП) формата CMS SignedData в неподписанном атрибуте этого CMS-сообщения.

Для организации долговременного архивного хранения документов с ЭЦП (ЭП) могут использоваться штампы времени, а также дополнительные данные, необходимые для подтверждения подлинности ЭЦП (ЭП) – так называемые доказательства подлинности ЭЦП (ЭП). К таковым относятся:

Для обеспечения актуальности ЭЦП (ЭП) при долговременном хранении необходимо периодически получать новые штампы времени.

Возможный вариант форматов данных и идентификаторы атрибутов для долговременного хранения документов с ЭЦП (ЭП) на основе CMS-сообщений описаны в европейском стандарте CAdES (ETSI TS 101 733). Версия этого стандарта опубликована в виде RFC 5126 «CMS Advanced Electronic Signatures (CAdES)».

Немного покодим

Потребуется 2 COM библиотеки: «CAPICOM v2.1 Type Library» и «Crypto-Pro CAdES 1.0 Type Library». Они содержат необходимые объекты для создания УКЭП.

В этом примере будет подписываться BASE64 строка, содержащая в себе PDF-файл. Немного доработав код можно будет подписать hash-значение этого фала.

Операционная платформа компонент пак «криптопро tsp»

«КриптоПро TSP Server» функционирует под управлением операционных систем семейств Windows Server 2003 (x86 или x64), системах Windows Server 2008 (x86 или x64), Windows Server 2008 R2;

«КриптоПро TSP Client» функционирует под управлением операционных систем, на которых может эксплуатироваться СКЗИ «КриптоПро CSP» версии 3.6.

Ответ сервера штампов времени

Ответ сервера штампов времени содержит следующие поля:

Штамп времени представляет собой CMS-сообщение (PKCS#7) типа SignedData (см. RFC 3369 «Cryptographic Message Syntax (CMS)»). Содержимым этого сообщения является структура со следующими полями:

Сервер штампов указывает признак ordering, если он работает в режиме строгой упорядоченности штампов. Т.е. сравнение времён двух выданных этим серверов штампов даже без учёта точности времени определяет порядок их выдачи.

Первым делом создадим новую папку

… и положим туда все необходимое.

Инструкция делится на 2 этапа — мне пришлось выполнить оба, чтобы решение заработало. В папку добавьте подпапки .runtime и .packages

Пробный запуск

Для подписания возьмем PDF-документ, который содержит надпись «Тестовое заявление.»:

Больше для теста нам ничего не надо
Больше для теста нам ничего не надо

Далее запустим программу и дождемся подписания файла:

Готово. Теперь можно приступать к проверкам.

Проверка в криптоарм

Время создания ЭП заполнено:

Штамп времени на подпись есть:

Доказательства подлинности также заполнены:

В протоколе проверки есть блоки «Доказательства подлинности», «Штамп времени на подпись» и «Время подписания»:

Соберем проект с поддержкой гост р 34.11-2022 256 bit

Гайд разделен на несколько этапов. Основная инструкция по сборке опубликована вместе с репозиторием DotnetCoreSampleProject — периодически я буду на нее ссылаться.

Это вообще законно?

С удовольствием узнаю ваше мнение в комментариях.

Оцените статью
ЭЦП64
Добавить комментарий