Tsp crypto pro для подписи и задачи криптопро

TSP CRYPTO PRO ДЛЯ ПОДПИСИ И ЗАДАЧИ КРИПТОПРО ЭЦП

Время на прочтение

Я построю свой собственный сервис для подписания документов - FOX ©
Я построю свой собственный сервис для подписания документов — FOX ©

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

Для получения штампа времени использован TSP-сервис http://qs.cryptopro.ru/tsp/tsp.srf

Тестовый TSP-сервер
работает на основе службы штампов времени «КриптоПро TSP Server».

Сервер работает по протоколу TSP поверх HTTP. Для обращения к серверу посредством обычного соединения необходимо использовать адрес http://testca2012.cryptopro.ru/tsp/tsp.srf
или https://testca2012.cryptopro.ru/tsp/tsp.srf
для соединения по протоколу КриптоПро TLS.

Сервер отвечает на запросы штампов времени.

Сертификат подписи штампов времени издан Тестовым Центром Сертификации
КРИПТО-ПРО на основе КриптоПро УЦ 2.0.

Чтобы тестовое программное обеспечение доверяло меткам времени, полученным с данного сервера, необходимо установить корневой сертификат тестового Центра сертификации
в хранилище сертификатов операционной системы «Доверенные корневые центры сертификации».

Для проверки штампов времени также необходим сам сертификат службы штампов. Его можно получить здесь
или при указании в запросе на штамп времени флага certReq
, тогда служба штампов включит свой сертификат в ответ. При использовании КриптоПро TSP Client этот сертификат можно установить в хранилище «Другие пользователи» для того, чтобы функции проверки штампа находили его автоматически.

Тестовая служба штампов времени выдаёт штампы только с политикой, которая является политикой для тестовых штампов времени и не предполагает никаких гарантий и никакой ответственности со стороны владельца службы — ООО «КРИПТО-ПРО».

OID тестовой политики можно не указывать в запросе. Для информации его значение 1.2.643.2.2.38.4.

Используйте данный TSP-сервер только в тестовых целях. Не следует доверять штампам времени, выданным этим сервером, также как и сертификатам тестового Центра сертификации.

Использование ПАК «КриптоПро TSP» позволяет участникам информационных систем получать штампы времени, связанные с электронными документами. Штамп времени представляет из себя электронный документ, подписанный электронной цифровой подписью (электронной подписью), где подписанными данными являются значение хэш-функции электронного документа и время предоставления штампа времени. Таким образом, штамп времени однозначно связан с электронным документом, на который он выдается и обеспечивает его целостность.

Для реализации сервиса TSP необходимо на базе «КриптоПро TSP Server» организовать Сервер службы TSP и встроить «КриптоПро TSP Client» в программное обеспечение клиентских рабочих мест. Встраивание «КриптоПро TSP Client» осуществляется с использованием инструментария разработчика – «КриптоПро PKI SDK».

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

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

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

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

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

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

  • Значение хэш-функции от документа, на который запрашивается штамп (обязательно указывается, какой именно алгоритм хэширования используется);
  • Объектный идентификатор (OID) политики запрашиваемого штампа (необязательно);
  • Nonce — случайное число, идентифицирующее данную транзакцию протокола TSP (необязательно);
  • Дополнения (Extensions) (необязательно).

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

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

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

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

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

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

  • Статус операции и информация об ошибке;
  • Штамп времени (если статус успешный).

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

  • Значение хэш-функции от документа, на который выдан штамп (обязательно указывается, какой именно алгоритм хэширования используется);
  • Объектный идентификатор (OID) политики штампа;
  • Время выдачи штампа;
  • Точность времени;
  • Признак строгой упорядоченности штампов (Ordering);
  • Nonce — случайное число, идентифицирующее данную транзакцию протокола TSP (совпадает с соответствующим полем запроса);
  • Дополнения (Extensions) (необязательно).

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

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

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

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

  • Штампы времени;
  • Сертификат ключа подписи, использованного для создания оригинальной ЭЦП (ЭП);
  • Сертификат УЦ, издавшего сертификат ключа подписи (если цепочка сертификатов содержит другие УЦ, то их сертификаты также необходимо проверить);
  • Сертификат Службы штампов времени;
  • Цепочка сертификатов для проверки сертификата Службы штампов времени;
  • Информацию о статусе сертификатов (Списки отозванных сертификатов или OCSP-ответы).

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

Возможный вариант форматов данных и идентификаторы атрибутов для долговременного хранения документов с ЭЦП (ЭП) на основе 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-значение этого фала.

