alibek Posted June 4, 2018 Есть усиленная квалифицированная ЭЦП, которая используется в электронном документообороте, используются ГОСТ-овские алгоритмы. Нужно сделать документ с открепленной (отсоединенной) подписью. Сама система ЭД такое делать не умеет. Крипто-Про использовать буду только от безысходности. Не посоветуете софт, которым это можно сделать? У меня есть старая сборка OpenSSL с поддержкой ГОСТ-28147-89, но она с ЭЦП работать не умеет, в ЭЦП есть неподдерживаемые атрибуты. Стоит ли возиться со сборкой свежего OpenSSL? Или есть что-нибудь более простое и удобное? Можно под Windows, можно под Linux. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Andrei Posted June 4, 2018 Извлечь ЭЦП с помощью P12FromGostCSP и потом использовать ее как хочется. Или я не понял задачу? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
vop Posted June 4, 2018 Для цифровой подписи нужен только ключ? Зачем там атрибуты сертификата? Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
TheUser Posted June 4, 2018 7 часов назад, alibek сказал: Нужно сделать документ с открепленной (отсоединенной) подписью. ... У меня есть старая сборка OpenSSL с поддержкой ГОСТ-28147-89, но она с ЭЦП работать не умеет, в ЭЦП есть неподдерживаемые атрибуты. На сколько я помню, запрос на выемку запрещенных сайтов также подписывается открепленной подписью, и там вроде бы тоже ГОСТ (какой конкретно - хз). Так что есть смысл взять работающую сборку openssl и сделать на ней. Сборку уже гуглить. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Ivan_83 Posted June 4, 2018 8 часов назад, alibek сказал: Стоит ли возиться со сборкой свежего OpenSSL? Я бы посмотрел что libressl поддерживает, кажется там больше всего. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted June 4, 2018 3 часа назад, Andrei сказал: Извлечь ЭЦП с помощью P12FromGostCSP Извлекать не надо, ЭЦП уже есть в файле. 2 часа назад, vop сказал: Для цифровой подписи нужен только ключ? И поддержка алгоритмов шифрования. 2 часа назад, TheUser сказал: Так что есть смысл взять работающую сборку openssl и сделать на ней. Работающая (с реестром) сборка уже есть, но видимо этого недостаточно. При попытке использовать извлеченный ЭЦП, например преобразовать в PEM, получаю такую ошибку: MAC verified OK Error outputting keys and certificates 140093694572200:error:06074079:digital envelope routines:EVP_PBE_CipherInit:unknown pbe algorithm:evp_pbe.c:162:TYPE=1.2.840.113549.1.12.1.80 140093694572200:error:23077073:PKCS12 routines:PKCS12_pbe_crypt:pkcs12 algor cipherinit error:p12_decr.c:87: 140093694572200:error:2306A075:PKCS12 routines:PKCS12_item_decrypt_d2i:pkcs12 pbe crypt error:p12_decr.c:139: 1 час назад, Ivan_83 сказал: Я бы посмотрел что libressl поддерживает Спасибо, посмотрю. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
Andrei Posted June 4, 2018 Находил в свое время где-то на просторах инета нижеприведенную инструкцию. По ней и делал. http://www.openssl.org tar xzf openssl-1.0.1с.tar.gz cd openssl-1.0.1с ./config shared zlib enable-rfc3779 --prefix=/gost-ssl make depend make make test make install Правим конфиг /gost-ssl/ssl/openssl.cnf В самом верху, первой строкой пишем: openssl_conf = openssl_def Далее добавляем в конец: [openssl_def] engines = engine_section [engine_section] gost = gost_section [gost_section] default_algorithms = ALL engine_id = gost dynamic_path = /gost-ssl/lib/engines/libgost.so CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet Далее проверяем работоспособность и наличие GOST (полный путь до openssl обязателен) /gost-ssl/bin/openssl ciphers | tr ":" "\n" | grep GOST GOST2001-GOST89-GOST89 GOST94-GOST89-GOST89 /gost-ssl/bin/openssl ciphers | grep -Fq GOST && echo "OK" OK подписываем xml файл: /gost-ssl/bin/openssl smime -sign -in request.xml -out request.bin -signer kontur.pem -outform DER Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
TheUser Posted June 5, 2018 12 часов назад, alibek сказал: Извлекать не надо, ЭЦП уже есть в файле. Что это за файл, откуда взяли? Сделайте команду openssl asn1parse -in FILENAME -inform DER для него, уберите все длинные HEX-строки, оставьте только первые 4 столбца. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted June 5, 2018 9 минут назад, TheUser сказал: Что это за файл, откуда взяли? Экспортировал из токена. 11 минут назад, TheUser сказал: Сделайте команду 0:d=0 hl=4 l=3650 cons: SEQUENCE 4:d=1 hl=2 l= 1 prim: INTEGER :03 7:d=1 hl=4 l=3582 cons: SEQUENCE 11:d=2 hl=2 l= 9 prim: OBJECT :pkcs7-data 22:d=2 hl=4 l=3567 cons: cont [ 0 ] 26:d=3 hl=4 l=3563 prim: OCTET STRING [HEX DUMP]:<hex> 3593:d=1 hl=2 l= 59 cons: SEQUENCE 3595:d=2 hl=2 l= 31 cons: SEQUENCE 3597:d=3 hl=2 l= 7 cons: SEQUENCE 3599:d=4 hl=2 l= 5 prim: OBJECT :sha1 3606:d=3 hl=2 l= 20 prim: OCTET STRING [HEX DUMP]:<hex> 3628:d=2 hl=2 l= 20 prim: OCTET STRING [HEX DUMP]:<hex> 3650:d=2 hl=2 l= 2 prim: INTEGER :07D0 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
TheUser Posted June 5, 2018 У меня pfx выглядит так: # /opt/itcs/bin/openssl asn1parse -in my.pfx -inform DER 0:d=0 hl=4 l=1213 cons: SEQUENCE 4:d=1 hl=2 l= 1 prim: INTEGER :03 7:d=1 hl=4 l=1108 cons: SEQUENCE 11:d=2 hl=2 l= 9 prim: OBJECT :pkcs7-data 22:d=2 hl=4 l=1093 cons: cont [ 0 ] 26:d=3 hl=4 l=1089 prim: OCTET STRING [HEX DUMP]: 1119:d=1 hl=2 l= 96 cons: SEQUENCE 1121:d=2 hl=2 l= 80 cons: SEQUENCE 1123:d=3 hl=2 l= 12 cons: SEQUENCE 1125:d=4 hl=2 l= 8 prim: OBJECT :GOST R 34.11-2012 with 512 bit hash 1135:d=4 hl=2 l= 0 prim: NULL 1137:d=3 hl=2 l= 64 prim: OCTET STRING [HEX DUMP]: 1203:d=2 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]: 1213:d=2 hl=2 l= 2 prim: INTEGER :0800 Выделил хеш-функцию. У меня она отечественная, у Вас - sha1. Дальше, сделайте dd if=ваш_файл of=obj26 bs=1 skip=30 count=3563 (здесь 30 - это 26 + 4 из строки 26:d=3...) и потом openssl asn1parse -in obj26 -inform DER Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted June 5, 2018 Вырезанный фрагмент выглядит так: 0:d=0 hl=4 l=3559 cons: SEQUENCE 4:d=1 hl=4 l= 416 cons: SEQUENCE 8:d=2 hl=2 l= 9 prim: OBJECT :pkcs7-data 19:d=2 hl=4 l= 401 cons: cont [ 0 ] 23:d=3 hl=4 l= 397 prim: OCTET STRING [HEX DUMP]:<hex> 424:d=1 hl=4 l=3135 cons: SEQUENCE 428:d=2 hl=2 l= 9 prim: OBJECT :pkcs7-encryptedData 439:d=2 hl=4 l=3120 cons: cont [ 0 ] 443:d=3 hl=4 l=3116 cons: SEQUENCE 447:d=4 hl=2 l= 1 prim: INTEGER :00 450:d=4 hl=4 l=3109 cons: SEQUENCE 454:d=5 hl=2 l= 9 prim: OBJECT :pkcs7-data 465:d=5 hl=2 l= 28 cons: SEQUENCE 467:d=6 hl=2 l= 10 prim: OBJECT :pbeWithSHA1And40BitRC2-CBC 479:d=6 hl=2 l= 14 cons: SEQUENCE 481:d=7 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:<hex> 491:d=7 hl=2 l= 2 prim: INTEGER :07D0 495:d=5 hl=4 l=3064 prim: cont [ 0 ] Наверное действительно экспортировать нужно было через P12FromGostCSP. Попробую сделать экспорт еще раз и проверить на готовой сборке OpenSSL. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
YuryD Posted June 5, 2018 P12FromGostCSP теперь платный и на год всего. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
TheUser Posted June 5, 2018 10 минут назад, YuryD сказал: P12FromGostCSP теперь платный и на год всего. Кое-кто сохранил старую версию тулзы и невозбранно пользуется ею. Приложенный файл сконвертировать из base64 в бинарь. Цифровая подпись производителя имеется. P12FromGostCSP.txt Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted June 5, 2018 Да, у меня есть старый архив. Наверное разработчики утилиты локти себе кусают, что ранее выкладывали ее свободно. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
YuryD Posted June 5, 2018 Если бы было всё так радостно :( Не работают старые версии утилит, по крайней мере те, что раньше работали у меня, и торренты тоже всё протухшее. Пришлось покупать, и быстро... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
alibek Posted June 5, 2018 Буквально дней десять назад обновлял ЭЦП для реестра. Утилита отлично работает, выгрузила ключ из реестра (продлевал прямо в ЛК) в файл. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
YuryD Posted June 5, 2018 Повезло вам, а мне нет. Вот кусок лога купленной версии Initialization: file path_lic = 'C:\Users\ххх\.P12FromGostCSP\LIC.DAT' Initialization: date OK Initialization: check license SN OK Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
TheUser Posted June 5, 2018 Вы тогда уж напишите что у Вас за ключи (тип ключа, удостоверяющий центр), чтобы можно было знать какие ключи не заказывать. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
YuryD Posted June 5, 2018 4 минуты назад, TheUser сказал: Вы тогда уж напишите что у Вас за ключи (тип ключа, удостоверяющий центр), чтобы можно было знать какие ключи не заказывать. Мой опыт вам не поможет, у нас в конторе своё подразделение по эцп, вот что они умеют, то и делают. Такском. Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
baide Posted August 2, 2018 Старая версия P12FromGostCSP не работает с сертификатами по 2012 госту. Купил платную версию, в p12 выгрузил, а вот /etc/gost-ssl/bin/openssl pkcs12 -in ./p12_2017.pfx -out provider.pem -nodes -clcerts Валит ошибки. Использовал gost engine, но все равно не помогает. На выходе битый файл без приватного ключа root@ubuntu-gost-2012:~/zapret# openssl version OpenSSL 1.1.0g 2 Nov 2017 root@ubuntu-gost-2012:~/zapret# openssl ciphers | tr ":" "\n" | grep GOST GOST2012-GOST8912-GOST8912 GOST2001-GOST89-GOST89 root@ubuntu-gost-2012:~/zapret# Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
TheUser Posted August 2, 2018 23 минуты назад, baide сказал: Валит ошибки. Использовал gost engine, но все равно не помогает. На выходе битый файл без приватного ключа А что выводит команда: openssl asn1parse -in p12_2017.pfx -inform DER Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
baide Posted August 2, 2018 3 minutes ago, TheUser said: А что выводит команда root@ubuntu-gost-2012:~/zapret# openssl asn1parse -in p12_2018.pfx -inform DER 0:d=0 hl=4 l=2999 cons: SEQUENCE 4:d=1 hl=2 l= 1 prim: INTEGER :03 7:d=1 hl=4 l=2921 cons: SEQUENCE 11:d=2 hl=2 l= 9 prim: OBJECT :pkcs7-data 22:d=2 hl=4 l=2906 cons: cont [ 0 ] 26:d=3 hl=4 l=2902 prim: OCTET STRING [HEX DUMP]:30820B5230820A2006092A864886F70D010706A0820A1130820A0D02010030820A0606092A864886F70D010701305C06092A864886F70D01050D304F302E06092A864886F70D01050C30210408BF467AC6C712862502020800301106062A850302020A06072A850302021E01301D06062A850302021530130408F77CB986446D602406072A850302021F0180820999C084647488BD4A5DA56D48345C ... ... ... 27750A728A2B34377B1215EF8BB17522485E8F56ABD3971D115C4A976E22AC7C85B61314E302306092A864886F70D01091531160414E6459A248E4E43698D0D644C1548466B0EEE54D1302706092A864886F70D010914311A1E18006300730070005F006500780070006F0072007400650064 2932:d=1 hl=2 l= 69 cons: SEQUENCE 2934:d=2 hl=2 l= 53 cons: SEQUENCE 2936:d=3 hl=2 l= 17 cons: SEQUENCE 2938:d=4 hl=2 l= 6 prim: OBJECT :GOST R 34.11-94 2946:d=4 hl=2 l= 7 prim: OBJECT :id-GostR3411-94-CryptoProParamSet 2955:d=3 hl=2 l= 32 prim: OCTET STRING [HEX DUMP]:A1F918E889BCC3E018ACC476B53BBCF4BBDF7E12BAB43607596E104608FB8AB7 2989:d=2 hl=2 l= 8 prim: OCTET STRING [HEX DUMP]:B23406E7533978A4 2999:d=2 hl=2 l= 2 prim: INTEGER :0800 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
TheUser Posted August 2, 2018 21 минуту назад, baide сказал: root@ubuntu-gost-2012:~/zapret# openssl asn1parse -in p12_2018.pfx -inform DER ... 2938:d=4 hl=2 l= 6 prim: OBJECT :GOST R 34.11-94 2946:d=4 hl=2 l= 7 prim: OBJECT :id-GostR3411-94-CryptoProParamSet ... Судя по этим строкам, у Вас устаревший ГОСТ. Либо openssl его считает устаревшим. Как бы то ни было, выше в топике есть пример как с помощью команды dd вытащить из pfx нужный объект. Попробуйте. Тьфу... У вас же openssl не поддерживает GOST94! Слишком новый openssl... Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
YuryD Posted August 2, 2018 Похоже что да, вот мой, нормально жующий.. OpenSSL 1.0.1e 11 Feb 2013 /usr/local/bin/openssl ciphers | tr ":" "\n" | grep GOST GOST2001-GOST89-GOST89 GOST94-GOST89-GOST89 Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...
baide Posted August 2, 2018 1 hour ago, YuryD said: GOST2001-GOST89-GOST89 GOST94-GOST89-GOST89 Так у вас 2012гост отсутствует. С 2001 у меня тоже все работало Вставить ник Quote Ответить с цитированием Share this post Link to post Share on other sites More sharing options...