криптопро force

криптопро force Электронная цифровая подпись

Эта статья посвящена тому, как перестать использовать Крипто Про и перейти на Bouncy Castle в девелоперском/тестовом окружении. В начале статьи будет больше про СМЭВ и его клиент, в конце — больше про конвертирование ключей с готовой копипастой, чтобы можно было начать прямо сейчас.

Картинка для привлечения внимания:

криптопро force

И сразу же ответ:

криптопро force

Содержание
  1. Общие положения
  2. Важное вступление
  3. Disclamer
  4. Ответственность
  5. Условия использования Программного продукта
  6. Порядок расторжения Соглашения
  7. Предмет Соглашения
  8. Выдача контейнера PKCS12
  9. Done.
  10. Немного покодим
  11. Пробный запуск
  12. Проверка в КриптоАРМ
  13. Проверка на Госуслугах
  14. Проверка в Контур. Крипто
  15. Выдача контейнера JKS
  16. Изменение условий Соглашения
  17. Локальные прокси
  18. Так, а что надо на выходе?
  19. Криптопровайдеры
  20. Гарантии
  21. Как мы можем грубо заставить Крипто Про отдать ключи
  22. Инициализация XML-подписи в Santuario
  23. Резюме
  24. Форс-мажор
  25. Срок действия
  26. Соберем проект с поддержкой ГОСТ Р 34. 11-2012 256 bit
  27. Первым делом создадим новую папку
  28. I – Сборка проекта без сборки corefx для Windows
  29. II – Сборка проекта со сборкой corefx для Windows
  30. Тестовые самоподписанные ключи
  31. Как мы можем попросить Крипто Про отдать ключи (на самом деле, нет)
  32. Криптографические решения. От криптопровайдеров до браузерных плагинов
  33. Вознаграждение
  34. Что нужно допилить в готовом клиенте, чтобы сбежать с Крипто Про
  35. Что имеем на входе?
  36. Нативные библиотеки
  37. PKCS#11
  38. NSS
  39. Библиотеки c собственным интерфейсом
  40. Подготовка OpenSSL для работы с ГОСТ
  41. Браузерные плагины
  42. Кроссбраузерные плагины
  43. ActiveX
  44. Разрешение споров

Общие положения

1 Настоящее соглашение (далее по тексту – Соглашение) всоответствии с п. 428 Гражданского кодекса Российской Федерации является формой, определяющей условия договора присоединения. Присоединение к настоящему Соглашению осуществляется путем оплаты счета (являющегося офертой), выставляемого Лицензиатом в адрес Сублицензиата. Оплата счета является акцептом (согласием) Сублицензиата с условиями настоящего Соглашения.

Настоящие условия являются условиями Соглашения между ООО “ИТ-Трейд” (Далее – Лицензиат) и физическим или юридическим лицом, принявшем настоящие условия (далее – Сублицензиат) о приобретении программных продуктов, товаров и услуг через Интернет-магазин(далее – «Товар»), именуемые по отдельности Сторона, а совместно – Стороны. Лицензиат гарантирует, что имеет право предоставлять права на использование Программных продуктов, размещенных в Интернет-магазине, на основании соответствующих лицензионных договоров, заключенных с Правообладателями Программных продуктов.

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

Сборка ключей версии КриптоПро 5. 0 найденные на просторах интернета с открытых источников. Подборка сделана для удобства поиска. При нахождении новых ключей список будет пополнятся. 5050H-E000C-MTCQE-H1TWV-RTNUK — 5. 123304040E-F000P-G1QZB-FP4C0-8LT5X  — 5. 1233050500-00000-0U000-00BRZ-8ZTCN — 5. 12330 кс14040W-20000-0168K-VQCQR-8XH45 — 5. 04040A-Q333K-9KAC2-9A6QR-6FCZN — 5. 050500-00120-0Z178-0055H-AMWN1 —  серверный проверялся на 5. 119984040N-B0000-01YNB-TB150-0Y5NK — 5 версияДля других версийКриптоПро 5. 0
КриптоПро 4. 0
КриптоПро 3. 9
КриптоПро 2. 0
КриптоПро РАЗНЫЕ

криптопро force

Остерегайтесь мошенников которые продают ключи КриптоПро в телеграмме

КриптоПро SSF – это программный комплекс, позволяющий использовать средство криптографической защиты информации (СКЗИ) КриптоПро CSP в продуктах компании SAP AG.

КриптоПро SSF обеспечивает криптографическую защиту электронных документов с использованием российских криптоалгоритмов (ГОСТ 28147-89, ГОСТ Р 34. 11-94 / ГОСТ Р 34. 11-2012, ГОСТ Р 34. 10-2001 / ГОСТ Р 34. 10-2012)

  • Формирование и проверку усиленной квалифицированной электронной подписи данных.
  • Шифрование и расшифрование данных.
  • Вычисление значения хэш-функции.
  • Поддержка формата криптографических сообщений согласно RFC 3852 Cryptographic Message Syntax (CMS) с учетом RFC 4490 Using the GOST 28147-89, GOST R 34.11-94, GOST R 34.10-94, and GOST R 34.10-2001 Algorithms with Cryptographic Message Syntax (CMS).
  • Поддержка формата криптографических сообщений усовершенствованной электронной подписи – CAdES X Long с фиксацией времени подписания электронного документа посредством реализации протокола TSP согласно рекомендациям RFC 3161 и хранением всех доказательств подлинности этой электронной подписи

Disclamer

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

