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

Уведомление

Icon
Error

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

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

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

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

Вот код который я использую:
Код:
var alg = (Gost3410)receiverCertificate.PublicKey.Key;
var simmetric = Gost28147.Create();
var cspParams = new CspParameters(75, null, "eTax");
var srcContainer = new Gost3410CryptoServiceProvider(cspParams);
var agree = srcContainer.CreateAgree(alg.ExportParameters(false));
byte[] wrappedKey = agree.Wrap(simmetric, GostKeyWrapMethod.CryptoProKeyWrap);

получаемый в результате трансформации массив имеет длину 65 байт, в то же время зашифрованные сессионные ключи сформированные при помощи например "ГНИВЦ Курьер" имеют длину 71 байт. В документации МНС описание формата зашифрованного сессионного ключа ограничивается словами "вырабатывается СКЗИ КриптоПро CSP".
Хотелось бы уточнить каким именно образом можно сформировать данный ключ.
Offline Челпанов А.  
#2 Оставлено : 30 июля 2008 г. 19:15:05(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
Зашифрованные симметричные ключи в "ГНИВЦ Курьер" скорее всего имеют структуру CRYPT_SIMPLEBLOB (см. описание в WinCryptEx.h). Не лучший способ формата сессионного ключа с моей точки зрения.
wrappedKey из вашего примера может быть разобран в структуру GostWrappedKey:
Код:
GostWrappedKey wk = new GostWrappedKey();
wk.SetByXmlWrappedKey(wrappedKey);

Останется только сопоставить соответствующие поля GostWrappedKey и CRYPT_SIMPLEBLOB
bSV - Ukm
bEncryptedKey - EncryptedKey
bMacKey - Mac
bEncryptionParamSet - EncryptionParamSet
С уважением, Александр.
Offline skurdiukov  
#3 Оставлено : 30 июля 2008 г. 22:04:14(UTC)
skurdiukov

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

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

Спасибо, это именно он и оказался. Жаль нельзя напрямую его получить из .NET пришлось по байтам собирать.

Кстати не подскажете как строковый параметр EncryptionParamSet равный 1.2.643.2.2.31.1 преобразовать в ASN OID?
Offline Челпанов А.  
#4 Оставлено : 31 июля 2008 г. 19:02:14(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
Ни у Microsoft, ни у нас интерфейсов кодирования ASN.1 OID, к сожелению, я не знаю. Придется кодировать побайтно или воспользоваться готовым закодированным байтовым массивом конкретно для этого (1.2.643.2.2.31.1) OID.
С уважением, Александр.
Offline skurdiukov  
#5 Оставлено : 11 августа 2008 г. 19:29:06(UTC)
skurdiukov

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

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

Спасибо за быструю реакцию по поводу зашифрованных сесионных ключей :), в процессе дальнейшей работы возник еще один вопрос, в при формировании ЭЦП возникла необходимость выгружать публичный ключ сертификата, который как оказалось тоже выгружается в форматевнутренней структуры крипто-про.
Хотелось бы узнать про возможность добавления функции для получения этой структуры средствани .net (по аналогии с сессионным ключем).
Offline Челпанов А.  
#6 Оставлено : 12 августа 2008 г. 20:47:02(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
Небольшой комментарий по поводу преобразования зашифрованных сессионных ключей в CRYPT_SIMPLEBLOB (для тех кто не в курсе внутренней переписки). Нам показалось, что такая фукциональность будет востребована достаточно часто, поэтому мы решили добавить ее в КриптоПро Шарпей. Для преобразования зашифрованного сессионного ключа из вышеуказанного примера в BLOB:
Код:
GostWrappedKey wk = new GostWrappedKey();
wk.SetByXmlWrappedKey(wrappedKey);
byte[] blob = wk.GetCryptoServiceProviderBlob();


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