Jump to content
Калькуляторы

openssl и GOST R 34.11-94

Здравствуйте, коллеги.

Наверняка кому-то удалось реализовать поддержку GOST R 34.11-94 в openssl? Экспортировал сертификат в помощью купленной только что p12fromgostcsp, результат:
 

root@zapret:/opt/gost-ssl-1.0.1c/bin# ./openssl asn1parse -in /root/p12.pfx -inform DER
    0:d=0  hl=4 l=3231 cons: SEQUENCE          
    4:d=1  hl=2 l=   1 prim: INTEGER           :03
    7:d=1  hl=4 l=3153 cons: SEQUENCE          
   11:d=2  hl=2 l=   9 prim: OBJECT            :pkcs7-data
   22:d=2  hl=4 l=3138 cons: cont [ 0 ]        
   26:d=3  hl=4 l=3134 prim: OCTET STRING      [HEX DUMP]:
...
 3164:d=1  hl=2 l=  69 cons: SEQUENCE          
 3166:d=2  hl=2 l=  53 cons: SEQUENCE          
 3168:d=3  hl=2 l=  17 cons: SEQUENCE          
 3170:d=4  hl=2 l=   6 prim: OBJECT            :GOST R 34.11-94
 3178:d=4  hl=2 l=   7 prim: OBJECT            :id-GostR3411-94-CryptoProParamSet
 3187:d=3  hl=2 l=  32 prim: OCTET STRING      [HEX DUMP]:E61B68...
 3221:d=2  hl=2 l=   8 prim: OCTET STRING      [HEX DUMP]:4AB66C...
 3231:d=2  hl=2 l=   2 prim: INTEGER           :0800
root@zapret:/opt/gost-ssl-1.0.1c/bin# ./openssl ciphers | tr ":" "\n" | grep GOST
GOST2001-GOST89-GOST89
GOST94-GOST89-GOST89
root@zapret:/opt/gost-ssl-1.0.1c/bin#
./openssl pkcs12 -in /root/p12.pfx         
Enter Import Password:
MAC verified OK
Bag Attributes
    localKeyID: 38 D3 06 CA B9 AE 28 8B 8B...
subject=/1.2.643.100.3=07805797...
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
Bag Attributes
    localKeyID: 38 D3 06 CA B9 AE 28 8B 8B...
    friendlyName: csp_exported
Error outputting keys and certificates
140382018086560:error:0609E09C:digital envelope routines:PKEY_SET_TYPE:unsupported algorithm:p_lib.c:239:
140382018086560:error:0606F076:digital envelope routines:EVP_PKCS82PKEY:unsupported private key algorithm:evp_pkey.c:84:TYPE=1.2.643.7.1.1.1.1
root@zapret:/opt/gost-ssl-1.0.1c/bin#


Пробовал разные сборки openssl, собирал сам с openssl.org, но результатодин и тот же: unsupported private key algorithm:evp_pkey.c:84:TYPE=1.2.643.7.1.1.1.1

Edited by metalsoft

Share this post


Link to post
Share on other sites

Должно работать либо с МагПро Криптопакетом (www.cryptocom.ru), либо с более современной реализацией openssl 

Можете в понедельник мне написать, объясню подробнее

Share this post


Link to post
Share on other sites

Неделю назад столкнулся с такой же проблемой.

На самом деле только МАС подписан GOST94.

 

Для открытия полученного сертификата нужно поставить свежий openssl с GOST2012, т.к. контейнер в этом формате, вот примерно так:

# /usr/bin/openssl version
OpenSSL 1.1.1  11 Sep 2018

# /usr/bin/openssl ciphers|tr ':' '\n'|grep -i GOST
GOST2012-GOST8912-GOST8912
GOST2001-GOST89-GOST89

 

И отключить проверку МАС:

- добавить опцию -nomacver

 

Share this post


Link to post
Share on other sites

Уррааа!!! Заработало!!!! (с) :)