Недавно мне нужно было разобраться, как написать сервис, работающий с Системой Межведомственного Электронного Взаимодействия. Все написанное представляет собой просто результат небольшого исследования, максимально абстрагированный от выполненной работы. И даже приблизительно угадать что-то о реально принятых решениях невозможно, я проверял.

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

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

криптопро force

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

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

криптопро force

NET Core 3. 1 – Исключение без пропатченных библиотек

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

криптопро force

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

криптопро force

Ответственность

Сублицензиат приобретает право на использование Программного продукта в объеме, оговоренном настоящим Соглашением, и несет ответственность за его использование в соответствии с рекомендациями, изложенными в эксплуатационной документации, и действующим законодательством Российской Федерации. Незаконное использование  Программного продукта является нарушением законодательства Российской Федерации и преследуется по закону. В случае невыполнения и/или ненадлежащего выполнения условий использования  Программного продукта, установленных разделом  4 настоящего Соглашения, <Лицензиат
 имеет право приостановить действие права на использование Программного продукта (сублицензию) и/или аннулировать право на использование Программного продукта (сублицензию). При этом в целях настоящего пункта под приостановлением действия права на использование  Программного продукта (сублицензии) понимается временный запрет на использование Программного продукта с использованием ключа установки Программного продукта. Под аннулированием права на использование  Программного  продукта (сублицензии) понимается постоянный запрет на использование  Программного продукта  с использованием ключа установки Программного продукта. Лицензиат
 не несет ответственность за косвенные или побочные убытки, ущерб или вред, включая упущенную прибыль, перерывы в хозяйственной деятельности, потерю деловой информации и т. , которые могут возникнуть у Сублицензиата в результате использования Программного продукта.

Условия использования Программного продукта

Право на использование Программного продукта на условиях Соглашения предоставляет Сублицензиату право использовать Программный продукт  в соответствии с его назначением и правилами пользования, изложенными в эксплуатационной документации производителя. Сублицензиат имеет право  предоставить полученное от Лицензиат
а право на использование Программного продукта на условиях Соглашения юридическому или физическому лицу по сублицензионному договору или иным не запрещенным законом способом, в том числе путем продажи, проката, сдачи внаем, предоставления взаймы, др. Сублицензиат не имеет права:
4. Тиражировать и опубликовывать лицензию. Опубликовывать Программный продукт. Использовать для записи Программного продукта на ЭВМ ключи установки, не указанные в лицензии. Декомпилировать Программный продукт (преобразовывать объектный код в исходный текст) и модифицировать компоненты  Программный продукт, в том числе поручать иным лицам осуществлять эти действия. Вносить какие-либо изменения в объектный код  Программного продукта  за исключением тех, которые вносятся средствами, описанными в документации. Совершать относительно Программного продукта иные действия, нарушающие российские и международные нормы законодательства.

Порядок расторжения Соглашения

В случае нарушения Сублицензиатом условий настоящего Соглашения или неспособности далее выполнять его условия, все компоненты Программного продукта (включая печатные материалы, магнитные носители, файлы с информацией, архивные копии) должны быть уничтожены. Право на использование Программного продукта на условиях простой (неисключительной) лицензии подлежит возврату. Факт уничтожения  Программного продукта Сублицензиат обязан подтвердить в письменном виде. Со дня получения письменного подтверждения об  уничтожении  Программного продукта и возврата простой (неисключительной) лицензии настоящее  Соглашение прекращает свое действие.

Предмет Соглашения

В рамках настоящего Соглашения  Лицензиат
 за вознаграждение  предоставляет Сублицензиату право на использование Программного продукта на условиях простой (неисключительной) лицензии в соответствии со счетом (являющегося офертой) в целях использования Программного продукта на территории Российской Федерации в объеме и способами, установленными разделом 4 настоящего Соглашения.

Выдача контейнера PKCS12

В принципе, это не особо нужно, потому что у нас уже есть простой и удобный способ выдавать JKS, а JKS для Java это самое что ни на есть родное решение. Но для полноты картины, пусть будет.

  • Подготовить OpenSSL с ГОСТом по инструкции (есть в этой статье).
  • GOST2001-md_gost94 hex (если надо):openssl.exe dgst -hex -sign private.key.pem message.xml
  • MIME application/x-pkcs7-signature (если надо):openssl smime -sign -inkey private.key.pem -signer crt.crt -in message.xml
  • Превратить pem в pkcs12:openssl pkcs12 -export -out private.key.pkcs12 -in private.key.pem -name “alias”

Done.

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

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

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

Потребуется 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 этапа:

  • Поиск сертификата в хранилище – я использовал поиск по отпечатку в хранилище пользователя;
  • Чтение байтов подписанного файла;
  • Сохранение файла подписи рядом с файлом.

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

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

криптопро force

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

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

криптопро force

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

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

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

криптопро force

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

криптопро force

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

криптопро force

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

криптопро force

криптопро force

криптопро force

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

криптопро force

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

криптопро force

Выдача контейнера JKS

Идея в том, что раз уж мы все равно используем Bouncy Castle, то им же можем и сгенерить ключ. Этот код не самый идеальный, но дает реально работающую реализацию (на практике у меня в результате получилось несколько объемных классов, чтобы сделать удобный интерфейс)

Изменение условий Соглашения

