криптопро в составе ключа как это

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

Наличие лицензии КриптоПро CSP встроенной в сертификат электронной подписи даёт возможность использовать данный сертификат на любом компьютере независимо от наличия лицензии КриптоПро CSP на рабочее место.

Внимание!!! При отсутствии лицензии на рабочее место в программе КриптоПро CSP будет отображено что лицензия Истекла или «демонстрационная»! Это нормально! В программе отображается состояние именно лицензии на рабочее место. Сертификат со встроенной лицензией будет работать независимо от лицензии на рабочее место!

В случае приобретения сертификата ключа проверки электронной подписи с включенной в него лицензией, такая лицензия на СКЗИ «КриптоПро CSP» ограничивается использованием ключа электронной подписи (закрытого ключа электронной подписи), ключ проверки (открытый ключ) которой указан в сертификате, и областью применения «СКБ Контур и ДЗО».

Под областью применения «СКБ Контур и ДЗО» в целях настоящего договора понимаются программные продукты и/или информационные системы, правообладателем или обладателем прав на законных основаниях которых является АО «ПФ «СКБ Контур, а также информационные системы, участие в которых происходит при использовании сертификатов ключей проверки электронной подписи, выпущенных удостоверяющими центрами АО «ПФ «СКБ Контур» и его ДЗО (дочерних и зависимых организаций).

Речь пойдет о файлах primary.key, masks.key и header.key, которые лежат в директории ххххх.000 на флешке. Данные файлы входят в состав криптоконтейнера закрытого ключа электронной подписи криптопровайдера КриптоПро, формат которого нигде не опубликован. Целью данной статьи является чтение контейнера и преобразование закрытого ключа в формат, который может быть прочитан в библиотеке OpenSSL. Долгое время было распространено ошибочное суждение, что достаточно сделать нечто вида (primary_key XOR masks_key) и мы получим закрытый ключ в чистом (raw) виде, однако забегая вперед, можно утверждать, что в КриптоПро было применено более сложное преобразование, в худшем случае состоящее из более чем 2000 (двух тысяч) операций хеширования.

Стоит упомянуть о существовании утилиты P12FromGostCSP которая позволяет конвертировать ключ в формат P12, доступный для работы с OpenSSL, но утилита имеет следующие существенные недостатки:

  • Читает контейнер не напрямую, а через криптопровайдер, поэтому там, где кроме OpenSSL ничего нет, не работает.
  • Если в свойствах ключа не отмечено, что ключ «экспортируемый», то конвертировать его невозможно.
  • В демо версии не формирует файл с ключом, эта возможность присутствует только в платной версии.

Форум КриптоПро
 » 
Общие вопросы
 » 
Общие вопросы
 » 
Лицензирование Криптопро CSP в составе других продктов


Offline

mnemonicator

 

Оставлено
:

30 апреля 2021 г. 11:34:35(UTC)

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

Так же, в письме, представитель компании Контур написал следующее, цитирую –

Отвечаю на вопрос Почему сертификат содержащий КриптоПро можно устанавливать на несколько устройств (число не ограничено)?
Когда вы приобретаете полный комплект подписи в который входит :
• Лицензия на право использования СКЗИ «КриптоПро CSP» в составе сертификата ключа.
• Изготовление сертификата сроком действия 1 год на защищенном устройстве хранения ключевой информации Рутокен Лайт
Данный сертификат содержит Встроенную лицензию КриптоПро, которая не привязывается к устройству, она отличается от Лицензии КриптоПро на Рабочее место ( которой был предоставлен скрин) .
Законодательно установка Встроенной лицензии КриптоПро, на разные устройства не запрещена, технически тоже.

В моём понимании, мы можем поизвести установку КриптоПро на 100 компьютерах. Это действительно так и поставщики таких сервисов как Контур могут распространять ваше ПО на таких условиях?

Спасибо.


Offline

Андрей *

 

Оставлено
:

30 апреля 2021 г. 12:14:23(UTC)

Здравствуйте.

Встроенная в сертификат лицензия никуда не устанавливается.

Она даёт право работать на любом РМ с таким сертификатом.

Если будет сертификат без встроенной – то необходимо покупать отдельно лицензию на каждое рабочее место.


Offline

mnemonicator

 

Оставлено
:

30 апреля 2021 г. 13:13:16(UTC)

Хорошо, уточняющий вопрос. Лицензия, которая идет с сертификатом (выданым на конкретного человека) может быть использована этим сотрудником на нескольких рабочих местах или же лицензия привязана к 1 рабочему месту?


Offline

Андрей *

 

Оставлено
:

30 апреля 2021 г. 14:07:11(UTC)

Автор: mnemonicator Перейти к цитате

Хорошо, уточняющий вопрос. Лицензия, которая идет с сертификатом (выданым на конкретного человека) может быть использована этим сотрудником на нескольких рабочих местах или же лицензия привязана к 1 рабочему месту?

Да, выше ответ.
Такой же ответ Вам дал представитель компании Контур.
Лицензия в сертификате никак не привязана к рабочему месту.

вопросы

Из нашей статьи вы узнаете:

КриптоПро Winlogon — это программное обеспечение для проверки серверов, контролирующее компьютерную сеть и пользователей в операционной системе Windows. Осуществляет аутентификацию статуса пользователя с помощью сертификатов открытых ключей и электронных цифровых подписей (ЭЦП). Аутентификация осуществляется при входе пользователей на домен с использованием средства криптографической защиты информации (СКЗИ) «КриптоПро CSP» версии 3.0 и выше.

Открытые ключи используются для проверки пользователя, а ЭЦП для авторизации домена Windows в соответствии с RFC 4490. Сертификаты пользователей и контроллеров домена выпускаются и управляются с помощью сертифицированного удостоверяющего центра или находятся под управлением домена операционной системы.

Содержание
  1. Его назначение
  2. Характеристики
  3. Что такое КриптоПро CSP?
  4. Скачать КриптоПро CSP бесплатно
  5. Для чего нужна лицензия КриптоПро CSP?
  6. Версии КриптоПро CSP
  7. КриптоПро CSP лицензия
  8. КриптоПро CSP бессрочная
  9. Купить КриптоПро CSP
  10. Настройка «КриптоПро» CSP
  11. Настройка работы с Рутокен ЭЦП 2
  12. Получаем тестовый сертификат
  13. Подпись средствами «КриптоПро CSP»
  14. Rosa Crypto Tool
  15. Trusted eSign
  16. Резюме
  17. .
  18. Файл header. key
  19. Проверка лицензии КриптоПро CSP встроенной в сертификат ЭП
  20. 1 способ. Проверка через КриптоПро PKI
  21. 2 способ. Проверка через Состав сертификата
  22. Новые функции КриптоПро CSP версии 5. 0 R2
  23. Читаем закрытый ключ и конвертируем
  24. Сборка утилиты конвертирования ключа
  25. Компиляция OpenSSL библиотеки
  26. Компиляция privkey
  27. Формирование файла закрытого ключа private. key
  28. Пользуемся закрытым ключом private. key для подписывания файла file. txt
  29. Проверяем подпись
  30. Файл masks. key
  31. Три режима работы с Рутокенами
  32. Инструменты КриптоПро CSP