Основной код для подписания был взят со страниц Подпись PDF с помощью УЭЦП- Page 2 (cryptopro.ru)
и Подпись НЕОПРЕДЕЛЕНА при создании УЭЦП для PDF на c# (cryptopro.ru)
, но он использовался для штампа подписи на PDF документ. Код из этого гайда переделан под сохранение файла подписи в отдельный файл.

Условно процесс можно поделить на 4 этапа:

  1. Поиск сертификата в хранилище — я использовал поиск по отпечатку в хранилище пользователя;

  2. Чтение байтов подписанного файла;

  3. Сохранение файла подписи рядом с файлом.

   using CAdESCOM;
using CAPICOM;
using System;
using System.Globalization;
using System.IO;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Security.Cryptography.Xml;
using System.Text;
using System.Threading.Tasks;
using System.Xml;

public static void Main()
{
  //Сертификат для подписи
	X509Certificate2 gostCert = GetX509Certificate2("отпечаток");
  //Файл, который предстоит подписать
  byte[] fileBytes = File.ReadAllBytes("C:\\Тестовое заявление.pdf");
  //Файл открепленной подписи
  byte[] signatureBytes = SignWithAdvancedEDS(fileBytes, gostCert);
  //Сохранение файла подписи
  File.WriteAllBytes("C:\\Users\\mikel\\Desktop\\Тестовое заявление.pdf.sig", signatureBytes);
}

//Поиск сертификата в хранилище
public static X509Certificate2 GetX509Certificate2(string thumbprint)
{
  X509Store store = CreateStoreObject("My", StoreLocation.CurrentUser);
  store.Open(OpenFlags.ReadOnly);

  X509Certificate2Collection certCollection =
    store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);

  X509Certificate2Enumerator enumerator = certCollection.GetEnumerator();
  X509Certificate2 gostCert = null;
  while (enumerator.MoveNext())
    gostCert = enumerator.Current;
  if (gostCert == null)
    throw new Exception("Certificiate was not found!");

  return gostCert;
}

