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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline velgames  
#1 Оставлено : 30 сентября 2015 г. 16:29:24(UTC)
velgames

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

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

Сказал «Спасибо»: 1 раз
Здравствуйте,
У меня задача написать алгоритм шифрования через гост бинарного пакета размером около 5 мб. Реализация на RSA есть, думал перенести труда не составит. Ошибался.
Посмотрел пример из gEncryptFileAgree из simple. В нем используется имя контейнера закрытого ключа.

Вопрос 1: Зачем нужен закрытый ключ если при шифровании с открытым ключом данные шифруются открытым ключом и расшифровываются закрытым.

У меня есть сервер и клиент. Клиент скачивается с сервера и обменивается архивами с сервером по почте. При этом в архиве должен лежать бинарный зашифрованный файл ( и еще кое какие файлы, но суть в нем). При скачивании с клиентом скачивается экспортированный сертификат с открытым ключом, чтобы клиент мог зашифровать передаваемые данные на сервер. Рядом с этими файлами он кладет свой экспортированный сертификат с открытым ключом, чтобы сервер мог ответить ему таким же образом через определенный промежуток времени. Закрытые ключи в обоих случаях не экспортируются.

Тогда как мне зашифровать данные не имея контейнера закрытого ключа получателя?

Вопрос 2: Каким образом получается agree ключ? Я так понимаю что он создается по определенному алгоритму из открытого ключа получателя?

По идее алгоритм шифрования с открытым ключом сертификата следующий:
1) Берем сертификат получателя и достаем из него открытый ключ.
2) Создаем симметричный ключ.
3) Шифруем симметричный ключ открытым ключом получателя.
4) Шифруем данные симметричным ключом.
5) Отправляем зашифрованные данные и зашифрованный симметричный ключ получателю.
6) Получателя расшифровывает симметричный ключ своим закрытым ключом и расшифровывает данные полученным ключом.

Или я что то непонимаю, или я ошибаюсь в алгоритме действий? Или может я не туда смотрел в примерах шифрования?
Offline Максим Коллегин  
#2 Оставлено : 30 сентября 2015 г. 16:57:41(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,453
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 38 раз
Поблагодарили: 748 раз в 643 постах
1) Для выработки ключа обмена нужен закрытый ключ отправителя, но он может быть и эфемеральным (временным)
2) Модифицированный алгоритм Диффи-Хеллмана: VKO - rfc 4357
Алгоритмы, используемые в ГОСТ не позволяют шифровать только на открытом ключе - это не RSA.
Знания в базе знаний, поддержка в центре поддержки
Offline velgames  
#3 Оставлено : 1 октября 2015 г. 12:22:17(UTC)
velgames

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

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

Сказал «Спасибо»: 1 раз
Т.е. при создании ключа используется открытый ключ получателя и закрытый ключ отправителя. Т.е. нужно 2 сертификата с закрытым ключом.

По поводу кода, в примере есть такой фрагмент:

// Разбираем сертификат получателя
X509Certificate2 cert = new X509Certificate2(certFileName);
// Открытый ключ получателя.
AsymmetricAlgorithm pk = cert.PublicKey.Key;
Gost3410 alg = pk as Gost3410;


// Открываем ключ отправителя.
CspParameters par = new CspParameters(75, null, SourceContainer);
Gost3410CryptoServiceProvider srcContainer = new Gost3410CryptoServiceProvider(par);
Gost3410Parameters srcPublicKeyParameters = srcContainer.ExportParameters(false);

// Создаем agree ключ
GostSharedSecretAlgorithm agree = srcContainer.CreateAgree(
alg.ExportParameters(false) );

Если я правильно понял, то тут достаются закрытый и открытый ключи отправителя и они содержится в Gost3410CryptoServiceProvider srcContainer, а потом при создании agree ключа метод берет закрытый ключ из srcContainer и полученный открытый ключ получателя?

Прошу прощения за нубские вопросы, просто люблю быть уверенным в том что делаю.
Offline Максим Коллегин  
#4 Оставлено : 1 октября 2015 г. 12:44:13(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,453
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 38 раз
Поблагодарили: 748 раз в 643 постах
Верно.
Знания в базе знаний, поддержка в центре поддержки
Offline velgames  
#5 Оставлено : 2 октября 2015 г. 14:30:50(UTC)
velgames

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

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

Сказал «Спасибо»: 1 раз
Еще вопрос по поводу подписи.
Подпись производится закрытым ключом отправителя,а проверяется открытым или необходимо так же использовать закрытый ключ отправителя и открытый ключ получателя чтобы подписать и получить сигнатуру?
Offline Максим Коллегин  
#6 Оставлено : 2 октября 2015 г. 15:25:43(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,453
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 38 раз
Поблагодарили: 748 раз в 643 постах
У подписи нет получателя. Только закрытый ключ подписывающего и открытый при проверке.
Знания в базе знаний, поддержка в центре поддержки
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.