(2022-08-15 13:06:35 отредактировано Sign)

Подпись файла в (cades-x xl) используя PKCS#11 / Рутокен ЭЦП 2.0

Добрый день!

Необходимо подписывать (квалиф. открепленная  подпись) файлы с tsa и ocsp (для "долгой" валидации, cades-x long type1)
Возможно ли это сделать стандартными средствами (из рутокен разрабочика) используя Рутокен ЭЦП 2.0
например патченным openssl (тут -  https://dev.rutoken.ru/pages/viewpage.a … d=43450389 про PKCS#11 ничего не сказано, но где-то видел примеры что работает )
Как работать с TSA (openssl) разобрался:

  • формируем с пом. openssl запрос .tsq

  • получаем ответ: .tsr  (можем его конвертировать в tsa token .tk , не понятно нужно это или нет для подписи)

  • валидирем запрос с ответом используя сертификаты TSA (валидацию проходит)

далее не понятно как подписать файл (открепленной подписью), ясно что нужно указать ключ -cms, но как добавить TSA (в каком виде и куда? подозреваю что добавлять нужно токен, см .выше) и как использовать OCSP (куда добавлять ответы ocsp и в каком виде, хотя еще с запросами не разбирался, но разберусь), так понимаю на выходе должна получиться подпись cades-x long type 1 (в крипто-про ее так называют), которая должна валидироваться и после окончания сертификата, с валидной меткой времени.

Есть ли возможность (если есть, то как) использовать другие приложения(с командной строки, linux) или какие-нибудь обертки  для данной подписи? (python,php)

ps: примеры на С видел, в частности с cades-t "sdk\openssl\samples\3.0\CAdES-T", (c ocsp, примера нет) но С учил/читал местами, 25 лет назад, так что желательно что-то попроще)
pps: есть реализации на питоне - https://github.com/a513/PythonPKCS11Gost
но там, тоже нет tsa и ocsp готовых (возвращаемся опять к нативным библиотекам на С)

За статью на хабре, спасибо (https://habr.com/ru/company/aktiv-company/blog/544748/)

Заранее благодарен, за ответы!

Re: Подпись файла в (cades-x xl) используя PKCS#11 / Рутокен ЭЦП 2.0

Добрый день!

Насколько понимаем, вы решаете задачу долговоременного (архивного) хранения электронной подписи.
В настоящий момент готового решения Рутокен для выполнения подписи в формате CAdES-* помимо CAdES-BES и CAdES-T нет.

Как вы уже обнаружили, подпись CAdES-T реализована в Рутокен SDK в виде исходного кода примера. Кроме этого, выполнить подпись CAdES-T можно на Демо-портале Рутокен Плагина (вкладка "ЭЦП и аутентификация").

В openssl (если говорить об openssl-tool), реализована поддержка только CAdES-BES. Поддержка расширенных форматов в openssl может быть реализована только программными средствами, и это будет не совсем тривиальной задачей.

Альтернативный путь (опять же, программный) -- использование BouncyCastle. В нем, по крайней мере, присутствуют абстракции, имеющие отношения к составляющим формата CAdES-C: OcspResponsesID, CrlOcspRef, etc. В качестве отправной точки для начала разработки по этому пути можно использовать пример CadesTSignVerifyAttachedGOSTR3410_2012_256.java.

Для понимания, что CAdES-X Long Type 1 -- это не просто "добавить ответы TSA и OCSP-сервера", можно посмотреть на такую картинку:
https://forum.rutoken.ru/uploads/images/2022/08/f89a47842af35b42a6ac215f7c84ca67.png

В качестве справочной информации по форматам CAdES можно посоветовать неплохой обзор Юрия Сторожевского: https://www.strozhevsky.com/free_docs/CAdES.pdf.

Можете подробней рассказать о решаемой задаче (например, по почте hotline@rutoken.ru) -- возможно, мы сможем еще чем-либо помочь.

Re: Подпись файла в (cades-x xl) используя PKCS#11 / Рутокен ЭЦП 2.0

Евгений, спасибо большое, за быстрый ответ!

Java это конечно хорошо, только С лучше)

Вся доступная информация из интернетов уже прочитана и частично усвоена.
Статью Юрия Сторожевского так же читал (хорошая статься, упор только на уязвимости)
То что CAdES-X Long Type 1 это не {просто "добавить ответы TSA и OCSP-сервера"} понял уже где-то 3 недели назад ) тогда же начал разбираться с ASN1 (что бы понять в какие поля что пишется) и понял что там тоже можно утонуть...

Обязательно, напишу на почту, только сформулирую задачу поточнее.

ps: в принципе все что нужно есть тут https://github.com/a513/CryptoArmPKCS
только это Tcl, и насколько понял, некоторые куски уже скомпилированы