Статус: Участник
Группы: Участники
Зарегистрирован: 17.10.2024(UTC) Сообщений: 10
Сказал(а) «Спасибо»: 2 раз
|
Добрый день. Возникла необходимость зашифровать сообщение пользователем А на пользователей B, C, D (в общем случае на произвольное количество) с помощью сеансового ключа - как это можно сделать? Использвать класс CpEnvelopedCms? Если да, то производится ли в таком случае шифрование сообщения для всех адресатов единым сеансовым ключом? Спасибо.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,752   Сказал «Спасибо»: 577 раз Поблагодарили: 2307 раз в 1807 постах
|
Автор: hydrolizer  Добрый день. Возникла необходимость зашифровать сообщение пользователем А на пользователей B, C, D (в общем случае на произвольное количество) с помощью сеансового ключа - как это можно сделать? Использвать класс CpEnvelopedCms? Если да, то производится ли в таком случае шифрование сообщения для всех адресатов единым сеансовым ключом? Спасибо. Здравствуйте. Да. |
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,752   Сказал «Спасибо»: 577 раз Поблагодарили: 2307 раз в 1807 постах
|
поставить SDK далее: C:\Program Files (x86)\Crypto Pro\.NET SDK\Examples\
файл: simple.zip
\CMS\cs\EnvelopedMultipleRecipients.cs
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.10.2024(UTC) Сообщений: 10
Сказал(а) «Спасибо»: 2 раз
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.10.2024(UTC) Сообщений: 10
Сказал(а) «Спасибо»: 2 раз
|
Добрый день. Возвращаюсь к вопросу, т.к. всплыло несколько нюансов. Согласно ТЗ, требуется реализовать защиту сообщения для нескольких получателей с помощью алгоритма ГОСТ Р 34.12-2015 "Кузнечик", и на выходе получить только зашифрованные данные. При этом сеансовый симметричный ключ шифрования сообщения должен формироваться по алгоритму Диффи-Хеллмана, и не должен сохраняться в зашифрованном виде в теле зашифрованного сообщения, или ещё где-то, т.е. он вообще нигде не должен сохраняться. В связи с этим, вопросы следующие: 1) Удовлетворяет ли CpEnvelopedCms требованию для формирования ключа? Сохраняет ли CpEnvelopedCms сессионный ключ в результате шифрования? 2) Я посмотрел рекомендованный выше пример, в нём написано, что CpEnvelopedCms, если для получателей заданы ГОСТ-сертификаты, будет осуществлять шифрование по GOST 28147-89 - а как указать требуемый алгоритм? 3) Если всё же указанные требования не могут быть реализованы с помощью CpEnvelopedCms, то можно ли добиться требуемого каким-то другим способом? Спасибо.
P.S. Используется КриптоПро .Net для .Net Core (LibCore)
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 222
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 66 раз в 61 постах
|
Автор: hydrolizer  Добрый день. Возвращаюсь к вопросу, т.к. всплыло несколько нюансов. Согласно ТЗ, требуется реализовать защиту сообщения для нескольких получателей с помощью алгоритма ГОСТ Р 34.12-2015 "Кузнечик", и на выходе получить только зашифрованные данные. При этом сеансовый симметричный ключ шифрования сообщения должен формироваться по алгоритму Диффи-Хеллмана, и не должен сохраняться в зашифрованном виде в теле зашифрованного сообщения, или ещё где-то, т.е. он вообще нигде не должен сохраняться. В связи с этим, вопросы следующие: 1) Удовлетворяет ли CpEnvelopedCms требованию для формирования ключа? Сохраняет ли CpEnvelopedCms сессионный ключ в результате шифрования? 2) Я посмотрел рекомендованный выше пример, в нём написано, что CpEnvelopedCms, если для получателей заданы ГОСТ-сертификаты, будет осуществлять шифрование по GOST 28147-89 - а как указать требуемый алгоритм? 3) Если всё же указанные требования не могут быть реализованы с помощью CpEnvelopedCms, то можно ли добиться требуемого каким-то другим способом? Спасибо.
P.S. Используется КриптоПро .Net для .Net Core (LibCore) При шифровании через CpEnvelopedCms создаётся симметричный ключ шифования, на котором непосредственно шифруются данные. Затем данный ключ экспортируется в сторону получателя (шифруется с использованием открытого ключа получателя, используется алгоритм vko), и в зашифрованном виде включается в состав cms сообщения. Подробнее о vko можно почитать в рекомендациях тк26 или в RFC 4357 (определён для старых гостов, но для новых - аналогично), но если коротко это модифицированный Диффи-Хеллман с эфемерным ключом отправителя (ключевая пара отправителя генерируется на каждую процедуру экспорта). Указать алгоритм шифрования данных можно через указание его oid. Поддерживаются следующие алгоритмы для Магмы и Кузнечика: Цитата: OID_CP_GOST_R3412_2015_M_CTR_ACPKM 1.2.643.7.1.1.5.1.1 ГОСТ 34.12-2015-К aka Магма с преобразованием ключа
OID_CP_GOST_R3412_2015_K_CTR_ACPKM 1.2.643.7.1.1.5.2.1 ГОСТ 34.12-2015-К aka Кузнечик с преобразованием ключа
OID_CP_GOST_R3412_2015_M_CTR_ACPKM_OMAC 1.2.643.7.1.1.5.1.2 ГОСТ 34.12-2015-К aka Магма с преобразованием ключа и OMAC
OID_CP_GOST_R3412_2015_K_CTR_ACPKM_OMAC 1.2.643.7.1.1.5.2.2 ГОСТ 34.12-2015-К aka Кузнечик с преобразованием ключа и OMAC
В коде указывается так: Код:CpEnvelopedCms envelopedCms = new CpEnvelopedCms(
contentInfo,
new AlgorithmIdentifier(new Oid("1.2.643.7.1.1.5.2.1")));
|
|
 3 пользователей поблагодарили Артём Макаров за этот пост.
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.10.2024(UTC) Сообщений: 10
Сказал(а) «Спасибо»: 2 раз
|
Спасибо, буду пробовать реализовать таким путём.
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 17.10.2024(UTC) Сообщений: 10
Сказал(а) «Спасибо»: 2 раз
|
Реализовали шифрование сгенеренным тестовым сертификатом КриптоПро Расшифровка не работает. Падает с ошибкой. Не подскажете как лечить? Код: static void DecryptX(string inputFile, string outputFile, CpX509Certificate2 cert) { var buf = GetBytes(inputFile); var ci = new ContentInfo(buf); var cms = new CpEnvelopedCms(ci); cms.Decode(buf); cms.Decrypt(new CpX509Certificate2Collection(cert)); <-- тут падает SaveBytes(outputFile, cms.ContentInfo.Content); } Исключение: Объект или свойство не найдено. Стек вызова: at Internal.Cryptography.Pal.Windows.DecryptorPalWindows.TryGetKeySpecForCertificate(CpX509Certificate2 cert, CryptKeySpec& keySpec) at Internal.Cryptography.Pal.Windows.DecryptorPalWindows.TryDecrypt(CpRecipientInfo recipientInfo, CpX509Certificate2 cert, AsymmetricAlgorithm privateKey, CpX509Certificate2Collection originatorCerts, CpX509Certificate2Collection extraStore, Exception& exception) at CryptoPro.Security.Cryptography.CpEnvelopedCms.DecryptContent(CpRecipientInfoCollection recipientInfos, CpX509Certificate2Collection extraStore) at CryptoPro.Security.Cryptography.CpEnvelopedCms.Decrypt(CpX509Certificate2Collection extraStore) at SignTestApp.Tests.DecryptX(String inputFile, String outputFile, CpX509Certificate2 cert) in C:\Users\21468533\src_1\cryptopro\CryptoProTest\Tests.cs:line 217 at SignTestApp.Tests.Test1() in C:\Users\21468533\src_1\cryptopro\CryptoProTest\Tests.cs:line 110 at SignTestApp.Program.Main() in C:\Users\21468533\src_1\cryptopro\CryptoProTest\Program.cs:line 27 Отредактировано пользователем 23 октября 2024 г. 11:35:56(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,752   Сказал «Спасибо»: 577 раз Поблагодарили: 2307 раз в 1807 постах
|
|
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 20.02.2017(UTC) Сообщений: 222
Сказал(а) «Спасибо»: 4 раз Поблагодарили: 66 раз в 61 постах
|
Автор: hydrolizer  Реализовали шифрование сгенеренным тестовым сертификатом КриптоПро
Расшифровка не работает. Падает с ошибкой. Не подскажете как лечить?
Код:
static void DecryptX(string inputFile, string outputFile, CpX509Certificate2 cert) { var buf = GetBytes(inputFile); var ci = new ContentInfo(buf); var cms = new CpEnvelopedCms(ci); cms.Decode(buf); cms.Decrypt(new CpX509Certificate2Collection(cert)); <-- тут падает SaveBytes(outputFile, cms.ContentInfo.Content); }
Исключение:
Объект или свойство не найдено.
Стек вызова:
at Internal.Cryptography.Pal.Windows.DecryptorPalWindows.TryGetKeySpecForCertificate(CpX509Certificate2 cert, CryptKeySpec& keySpec) at Internal.Cryptography.Pal.Windows.DecryptorPalWindows.TryDecrypt(CpRecipientInfo recipientInfo, CpX509Certificate2 cert, AsymmetricAlgorithm privateKey, CpX509Certificate2Collection originatorCerts, CpX509Certificate2Collection extraStore, Exception& exception) at CryptoPro.Security.Cryptography.CpEnvelopedCms.DecryptContent(CpRecipientInfoCollection recipientInfos, CpX509Certificate2Collection extraStore) at CryptoPro.Security.Cryptography.CpEnvelopedCms.Decrypt(CpX509Certificate2Collection extraStore) at SignTestApp.Tests.DecryptX(String inputFile, String outputFile, CpX509Certificate2 cert) in C:\Users\21468533\src_1\cryptopro\CryptoProTest\Tests.cs:line 217 at SignTestApp.Tests.Test1() in C:\Users\21468533\src_1\cryptopro\CryptoProTest\Tests.cs:line 110 at SignTestApp.Program.Main() in C:\Users\21468533\src_1\cryptopro\CryptoProTest\Program.cs:line 27 Какая ОС и какая версия csp, libcore? Как загружается сертификат (из хранилища, из файла?) Также на всякий случай убедитесь, что это не отладчик перехватывает внутреннее исключение, которое дальше корректно обработают (посмотреть, проходит ли проброска данного исключения до вашего кода). |
|
 1 пользователь поблагодарил Артём Макаров за этот пост.
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close