Внесение изменений (дополнений) в настоящее Соглашение производится Лицензиат
ом в одностороннем порядке. Уведомление о внесении изменений (дополнений) в настоящее Соглашение осуществляется Лицензиат
ом путем размещения указанных изменений (дополнений) на сайте Лицензиата
: www. cryptostore. Все изменения (дополнения), вносимые Лицензиат
ом в настоящее Соглашение и не связанные с изменением действующего законодательства Российской Федерации, вступают в силу и становятся обязательными для Сублицензиатов по истечении 30 (тридцати) календарных дней с даты размещения изменений (дополнений) на сайте: www. cryptostore. Вступившие в силу изменения (дополнения) к настоящему Соглашению распространяются равно на всех Сублицензиатов, присоединившихся к Соглашению.

Локальные прокси

Основным принципом действия локального прокси является прием незащищенного соединения от приложения, установка TLS-туннеля с удаленным сервером и передача «прикладного уровня» между приложением и удаленным сервером по этому туннелю.

криптопро force

Спецификация-
ПлатформыСемейство Windows, GNULinux, OS X. На базе СПО iOS, Android
Алгоритмы и криптографические протоколыЭЦП, шифрование, хэш-функция, имитозащита, HMAC, VKO;
TLS
Интеграция с PKIX. 509, PKCS#10, CMS, CRL, OCSP, TSP
Механизмы ЭЦППодпись WEB-форм при прохождении траффика
WEB API
Механизмы аутентификацииклиентская аутентификация в рамках TLS
Механизмы “гостирования” TLSЧерез механизм проксирования
Форматы защищенных сообщенийPKCS#7, CMS
Интеграция с браузеромЧерез механизм проксирования
Мобильные платформыiiOS, Android на базе СПО sTunnel
Хранилища ключейРеестр, файлы, USB-токены
Взаимодействие с USB-токенамиХранилище ключей и сертификатов
Использование аппаратной реализации алгоритмов
Через PKCS#11, PC/SC, APDU
ПриложенияБраузеры
WEB-сервера
RDP
Почтовые клиенты и сервера
ИнсталляцияПрограмма установки, в целом не требуются права системного администратора
Копирование, запуск
Запуск с FLASH-памяти USB-токена

Примеры (ГОСТ)МагПро КриптоТуннель
Inter-PRO
VPNKey-TLS
LirTunnel
КриптоПро sTunnel
sTunnel

  • прокси должен быть запущен;
  • приложение должно работать через прокси, нужно «научить» его этому;
  • могут использоваться нестандартные порты, отсюда проблемы в файрволом
  • дополнительные ограничения на разработку web-сайта — в ряде случаев использование только относительных ссылок, чтобы не «вылететь» из туннеля
  • прокси сконфигурирован на проксирование конечной группы сайтов, расширение группы — это обновление клиентского конфига
  • работа через внешний прокси требует дополнительного конфигурирования локального прокси, при этом могут быть проблемы с аутентификацией пользователя на внешнем прокси
  • решение использует универсальную технологию, поэтому можно не бояться его устаревания;
  • решение может применяться на большом числе платформ, в том числе на мобильных платформах;
  • кроссбраузерность, поддержка всех WEB-серверов без модификации;
  • не требует инсталляции;
  • поддержка различных прикладных протоколов.

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

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

  • ЭП проходит проверку на портале Госуслуг, через сервис для подтверждения подлинности ЭП формата PKCS#7 в электронных документах;
  • КриптоАРМ после проверки подписиЗаполнит поле “Время создания ЭП” – в конце проверки появится окно, где можно выбрать ЭП и кратко посмотреть ее свойстваСтобец “Время создация ЭП”В информации о подписи и сертификате (двойной клик по записе в таблице) на вкладке “Штампы времени” в выпадающем списке есть оба значения и по ним заполнена информация:В протоколе проверки подписи есть блоки “Доказательства подлинности”, “Штамп времени на подпись” и “Время подписания”. Для сравнения: если документ подписан просто КЭП, то отчет по проверке будет достаточно коротким в сравнении с УКЭП.
  • Заполнит поле “Время создания ЭП” – в конце проверки появится окно, где можно выбрать ЭП и кратко посмотреть ее свойстваСтобец “Время создация ЭП”
  • В информации о подписи и сертификате (двойной клик по записе в таблице) на вкладке “Штампы времени” в выпадающем списке есть оба значения и по ним заполнена информация:
  • В протоколе проверки подписи есть блоки “Доказательства подлинности”, “Штамп времени на подпись” и “Время подписания”. Для сравнения: если документ подписан просто КЭП, то отчет по проверке будет достаточно коротким в сравнении с УКЭП.
  • Контур.Крипто при проверке подписи выдаст сообщение, что совершенствованная подпись подтверждена, сертификат на момент подписания действовал и указано время создания подпись:Усовершенствованная подпись подтверждена

Криптопровайдеры

Де-факто стандартом отрасли является класс криптосредств, известных как криптопровайдеры. Криптопровайдер — это предоставляющая специальный API и специальным образом зарегистрированная в ОС библиотека, которая позволяет расширить список поддерживаемых в ОС криптоалгоритмов.

Следует отметить, что несовершенство предлагаемых MS Windows механизмов расширения вынуждает разработчиков криптопровайдеров дополнительно модифицировать высокоуровневые криптобиблиотеки и приложения MS Windows в процессе их выполнения для того, чтобы «научить» их использовать российские криптоалгоритмы.

Следует понимать, что не все СКЗИ одного вида реализуют полный объем функциональности, приведенный в таблицах. Для уточнения возможностей криптосредств следуют обратиться к производителю.

криптопро force

  • Отсутствие нормальной кроссплатформенности;
  • Установка с правами администратора, настройка;
  • Установка обновления Windows может потребовать обновления провайдера;
  • Необходимость встраивания в приложения посредством модификации кода «на лету»;
  • CSP — неродной интерфейс для не-Windows-приложений.
  • Широкий охват Windows-приложений;
  • Богатый инструментарий для разработчиков защищенных систем;
  • Апробированная на большом количестве проектов технология.