Его назначение

Программное обеспечение усиливает сетевой протокол аутентификации «Kerberos» с помощью инструментов криптографической защиты информации, расширяя штатную функциональность операционной системы.

Kerberos — сетевой протокол взаимной аутентификации клиента и сервера, где начальный обмен информацией между клиентом и сервером происходит в незащищённой среде.

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

Также КриптоПро Winlogon использует расширенный протокол аутентификации EAP-TLS (Extensible Authentication Protocol). Данный протокол использует двустороннюю криптографическую аутентификацию между удалённым пользователем и Radius сервером (Remote Authentication Dial-In User Service).

Характеристики

Программное обеспечение производит аутентификацию на любом сервере, который предназначен для взаимодействия с доменом Windows или со сферой Kerberos V5. При использовании КриптоПро CSP 3.0 необходимо скачать и установить дистрибутив по одной из приведённых ниже ссылок:

  • Дистрибутив КриптоПро Winlogon (rus)
  • Дистрибутив КриптоПро Winlogon (eng)
  • Документация на КриптоПро Winlogon

Отдельная установка КриптоПро Winlogon не требуется, если используется КриптоПро CSP 3.6 и выше.

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

Срок пробной версии программы — 30 дней с момента установки. После необходимо получить лицензию у официального дилера. «Астрал-М» распространяет, внедряет и сопровождает программы КриптоПро с круглосуточной поддержкой пользователей 24/7. Является официальным дилером продукции торговой марки КриптоПро. Приобрести продукцию и актуальную лицензию КриптоПро Winlogon легко, достаточно заполнить форму обратной связи на сайте, вписав своё имя, телефон и адрес электронной почты.

  • Что такое КриптоПро CSP?

    КриптоПро – это название крупнейшего разработчика программного обеспечения для работы с криптографией и подписями в России. Самый популярный продукт этой компании – программа КриптоПро CSP. Именно ее чаще всего имеют в виду, когда произносят название кампании. Программа КриптоПро CSP – так называемый криптопровайдер, то есть программа для осуществления криптографической защиты и шифрования информации при работе с подписью. Данная программа устанавливается на ваш компьютер, а использование электронной подписи без неё невозможно.

  • Скачать КриптоПро CSP бесплатно

  • Для чего нужна лицензия КриптоПро CSP?

    Функционал программы КриптоПро CSP самый широкий в линейке продуктов КриптоПро. Он включает в себя:

    • Хранение всех ваших электронных подписей на компьютере
    • Защиту ваших персональных данных
    • Создание пин-кода на контейнер подписи для ее защиты
    • Обеспечение целостности информации, подписанной ЭЦП
    • Расшифровка состава подписи
    • Создание копий электронной подписи
  • Версии КриптоПро CSP

    Программный продукт отличается версией релиза и сроком действия.
    На сегодняшний день техническую поддержку компания КриптоПро осуществляет для двух версий программы 4.0 и 5.0. Для работы с подписью подойдет любая из этих версий. Главные их отличия в том, что версия 5.0 поддерживает MасOSи может применяться на технике марки Apple. Также в данной версии упрощенная процедура копирования подписи и версия 5.0 распознаёт большее количество специальных защищенных носителей, чем 4.0. Мы рекомендуем приобретать лицензию именно на 5 версию КриптоПро CSP.

  • КриптоПро CSP лицензия

    Лицензию КриптоПро CSP иногда называют ключом. Ключ – это 25-значная комбинация букв и цифр, которая вводится в программу пользователем. Таким образом, программа распознает, что вами была приобретена лицензия. Также в этот ключ “зашита” версия КриптоПро CSP: 4.0 или 5.0. Если вы приобрели лицензию 5.0, то и скачивать нужно пятую версию. Эти ключи не взаимозаменяемы. Также по номеру лицензии программа может понять на какой срок приобретена программа.

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

  • КриптоПро CSP бессрочная

    Годовую Крипто Про CSP согласно названию нужно обновлять, то есть приобретать заново каждый год. Поэтому приобретение бессрочной лицензии гораздо выгоднее. Стоимость:

    • Годовая КриптоПро CSP 5.0 – 1500 рублей
    • Бессрочная КриптоПро CSP 5.0 – 2800 рублей

  • Купить КриптоПро CSP

    Вы можете купить КриптоПро на нашем сайте, а наша техническая поддержка поможет бесплатно установить программу на ваш компьютер. Для заказа лицензии потребуется только ваш номер ИНН, а получить и настроить КриптоПро CSP можно дистанционно. Закажите КриптоПро CSP на нашем сайте и получите лицензию уже через 20 минут после оплаты счета.

    Купить КриптоПро CSP

  • Зачем нужно покупать КриптоПро CSP и можно ли сэкономить? Что делать, если ЭП от УЦ ФНС уже получили, а КриптоПро на рабочее место еще не приобрели? А если у клиента установлен VipNet, ему КриптоПро не нужен же? — читайте об этом в нашей новой статье.

    Мы продолжаем готовиться к изменениям в 2022 году в области получения электронной подписи для руководителей ЮЛ и ИП, их сотрудников и нотариусов.

    Напоминаем, чтос 1 января 2022 года на ФНС России будет бесплатно выпускать квалифицированную электронную подпись. Однако сопутствующие инструменты, для ее хранения (носитель) и использования (криптопровайдер), необходимо приобрести отдельно от самой ЭП и заранее.

    В предыдущей статье мы рассмотрели рекомендуемые носители, которые УЦ ФНС принимает для записи ЭП. Подпись выдается в единственном экземпляре и защищена от копирования. Именно поэтому, так важно позаботиться о ее хранении и безопасности в случае утери или кражи. В этой статье мы рассмотрим инструмент для использования полученной ЭП в УЦ ФНС на своем рабочем месте — криптопровайдер. По умолчанию, налоговая генерирует и шифрует электронные подписи с помощью КриптоПро CSP.

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

    Без наличия криптопровайдера на рабочем месте пользователя нельзя выполнить какие-либо операции с электронной подписью.

    Для того, чтобы полученная подпись через УЦ ФНС заработала на выбранном компьютере руководителя или сотрудника, необходимо подготовить рабочее место:

    • Шаг 1. Купите средство криптозащиты КриптоПро CSP.
    • Шаг 2. Установите его на компьютер.
    • Шаг 3. Загрузите сертификат ЭП.

    КриптоПро CSP имеет только прямую схему распространения до конечного пользователя. Дистрибьютор «1С‑Рарус» с партнерской сетью 1С работает по агентской схеме:

    • являемся лицензиатами ФСБ;
    • имеем дилерский договор с КриптоПро.

    Если компания-лицензиат ФСБ не имеет дилерского договора с КриптоПро, она может стать нашим агентом или заключить прямой договор с вендором «КриптоПро».

    Если компания-НЕлицензиат ФСБ — для вас доступна только агентская схема продаж.

    Стать агентом 

    Помочь с выбором необходимого тарифа КриптоПро CSP вам помогут менеджеры отдела продаж системного программного обеспечения компании «1С‑Рарус», а также приведенные ниже ответы на часто задаваемые вопросы.

    1. Не успел \ Не знал \ Забыл купить лицензию КриптоПро CSP до получения ЭП через УЦ ФНС?

    Не беда! Пользователь может использовать 90 дней бесплатного промо-периода, если ранее его не активировал. В течение этого времени необходимо приобрести платную лицензию и выполнить ее установку, а после загрузку ЭП.

    2. На вашем рабочем месте установлен криптопровайдер VipNet. Что делать?

    УЦ ФНС использует для выдачи подписи только КриптоПро CSP. Если на одном компьютере установлены и VipNet, и КриптоПро CSP — программы конфликтуют.

    • Вариант 1 — удалить VipNet, купить КриптоПро CSP, перевыпустить ЭП до конца декабря 2021 года. Пользователи АО «Калуга Астрал» перевыпускают ЭП бесплатно по акции ZABOTA.
    • Вариант 2 — конвертировать действующую ЭП на VipNet, купить КриптоПро CSP и загрузить сертификат ЭП. Вендор АО «Калуга Астрал» поделился инструкцией. По дополнительным вопросам можно обратиться по тел.: 8 (800) 700‑86‑68, 8 (800) 700‑39‑84.

    3. Приобретая КриптоПро CSP появился вопрос — «А какой тариф выбрать?»

    Мы рекомендуем приобретать бессрочные лицензии КриптоПро CSP.

    Бессрочную лицензию на 1 рабочее место пользователь будет использовать на 1 компьютере неограниченное время и для неограниченного количества ЭП:

    • Стоимость для клиента 2 700 ₽, без НДС:
      • цена не влияет на версию 4.0 и 5.0;
      • выбор версии зависит от операционной системы;
      • доход партнера 1С — 11% или 297 ₽ с одной лицензии.
    • Сертификат на годовую техническую поддержку СКЗИ «КриптоПро CSP»:
      • мы рекомендуем, но это не обязательно;
      • на 1 рабочее место 850 ₽, с НДС;
      • доход партнера 1С при продаже лицензии с сертификатом — 15% или 532 ₽.

    Бессрочную лицензию на 1 сервер пользователь будет использовать без ограничения количества рабочих мест неограниченное время и для неограниченного количества ЭП:

    • Стоимость для клиента 37 500 ₽, без НДС:
      • цена не влияет на версию 4.0 и 5.0;
      • выбор версии зависит от операционной системы;
      • доход партнера 1С — 11% или 4 125 ₽ с одной лицензии.
    • Сертификат на годовую техническую поддержку СКЗИ «КриптоПро CSP»:
      • мы рекомендуем, но это не обязательно;
      • на 1 сервере 4 200 ₽, с НДС;
      • доход партнера 1С при продаже лицензии с сертификатом — 15% или 6 255 ₽.

    Важно! Все лицензии КриптоПро CSP именные. На какое ЮЛ или ИП приобретена лицензия, от той компании и нужно получать ЭП и подписывать документы.

    Почему мы рекомендуем приобретать сертификат на годовую поддержку СКЗИ?

    • Личный кабинет с дистрибутивом на портале ТП support.cryptopro.ru.
    • Всегда доступна консультация по установке, настройке и обновлению версий.
    • Лицензию КриптоПро восстановят при утере.
    • Есть доступ к базе знаний по типовым ошибкам и решениям.
    • SLA по инцидентам — 1 рабочий день.

    4. Пользователь когда-то приобретал бессрочный КриптоПро CSP и сейчас он установлен на его компьютере. Он будет продолжать работать в 2022 году?

    Да, будет. КриптоПро продолжает работать в прежнем режиме, для криптопровайдеров правила работы не изменились.

    Бонус-информация

    В сервисе 1С-Отчетность реализовано дополнительное расширение — «Расширение лицензии на программный продукт „АстралОтчетность“» с применением ограниченной лицензии на СКЗИ «КриптоПро CSP» в составе сертификата ключа проверки электронной подписи.

    Это значит, что пользователь может сэкономить на приобретении основной лицензии КриптоПро CSP и работать по действующей ЭП весь 2022 год.

    Как? Перевыпускаем электронную подпись (например, предыдущая ЭП была выпущена на VipNet, изменились данные о подписанте или организации) и получаем сертификат ЭП со встроенной лицензией КриптоПро CSP сроком действия на 15 месяцев.

    • При перевыпуске ЭП с уже встроенной лицензией КриптоПро CSP, она оплачивается повторно.
    • Стоимость для клиента 450 ₽ (можно продавать дороже, по 590 ₽), стоимость для партнеров 1С — 360 ₽, без НДС.

    Станьте нашим агентом и предоставляйте своим клиентам возможность приобретения КриптоПро CSP! Для заключения договора обращайтесь в отдел продаж системного программного обеспечения «1С‑Рарус».

    • тел.: +7 (495) 642-78-78;
    • эл. почта: [email protected];
    • или в ваше региональное представительство компании «1С‑Рарус».

    криптопро в составе ключа как это

    Поговорим немного про средства электронной подписи (ЭП) с использованием отечественных ГОСТ-алгоритмов в Linux. Несмотря на то, что различные средства и интерфейсы по работе с ЭП в Linux развиты даже лучше, чем в Windows, использовать их не так просто.

    Такое положение вещей сохранялось последние несколько лет. Но с конца 2016 года ситуация изменилась в лучшую сторону. Появилось сразу два продукта, которые позволяют работать с электронной подписью по стандарту ГОСТ и шифрованием без использования консоли – это Rosa Crypto Tool и Trusted eSign. Оба эти продукта для работы с криптографией используют «КриптоПро CSP» для Linux. Поэтому, перед тем как обратиться к описанию самих продуктов, поговорим немного про «КриптоПро CSP».

    «КриптоПро CSP» под Linux — неоднозначный продукт. С одной стороны, это одно из самых распространенных и мощных сертифицированных средств по работе с криптографией как в Windows, так и в Linux. С другой стороны, для простого человека пользоватся его интерфейсами даже в Windows не так-то просто. А в Linux доступен только консольный интерфейс. Надеюсь, что компания «КриптоПро» в курсе этой ситуации, и в будущем нас ждут новые красивые и удобные интерфейсы, как для Windows, так и для Linux.

    Для настройки нам понадобится:

    • Любимый дистрибутив Linux. Я использовал Ubuntu Linux 16.04 LTS и ROSA Fresh GNOME R8;
    • Сертифицированная версия КриптоПро CSP 4.0 R2 для Windows, UNIX и macOS;
    • Рутокен ЭЦП 2.0.

    Настройка «КриптоПро» CSP

    Несмотря на то, что есть несколько неплохих статей по настройке «КриптоПро CSP» под Linux (например, тут или тут), я опишу здесь свой вариант. Основная причина в том, что большинство инструкций написаны для «Крипто Про CSP» версии 3.x. А современная версия «КриптоПро CSP» 4.0 не является 100% совместимой с 3.x. Дополнительная причина – всегда приятно иметь полную инструкцию по настройке в одном месте, а не переключаться с одного окна на другое.

    Приступаем к настройке.

    Скачиваем «КриптоПро CSP» для Linux с официального сайта КриптоПро — www.cryptopro.ru/downloads

    Распаковываем «КриптоПро CSP» для Linux:

    tar -zxf ./linux-amd64_deb.tgz

    Далее у нас есть 2 варианта – автоматическая установка и установка вручную. Автоматическая установка запускается командой:

    sudo ./install.sh 

    или

    sudo ./install_gui.sh

    Здесь надо отдать должное разработчикам «КриптоПро» – автоматическая установка для большинства дистрибутивов отрабатывает успешно. Хотя бывают и нюансы. Например, если у вас не хватает некоторых пакетов, то установка будет успешно завершена, хотя некоторый функционал работать не будет.

    Если что-то пошло не так, или вы по тем или иным причинам хотите использовать установку в ручном режиме, то вам необходимо выполнить:

    dpkg -i ./cprocsp-curl-64_4.0.0-4_amd64.deb lsb-cprocsp-base_4.0.0-4_all.deb lsb-cprocsp-capilite-64_4.0.0-4_amd64.deb lsb-cprocsp-kc1-64_4.0.0-4_amd64.deb lsb-cprocsp-rdr-64_4.0.0-4_amd64.deb

    Для установки пакетов в ROSA используйте urpmi, вместо dpkg -i.

    Устанавливаем лицензию для «КриптоПро CSP» для Linux и проверяем, что все работает нормально:

    cpconfig -license -set <серийный_номер>
    cpconfig -license –view

    Мы должны получить что-то вроде:

    License validity:
    XXXXX-XXXXX-XXXXX-XXXXX-XXXXX
    Expires: 3 month(s) 2 day(s)
    License type: Server.

    Настройка работы с Рутокен ЭЦП 2

    Сделаем небольшое отступление. Для работы с электронной подписью и шифрованием нам не обойтись без ключевых пар и сертификатов. Надежное хранение закрытых ключей – один из основных факторов безопасности. А более надежных средств хранения, чем токен или смарт-карта, человечество пока не придумало. Я буду использовать Рутокен ЭЦП 2.0, который имеет сертификат ФСБ и поддерживает работу как с новыми, так и со старыми ГОСТами.

    криптопро в составе ключа как это

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

    Устанавливаем пакеты для работы с Рутокен ЭЦП 2.0:

    apt-get install libpcsclite1 pcscd libccid

    Нам также необходимо установить пакеты КриптоПро CSP для поддержки работы с токенами:

    dpkg -i ./cprocsp-rdr-gui-gtk-64_4.0.0-4_amd64.deb ./cprocsp-rdr-rutoken-64_4.0.0-4_amd64.deb ./cprocsp-rdr-pcsc-64_4.0.0-4_amd64.deb ./lsb-cprocsp-pkcs11-64_4.0.0-4_amd64.deb

    Получаем тестовый сертификат

    Перед тем как перейти непосредственно к работе с подписью, надо сгенерировать ключевую пару и создать сертификат электронной подписи. Если у вас уже есть Рутокен с контейнером «КриптоПро», то эту часть можно смело пропустить.

    Воспользуемся тестовым УЦ компании «КриптоПро» по адресу — https://www.cryptopro.ru/certsrv/
    Создаем запрос на сертификат с параметрами по умолчанию.

    криптопро в составе ключа как это

    Проверим, что сертификат получен успешно.

    Чтобы убедиться, что «КриптоПро CSP» успешно увидел токен, выполним:

    list_pcsc

    Мы должны получить что-то вроде:

    Aktiv Rutoken ECP 00 00

    Теперь проверяем, что сертификат на токене видится успешно:

    csptest -keyset -enum_cont -verifyc -fq

    Получаем:

    CSP (Type:80) v4.0.9014 KC1 Release Ver:4.0.9842 OS:Linux CPU:AMD64 FastCode:READY:AVX.
    AcquireContext: OK. HCRYPTPROV: 13476867
    \\.\Aktiv Rutoken ECP 00 00\822506788-dfcd-54c9-3a5e-e0a82a2d7f0
    OK.
    Total: SYS: 0,020 sec USR: 0,160 sec UTC: 0,870 sec
    [ErrorCode: 0x00000000]

    Записываем в хранилище сертификатов КриптоПро информацию об этом сертификате:

    csptestf -absorb -cert -pattern 'rutoken'
    
    Match: SCARD\rutoken_ecp_351d6671\0A00\62AC
    OK.
    Total: SYS: 0,010 sec USR: 0,140 sec UTC: 1,040 sec
    [ErrorCode: 0x00000000]

    Проверим, что сертификат успешно сохранился в хранилище:

    certmgr -list -cert -store uMy
    
    Certmgr 1.0 (c) "CryptoPro",  2007-2010.
    program for managing certificates, CRLs and stores
     
    =============================================================================
    1-------
    Issuer              : [email protected], C=RU, L=Moscow, O=CRYPTO-PRO LLC, CN=CRYPTO-PRO Test Center 2
    Subject             : CN=Trusted eSign Test
    Serial              : 0x120019F5D4E16D75F520A0299B00000019F5D4
    SHA1 Hash           : 0x016f443df01187d5500aff311ece5ea199ff863e
    SubjKeyID           : 204e94f63c68595e4c521357cf1d9279bff6f6e5
    Signature Algorithm : ГОСТ Р 34.11/34.10-2001
    PublicKey Algorithm : ГОСТ Р 34.10-2001 (512 bits)
    Not valid before    : 22/02/2017  10:53:16 UTC
    Not valid after     : 22/05/2017  11:03:16 UTC
    PrivateKey Link     : Yes                
    Container           : SCARD\rutoken_ecp_351d6671\0A00\62AC
    Provider Name       : Crypto-Pro GOST R 34.10-2012 KC1 CSP
    Provider Info       : ProvType: 80, KeySpec: 1, Flags: 0x0
    CA cert URL         : http://testca.cryptopro.ru/CertEnroll/test-ca-2014_CRYPTO-PRO%20Test%20Center%202.crt
    OCSP URL            : http://testca.cryptopro.ru/ocsp/ocsp.srf
    CDP                 : http://testca.cryptopro.ru/CertEnroll/CRYPTO-PRO%20Test%20Center%202.crl
    Extended Key Usage  : 1.3.6.1.5.5.7.3.2
    =============================================================================
     
    [ErrorCode: 0x00000000]

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

    Подпись средствами «КриптоПро CSP»

    В составе «КриптоПро CSP» есть утилита csptestf, позволяющая выполнять различные криптографические операции. Как я уже писал выше, у этой утилиты есть 2 недостатка:

    • Отсутствие хорошей документации;
    • Отсутствие графического интерфейса.

    Подписать можно с помощью команды:

    csptestf –sfsign –sign –in <имя файла> -out <имя файла> -my ‘Trusted eSign Test’ –detached –alg GOST94_256

    Здесь,
    my — параметр, в котором надо указать часть Common Name сертификата для подписи;
    detached — позволяет создать открепленную подпись;
    alg GOST94_256 — задает алгоритм хэширования, который будет использоваться при создании подписи.

    Более подробную информацию о возможных параметрах вы можете получить, выполнив команду:

    csptestf –sfsign

    Такой интерфейс отлично подходит для подготовленного пользователя или для автоматизации операций в скриптах.

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

    Rosa Crypto Tool

    Как следует из названия, это утилита для работы с электронной подписью и шифрованием для дистрибутива ROSA Linux. В данный момент утилита доступна в репозиториях Rosa Linux и Alt Linux.

    Эта утилита разрабатывается одним человеком – Михаилом Вознесенским. У нее простой, но удобный интерфейс. На данный момент утилита находится в активной разработке – с ноября 2016 года мне удалось протестировать три версии. Последняя версия, доступная на момент написание статьи — 0.2.2. Сейчас утилита поддерживает работу только с «КриптоПро CSP» для Linux, однако в ближайшее время будет добавлена поддержка других криптопровайдеров.

    Что внутри? Утилита написана на Python с использованием PyQt4 для графического интерфейса.

    Установить ее можно, использовав «Управление программами» в Rosa Linux.

    криптопро в составе ключа как это

    Вставляем токен и запускаем утилиту.

    криптопро в составе ключа как это

    Видим, что токен определился успешно и был найден наш сертификат.

    Интерфейс программы настолько прост, что описывать и показывать в статье все его функции не имеет смысла. Попробуем только подписать файл.

    Выбираем файл и жмем “Подписать файл”. Получаем вот такое предупреждение.

    криптопро в составе ключа как это

    Нажимаем «OK» и получаем информацию о том, что файл был подписан успешно.

    криптопро в составе ключа как это

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

    По сравнению с использованием «КриптоПро CSP» из консоли:

    + На порядок проще использовать;
    — Отсутствуют различные параметры подписи.

    Исходный код программы доступен в публичном репозитории на ABF:
    abf.io/uxteam/rosa-crypto-tool-devel
    Система контроля версий, которую использует «НТЦ ИТ РОСА», интегрирована в сборочную среду и базируется на Git. Можно вполне использовать любой клиент git.

    Надеюсь, разработчики других отечественных дистрибутивов Linux, таких как Astra Linux, GosLinux и другие добавят в свои дистрибутивы пакеты с rosa-crypto-tool.

    Trusted eSign

    Второй продукт, про который мы поговорим, это Trusted eSign от компании “Цифровые технологии”. Она известна на российском рынке ИБ как разработчик средства по работе с подписью и шифрованием для ОС Windows – «КриптоАРМ».

    Главное, не путать этот продукт с Trusted.eSign – web-сервисом по работе с подписью этой же компании.

    Найти продукт на сайтах компании “Цифровые технологии” непросто. Небольшое описание есть в магазине http://www.cryptoarm.ru/shop/trusted_esign, продукт также можно скачать в разделе «Центр загрузки» на сайте trusted.ru — https://trusted.ru/support/downloads/?product=133

    К сожалению, продукт пока доступен только в виде deb пакета для 64-битных систем. С чем связано такое ограничение, непонятно. Будем надеяться, что в ближайшее время компания выпустит и rpm пакет, а также версии для 32-битных дистрибутивов Linux.

    Скачиваем с официального сайта deb-пакет и устанавливаем командой:

    dpkg –i ./trustedesign-x64.deb

    Запускаем Trusted eSign.

    криптопро в составе ключа как это

    Сразу видно, что разработка не обошлась без дизайнера. Никакого сарказма. Все действия делаются просто и логично, а внешний вид радует глаз. К сожалению, большинство средств и программ в области ИБ от российских разработчиков разработаны без привлечения UX-специалистов и дизайнеров и заставляют своих пользователей страдать и плакать кровавыми слезами. Создается впечатление, что другими средства информационной безопасности просто не могут быть. “Цифровые технологии” опровергают это. Плата за красоту и удобство – необходимость платить за лицензию.

    Но вернемся к подписи.

    Выбираем раздел “Электронная подпись”:

    криптопро в составе ключа как это

    Выбираем «Сертификат для подписи»:

    криптопро в составе ключа как это

    Выбираем файлы для подписи и жмем «Подписать»:

    криптопро в составе ключа как это

    Что под капотом? Процитирую с сайта: “Приложение создано на современном движке Electron, для вызова криптографических операций применяется библиотека OpenSSL. Совместимо с СКЗИ “КриптоПро CSP 4.0” и поддерживает все криптографические алгоритмы, реализованные в нем.” Для тех, кто ещё не в курсе Electron — это фреймворк для создания десктопных приложений на платформе node.js.

    Сравним Trusted eSign с Rosa crypto tool:

    + Более удобный и красивый интерфейс
    — Платная лицензия

    Резюме

    Подведем итог. В конце 2016 – начале 2017 года наметился неплохой прогресс в средствах по работе с электронной подписью под Linux. Информационная безопасность начинает поворачиваться к пользователю лицом, и с каждым годом требуется все меньше действий для такого простого действия, как подписать или зашифровать файл с использованием отечественных алгоритмов.

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

    Такое развитие не может не радовать, особенно когда это происходит под Linux.

    .

    Наверняка есть немало пользователей, особенно пользователей Linux, кто считает, что консольных утилит достаточно. А также специалистов по информационной безопасности, которые считают, что дизайн и удобство — излишество в ИБ. Но я не могу с ними согласиться. Консольные утилиты, несомненно, идеальны для автоматизации. Но большинству пользователей удобнее работать с графическими интерфейсами. Даже в Linux.

    Файл header. key

    Из этого файла нам потребуется параметры электронной подписи CryptoProParamSet (подчеркнуто красным).

    • GostR3410_2001_CryptoPro_A_ParamSet — 1.2.643.2.2.35.1
    • GostR3410_2001_CryptoPro_B_ParamSet — 1.2.643.2.2.35.2
    • GostR3410_2001_CryptoPro_C_ParamSet — 1.2.643.2.2.35.3
    • GostR3410_2001_CryptoPro_XchA_ParamSet — 1.2.643.2.2.36.0
    • GostR3410_2001_CryptoPro_XchB_ParamSet — 1.2.643.2.2.36.1

    А также первые 8 байт открытого ключа (подчеркнуто) для контроля правильности чтения закрытого.

    header.key

    Проверка лицензии КриптоПро CSP встроенной в сертификат ЭП

    1 способ. Проверка через КриптоПро PKI

    Запустите программу КриптоПро PKI.
    Найти её можно в меню “Пуск”

    Слева раскройте элемент «Управление лицензиями» и выберите «КриптоПро CSP»
    В правой части вы увидите список сертификатов содержащих встроенную лицензию КриптоПро CSP.
    Отображаются только сертификаты установленные в хранилище «Личное».

    криптопро в составе ключа как это

    2 способ. Проверка через Состав сертификата

    Откройте ваш сертификат электронной подписи.
    На вкладке «Состав» найдите среди полей «Ограниченная лицензия КРИПТО-ПРО»

    Присутствие этого поля означает наличие встроенной лицензии КриптоПро CSP.
    Если такого поля нет, то и встроенной лицензии нет.

    криптопро в составе ключа как это

    Новые функции КриптоПро CSP версии 5. 0 R2

    Интерфейс стал дружелюбнее и современнее.

    В «КриптоПро CSP» 5.0 R2 реализована обёртка pkcs11-библиотеки для работы с носителями Рутокен ЭЦП 2.0. Это значит, что неизвлекаемые ключи в формате PKCS#11 (как для ЕГАИС) на носителях Рутокен ЭЦП 2.0 могут работать через «КриптоПро CSP». При этом сертификат можно установить в хранилище Личные со ссылкой на закрытый ключ pkcs контейнера и работать в сервисах, где можно использовать стандартные сертификаты, выданные на криптопровайдере «КриптоПро CSP». Для работы через «КриптоПро CSP» требуется лицензия.

    «КриптоПро Browser Plug-In» также научился работать с неизвлекаемыми ключами PKCS#11.

    Читаем закрытый ключ и конвертируем

    Файл privkey.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    #include <openssl/pem.h>
    #include <openssl/cms.h>
    #include <openssl/err.h>
    #include "gost_lcl.h"
    
    /* Convert little-endian byte array into bignum */
    BIGNUM *reverse32bn(char *b, BN_CTX *ctx)
    {
    	BIGNUM *res;
    	char buf[32];
    	BUF_reverse(buf, b, 32);
    	res = BN_bin2bn(buf, 32, BN_CTX_get(ctx));
    	OPENSSL_cleanse(buf, sizeof(buf));
    	return res;
    }
    
    void xor_material(char *buf36, char *buf5C, char *src)
    {
    	int i;
    	for(i = 0; i < 32; i++)
    	{
    		buf36[i] = src[i] ^ 0x36;
    		buf5C[i] = src[i] ^ 0x5C;
    	}
    }
    
    int make_pwd_key(char *result_key, char *start12, int start12_len, char *passw)
    {
    	int result;
    	int i;
    	char pincode4[1024];
    	int pin_len;
    	char current[32];
    	char material36[32];
    	char material5C[32];
    	char hash_result[32];
    	gost_hash_ctx ctx;
    	init_gost_hash_ctx(&ctx, &GostR3411_94_CryptoProParamSet);
    	memset(pincode4, 0, sizeof(pincode4));
    	pin_len = strlen(passw);
    	if (pin_len*4 > sizeof(pincode4)) {	result = 1;	goto err; }
    	for(i = 0; i < pin_len; i++)
    		pincode4[i*4] = passw[i];
    
    	start_hash(&ctx);
    	hash_block(&ctx, start12, start12_len);
    	if (pin_len) 
    		hash_block(&ctx, pincode4, pin_len * 4);
    	finish_hash(&ctx, hash_result);
    
    	memcpy(current, (char*)"DENEFH028.760246785.IUEFHWUIO.EF", 32);
    
    	for(i = 0; i < (pin_len?2000:2); i++)
    	{
    		xor_material(material36, material5C, current);
    		start_hash(&ctx);
    		hash_block(&ctx, material36, 32);
    		hash_block(&ctx, hash_result, 32);
    		hash_block(&ctx, material5C, 32);
    		hash_block(&ctx, hash_result, 32);
    		finish_hash(&ctx, current);
    	}
    
    	xor_material(material36, material5C, current);
    
    	start_hash(&ctx);
    	hash_block(&ctx, material36, 32);
    	hash_block(&ctx, start12, start12_len);
    	hash_block(&ctx, material5C, 32);
    	if (pin_len) 
    		hash_block(&ctx, pincode4, pin_len * 4);
    	finish_hash(&ctx, current);
    
    	start_hash(&ctx);
    	hash_block(&ctx, current, 32);
    	finish_hash(&ctx, result_key);
    
    	result = 0; //ok
    err:
    	return result;
    }
    
    BIGNUM *decode_primary_key(char *pwd_key, char *primary_key, BN_CTX *bn_ctx)
    {
    	BIGNUM *res;
    	char buf[32];
    	gost_ctx ctx;
    	gost_init(&ctx, gost_cipher_list->sblock);
    	gost_key(&ctx, pwd_key);
    	gost_dec(&ctx, primary_key, buf, 4);
    	res = reverse32bn(buf, bn_ctx);
    	OPENSSL_cleanse(buf, sizeof(buf));
    	return res;
    }
    
    BIGNUM *remove_mask_and_check_public(char *oid_param_set8, BIGNUM *key_with_mask, BIGNUM *mask, char *public8, BN_CTX *ctx)
    {
    	int result;
    	EC_KEY *eckey = NULL;
    	const EC_POINT *pubkey;
    	const EC_GROUP *group;
    	BIGNUM *X, *Y, *order, *raw_secret, *mask_inv;
    	char outbuf[32], public_X[32];
    	ASN1_OBJECT *obj;
    	int nid;
    
    	order = BN_CTX_get(ctx);
    	mask_inv = BN_CTX_get(ctx);
    	raw_secret = BN_CTX_get(ctx);
    	X = BN_CTX_get(ctx);
    	Y = BN_CTX_get(ctx);
    	if (!order || !mask_inv || !raw_secret || !X || !Y) { result = 1; goto err; }
    
    	obj = ASN1_OBJECT_create(0, oid_param_set8+1, *oid_param_set8, NULL, NULL);
    	nid = OBJ_obj2nid(obj);
    	ASN1_OBJECT_free(obj);
    
    	if (!(eckey = EC_KEY_new())) { result = 1; goto err; }
    	if (!fill_GOST2001_params(eckey, nid)) { result = 1; goto err; }
    	if (!(group = EC_KEY_get0_group(eckey))) { result = 1; goto err; }
    	if (!EC_GROUP_get_order(group, order, ctx)) { result = 1; goto err; }
    
    	if (!BN_mod_inverse(mask_inv, mask, order, ctx)) { result = 1; goto err; }
    	if (!BN_mod_mul(raw_secret, key_with_mask, mask_inv, order, ctx)) { result = 1; goto err; }
    
    	if (!EC_KEY_set_private_key(eckey, raw_secret)) { result = 1; goto err; }
    	if (!gost2001_compute_public(eckey)) { result = 1; goto err; }
    	if (!(pubkey = EC_KEY_get0_public_key(eckey))) { result = 1; goto err; }
    	if (!EC_POINT_get_affine_coordinates_GFp(group, pubkey, X, Y, ctx)) { result = 1; goto err; }
    
    	store_bignum(X, outbuf, sizeof(outbuf));
    	BUF_reverse(public_X, outbuf, sizeof(outbuf));
    	if (memcmp(public_X, public8, 8) != 0) { result = 1; goto err; }
    
    	result = 0; //ok
    err:
    	if (eckey) EC_KEY_free(eckey);
    	if (result == 0) return raw_secret;
    	return NULL;
    }
    
    int file_length(char *fname)
    {
    	int len;
    	FILE *f = fopen(fname, "rb");
    	if (f == NULL) return -1;
    	fseek(f, 0, SEEK_END);
    	len = ftell(f);
    	fclose(f);
    	return len;
    }
    
    int read_file(char *fname, int start_pos, char *buf, int len)
    {
    	int read_len;
    	FILE *f = fopen(fname, "rb");
    	if (f == NULL) return 1;
    	if (start_pos) fseek(f, start_pos, SEEK_SET);
    	read_len = fread(buf, 1, len, f);
    	fclose(f);
    	if (read_len != len) return 1;
    	return 0; //ok
    }
    
    int get_asn1_len(unsigned char *buf, int *size_hdr)
    {
    	int n, i, res;
    	int pos = 0;
    	if ((buf[pos]&0x80) == 0) {
    		*size_hdr = 1;
    		return buf[pos];
    	}
    	n = buf[pos++]&0x7f;
    	res = 0;
    	for(i = 0; i < n; i++) {
    		res = res*256 + buf[pos++];
    	}
    	*size_hdr = n+1;
    	return res;
    }
    
    #define MAX_HEADER 20000
    int read_container(char *fpath, int flag2, char *salt12, char *primary_key, char *masks_key, char *public8, char *oid_param_set8)
    {
    	int result;
    	char primary_path[1024+30];
    	char masks_path[1024+30];
    	char header_path[1024+30];
    	char header_buf[MAX_HEADER];
    	int header_len;
    	int i, len, pos, size_hdr;
    
    	if (strlen(fpath)>1024) { result = 1; goto err; }
    
    	sprintf(header_path, "%s/header.key", fpath);
    	if (flag2 == 0)
    	{
    		sprintf(primary_path, "%s/primary.key", fpath);
    		sprintf(masks_path, "%s/masks.key", fpath);
    	}
    	else
    	{
    		sprintf(primary_path, "%s/primary2.key", fpath);
    		sprintf(masks_path, "%s/masks2.key", fpath);
    	}
    
    	if (read_file(primary_path, 4, primary_key, 32)) { result = 1; goto err; }
    	if (read_file(masks_path, 4, masks_key, 32)) { result = 1; goto err; }
    	if (read_file(masks_path, 0x26, salt12, 12)) { result = 1; goto err; }
    
    	header_len = file_length(header_path);
    	if (header_len < 0x42 || header_len > MAX_HEADER) { result = 1; goto err; }
    	if (read_file(header_path, 0, header_buf, header_len)) { result = 1; goto err; }
    
    //------------- skip certificate ---------------------------
    	pos = 0;
    	for(i = 0; i < 2; i++)
    	{
    		get_asn1_len(header_buf+pos+1, &size_hdr);
    		pos += size_hdr+1;
    		if (pos > header_len-8) { result = 2; goto err; }
    	}
    
    //------------------ get oid_param_set8 -----------------------
    #define PARAM_SET_POS 34
    	if (memcmp(header_buf+pos+PARAM_SET_POS, "\x6\x7", 2) != 0) { result = 2; goto err; }
    	memcpy(oid_param_set8, header_buf+pos+PARAM_SET_POS+1, 8);
    
    //------------------ get public8 -----------------------
    	result = 2; //not found
    	pos += 52;
    	for(i = 0; i < 3; i++)
    	{
    		len = get_asn1_len(header_buf+pos+1, &size_hdr);
    		if (len == 8 && memcmp(header_buf+pos, "\x8a\x8", 2) == 0)
    		{
    			memcpy(public8,header_buf+pos+2,8);
    			result = 0; //ok
    			break;
    		}
    		pos += len+size_hdr+1;
    		if (pos > header_len-8) { result = 2; goto err; }
    	}
    err:
    	OPENSSL_cleanse(header_buf, sizeof(header_buf));
    	return result;
    }
    
    #define START_OID 0x12
    #define START_KEY 0x28
    unsigned char asn1_private_key[72] = {
    	0x30,0x46,2,1,0,0x30,0x1c,6,6,0x2a,0x85,3,2,2,0x13,0x30,0x12,6,7,0x11,
    	0x11,0x11,0x11,0x11,0x11,0x11,6,7,0x2a,0x85,3,2,2,0x1e,1,4,0x23,2,0x21,0
    };
    
    int main(int argc, char **argv)
    {
    	int result;
    	char *container_path;
    	char *passw;
    	char salt12[12];
    	char primary_key[32];
    	char masks_key[32];
    	char public8[8];
    	char oid_param_set8[8];
    	BN_CTX *ctx;
    	BIGNUM *key_with_mask;
    	BIGNUM *mask;
    	BIGNUM *raw_key;
    	char pwd_key[32];
    	char outbuf[32];
    
    	ctx = BN_CTX_new();
    
    	if (argc == 2)
    	{
    		container_path = argv[1];
    		passw = "";
    	}
    	else
    	if (argc == 3)
    	{
    		container_path = argv[1];
    		passw = argv[2];
    	}
    	else
    	{
    		printf("get_private container_path [passw]\n");
    		result = 1;
    		goto err;
    	}
    
    	if (read_container(container_path, 0, salt12, primary_key, masks_key, public8, oid_param_set8) != 0 &&
    		read_container(container_path, 1, salt12, primary_key, masks_key, public8, oid_param_set8) != 0)
    	{
    		printf("can not read container from %s\n", container_path);
    		result = 2;
    		goto err;
    	}
    
    	make_pwd_key(pwd_key, salt12, 12, passw);
    	key_with_mask = decode_primary_key(pwd_key, primary_key, ctx);
    	OPENSSL_cleanse(pwd_key, sizeof(pwd_key));
    	mask = reverse32bn(masks_key, ctx);
    	raw_key = remove_mask_and_check_public(oid_param_set8, key_with_mask, mask, public8, ctx);
    
    	if (raw_key)
    	{
    		BIO *bio;
    		store_bignum(raw_key, outbuf, sizeof(outbuf));
    		memcpy(asn1_private_key+START_OID, oid_param_set8, 8);
    		memcpy(asn1_private_key+START_KEY, outbuf, 32);
    		//bio = BIO_new_file("private.key", "w");
    		bio = BIO_new_fp(stdout, BIO_NOCLOSE | BIO_FP_TEXT);
    		PEM_write_bio(bio, "PRIVATE KEY", "", asn1_private_key, sizeof(asn1_private_key));
    		BIO_free(bio);
    		OPENSSL_cleanse(outbuf, sizeof(outbuf));
    		OPENSSL_cleanse(asn1_private_key, sizeof(asn1_private_key));
    		result = 0; //ok
    	}
    	else
    	{
    		printf("Error check public key\n");
    		result = 3;
    	}
    
    err:
    	BN_CTX_free(ctx);
    	OPENSSL_cleanse(salt12, sizeof(salt12));
    	OPENSSL_cleanse(primary_key, sizeof(primary_key));
    	OPENSSL_cleanse(masks_key, sizeof(masks_key));
    	return result;
    }
    

    Небольшой комментарий.

    Основную работу выполняют следующие 3 функции:

    1. Создаем ключ хранения исходя из 12-ти байтовой «соли» и пароля.

    make_pwd_key(pwd_key, salt12, 12, passw);
    

    2. Расшифровываем основной ключ на ключе хранения.

    key_with_mask = decode_primary_key(pwd_key, primary_key, ctx);
    

    3. Делим ключ с маской на маску.

    raw_key = remove_mask_and_check_public(oid_param_set8, key_with_mask, mask, public8, ctx);
    

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

    if (!BN_mod_inverse(mask_inv, mask, order, ctx)) { result = 1; goto err; }
    if (!BN_mod_mul(raw_secret, key_with_mask, mask_inv, order, ctx)) { result = 1; goto err; }
    

    Сборка утилиты конвертирования ключа

    Далее сборка исходников описана для Linux версии.

    Версию для Windows можно скачать отсюда там же есть сертификаты и закрытый ключ для тестирования, для сборки потребуется бесплатный компилятор Borland C++ 5.5

    Компиляция OpenSSL библиотеки

    После скачивания и распаковки исходных текстов openssl в целевой директории выполняем команды:

    ./config
    make
    

    Получаем готовую библиотеку libcrypto.a в текущей директории.
    Также потребуются заголовочные файлы из директорий engines/ccgost и include.

    Компиляция privkey

    gcc -o privkey -Iengines/ccgost -Iinclude privkey.c libcrypto.a -pthread -ldl
    

    Формирование файла закрытого ключа private. key

    ./privkey /mnt/usbflash/lp-9a0fe.000
    

    Тестовый закрытый ключ в криптоконтейнере lp-9a0fe.000, сертификат открытого ключа signer.cer и другие файлы для тестирования можно взять отсюда

    Получаем результат работы:

    -----BEGIN PRIVATE KEY-----
    MEYCAQAwHAYGKoUDAgITMBIGByqFAwICJAAGByqFAwICHgEEIwIhAKzsrv/l1Uwk
    uzph/LQN9mux0Jz0yaW21kOYEFv0Xyut
    -----END PRIVATE KEY-----
    

    Cохраняем в private.key

    Пользуемся закрытым ключом private. key для подписывания файла file. txt

    openssl cms -sign -inkey private.key -in file.txt -CAfile CA.cer -signer signer.cer -engine gost -out test.sign -outform DER -noattr -binary
    

    Проверяем подпись

    openssl cms -verify -content file.txt -in test.sign -CAfile CA.cer -signer signer.cer -engine gost -inform DER -noattr -binary
    

    Все работает просто замечательно!

    Спасибо за внимание. Это была моя первая статья на хабре.

    Файл masks. key

    Содержит 32 байта маски ключа в формате Asn1, зашифрованного на ключе хранения pwd_key. Далее 12 байт «затравочной» информации для генерации ключа хранения pwd_key, если криптоконтейнер защищен паролем, то пароль также участвует в генерации ключа хранения.

    Далее контрольная сумма (имитозащита) 4 байта. Контрольной информацией для простоты мы пользоваться не будем, общий контроль будет осуществляться путем генерации открытого ключа и сравнения первых 8 байт полученного ключа с соответствующим полем из файла header.key:

    masks.key

    Три режима работы с Рутокенами

    Работа со внутренним криптоядром Рутокена

    В режиме «активного вычислителя» ключи контейнера КриптоПро создаются сразу в защищенной памяти устройства.

    Подписание документов теперь возможно и на неизвлекаемых аппаратных ключах. Этот режим предотвращает извлечение ключа в память компьютера в момент подписания.

    Поддерживаемые модели Рутокен

    • Рутокен ЭЦП 2.0 2100 (Type-C/micro);
    • Рутокен ЭЦП 2.0 (micro);
    • Рутокен ЭЦП 2.0 2151;
    • Рутокен ЭЦП 2.0 Flash/Touch;
    • Рутокен ЭЦП Bluetooth;
    • Смарт-карты Рутокен ЭЦП 2.0 2100;
    Поддержка протокола SESPAKE (ФКН)

    В «КриптоПро CSP» версии 5.0 R2 реализован криптографический протокол SESPAKE, который так же поддерживается в моделях Рутокен ЭЦП 2.0 3000 (Type-C/micro) и в токенах/смарт-картах Рутокен ЭЦП 3.0 NFC.

    Данный протокол позволяет провести аутентификацию, не передавая в открытом виде PIN-код пользователя, и установить шифрованный канал для обмена сообщений между криптопровайдером и носителем

    Хранение в защищенной файловой системе Рутокен

    Как и в «КриптоПро CSP» версии 4.0, использование Рутокена в этом режиме позволяет обезопасить ключевую информацию от несанкционированного использования. Ключи и сертификаты надёжно хранятся в защищенной файловой системе Рутокен.

    Поддерживаемые модели Рутокен

    • Рутокен S (micro)
    • Рутокен Lite (micro)
    • Рутокен ЭЦП PKI (Type-C/micro)
    • Рутокен ЭЦП 2.0 2100 (Type-C/micro);
    • Рутокен ЭЦП 2.0 (micro);
    • Рутокен ЭЦП 2.0 2151;
    • Рутокен ЭЦП 2.0 Flash/Touch;
    • Рутокен ЭЦП Bluetooth;
    • Смарт-карты Рутокен ЭЦП 2.0 2100;

    Инструменты КриптоПро CSP

    В составе «КриптоПро CSP 5.0 R2» появилось графическое приложение для Windows, Linux и macOS – «Инструменты КриптоПро» («CryptoPro Tools») или просто cptools.

    криптопро в составе ключа как это

    Оно позволяет:

    • управлять контейнерами и сертификатами
    • создавать и проверять CMS-подписи под файлами
    • выполнять сервисные операции с носителями
    • отображать информацию о провайдере и лицензии и делать некоторые настройки

    Полное описание функциональности «Инструментов КриптоПро CSP» есть на сайте разработчика.

    Читайте также:  Как узнать пароль к сертификату ЭП налоговая? - Онлайн журнал про бизнес и налоги
    Оцените статью
    ЭЦП Эксперт
    Добавить комментарий