Фишка в том, что в openssl-1.1.* выпилена поддержка gost. Пришлось отдельно ставить отсюда: https://github.com/gost-engine/engine

За подсказку про -nomacver отдельное спасибо!

Share this post


Link to post
Share on other sites

Апну тему.

Бодаюсь уже второй день, установил openssl 1.1.1a. на CentOS 6.5 32 & 64 bit из исходников. Поддержки ГОСТ2012 тут нет, это понятно.
Пытаюсь собрать и установить https://github.com/gost-engine/engine, на тех же системах, выдаёт ошибки:

64bit

Цитата

[ 72%] Built target test_params
[ 74%] Building C object CMakeFiles/gost12sum.dir/gost12sum.c.o
[ 76%] Linking C executable bin/gost12sum
[ 76%] Built target gost12sum
[ 78%] Building C object CMakeFiles/test_keyexpimp.dir/test_keyexpimp.c.o
[ 80%] Linking C executable bin/test_keyexpimp
[ 80%] Built target test_keyexpimp
[ 82%] Building C object CMakeFiles/test_context.dir/test_context.c.o
[ 84%] Linking C executable bin/test_context
[ 84%] Built target test_context
[ 86%] Building C object CMakeFiles/sign.dir/benchmark/sign.c.o
[ 88%] Linking C executable bin/sign
CMakeFiles/sign.dir/benchmark/sign.c.o: In function `main':
/rico/git/engine-master/benchmark/sign.c:150: undefined reference to `clock_gettime'
/rico/git/engine-master/benchmark/sign.c:175: undefined reference to `clock_gettime'
collect2: выполнение ld завершилось с кодом возврата 1
gmake[2]: *** [bin/sign] Ошибка 1
gmake[1]: *** [CMakeFiles/sign.dir/all] Ошибка 2
gmake: *** [all] Ошибка 2
 

или

32bit

Цитата

[ 26%] Built target gost_core
[ 28%] Building C object CMakeFiles/gost_engine.dir/e_gost_err.c.o
[ 30%] Building C object CMakeFiles/gost_engine.dir/gost_asn1.c.o
[ 32%] Building C object CMakeFiles/gost_engine.dir/gost_crypt.c.o
[ 34%] Building C object CMakeFiles/gost_engine.dir/gost_ctl.c.o
[ 36%] Building C object CMakeFiles/gost_engine.dir/gost_eng.c.o
[ 38%] Building C object CMakeFiles/gost_engine.dir/gost_keywrap.c.o
[ 40%] Building C object CMakeFiles/gost_engine.dir/gost_params.c.o
[ 42%] Building C object CMakeFiles/gost_engine.dir/gost_keyexpimp.c.o
cc1: warnings being treated as errors
/rico/git/engine/gost_keyexpimp.c: In function ‘gost_tlstree’:
/rico/git/engine/gost_keyexpimp.c:234: error: integer constant is too large for ‘long’ type
/rico/git/engine/gost_keyexpimp.c:235: error: integer constant is too large for ‘long’ type
/rico/git/engine/gost_keyexpimp.c:236: error: integer constant is too large for ‘long’ type
/rico/git/engine/gost_keyexpimp.c:237: error: integer constant is too large for ‘long’ type
gmake[2]: *** [CMakeFiles/gost_engine.dir/gost_keyexpimp.c.o] Error 1
gmake[1]: *** [CMakeFiles/gost_engine.dir/all] Error 2
gmake: *** [all] Error 2
 

 

Что не так ?

Какие могут быть еще вариант решения глобальной проблемы (выгрузка реестра ?) 

Share this post


Link to post
Share on other sites

Варианты: 

 

1. Оторвите сборку этого теста

2. Возьмите engine из ветки 1_1_0, там возможны варианты.

3. Напишите на support@cryptocom.ru, с удовольствием продадим вам коммерческий пакет openssl с ГОСТами.

Edited by Dmitry Belyavskiy

Share this post


Link to post
Share on other sites

33 минуты назад, Dmitry Belyavskiy сказал:

Варианты: 

 

1. Оторвите сборку этого теста

2. Возьмите engine из ветки 1_1_0, там возможны варианты.

3. Напишите на support@cryptocom.ru, с удовольствием продадим вам коммерческий пакет openssl с ГОСТами.

 

1. Вообще не понял, поясните

2. Ссылочкой можете поделится ?

3. Интересно. Но крайний вариант.

Share this post


Link to post
Share on other sites

2 минуты назад, baronzzz сказал:

1. Вообще не понял, поясните

2. Ссылочкой можете поделится ?

3. Интересно. Но крайний вариант.

1. Закомментируйте в CmakeLists.txt сборку benchmark/sign.

2. Там же, просто ветку из git возьмите другую. git checkout openssl_1_1_0. 

 

Share this post


Link to post
Share on other sites

2 часа назад, Dmitry Belyavskiy сказал:

3. Напишите на support@cryptocom.ru, с удовольствием продадим вам коммерческий пакет openssl с ГОСТами.

У вас GOST запилен через ENGINE?

Share this post


Link to post
Share on other sites

13 минут назад, TheUser сказал:

У вас GOST запилен через ENGINE?

У нас сертифицированный продукт, включающий реализацию ГОСТ через engine для OpenSSL. OpenSSL несколько патченный. 

Share this post


Link to post
Share on other sites

3 часа назад, baronzzz сказал:

/rico/git/engine-master/benchmark/sign.c:150: undefined reference to `clock_gettime'