Гарантии

Лицензиат
 гарантирует работоспособность  Программного продукта только в случае установки и использования Программного продукта с эталонного материального носителя  – Дистрибутива, и  при условии эксплуатации  Программного продукта  на оборудовании,  соответствующем техническим требованиям, изложенным в эксплуатационной документации,  отсутствия несанкционированного вмешательства в работу Программного продукта на низком уровне, в том числе при исключении воздействия вредоносных компьютерных программ (вирусов). Гарантийный срок составляет 12 (Двенадцать) месяцев со дня подписания Сторонами  документов, подтверждающих приемку  Программного продукта в составе Дистрибутива (товарная накладная или акт приема-передачи). В период гарантийного срока Лицензиат
 будет использовать все разумные средства для того, чтобы идентифицировать и исправить в разумный период времени и за свой счет ошибки, которые были обнаружены Сублицензиатом в текущей версии Программного продукта и сообщены  Лицензиат
у, при условии, что Программный продукт  использовался в соответствии с  техническим требованиям, изложенным в эксплуатационной документации.

Как мы можем грубо заставить Крипто Про отдать ключи

Вот тут наступает момент “это радость со слезами на глазах”. Некая контора под названием Лисси Софт, всего за 2 тыщи рублей отдает нам гениальную утилиту P12FromGostCSP. Ее создатели таки победили ту проблему, которую не осилило сообщество, и она выдирает ключи в PFX. Радость — потому что она работает.

Со слезами — потому что это проприетарщина, и она фиг знает как работает. На картинке Ричард Столлман как бы удивляется и спрашивает: “неужели вы боретесь с проприетарщиной с помощью другой проприетарщины?”

криптопро force

Так что целиком инструкция по перегону ключей выглядит как-то так:

  • Все действия производить на Windows (подойдет виртуальная машина) с установленным Крипто Про CSP;
  • Подготовить OpenSSL с ГОСТом по инструкции (есть в этой статье).
  • Купить P12FromGostCSP. Поплакать.
  • Установить исходный ключ в КриптоПро (это заслуживает отдельной инструкции, но она гуглится).
  • Запустить P12FromGostCSP (перед этим спрятать икону Ричарда Столлмана под стол, чтобы он не проклял тебя за запуск проприетарщины)
  • Выбрать установленный сертификат, указать пароль сертификата КриптоПро
  • Указать произвольный новый пароль (парольную фразу) для ключевой пары PFX
  • Указать местоположение для сохранения файла. Файл лучше именовать в формате p12.pfx (это название по-умолчанию, лучше не трогать — говорят, есть баги, если переименовать)
  • Получить pem файл:openssl pkcs12 -in p12.pfx -out private.key.pem -name “alias”
  • (-name “alias” — эта опция поменяет имя ключа внутри контейнера. Это нужно потому, что P12FromGostCSP именует ключи как попало (на самом деле, по порядку, цифрами), без сохранения исходного алиаса.
  • Получить pkcs12 файл:openssl pkcs12 -export -out private.key.pkcs12 -in private.key.pem -name “alias”
  • Готово

Инициализация XML-подписи в Santuario

Ах да, тут есть один интересный момент. В сети множество советов, касающихся СМЭВа, заключающихся в ручном парсинге кусков XMLек, и прочим закатом солнца вручную, но это не наш метод (и не метод, который использовали создатели клиента)

Замес в том, что сгенерить самоподписанные ключи по госту легко (копипаста на SO ищется за секунды). А вот подписать — нет, ибо по мнению интернет-школьников якобы Bouncycastle не поддерживает xml-подпись. Конкретней, при работе с Apache Santuario, XMLSignature из santuario-xmlsec не понимает что использовать для обработки метода “xmldsig-more#gostr34102001-gostr3411” при вызове xmlSignature. sign(privateKey).

Отдельная хохма в том, что IntelliJ IDEA Community глючит при попытке отдебажить xmlsec, бросая step in отладчика в неверное место верных исходников. Я попробовал все разумные версии Идеи, поэтому понимать как это работает надо вслепую, написуя тактические письма в Спортлото. Это не в укор Идее, не существует идеальных инструментов, просто фактор повлиявший на скорость понимания вопроса.

Читайте также:  Ключ ЭЦП (электронной подписи)

Чтобы это заработало, нужно:

Инициализация раз за всю жизнь приложения (н-р в синглтон-бине спринга):

2) Загрузить провайдер, чтобы не патчить JDK:

Security. addProvider(new BouncyCastleProvider());

3) Впердолить в рантайм только что написанный класс:

4) Достучаться до маппингов алгоритмов JCE:

5) Замапить метод на алгоритм:

6) Применить маппинги:

org. apache. xml. security. Init. init();
JCEMapper. init(rootElement);

6) PROFIT!
После этого XMLSignature резко начинает понимать этот метод, и начнет делать xmlSignature. sign.

Резюме

В результате всех вышеописанных действий мы получили относительно легий способ избавиться от тяжкой ноши Крипто Про.

В дальнейшем хотелось бы продолжить борьбу за выпил до финальной победы: оформить все утилиты, генераторы ключей, самописные смэв-клиенты итп в виде одного репозитория на Гитхабе. Еще, очень хотелось бы получить права на модификацию и распространение под пермиссивной лицензией официального клиента СМЭВ. Тогда половина этой статьи была бы просто не нужна, и проблема решалась бы скачиванием нужного кода с Гитхаба.

