Статус: Участник
Группы: Участники
Зарегистрирован: 24.01.2023(UTC) Сообщений: 18 Откуда: Москва Сказал «Спасибо»: 1 раз Поблагодарили: 15 раз в 9 постах
|
Автор: vladimirincog Добрый день! В документации и на форму мне так и не удалось найти ответы, как все таки сделать шифрование для ФСС через CryptoPRO browser plagin. Пробовал использовать CPEnvelopedData. Код:var encMessage = yield oEnvelopedData.Encrypt(cadesplugin.CADESCOM_ENCODE_BASE64);
Как получить сессионный ключ и само зашифрованное сообщение из encMessage? Как правильно собрать эти данные для расшифровки, если у меня есть сессионный ключ и зашифрованное сообщение? На форме уже давно обсуждают эту тему и не понятно: Кому-то удалось реализовать шифрование для ФСС через CryptoPRO browser plagin? На сегодняшний день это возможно сделать? Если кто-то сможет поделится свои решением на JS, то буду очень благодарен! Данные вопросы уже 4 года задают разработчикам, попытаюсь на них ответить. 1) Шифрование не делается через CPEnvelopedData, а делается через SymmetricAlgorithmДемо страница тут2) На данный момент SymmetricAlgorithm НЕ использует параметры необходимые для шифрования-расшифровки обмена с ФСС, поэтому ждем когда это поправят. 3) Поэтому Единственный способ из браузера или из программы на Python зашифровать-расшифровать сообщение это разработать dll модуль который будет это делать (на языке C, С# или Delphi) используя вызовы функции КриптоПро ЭЦП SDK напрямую и потом уже эту dll вызывать из вашей программы на Python или из браузера |
Выше только звезды |
1 пользователь поблагодарил SkySandy за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.01.2023(UTC) Сообщений: 18 Откуда: Москва Сказал «Спасибо»: 1 раз Поблагодарили: 15 раз в 9 постах
|
Проверил тестовую версию от 25 мая 2023 года. Наконец таки расшифровывает сообщение ФСС Код для расшифровки сообщения ФСС самый примитивный (на языке C#, но принцип тот же на js и python) String pbData = ‘’; CAPICOM.ICertificate cert = ‘’; String IV = ‘’; String todecode_str = ‘’; int ISO10126_PADDING = 4; int CRYPT_MODE_CBCSTRICT = 1; CAdESCOM.ISymmetricAlgorithm3 fSS = (CAdESCOM.ISymmetricAlgorithm3) new SymmetricAlgorithm(); fSS.ImportKey(pbData, cert); fSS.IV = IV; fSS.SetMode(CRYPT_MODE_CBCSTRICT); fSS.SetPadding(ISO10126_PADDING); String mess = fSS.Decrypt(todecode_str, true); String mess_decode = Base64Decode(mess); Где переменные 1) pbData сформирован по принципу https://docs.cryptopro.r...metricalgorithmexportkeyданные для формирования pbData брать из входящего сообщения ФСС, переводить в строку HEX, разделять двоеточием 2) cert - Это сертификат Медицинской организации 3) IV - Брать из входящего сообщения ФСС (первые 8 байт) после чего переводить в строку HEX 4) todecode_str - сообщение которое нужно декодировать (оставшаяся часть после 8 байт), после чего переводить в строку HEX Теперь об ошибках.
Для SymmetricAlgorithmClass разработчики не указали как базовый тип CAdESCOM.ISymmetricAlgorithm3 поэтому приходится делать приведение типов CAdESCOM.ISymmetricAlgorithm3 fSS = (CAdESCOM.ISymmetricAlgorithm3) new SymmetricAlgorithm(); Пожалуйста это поправьте |
Выше только звезды |
5 пользователей поблагодарили SkySandy за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.12.2022(UTC) Сообщений: 22 Сказал(а) «Спасибо»: 8 раз
|
Автор: SkySandy Проверил тестовую версию от 25 мая 2023 года.
Подскажите пожалуйста, где смотреть тестовые версии? Не гуглится((
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 20.04.2023(UTC) Сообщений: 2 Сказал(а) «Спасибо»: 3 раз
|
Тоже удалось расшифровать ответ от ФСС, а вот зашифровать никак.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.01.2023(UTC) Сообщений: 18 Откуда: Москва Сказал «Спасибо»: 1 раз Поблагодарили: 15 раз в 9 постах
|
Автор: Алексей Св Тоже удалось расшифровать ответ от ФСС, а вот зашифровать никак. Попробую сегодня-завтра зашифровать и скинуть в ФСС. Скажу по результатам как дело с шифрацией обстоит |
Выше только звезды |
2 пользователей поблагодарили SkySandy за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 24.01.2023(UTC) Сообщений: 18 Откуда: Москва Сказал «Спасибо»: 1 раз Поблагодарили: 15 раз в 9 постах
|
Ну что дизассемблировал я библиотеку крипторо в очередной раз. Действительно на шифрацию не работает. 1) Зачем то в ExportKey они вызывают CryptSetKeyParam () с KP_DHOID потом устанавливают KP_X 2) Параметр IV они вычисляют не используя CryptGetKeyParam KP_IV Ну и вишенка на торте, если длина строки для шифровки превосходит 1024 байт то она шифруется не верно даже в тестовом примере! ))))))) Попробуйте заменить в тестовом примере что дали программисты крипторо строку для шифровки на var data1 = `<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" signAlgorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256"> <soapenv:Header> <wsse:Security soapenv:actor="http://eln.fss.ru/actor/doc/900000811749_3_doc" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> <Signature xmlns="http://www.w3.org/2000/09/xmldsig#"> <SignedInfo> <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#" /> <SignatureMethod Algorithm="urn:ietf:params:xml:ns:cpxmlsec:algorithms:gostr34102012-gostr34112012-256" /> </soapenv:Envelope>`; И потом посмотрите что при расшифровке ее получится )) Bol'she kilobajjta.jpg (145kb) загружен 45 раз(а). |
Выше только звезды |
1 пользователь поблагодарил SkySandy за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.09.2023(UTC) Сообщений: 10 Откуда: Санкт-Петербург Сказал(а) «Спасибо»: 2 раз
|
Автор: SkySandy Проверил тестовую версию от 25 мая 2023 года. Наконец таки расшифровывает сообщение ФСС Здравствуйте, попробовал тоже такой вариант - пока что не работает, но слишком много неизвестных. Код на JS, в целом аналогичен. Собственно, на данный момент проблемы такие: fss.ImportKey(pbData, cert); - выдает ошибку "Плохие данные. (0x80090005)". Тут больше всего вопросов по pbData, разбирал CipherValue через GostCryptography. С сессионным и эфемерным ключом вроде сомнений нет (размер блоков совпадает с ожиданиями), блок "параметры шифрования" несколько менее очевиден, но при разборе он выдается как в виде массива байт, так и в виде оидов обоих ключей, примерно так: Параметры сессионного ключа: 1.2.643.7.1.2.5.1.1 Параметры публичного ключа: 1.2.643.2.2.36.0 Параметры шифрования в HEX: 30 13 06 07 2A 85 03 02 02 24 00 06 08 2A 85 03 07 01 01 02 02 (думаю, они при одинаковых алгоритмах всегда одинаковы и их можно сверить с референсом, я прав?) Вот эти данные я передавал как "параметр шифрования:сессионный ключ:публичный ключ", ровно как в ExportKey. Т.е. примерно так: "30 13 06 07 2A 85 03 02 02 24 00 06 08 2A 85 03 07 01 01 02 02:(сессионный ключ в хекс):(публичный ключ в хекс)" Пробовал и без пробелов, и с пробелами, как требует дословно формат - разницы нет. Личный сертификат передавал вторым параметром - полученный из хранилища, который чудесно работает в других вызовах. Что заставляет меня думать, что актуальная релизная версия КриптоПро/плагинов еще не соответствует той, что у Вас - это то, что изолированные вызовы SetMode() и SetPadding() с нужными аргументами также давали ошибку - "Параметр задан неверно. (0x80070057)", что как бы намекает, что плагин еще не в курсе именно таких настроек режима и паддинга. В общем, вопросов ровно два - правильно ли я передаю параметры шифрования и где взять (если ее можно взять) тестовую сборку плагина криптопро?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,320 Сказал «Спасибо»: 549 раз Поблагодарили: 2207 раз в 1722 постах
|
Автор: Евгений111 выдает ошибку "Плохие данные. (0x80090005)" Уточните... из CSP в ОС только КриптоПРО CSP? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 08.09.2023(UTC) Сообщений: 10 Откуда: Санкт-Петербург Сказал(а) «Спасибо»: 2 раз
|
CSP и плагин. Чтобы было понятнее: методы дешифрования CMS, формирования подписи CMS и подписи XML в формате ПФР и ФСС уже благополучно отлажены и работают в браузере ровно в той же связке "ОС - CSP - плагин в браузере - cades_plugin.js". Из нюансов (которые вряд ли важны) - вместо Вашего подхода с асинхронно-синхронным враппером и использованием yield везде идет честный асинхрон с await. Грубо говоря, примерно так: await fss.setprop_IV(ivStr); -- это проскакивает await fss.ImportKey(encParamStr, cert); -- тут падает с "плохими данными" await fss.SetMode(CRYPT_MODE_CBCSTRICT); -- тут (если подкомментить строчку выше) - с "неверным параметром" await fss.SetPadding(ISO10126_PADDING); -- аналогично
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.12.2022(UTC) Сообщений: 22 Сказал(а) «Спасибо»: 8 раз
|
Как в питоне (pycades) устанавливать режим шифрования? Делаю так: encryptor = pycades.SymmetricAlgorithm() encryptor.GenerateKey(pycades.CADESCOM_ENCRYPTION_ALGORITHM_GOST_28147_89) ... encryptor.SetMode(1) encryptor.SetPadding(4) ...Выбрасывает такую ошибку: ... AttributeError: 'pycades.SymmetricAlgorithm' object has no attribute 'SetMode'КриптоПро и всё остальное - последней опубликованной версии. pycades перескачан, пересобран. Версия 0.1.44290 В документации инструкций нет. Как называются методы в pycades? Как с этим работать? Отредактировано пользователем 11 сентября 2023 г. 16:29:10(UTC)
| Причина: Не указана
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close