rt либу потеряли в цемейке.

list(APPEND CMAKE_REQUIRED_LIBRARIES rt)

...

target_link_libraries(ИМЯБИНАРНИКА ${CMAKE_REQUIRED_LIBRARIES} ${CMAKE_EXE_LINKER_FLAGS})

 

3 часа назад, baronzzz сказал:

/rico/git/engine/gost_keyexpimp.c:234: error: integer constant is too large for ‘long’ type

Править исходник или искать переключатель ветки на х32/более короткие константы.

 

1 час назад, Dmitry Belyavskiy сказал:

1. Закомментируйте в CmakeLists.txt сборку benchmark/sign.

А не судьба была сразу CMake поправить чтобы rt либу на линухах добавлял?

Share this post


Link to post
Share on other sites

5 минут назад, Ivan_83 сказал:

А не судьба была сразу CMake поправить чтобы rt либу на линухах добавлял?

На бегу - слабо :)

 

Share this post


Link to post
Share on other sites

1 час назад, Dmitry Belyavskiy сказал:

У нас сертифицированный продукт, включающий реализацию ГОСТ через engine для OpenSSL. OpenSSL несколько патченный. 

А зачем покупать сертифицированный у вас, если можно взять не менее сертифицированный в Infotecs, который в паблике лежит?

Share this post


Link to post
Share on other sites

2 часа назад, baronzzz сказал:

В этом деле не сильно искушен. Знал бы, ессесно подправил бы, чего где. Поэтому и обращаюсь к сообществу...

Перекачай/обнови исходник (автор недавно типа пофиксил) и поменяй:

target_link_libraries(sign gost_engine gost_core ${OPENSSL_CRYPTO_LIBRARY})

на

target_link_libraries(sign gost_engine gost_core ${OPENSSL_CRYPTO_LIBRARY} ${CMAKE_REQUIRED_LIBRARIES})

 

но вообще, цмейк написан ***ецово, переписать бы его.

 

3 часа назад, Dmitry Belyavskiy сказал:

На бегу - слабо :)

1. list(APPEND CMAKE_REQUIRED_LIBRARIES rt) - оно само себя не добавит куда надо

2. оно нахер не нужно за пределами линукса

3. нафига было пихать сборку всего в один цмейк файл!?

4. полезный код из корня в /src, тесты в /tests и тп, развели помойку.