Форс-мажор

Стороны освобождаются от ответственности, за частичное или полное неисполнение принятых на себя обязательств, вследствие возникновения обстоятельств непреодолимой силы (форс-мажора). Наступление форс-мажорных обстоятельств должно быть подтверждено документом, выданным соответствующим компетентным органом. Под  форс-мажором понимаются обстоятельства, которые возникли после присоединения Сублицензиата к настоящему Соглашению в результате непредвиденных и неотвратимых событий чрезвычайного  характера, к числу которых относятся (но не ограничиваются): пожар, стихийное бедствие, война, какие бы то ни было военные действия, блокады, запрещение определенных коммерческих операций, акт государственного органа, в результате издания которого исполнение обязательств становится невозможным полностью или частично. Стороны не освобождаются от ответственности за частичное или полное неисполнение обязательств по настоящему Соглашению, если это неисполнение явилось следствием односторонних актов компетентного органа государства не носящих общего запретительного характера в отношении определенных коммерческих операций. При наступлении  форс-мажора, срок исполнения обязательств отодвигается соразмерно времени, в течение которого будут действовать такие обстоятельства и их последствия. Если форс-мажор и его последствия будут продолжаться свыше 30 (тридцати) календарных дней, то каждая из Сторон имеет право отказаться от дальнейшего исполнения обязательств по настоящему Соглашению  с предварительным уведомлением другой Стороны в одностороннем порядке, и в этом случае ни одна из Сторон не имеет права на возмещение возможных убытков.

Срок действия

Настоящее Соглашение вступает в силу с момента присоединения Сублицензиатом к Соглашению и действует в течение срока действия  исключительных  прав Правообладателя  на соответствующие Программные продукты. Настоящее Соглашение не отменяет действие лицензионных соглашений, по которым Сублицензиаром  уже предоставлено право на использование Программных продуктов.

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

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

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

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

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

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

  • Установите КриптоПро 5.0 и убедитесь, что у вас есть действующая лицензия. – для меня подошла втроенная в ЭП;
  • Установите core 3.1 sdk и runtime и распространяемый пакет Visual C++ для Visual Studio 2015 обычно ставится вместе со студией; прим.: на II этапе мне пришлось через установщик студии поставить дополнительное ПО для разработки на C++ – сборщик требует предустановленный DIA SDK.
  • Задайте переменной среды DOTNET_MULTILEVEL_LOOKUP значение 0 – не могу сказать для чего это нужно, но в оригинальной инструкции это есть;
  • package_windows_debug.zip распакуйте в .packagesruntime-debug-windows.zip распакуйте в .
    untime
  • package_windows_debug.zip распакуйте в .packages
  • runtime-debug-windows.zip распакуйте в .
    untime
  • Добавьте источник пакетов NuGet в файле %appdata%NuGetNuGet.Config – источник должен ссылаться на путь .packages в созданной вами папке. Пример по добавлению источника есть в основной инструкеии. Для меня это не сработало, поэтому я добавил источник через VS Community;
  • Склонируйте репизиторий DotnetCoreSampleProject в .
  • Измените файл .DotnetSampleProjectDotnetSampleProject.csproj – для сборок System.Security.Cryptography.Pkcs.dll и System.Security.Cryptography.Xml.dll укажите полные пути к .
    untime;
  • Перейдите в папку проекта и попробуйте собрать решение. Я собирал через Visual Studio после открытия проекта.

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

  • Выполните 1-3 и 6-й шаги из I этапа;
  • Склонируйте репозиторий corefx в .
  • Выполните сборку запустив .corefxuild.cmd – на этом этапе потребуется предустановленный DIA SDK
  • Выполните шаги 5, 7-9 из I этапа. Вместо условного пути .packages укажите .corefxartifactspackagesDebugNonShipping, а вместо .
    untime укажите .corefxartifactsin
    untime
    etcoreapp-Windows_NT-Debug-x64

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

Тестовые самоподписанные ключи

Так как мы деламем все это в тестовых целях, теперь мы подходим к кульминации и начинаем сами себе выдавать ключи.

  • Все действия производить на Windows (подойдет виртуальная машина) с установленным Крипто Про CSP;
  • Щелкнуть по ссылке “Создать и выдать запрос к этому ЦС”;
  • Заполнить необходимые поля;
  • Нажат кнопку “Выдать”;
  • Установить сертификат.

Как мы можем попросить Крипто Про отдать ключи (на самом деле, нет)

Если у нас уже есть настоящие (не самоподписанные) ключи, то совершенно некисло было бы проверить их в действии. Да, мы говорим о тестовых целях, но таки доверяй — но проверяй!

Если поставить винду в виртуальную машину, накатить туда Крипто Про, установить ключи и попробовать их экспортировать, то обнаруживаем удивительную вещь: в экспортере не работает экспорт в PKCS12, а все остальные направления в экспортере заблокированы (англ. “grayed out”).

“От Алексея Писинина был получен ответ:
Добрый день. PKCS12 не соответствует требованиям безопасности ФСБ в части хранения закрытых ключей. В теории, закрытые ключи должны храниться на так называемых “съемных” носителях. Собственно, по этой причине и не работает экспорт

Я правильно это читаю как, что у них гуй для экспорта есть, но бизнес-логики к нему нету?!
Ппоэтому каких галочек ни нащелкай — всегда будет выпадать ошибка на последнем шаге гуевого мастера?!

Какой же стыд.

Dear God,
Please kill them all. Love, Greg.

криптопро force

