Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

6 Страницы<12345>»
Опции
К последнему сообщению К первому непрочитанному
Offline SkySandy  
#21 Оставлено : 2 июня 2023 г. 12:05:06(UTC)
SkySandy

Статус: Участник

Группы: Участники
Зарегистрирован: 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 или из браузера
Выше только звезды
thanks 1 пользователь поблагодарил SkySandy за этот пост.
vladimirincog оставлено 02.06.2023(UTC)
Offline SkySandy  
#22 Оставлено : 14 июня 2023 г. 10:27:02(UTC)
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();

Пожалуйста это поправьте
Выше только звезды
thanks 5 пользователей поблагодарили SkySandy за этот пост.
Ситдиков Денис оставлено 14.06.2023(UTC), Baki111 оставлено 17.06.2023(UTC), Алексей Св оставлено 20.06.2023(UTC), tolkn оставлено 02.11.2023(UTC), vladimirincog оставлено 04.06.2024(UTC)
Offline Baki111  
#23 Оставлено : 17 июня 2023 г. 18:43:12(UTC)
Baki111

Статус: Участник

Группы: Участники
Зарегистрирован: 09.12.2022(UTC)
Сообщений: 22
Российская Федерация

Сказал(а) «Спасибо»: 8 раз
Автор: SkySandy Перейти к цитате
Проверил тестовую версию от 25 мая 2023 года.


Подскажите пожалуйста, где смотреть тестовые версии? Не гуглится((
Offline Алексей Св  
#24 Оставлено : 19 июня 2023 г. 9:27:49(UTC)
Алексей Св

Статус: Новичок

Группы: Участники
Зарегистрирован: 20.04.2023(UTC)
Сообщений: 2
Российская Федерация

Сказал(а) «Спасибо»: 3 раз
Тоже удалось расшифровать ответ от ФСС, а вот зашифровать никак.
Offline SkySandy  
#25 Оставлено : 19 июня 2023 г. 10:05:58(UTC)
SkySandy

Статус: Участник

Группы: Участники
Зарегистрирован: 24.01.2023(UTC)
Сообщений: 18
Мужчина
Российская Федерация
Откуда: Москва

Сказал «Спасибо»: 1 раз
Поблагодарили: 15 раз в 9 постах
Автор: Алексей Св Перейти к цитате
Тоже удалось расшифровать ответ от ФСС, а вот зашифровать никак.


Попробую сегодня-завтра зашифровать и скинуть в ФСС. Скажу по результатам как дело с шифрацией обстоит
Выше только звезды
thanks 2 пользователей поблагодарили SkySandy за этот пост.
Baki111 оставлено 19.06.2023(UTC), Алексей Св оставлено 19.06.2023(UTC)
Offline SkySandy  
#26 Оставлено : 26 июня 2023 г. 12:28:53(UTC)
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 раз(а).
Выше только звезды
thanks 1 пользователь поблагодарил SkySandy за этот пост.
Алексей Св оставлено 29.06.2023(UTC)
Offline Евгений111  
#27 Оставлено : 8 сентября 2023 г. 12:18:42(UTC)
Евгений111

Статус: Участник

Группы: Участники
Зарегистрирован: 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)", что как бы намекает, что плагин еще не в курсе именно таких настроек режима и паддинга.
В общем, вопросов ровно два - правильно ли я передаю параметры шифрования и где взять (если ее можно взять) тестовую сборку плагина криптопро?
Offline Андрей *  
#28 Оставлено : 8 сентября 2023 г. 13:45:17(UTC)
Андрей *

Статус: Сотрудник

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,318
Мужчина
Российская Федерация

Сказал «Спасибо»: 549 раз
Поблагодарили: 2207 раз в 1722 постах
Автор: Евгений111 Перейти к цитате
выдает ошибку "Плохие данные. (0x80090005)"


Уточните... из CSP в ОС только КриптоПРО CSP?
Техническую поддержку оказываем тут
Наша база знаний
Offline Евгений111  
#29 Оставлено : 8 сентября 2023 г. 13:54:52(UTC)
Евгений111

Статус: Участник

Группы: Участники
Зарегистрирован: 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); -- аналогично
Offline Baki111  
#30 Оставлено : 11 сентября 2023 г. 15:21:13(UTC)
Baki111

Статус: Участник

Группы: Участники
Зарегистрирован: 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)  | Причина: Не указана

RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
6 Страницы<12345>»
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.