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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline hydrolizer  
#1 Оставлено : 17 октября 2024 г. 18:10:33(UTC)
hydrolizer

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

Группы: Участники
Зарегистрирован: 17.10.2024(UTC)
Сообщений: 7

Сказал(а) «Спасибо»: 2 раз
Добрый день.
Возникла необходимость зашифровать сообщение пользователем А на пользователей B, C, D (в общем случае на произвольное количество) с помощью сеансового ключа - как это можно сделать? Использвать класс CpEnvelopedCms? Если да, то производится ли в таком случае шифрование сообщения для всех адресатов единым сеансовым ключом?
Спасибо.
Offline Андрей *  
#2 Оставлено : 17 октября 2024 г. 18:13:29(UTC)
Андрей *

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

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

Сказал «Спасибо»: 550 раз
Поблагодарили: 2212 раз в 1727 постах
Автор: hydrolizer Перейти к цитате
Добрый день.
Возникла необходимость зашифровать сообщение пользователем А на пользователей B, C, D (в общем случае на произвольное количество) с помощью сеансового ключа - как это можно сделать? Использвать класс CpEnvelopedCms? Если да, то производится ли в таком случае шифрование сообщения для всех адресатов единым сеансовым ключом?
Спасибо.


Здравствуйте.

Да.
Техническую поддержку оказываем тут
Наша база знаний
Offline Андрей *  
#3 Оставлено : 17 октября 2024 г. 18:16:55(UTC)
Андрей *

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

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

Сказал «Спасибо»: 550 раз
Поблагодарили: 2212 раз в 1727 постах
поставить SDK
далее:
C:\Program Files (x86)\Crypto Pro\.NET SDK\Examples\

файл: simple.zip

\CMS\cs\EnvelopedMultipleRecipients.cs
Техническую поддержку оказываем тут
Наша база знаний
Offline hydrolizer  
#4 Оставлено : 17 октября 2024 г. 18:29:39(UTC)
hydrolizer

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

Группы: Участники
Зарегистрирован: 17.10.2024(UTC)
Сообщений: 7

Сказал(а) «Спасибо»: 2 раз
Спасибо!
Offline hydrolizer  
#5 Оставлено : 21 октября 2024 г. 18:18:02(UTC)
hydrolizer

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

Группы: Участники
Зарегистрирован: 17.10.2024(UTC)
Сообщений: 7

Сказал(а) «Спасибо»: 2 раз
Добрый день.
Возвращаюсь к вопросу, т.к. всплыло несколько нюансов.
Согласно ТЗ, требуется реализовать защиту сообщения для нескольких получателей с помощью алгоритма ГОСТ Р 34.12-2015 "Кузнечик", и на выходе получить только зашифрованные данные. При этом сеансовый симметричный ключ шифрования сообщения должен формироваться по алгоритму Диффи-Хеллмана, и не должен сохраняться в зашифрованном виде в теле зашифрованного сообщения, или ещё где-то, т.е. он вообще нигде не должен сохраняться.
В связи с этим, вопросы следующие:
1) Удовлетворяет ли CpEnvelopedCms требованию для формирования ключа? Сохраняет ли CpEnvelopedCms сессионный ключ в результате шифрования?
2) Я посмотрел рекомендованный выше пример, в нём написано, что CpEnvelopedCms, если для получателей заданы ГОСТ-сертификаты, будет осуществлять шифрование по GOST 28147-89 - а как указать требуемый алгоритм?
3) Если всё же указанные требования не могут быть реализованы с помощью CpEnvelopedCms, то можно ли добиться требуемого каким-то другим способом?
Спасибо.

P.S. Используется КриптоПро .Net для .Net Core (LibCore)
Offline Артём Макаров  
#6 Оставлено : 22 октября 2024 г. 14:31:36(UTC)
Артём Макаров

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

Группы: Участники
Зарегистрирован: 20.02.2017(UTC)
Сообщений: 217

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 63 раз в 59 постах
Автор: 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")));


Техническую поддержку оказываем тут
Наша база знаний
thanks 3 пользователей поблагодарили Артём Макаров за этот пост.
Санчир Момолдаев оставлено 22.10.2024(UTC), Андрей * оставлено 22.10.2024(UTC), hydrolizer оставлено 23.10.2024(UTC)
Offline hydrolizer  
#7 Оставлено : 22 октября 2024 г. 18:37:58(UTC)
hydrolizer

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

Группы: Участники
Зарегистрирован: 17.10.2024(UTC)
Сообщений: 7

Сказал(а) «Спасибо»: 2 раз
Спасибо, буду пробовать реализовать таким путём.
Offline hydrolizer  
#8 Оставлено : 23 октября 2024 г. 11:34:07(UTC)
hydrolizer

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

Группы: Участники
Зарегистрирован: 17.10.2024(UTC)
Сообщений: 7

Сказал(а) «Спасибо»: 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)  | Причина: Не указана

Offline Андрей *  
#9 Оставлено : 23 октября 2024 г. 11:49:18(UTC)
Андрей *

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

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

Сказал «Спасибо»: 550 раз
Поблагодарили: 2212 раз в 1727 постах
Код:
cms.Decrypt(); 
а так какая ошибка?
Техническую поддержку оказываем тут
Наша база знаний
Offline Артём Макаров  
#10 Оставлено : 23 октября 2024 г. 11:52:11(UTC)
Артём Макаров

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

Группы: Участники
Зарегистрирован: 20.02.2017(UTC)
Сообщений: 217

Сказал(а) «Спасибо»: 4 раз
Поблагодарили: 63 раз в 59 постах
Автор: 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? Как загружается сертификат (из хранилища, из файла?) Также на всякий случай убедитесь, что это не отладчик перехватывает внутреннее исключение, которое дальше корректно обработают (посмотреть, проходит ли проброска данного исключения до вашего кода).
Техническую поддержку оказываем тут
Наша база знаний
thanks 1 пользователь поблагодарил Артём Макаров за этот пост.
hydrolizer оставлено 23.10.2024(UTC)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.