//Создание УКЭП
public static byte[] SignWithAdvancedEDS(byte[] fileBytes, X509Certificate2 certificate)
{
  string signature = "";
  
  try
  {
    string tspServerAddress = @"http://qs.cryptopro.ru/tsp/tsp.srf";

    CPSigner cps = new CPSigner();
    cps.Certificate = GetCAPICOMCertificate(certificate.Thumbprint);
    cps.Options = CAPICOM_CERTIFICATE_INCLUDE_OPTION.CAPICOM_CERTIFICATE_INCLUDE_WHOLE_CHAIN;
    cps.TSAAddress = tspServerAddress;

    CadesSignedData csd = new CadesSignedData();
    csd.ContentEncoding = CADESCOM_CONTENT_ENCODING_TYPE.CADESCOM_BASE64_TO_BINARY;
    csd.Content = Convert.ToBase64String(fileBytes);

    //Создание и проверка подписи CAdES BES
    signature = csd.SignCades(cps, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES, true, CAdESCOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
    csd.VerifyCades(signature, CADESCOM_CADES_TYPE.CADESCOM_CADES_BES, true);
    
    //Дополнение и проверка подписи CAdES BES до подписи CAdES X Long Type 1 
    //(вторая подпись остается без изменения, так как она уже CAdES X Long Type 1)
    signature = csd.EnhanceCades(CADESCOM_CADES_TYPE.CADESCOM_CADES_X_LONG_TYPE_1, tspServerAddress, CAdESCOM.CAPICOM_ENCODING_TYPE.CAPICOM_ENCODE_BASE64);
    csd.VerifyCades(signature, CADESCOM_CADES_TYPE.CADESCOM_CADES_X_LONG_TYPE_1, true);
  }
  catch (Exception ex)
  {
    throw ex;
  }
  return Convert.FromBase64String(signature);
}  
  

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

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

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

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

TSP CRYPTO PRO ДЛЯ ПОДПИСИ И ЗАДАЧИ КРИПТОПРО

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

Проверка в КриптоАРМ

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

TSP CRYPTO PRO ДЛЯ ПОДПИСИ И ЗАДАЧИ КРИПТОПРО

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

TSP CRYPTO PRO ДЛЯ ПОДПИСИ И ЗАДАЧИ КРИПТОПРО

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

TSP CRYPTO PRO ДЛЯ ПОДПИСИ И ЗАДАЧИ КРИПТОПРО

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

TSP CRYPTO PRO ДЛЯ ПОДПИСИ И ЗАДАЧИ КРИПТОПРО
TSP CRYPTO PRO ДЛЯ ПОДПИСИ И ЗАДАЧИ КРИПТОПРО
TSP CRYPTO PRO ДЛЯ ПОДПИСИ И ЗАДАЧИ КРИПТОПРО

Важно отметить, что серийный номер параметров сертификата принадлежит TSP-сервису http://qs.cryptopro.ru/tsp/tsp.srf

Проверка на Госуслугах

TSP CRYPTO PRO ДЛЯ ПОДПИСИ И ЗАДАЧИ КРИПТОПРО

Проверка в Контур. Крипто

TSP CRYPTO PRO ДЛЯ ПОДПИСИ И ЗАДАЧИ КРИПТОПРО

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

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

Ссылки на публичные источники

UPD1: Поменял в коде переменную, куда записываются байты файла подписи.

Также я забыл написать немного про подпись штампа времени — он подписывается сертификатом владельца TSP-сервиса. По гайду это ООО «КРИПТО-ПРО»:

TSP CRYPTO PRO ДЛЯ ПОДПИСИ И ЗАДАЧИ КРИПТОПРО

UPD2: Про библиотеки CAdESCOM и CAPICOM

Если создать пустой проект на . NET Core 3.1, подключив непропатченные библиотеки, то при обращении к закрытому ключу выпадет исключение «System. NotSupportedException» c сообщением «The certificate key algorithm is not supported.»:

.NET Core 3.1 - Исключение без пропатченных библиотек
. NET Core 3.1 — Исключение без пропатченных библиотек
   <TargetFramework>netcoreapp3.1</TargetFramework>
...
<ItemGroup>
  <COMReference Include="CAdESCOM">
    <WrapperTool>tlbimp</WrapperTool>
    <VersionMinor>0</VersionMinor>
    <VersionMajor>1</VersionMajor>
    <Guid>e00b169c-ae7f-45d5-9c56-672e2b8942e0</Guid>
    <Lcid>0</Lcid>
    <Isolated>false</Isolated>
    <EmbedInteropTypes>true</EmbedInteropTypes>
  </COMReference>
  <COMReference Include="CAPICOM">
    <WrapperTool>tlbimp</WrapperTool>
    <VersionMinor>1</VersionMinor>
    <VersionMajor>2</VersionMajor>
    <Guid>bd26b198-ee42-4725-9b23-afa912434229</Guid>
    <Lcid>0</Lcid>
    <Isolated>false</Isolated>
    <EmbedInteropTypes>true</EmbedInteropTypes>
  </COMReference>
</ItemGroup>
...  
  

Но при использовании пропатченных библиотек это исключение не выпадает и с приватным ключем можно взаимодействовать:

TSP CRYPTO PRO ДЛЯ ПОДПИСИ И ЗАДАЧИ КРИПТОПРО
   <TargetFramework>netcoreapp3.1</TargetFramework>
...
<ItemGroup>
  <Reference Include="System.Security.Cryptography.Pkcs">
    <HintPath>.\corefx\artifacts\bin\runtime\netcoreapp-Windows_NT-Debug-x64\System.Security.Cryptography.Pkcs.dll</HintPath>
  </Reference>
  <Reference Include="System.Security.Cryptography.Xml">
    <HintPath>.\corefx\artifacts\bin\runtime\netcoreapp-Windows_NT-Debug-x64\System.Security.Cryptography.Xml.dll</HintPath>
  </Reference>
</ItemGroup>
...  
  

Также код из гайда работает с . NET Framework 4.8 без использования пропатченных библиотек, но вместо обращения к пространству имен «System. Security. Cryptography», которое подменяется пропатченными библиотеками для . NET Core, CSP Gost3410_2012_256CryptoServiceProvider будет использован из пространства имен «CryptoPro. Sharpei»:

TSP CRYPTO PRO ДЛЯ ПОДПИСИ И ЗАДАЧИ КРИПТОПРО
   <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
...
<ItemGroup>
    <COMReference Include="CAdESCOM">
      <Guid>{E00B169C-AE7F-45D5-9C56-672E2B8942E0}</Guid>
      <VersionMajor>1</VersionMajor>
      <VersionMinor>0</VersionMinor>
      <Lcid>0</Lcid>
      <WrapperTool>tlbimp</WrapperTool>
      <Isolated>False</Isolated>
      <EmbedInteropTypes>True</EmbedInteropTypes>
    </COMReference>
    <COMReference Include="CAPICOM">
      <Guid>{BD26B198-EE42-4725-9B23-AFA912434229}</Guid>
      <VersionMajor>2</VersionMajor>
      <VersionMinor>1</VersionMinor>
      <Lcid>0</Lcid>
      <WrapperTool>tlbimp</WrapperTool>
      <Isolated>False</Isolated>
      <EmbedInteropTypes>True</EmbedInteropTypes>
    </COMReference>
    <COMReference Include="CERTENROLLLib">
      <Guid>{728AB348-217D-11DA-B2A4-000E7BBB2B09}</Guid>
      <VersionMajor>1</VersionMajor>
      <VersionMinor>0</VersionMinor>
      <Lcid>0</Lcid>
      <WrapperTool>tlbimp</WrapperTool>
      <Isolated>False</Isolated>
      <EmbedInteropTypes>True</EmbedInteropTypes>
    </COMReference>
  </ItemGroup>
...  
  

Соберем проект с поддержкой ГОСТ Р 34. 11-2012 256 bit

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

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

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

I — Сборка проекта без сборки corefx для Windows

  1. Установите КриптоПро 5.0 и убедитесь, что у вас есть действующая лицензия. — для меня подошла втроенная в ЭП;

  2. Установите core 3.1 sdk и runtime

    и распространяемый пакет Visual C++ для Visual Studio 2015
    обычно ставится вместе со студией; прим.: на II этапе мне пришлось через установщик студии поставить дополнительное ПО для разработки на C++ — сборщик требует предустановленный DIA SDK.

  3. Задайте переменной среды DOTNET_MULTILEVEL_LOOKUP значение 0 — не могу сказать для чего это нужно, но в оригинальной инструкции это есть;

    1. package_windows_debug.zip распакуйте в .\packages

    2. runtime-debug-windows.zip распакуйте в .\runtime

  4. Добавьте источник пакетов NuGet в файле %appdata%\NuGet\NuGet. Config — источник должен ссылаться на путь .\packages в созданной вами папке. Пример по добавлению источника есть в основной инструкеии. Для меня это не сработало, поэтому я добавил источник через VS Community;

  5.    git clone https://github.com/CryptoProLLC/NetStandard.Library
    New-Item -ItemType Directory -Force -Path "$env:userprofile\.nuget\packages\netstandard.library"
    Copy-Item -Force -Recurse ".\NetStandard.Library\nugetReady\netstandard.library" -Destination "$env:userprofile\.nuget\packages\"  
      
  6. Склонируйте репизиторий DotnetCoreSampleProject
    в .\

  7. Измените файл \DotnetSampleProject\DotnetSampleProject.csproj — для сборок System. Security. Cryptography. Pkcs.dll и System. Security. Cryptography. Xml.dll укажите полные пути к .\runtime;

  8. Перейдите в папку проекта и попробуйте собрать решение. Я собирал через Visual Studio после открытия проекта.

II — Сборка проекта со сборкой corefx для Windows

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

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

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

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

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

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

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

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

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

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

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

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

Лицензирование ПО и версии
  1. КриптоПро CSP версии 5.0 — у меня установлена версия 5.0.11944 КС1, лицензия встроена в ЭП.

  2. КриптоПро TSP Client 2.0 и КриптоПро OCSP Client 2.0 — лицензии покупается отдельно, а для гайда мне хватило демонстрационного срока.

  3. КриптоПро . NET Client версии 1.0.7132.2 — в рамках этого гайда я использовал демонстрационную версию клиентской части и все действия выполнялись локально. Лицензию на сервер нужно покупать отдельно.

  4. Контур. Крипто бесплатен, но требует регистрации. В нем также можно подписать документы КЭП, УКЭП и проверить созданную подпись загрузив ее файлы.

Done.

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

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

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

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

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

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

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

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

      1. TSP CRYPTO PRO ДЛЯ ПОДПИСИ И ЗАДАЧИ КРИПТОПРО
      2. TSP CRYPTO PRO ДЛЯ ПОДПИСИ И ЗАДАЧИ КРИПТОПРО
    3. В протоколе проверки подписи есть блоки «Доказательства подлинности», «Штамп времени на подпись» и «Время подписания». Для сравнения: если документ подписан просто КЭП, то отчет по проверке будет достаточно коротким в сравнении с УКЭП.

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

    Усовершенствованная подпись подтверждена
    Усовершенствованная подпись подтверждена
ЭЦП:  КОМПЬЮТЕР НЕ ВИДИТ КЛЮЧЕВОЙ НОСИТЕЛЬ РУТОКЕН
Оцените статью
ЭЦП64
Добавить комментарий