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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Dennisw  
#1 Оставлено : 15 октября 2009 г. 15:36:19(UTC)
Dennisw

Статус: Активный участник

Группы: Участники
Зарегистрирован: 15.10.2009(UTC)
Сообщений: 49
Откуда: CHL

Пример из SDK
// Зашифрование тестового файла.
static void EncryptTestFile(string certFileName)
{
// Разбираем сертификат получателя.
X509Certificate2 cert = new X509Certificate2(certFileName);
AsymmetricAlgorithm pk = cert.PublicKey.Key;
Gost3410 alg = pk as Gost3410;
if (alg == null)
throw new CryptographicException("Not a gost certificate");

// Создаем случайный симметричный ключ.
Gost28147 symmetric = Gost28147.Create();

// Создаем случайный ключ отправителя.
Gost3410 srcContainer = Gost3410.Create();
Gost3410Parameters srcPublicKeyParameters = srcContainer.ExportParameters(false);

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

// Зашифровываем симметричный ключ на agree ключе.
byte[] WrappedKey = agree.Wrap(symmetric,
GostKeyWrapMethod.CryptoProKeyWrap);

// Создаем поток шифратора.
ICryptoTransform transform = symmetric.CreateEncryptor();

// Создаем зашифрованный файл.
using (FileStream ofs = new FileStream(EncryptedFileName, FileMode.Create))
{
...............и т.д.

Подскажите пожалуйста можно каким то образом зашифровать файлик для нескольких получателей?
Буду благодарен за пример.
Спасибо
Offline Челпанов А.  
#2 Оставлено : 15 октября 2009 г. 16:42:27(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Все почти точно так же...
---- При зашифровании
Создаете случайный симметричный сеансовый ключ как и ранее.
Файл зашифровываете на сеансовом ключе, как это и делали ранее.
Точно так же создаете себе случайный ключ.
Для каждого получателя:
- создаете agree (случайный ключ отправителя, открытый ключ получателя)
- зашифровываете (Wrap) симметричный сеансовый ключ на agree
- укладываете в файл результат Wrap и информацию для кого wrap.
---- При рашифровании
Находите по информации о получателе результат Wrap
а далее без изменений.
----
Если Вы используете сертификаты, если у Вас есть массовая рассылка, протокол обмена не фиксирован, то почему не использовать уже существующие протоколы, например CMS?
С уважением, Александр.
Offline Dennisw  
#3 Оставлено : 15 октября 2009 г. 17:59:44(UTC)
Dennisw

Статус: Активный участник

Группы: Участники
Зарегистрирован: 15.10.2009(UTC)
Сообщений: 49
Откуда: CHL

Александр спасибо за ответ.
Я еще только разбираюсь с крипто про.
Т.е. по сути получается что для каждого получателя я создаю свой блок
Gost3410 alg
+
// Создаем agree ключ
GostSharedSecretAlgorithm agree = srcContainer.CreateAgree(
alg.ExportParameters(false));
+
// Зашифровываем симметричный ключ на agree ключе.
byte[] WrappedKey = agree.Wrap(symmetric,
GostKeyWrapMethod.CryptoProKeyWrap);

И после этого только перехожу к

// Создаем поток шифратора.
ICryptoTransform transform = symmetric.CreateEncryptor();

// Создаем зашифрованный файл.
using (FileStream ofs = new FileStream(EncryptedFileName, FileMode.Create))
{
?
Offline Челпанов А.  
#4 Оставлено : 15 октября 2009 г. 18:02:59(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Точно так.
С уважением, Александр.
Offline Dennisw  
#5 Оставлено : 15 октября 2009 г. 18:19:12(UTC)
Dennisw

Статус: Активный участник

Группы: Участники
Зарегистрирован: 15.10.2009(UTC)
Сообщений: 49
Откуда: CHL

Еще тогда такой момент вы пишите:
- укладываете в файл результат Wrap и информацию для кого wrap => Каким образом закладывается информация, идентифицирующая для кого wrap?

и при расшифровке, каким образом я смогу вычислить именно wrap получателя?
или он возьмет только тот wrap который относится к получателю в agree
// Создаем agree ключ
GostSharedSecretAlgorithm agree = destContainer.CreateAgree(
srcPublicKeyParameters);

// Расшифровываем симметричный ключ на agree
SymmetricAlgorithm symmetric = agree.Unwrap(cek,
GostKeyWrapMethod.CryptoProKeyWrap);
Offline Челпанов А.  
#6 Оставлено : 15 октября 2009 г. 18:31:56(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
А вот, что укладывать и как сопоставлять эту информацию решаете Вы, формат файла никем не стандартизован. Если у Вас есть взимнооднозначное соответствие между открытым ключем и пользователем этого ключа (например ИНН), то можете укладывать эту информацию. В некоторых стандартных форматах укладывается Issuer & Serial сертификата, в некоторых просто укладывается сам сертификат...
Повторюсь, а зачем изобретать велосипед?
С уважением, Александр.
Offline Dennisw  
#7 Оставлено : 15 октября 2009 г. 18:43:58(UTC)
Dennisw

Статус: Активный участник

Группы: Участники
Зарегистрирован: 15.10.2009(UTC)
Сообщений: 49
Откуда: CHL

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

Сервис обмена реализован по TCP.
Offline Dennisw  
#8 Оставлено : 15 октября 2009 г. 18:47:13(UTC)
Dennisw

Статус: Активный участник

Группы: Участники
Зарегистрирован: 15.10.2009(UTC)
Сообщений: 49
Откуда: CHL

Уточню файлик ложится в определенный контейнер к которому имеют доступ только определенная группа людей - но кто и когда заберет файлик мне не известно. Известно только общее количество участников контейнера.
Offline Челпанов А.  
#9 Оставлено : 15 октября 2009 г. 18:49:50(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
Сформулирую точнее, чем не устраивает формат CMS/ PKCS #7? В .Net есть много полезных классов для его обработки.
А уж как передавать этот файл и обеспечивать разграничение доступа придется Вам.
С уважением, Александр.
Offline Dennisw  
#10 Оставлено : 15 октября 2009 г. 18:57:13(UTC)
Dennisw

Статус: Активный участник

Группы: Участники
Зарегистрирован: 15.10.2009(UTC)
Сообщений: 49
Откуда: CHL

Честно говоря не смотрел по форматам CMS/ PKCS #7 - посмотрю обязательно.
Если есть ссылочки где посмотреть по подробнее сбросьте пожалуйста.

Форматы поддерживают стандарты ГОСТ по шифрованию?
Offline Челпанов А.  
#11 Оставлено : 15 октября 2009 г. 20:34:02(UTC)
Челпанов А.

Статус: Активный участник

Группы: Участники
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 390
Мужчина
Откуда: КриптоПро

Поблагодарили: 2 раз в 2 постах
MSDN namespace System.Security.Cryptography.Pkcs
RFC 5083 - стандарт на CMS
RFC 4490 - стандарт на использование алгоритмов ГОСТ в CMS
Примеры использования CMS + GOST в Sharpei Simple.zip каталог CMS
С уважением, Александр.
Offline Dennisw  
#12 Оставлено : 16 октября 2009 г. 1:04:40(UTC)
Dennisw

Статус: Активный участник

Группы: Участники
Зарегистрирован: 15.10.2009(UTC)
Сообщений: 49
Откуда: CHL

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