Статус: Активный участник
Группы: Участники
Зарегистрирован: 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)) { ...............и т.д.
Подскажите пожалуйста можно каким то образом зашифровать файлик для нескольких получателей? Буду благодарен за пример. Спасибо
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390 Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
Все почти точно так же... ---- При зашифровании Создаете случайный симметричный сеансовый ключ как и ранее. Файл зашифровываете на сеансовом ключе, как это и делали ранее. Точно так же создаете себе случайный ключ. Для каждого получателя: - создаете agree (случайный ключ отправителя, открытый ключ получателя) - зашифровываете (Wrap) симметричный сеансовый ключ на agree - укладываете в файл результат Wrap и информацию для кого wrap. ---- При рашифровании Находите по информации о получателе результат Wrap а далее без изменений. ---- Если Вы используете сертификаты, если у Вас есть массовая рассылка, протокол обмена не фиксирован, то почему не использовать уже существующие протоколы, например CMS?
|
С уважением, Александр. |
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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)) { ?
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390 Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
|
С уважением, Александр. |
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 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);
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390 Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
А вот, что укладывать и как сопоставлять эту информацию решаете Вы, формат файла никем не стандартизован. Если у Вас есть взимнооднозначное соответствие между открытым ключем и пользователем этого ключа (например ИНН), то можете укладывать эту информацию. В некоторых стандартных форматах укладывается Issuer & Serial сертификата, в некоторых просто укладывается сам сертификат... Повторюсь, а зачем изобретать велосипед? |
С уважением, Александр. |
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 15.10.2009(UTC) Сообщений: 49 Откуда: CHL
|
Да велосипед изобретается для типичного файл обменника причем принимающая сторона имеет один сертификат тут как бы все понятно, а вот при отправлении информации ее могут получить несколько человек и что бы не шифровать информацию в файлике для каждого получателя (информация может иметь большой обьем) возник вопрос а можно ли зашифровать так что бы при шифровании был не один сертификат а некий контейнер сертификатов принадлежащих людям которые могут расшифровать эту информацию получив файлик себе локально.
Сервис обмена реализован по TCP.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 15.10.2009(UTC) Сообщений: 49 Откуда: CHL
|
Уточню файлик ложится в определенный контейнер к которому имеют доступ только определенная группа людей - но кто и когда заберет файлик мне не известно. Известно только общее количество участников контейнера.
|
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 24.12.2007(UTC) Сообщений: 390 Откуда: КриптоПро Поблагодарили: 2 раз в 2 постах
|
Сформулирую точнее, чем не устраивает формат CMS/ PKCS #7? В .Net есть много полезных классов для его обработки. А уж как передавать этот файл и обеспечивать разграничение доступа придется Вам.
|
С уважением, Александр. |
|
|
|
Статус: Активный участник
Группы: Участники
Зарегистрирован: 15.10.2009(UTC) Сообщений: 49 Откуда: CHL
|
Честно говоря не смотрел по форматам CMS/ PKCS #7 - посмотрю обязательно. Если есть ссылочки где посмотреть по подробнее сбросьте пожалуйста.
Форматы поддерживают стандарты ГОСТ по шифрованию?
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close