пятница, 15 июня 2012 г.

Использование OpenSource крипто библиотек для работы с ГОСТовыми сертификатами CryptoPro

В данной статье делается попытка ответить на вопрос: возможно ли использовать OpenSource библиотеки для работы с ГОСТовыми сертификатами?
Если коротко, то да.
Для проверки использовалась последняя на данный момент версия OpenSSL (1.0.1с), собранная из исходников с поддержкой gost engine
Для начала нужно установить КриптоПро CSP 3.6 R3, поскольку в нем реализована поддержка экспорта сертификатов в формате pfx. Эту часть работ нужно делать в операционной системе Windows. Не буду описывать подробно этот процесс, скажу лишь, что нужно сохранить приватный ключ в формате CryptoPro на флэшку и импортировать его в хранилище "Реестр". Выгрузив сертификат в файл, например store.pfx (включая приватный ключ), можно вывести приватный ключ в stdout командой
/usr/local/ssl/bin/openssl pkcs12 -info -engine gost -nodes -in ~/store.pfx 

  • -info вывести информацию о содержимом файла в формате pkcs12 (.pfx)
  • -engine использовать указанный криптографический модуль
  • -nodes не нужно шифровать приватный ключ
  • -in входной файл
Если вы получаете ошибку вида "unknown PBE algorithm"
Enter Import Password:
MAC Iteration 2000
MAC verified OK
PKCS7 Data
Shrouded Keybag: undefined, Iteration 2000
Bag Attributes
    Microsoft Local Key set: <No Values>
    localKeyID: 01 00 00 00
    friendlyName: REGISTRY\\1ba6dcf8-b953-4774-8a9e-de98de071f24
    Microsoft CSP Name: Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider
Error outputting keys and certificates
140669637789344:error:06074079:digital envelope routines:EVP_PBE_CipherInit:unknown pbe algorithm:evp_pbe.c:167:TYPE=1.2.840.113549.1.12.1.80
140669637789344:error:23077073:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 algor cipherinit error:p12_decr.c:83:
140669637789344:error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt error:p12_decr.c:130:
То это означает, что вам потребуется другое средство для получения pfx файла, утилитка P12FromGostCSP.exe
Если вы получаете ошибку вида "unknown digest algorithm"

Enter Import Password:
MAC Iteration 2048
Mac verify error: invalid password?
140572666472096:error:2306B076:PKCS12 routines:PKCS12_gen_mac:unknown digest algorithm:p12_mutl.c:88:
140572666472096:error:2307E06D:PKCS12 routines:PKCS12_verify_mac:mac generation error:p12_mutl.c:122:

то скорее всего в вашем openssl нет поддержки ГОСТовых алгоритмов либо вы используете не ту копию openssl.

Если все прошло без ошибок, то в консоли вы получите приватный ключ и сертификат. Скопировав выведенный в консоль приватный ключ (вместе со словами -----BEGIN PRIVATE KEY----- и -----END PRIVATE KEY-----) в отдельный файл private.key мы сможем с его помощью создавать ЭЦП.

Команда для генерации примерно следующая:

/usr/local/ssl/bin/openssl cms -sign -inkey ~/private.key -in ~/file.txt -CAfile ~/CA.cer 
-signer ~/client.cer -engine gost -out ~/test.sign -outform DER -noattr -binary

  • -sign генерация подписи
  • -inkey путь к приватному ключу
  • -in подписываемый файл
  • -CAfile файл УЦ
  • -signer файл с сертификатом, которым осуществляется подпись
  • -engine использовать указанный криптографический модуль
  • -out файл, в который будет записана ЭЦП
  • -outform формат подписи
  • -noattr не добавлять дополнительных аттрибутов в подпись
  • -binary считать подписываемый файл массивом байт, а не текстом

К сожалению, Bouncy Castle (версии 1.46), хоть в нем и декларируется поддержка ГОСТовых алгоритмов, не может разобрать формат приватного ключа, так что использовать его для генерации ЭЦП на данный момент не представляется возможным.

UPD:
Bouncy Castle 1.55 уже умеет работать с такими приватными ключами

11 комментариев:

  1. На bouncycastle 1.47 проверяли?

    ОтветитьУдалить
  2. 2012 год а сталкиваюсь с такими же проблемами)
    В демо версии P12FromGostCSP.exe не хочет экспортировать контейнеры КриптоПРО. Не очень понятно стоит ли покупать ради этого, есть альтернативы? Особенно пугает фраза "Экспорт возможен только для контейнеров с разрешённой операцией экспорта (флаг CRYPT_EXPORT)" – не нашел где посмотреть наличие этого флага и возможность влиять на него (

    Не подскажите, есть ли альтернативы?

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

      Удалить
    2. Благодарю, старую версию нашел, но она не экспортирует контейнеры Crypto CSP 4+. После выбора контейнера, который нужно экспортировать, выходит без каких либо результатов работы.

      Какие еще есть варианты? Я не против и купить утилиту экспорта, но натыкаюсь на людей которым она не помогла :( Хочу понять какой у меня случай

      Удалить
    3. https://ibb.co/fRxQaA вот после этого диалога файла не появляется :)

      Удалить
    4. Добрый день. Утилита P12FromGostCSP.exe в случае контейнера CryptoPro 4+ и GOST2012 для использования в Bouncy Castle 1.60 не помогла. Видимо, приватный ключ некорректно разбирается, что при дешифровке приводит к ошибке mac mismatch. Общался с поддержкой разработчика утилиты, но решить проблему, к сожалению, не удалось. Буду очень признателен, если поделитесь соображениями.

      Удалить
    5. openssl pkcs12 -in xxx.pfx -out xxx.pem -nodes -clcerts -nomacver

      Удалить
    6. Данной командой приватный ключ экспортируется без проблем. Ошибка "mac mismatch" возникает именно на этапе дешифрации. Поэтому тут 2 варианта: либо P12FromGostCSP некорректно формирует контейнер p12 для ГОСТ-2012, либо есть проблема в BC. Последние раз тестировал на версии 1.61 - ошибка осталась.

      Удалить