Криптографические решения. От криптопровайдеров до браузерных плагинов

Производители средств криптографической защиты информации (СКЗИ) предлагают различные механизмы для интеграции криптосредств в информационные системы. Существуют решения, ориентированные на поддержку систем с Web-интерфейсом, мобильных и десктопных приложений, серверных компонентов. СКЗИ интегрируются в приложения Microsoft и в продукты Open Source, обеспечивают поддержку различных прикладных протоколов и форматов электронной подписи.

С учетом растущего количества проектов с применением ЭЦП и появления массовых проектов для физических лиц, разработчикам подобных проектов требуется хорошо ориентироваться в предлагаемых производителями решениях по ЭЦП для того, чтобы сделать систему удобной в эксплуатации и недорогой в плане техподдержки. Таким образом, если еще лет 5 назад главным фактором выбора криптосредства являлось его полное соответствие требованиям регуляторов, то при сегодняшнем разнообразии важными критериями могут выступать охват поддерживаемых платформ, возможность интеграции с браузером, поддержка мобильных пользователей, возможность установки без прав системного администратора и т.

В данном материале сделана попытка классифицировать средства криптографической защиты информации.

  • Рассмотрены в основном СКЗИ, использующиеся на клиентских местах для защиты клиент-серверных соединений по протоколу TLS, для организации ЭЦП, шифрования передаваемых данных;
  • Не рассматриваются СКЗИ, применяемые для создания VPN и шифрования файловой системы, хранимых данных, а так же УЦ;
  • Отдельно выделены аппаратные криптографические устройства.

Классификация построена на основе:

  • технологий интеграции (CryptoAPI, Active-X, NPAPI и др.), которые поддерживают СКЗИ для встраивания в приложения и прикладные системы;
  • интерфейсов, которые предоставляют СКЗИ для встраивания в приложения и прикладные системы.

Кроме того, показаны способы интеграции СКЗИ с Web-приложениями и возможность его использования на мобильных платформах

Общая схема классификации приведена в таблице:

КриптопровайдерыНативные библиотеки (openssl-style, PKCS#11, NSS, собственные интерфейсы)Локальные проксиБраузерные плагиныОблачная подписьБраузеры с российской криптографией
Почтовые клиенты с российской криптографиейРоссийская криптография в фреймворках, платформах, интерпретаторахНастольные криптографические приложенияКриптография в BIOS UEFIСервис-провайдеры ЭЦПЭмуляторы доверенной среды
Аппаратные средства

В первой статье рассмотрим решения, начиная с криптопровайдеров по браузерные плагины включительно. В последующих статьях будут рассмотрены остальные средства.

Вознаграждение

Вознаграждение Лицензиат
а за предоставляемое право на использование Программного продукта устанавливается в счете, являющимся офертой. Вознаграждение Лицензиат
а за предоставляемое право на использование Программного продукта не облагается НДС, в соответствии с ст. 346 Налогового кодекса Российской Федерации. Акт на передачу прав, товарная-накладная, акт оформляются в  порядке и в сроки, установленные требованиями Налогового кодекса Российской Федерации.

Что нужно допилить в готовом клиенте, чтобы сбежать с Крипто Про

Код написан довольно дружелюбно для расширения, поэтому можно просто взять за основу класс KeyStoreWrapperJCP, и аналогично написать KeyStoreWrapperBouncyCastlePKCS12, KeyStoreWrapperBouncyCastleJKS.

Переписать DigitalSignatureFactory, так, чтобы он на вход начал принимать путь до криптоконтейнера на файловой системе и пароль от него (для КриптоПро это просто не нужно). Там есть свич, который проверяет тип криптопровайдера, в него надо дописать дополнительно два кейса, для имен типа BOUNCY_JKS и BOUNCY_PKCS12 и навешать использование соответсвующих KeyWrapper и вызов initXmlSec.

Читайте также:  криптопро вебинар

В initXmlSec нужно дописать
1) возможность принимать вообще любой провайдер, а не только криптопро (это просто удобно)
2) Security. addProvider(new BouncyCastleProvider());
3) для XMLDSIG_SIGN_METHOD сделать свич: если КриптоПро, то алгоритм называется “GOST3411withGOST3410EL”, а если BouncyCastle алгоритм называется “GOST3411WITHECGOST3410”.

Ну вроде как и все. Если бы была известна лицензия на этот смэв-клиент, я бы приложил конкретный код под Apache License 2, а так это просто список идей.

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

  • КриптоПро CSP версии 5.0 – для поддержки Российских криптографических алгоритмов (подписи, которые выпустили в аккредитованном УЦ в РФ)
  • КриптоПро TSP Client 2.0 – нужен для штампа времени
  • КриптоПро OCSP Client 2.0 – проверит не отозван ли сертификат на момент подписания
  • КриптоПро .NET Client – таков путь
  • Любой сервис по проверке ЭП – я использовал Контур.Крипто как основной сервис для проверки ЭП и КриптоАРМ как локальный. А еще можно проверить ЭП на сайте Госуслуг
  • КЭП по ГОСТ Р 34.11-2012/34.10-2012 256 bit, которую выпустил любой удостоверяющий центр
  • КриптоПро CSP версии 5.0 – у меня установлена версия 5.0.11944 КС1, лицензия встроена в ЭП.
  • КриптоПро TSP Client 2.0 и КриптоПро OCSP Client 2.0 – лицензии покупается отдельно, а для гайда мне хватило демонстрационного срока.
  • КриптоПро .NET Client версии 1.0.7132.2 – в рамках этого гайда я использовал демонстрационную версию клиентской части и все действия выполнялись локально. Лицензию на сервер нужно покупать отдельно.
  • Контур.Крипто бесплатен, но требует регистрации. В нем также можно подписать документы КЭП, УКЭП и проверить созданную подпись загрузив ее файлы.