5. по коду плачет автоформатер, местами сильно

6. ***ецовые типы данных: int->size_t; unsigned char,byte->uint8_t; word32->uint32_t

 

Вот как выглядят цмейки у меня: https://github.com/rozhuk-im/ssdpd/blob/master/CMakeLists.txt

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

 

Мало того что нашей крипте не доверяют, вы ещё пишите так, как будто только что из школы и на дворе 1990 год. :(

Share this post


Link to post
Share on other sites

8 часов назад, Dmitry Belyavskiy сказал:

Про Cmake - с удовольствием приму патчи.

Все вы так говорите :)

https://savannah.nongnu.org/bugs/index.php?55235

 

Я редко правлю то, чем не пользуюсь.

Share this post


Link to post
Share on other sites

В 25.01.2019 в 11:58, Hawk128 сказал:

И отключить проверку МАС:

- добавить опцию -nomacver

Спасибо. Помогло в случае когда openssl  не хотела читать файл pfx ругаясь на неверный пароль.

 

Share this post


Link to post
Share on other sites

В 07.02.2019 в 09:55, baronzzz сказал:

1. Вообще не понял, поясните

2. Ссылочкой можете поделится ?

3. Интересно. Но крайний вариант.

Меня как то жаба задушила что либо покупать, и пошел другим путем: Взят РУТОКЕН ЭЦП, его воткнуть в сервак, предварительно залив туда закрытый ключ, и все подписи делаю через него, т.е. хардварно.

Share this post


Link to post
Share on other sites

А вам это всем для РКН нужно или для чего-то ещё?

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

 

Share this post


Link to post
Share on other sites

мне не только для РКН. Хотя по поводу метки времени - дык, проще будет, один рутокен модно будет снять. Пригодится в других местах. Спасибо за совет!

Share this post


Link to post
Share on other sites

6 минут назад, reest сказал:

мне не только для РКН. Хотя по поводу метки времени - дык, проще будет, один рутокен модно будет снять. Пригодится в других местах. Спасибо за совет!

а зачем вам вообще рутокен?

ключ кмк экспортируется из носителя и кладется в виде файлика.

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

( при каждой операции подписи, ключ в его исходном виде, загружается в ОЗУ операционной системы и в ней используется )

так чтоб операция подписи выполнялась внутри ключа - это минимум уже от версии "рутокен эцп" и выше

 

 

Share this post


Link to post
Share on other sites

3 часа назад, LostSoul сказал:

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

( при каждой операции подписи, ключ в его исходном виде, загружается в ОЗУ операционной системы и в ней используется )

так чтоб операция подписи выполнялась внутри ключа - это минимум уже от версии "рутокен эцп" и выше

 

 

Речь и шла именно про РУТОКЕН ЭЦП, имеющий в себе криптопроцессор.  Всякие РУТОКЕН С, лайт, ВЕБ  не имеют криптопроцессора.

Суть проблемы, в том, что бы извлечь ключ в формате PF12, надо отдать 2999р Лисисофту. А ночью пришла жаба, и начала душить ,ведь 2999р надо будет отдавать как минимум через два года сказала, используй рутокен ЭЦП, все операции будут хардварно, и мучиться с опенссл и ГОСТ не надо будет, надо будет просто опенссл натравить на ключ, что делается быстро и без бубна.

Share this post


Link to post
Share on other sites

Не знаю кто такой ЛИССофт , но я в УЦ Контур получил вообще на первый год бесплатно , а на второй и последующие года 500р / год.

Ключ делают экспортируемым , если попросить.

 

 

13 минут назад, reest сказал:

мучиться с опенссл и ГОСТ не надо будет, надо будет просто опенссл натравить на ключ

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

так как Токен ЭЦП это не значит что он все делает внутри "под ключ" , как мне кажется. 

Там наверняка API от которого скулы сводит и который все равно в openssl должен быть собран

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.