Нативные библиотеки

Open Source библиотека OpenSSL обладает широкими криптографическими возможностями и удобным механизмом ее расширения другими криптоалгоритмами. OpenSSL является основным криптоядром для широкого спектра приложений Open Source.

После того, как в эту библиотеку компанией Криптоком были добавлены ГОСТы, появились патчи для «гостификации» многих популярных приложения, использующих OpenSSL. На базе OpenSSL некоторые вендоры разработали и сертифицировали СКЗИ, кроме того в ряд продуктов OpenSSL входит «неявным» образом.

криптопро force

СпецификацияOpenSSL API — один из де-факто стандартов для СПО
ПлатформыСемейство Windows, GNULinux, OS X, iOS, Android
Алгоритмы и криптографические протоколыЭЦП, шифрование, хэш-функция, имитозащита, HMAC, VKO;
TLS
Интеграция с PKIX. 509, PKCS#10, CMS, CRL, OCSP, TSP
Механизмы ЭЦПНативный программный интерфейс, Си-style;
Механизмы аутентификацииклиентская аутентификация в рамках TLS
собственные механизмы на базе ЭЦП случайных данных
Механизмы “гостирования” TLSTLS с российской криптографией поддержан в библиотеке (в случае использования OpenSSL в качестве браузерного криптодвижка)
TLS-прокси на базе OpenSSL (например, sTunnel)

Форматы защищенных сообщенийPKCS#7, CMS, XMLSec (при использовании с библиотекой www. aleksey. com/xmlsec, в том числе ГОСТ), S/MIME
Интеграция с браузеромЧерез TLS-прокси
Через проприетарные плагины
В Chromium OpenSSL один из возможных криптодвижков
Интеграция со службой каталоговOpenLDAP
Мобильные платформыiOS, Android
Команднострочная утилитаЕсть
Хранилища ключейФайлы, USB-токены
Взаимодействие с USB-токенамиХранилище ключей и сертификатов
Использование аппаратной реализации алгоритмов
Через PKCS#11
ПриложенияOpenVPN, Apache, sTunnel, Nginx, Postgre SQL, postfix, dovecot
Проприетарные приложения
Интеграция с фреймворкамиOpenSSL интегрирован в большое количество фреймворков (PHP, Python,. NET и др. ), но ГОСТа нет. Требуется выпускать патчи к фреймворкам
ИнсталляцияПрограмма установки, в целом не требуются права системного администратора
Копирование
Запуск использующих rкриптосредства приложений с FLASH-памяти USB-токена
Примеры (ГОСТ)МагПро КриптоПакет
ЛирССЛ
OpenSSL (несерт. )
OpenSSL + engine PKCS11_GOST + Рутокен ЭЦП

  • OpenSSL и его аналоги не поддерживается приложениями Microsoft;
  • Необходимость патчить СПО, которое поддерживает OpenSSL, для включения ГОСТов.
  • Кроссплатформенность;
  • Использование в огромном количестве проектов, открытые исходники большей части проекта — выявление и устранение уязвимостей (как пример, недавнее выявление heartbleed);
  • Распространяется копированием — можно делать приложения, не требующие инсталляции;
  • Широкий охват приложений СПО, на базе которых можно делать защищенные сертифицированные продукты;
  • Широкая интеграция в фреймворки, но при этом проблемы с ГОСТами.

PKCS#11

Библиотека PKCS#11 предоставляет универсальный кроссплатформенный программный интерфейс к USB-токенам и смарт-картам.

Функции делятся на:

  • Функции доступа к устройству;
  • Функции записи/чтения произвольных данных;
  • Функции работы с ключами (поиск, создание, удаление, импорт, экспорт);
  • Функции работы с сертификатами (поиск, импорт, экспорт);
  • Функции ЭЦП;
  • Функции хэширования;
  • Функции шифрования;
  • Функции вычисления имитовставки;
  • Функции выработки ключа согласования (Диффи-Хeллман);
  • Функции экспорта/импорта сессионного ключа;

Таким образом, стандарт PKCS#11 поддерживает полный набор криптопримитивов, пригодный для реализации криптографических форматов (PKCS#7/CMS/CADES, PKCS#10, X. 509 и др. ) и протоколов (TLS, IPSEC, openvpn и др.

Для обеспечения быстродействия часть криптопримитивов может быть реализована программно.

В стандарте PKCS#11, начиная с версии 2. 30, поддерживаются ГОСТ Р 34. 10-2001, ГОСТ Р 34. 11-94, ГОСТ 28147-89.

Использование библиотеки PKCS#11 обеспечивает совместимость ПО различных вендоров при работе с токенами. Через PKCS#11 интерфейс умеют работать приложения, написанные на на базе CryptoAPI, NSS, OpenSSL.

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

криптопро force

PKCS#11 бывают также без поддержки аппаратных устройств с программной реализацией криптоалгоритмов и хранением объектов в файловой системе.

Примеры – PKCS#11 интегрированный в NSS (Mozilla), проект aToken, библиотека Агава-Про.

У компании Крипто-Про есть библиотека PKCS#11, реализованная на базе MS CryptoAPI:

криптопро force

Существуют PKCS#11-библиотеки для мобильных платоформ. Примером подобной библиотеки служит библиотека для Рутокен ЭЦП Bluetooth, которая позволяет использовать устройство на iOS и Android.

NSS

NSS представляет собой криптографическую библиотеку от сообщества Mozilla. NSS используется такими приложениями, как браузер Mozilla Firefox, почтовым клиентом Mozilla Thunderbird.

В данный момент существуют два проекта по «гостификации» NSS:

  • Компания Лисси периодически публикует на своем сайте доступные для скачивания актуальные версии Mozilla Firefox и Mozilla Thunderbird, пересобранные с поддержкой российской криптографии. Кроме того, существует ряд продуктов этой компании, построенный на базе модифицированной библиотеки NSS — высокоуровневая библиотека NSSCryptoWrapper, плагин LCSignPlugin, десктопное приложение для ЭЦП под Android SignMaker-A.
    Следует отметить, что модифицированный специалистами этой компании NSS позволяет использовать как программные PKCS#11-токены, так и аппаратные (Рутокен ЭЦП, eToken ГОСТ, JaCarta ГОСТ, MS_KEY).
  • Atoken — это open source проект компании R-Альфа. В рамках проекта создан программный PKCS#11-токен с российской криптографией и выложены патчи для определенной версии NSS и компонента Security Manаger, позволяющие использовать в продуктах Mozilla россиийскую криптографию (TLS, ЭЦП, PKI). Кроме того R-Альфа предлагает реализацию программного PKCS#11-токена с поддержкой сертифицированной библиотеки Агава-С под названием Агава-Про.

Библиотеки c собственным интерфейсом

Проприетарные библиотеки предоставляют собственный API для встраивания в приложения. В данный список можно внести:

  • Агава-С
  • Крипто-C
  • Крипто-КОМ

Подготовка OpenSSL для работы с ГОСТ

Если у вас в начале статьи на стене висит OpenSSL, когда-нибудь он точно выстрелит. Так что да, это важный момент, необходимый для осуществления дальнейшего текста.

  • Так как у нас Крипто Про, и на Маке оно не взлетает, нам понадобится виртуальная машина с Windows (можно даже Windows XP), и установленной Криптой
  • Проверить, что в установленной версии есть файл gost.dll
  • В установленном OpenSSL найти файл openssl.cfg
  • В самое начало файла добавить строчку:openssl_conf = openssl_def
  • PROFIT

Браузерные плагины

Для того, чтобы из скриптов WEB-страницы вызвать нативную библиотеку большинство браузеров поддерживают специальные расширения — ActiveX для IE и NPAPI-плагин для GH, MF, Opera, Sаfari и др. В данный момент на рынке существует широкий спектр продуктов, относящихся к браузерным плагинам. Архитектурно данные плагины могут быть исполнены по-разному. Некоторые работают на базе CryptoAPI и требуют дополнительной установки криптопровайдера, другие используют в качестве криптоядра PKCS#11-совместимые устройства и не требуют установки дополнительных СКЗИ на рабочее место клиента. Есть универсальные плагины, которые поддерживают как все основные криптопровайдеры, так и широкий спектр аппаратных СКЗИ.

Кроссбраузерные плагины

криптопро force

Спецификация-
ПлатформыСемейство Windows, GNULinux, OS X
Алгоритмы и криптографические протоколыЭЦП, шифрование, хэш-функция, имитозащита, HMAC
Интеграция с PKIX. 509, PKCS#10, CMS, CRL, OCSP (КриптоПро ЭЦП Browser plugin), TSP (КриптоПро ЭЦП Browser plugin)
Механизмы ЭЦППрограммный интерфейс для использования в JavaScript

Механизмы аутентификацииЭЦП случайных данных
Механизмы “гостирования” TLS-
Форматы защищенных сообщенийPKCS#7, CMS, XMLSec (КриптоПро ЭЦП Browser plugin), CADES (КриптоПро ЭЦП Browser plugin)
Интеграция с браузеромActiveX (для IE)
NPAPI

Мобильные платформыне поддерживаются
Хранилища ключейРеестр, файлы, USB-токены
Взаимодействие с USB-токенамиХранилище ключей и сертификатов
Использование аппаратной реализации алгоритмов
Через PKCS#11, через CryptoAPI

ПриложенияБраузеры
ИнсталляцияПрограмма установки, не требуются права системного администратора
Примеры (ГОСТ)КриптоПро ЭЦП Browser plugin
eSign-PRO
КриптоПлагин Лисси
Плагин портала госуслуг
JC-WebClient
Рутокен Плагин
Плагин BSS
КриптоАРМ Browser plugin

  • отсутствие TLS
  • удаление NPAPI из Chromium
  • браузеры на мобильных платформах не поддерживают плагины
  • настройки безопасности IE могут блокировать исполнение плагина
  • кроссбраузерность
  • плагины на базе PKCS#11 не требуют установки СКЗИ
  • прозрачное использование для пользователя

ActiveX

Компания Microsoft разработала два основных клиентских ActiveX-компонента, которые транслируют функционал CryptoAPI в скрипты, в браузер. Для генерации ключа и создания PKCS#10-запроса применятся компонент XEnroll/CertEnroll, а для ЭЦП/шифрования и работы с сертификатами компонент CAPICOM.

криптопро force

В следующих статьях будут подробно рассмотрены оставшиеся решения.

Разрешение споров

Все споры, разногласия, требования, возникающие из настоящего Соглашения или касающиеся его нарушения, прекращения, недействительности, подлежат разрешению в суде, по месту нахождения Лицензиата
, с обязательным соблюдением досудебного претензионного порядка в соответствии с действующим законодательством Российской Федерации.

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