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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline fil-pavel  
#1 Оставлено : 1 сентября 2009 г. 15:51:17(UTC)
fil-pavel

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

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

Разница в том что сертификат выбирается пользователем из хранилища, а не используется файл .cer.
Ошибка возникает тут:
byte[] WrappedKey = agree.Wrap(symmetric,
GostKeyWrapMethod.CryptoProKeyWrap);

Ошибка: "Указан неправильный тип." System.Security.Cryptography.CryptographicException
Offline Челпанов А.  
#2 Оставлено : 1 сентября 2009 г. 16:36:33(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
Переместил тему...
1. Какой CSP установлен?
2. Какой Sharpei установлен?
3. При создании agree ключа использовался Gost3410Parameters
Код:
Gost3410Parameters srcPublicKeyParameters = alg.ExportParameters(false);
GostSharedSecretAlgorithm agree = srcContainer.CreateAgree(srcPublicKeyParameters);
Какой srcPublicKeyParameters.PublicKeyParamSet?

Отредактировано пользователем 1 сентября 2009 г. 16:40:13(UTC)  | Причина: Не указана

С уважением, Александр.
Offline fil-pavel  
#3 Оставлено : 1 сентября 2009 г. 16:37:28(UTC)
fil-pavel

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

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

впихнуть код в само сообщение не получилось :-( поэтому код тут.
Далее сам код:
Код:


        // Шифрование тестового файла.
            // Разбираем сертификат получателя
            X509Certificate2 cert = CryptSharpei.SelectSertificate("Сертификат получателя", "Выбирете сертификат получателя сообщение", X509SelectionFlag.SingleSelection);

            // Открытый ключ получателя.
            AsymmetricAlgorithm pk = cert.PublicKey.Key;
            Gost3410 alg = pk as Gost3410;
            if (alg == null)
                throw new CryptographicException("Not a gost certificate");

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

            // Открываем ключ отправителя.
            //CspParameters par = new CspParameters(75, null, SourceContainer);
            X509Certificate2 cert2 = CryptSharpei.SelectSertificate("Сертификат отправителя", "Выбирете сертификат отправителя сообщение", X509SelectionFlag.SingleSelection);

            Gost3410CryptoServiceProvider srcContainer = (Gost3410CryptoServiceProvider)cert2.PublicKey.Key;
            Gost3410Parameters srcPublicKeyParameters = srcContainer.ExportParameters(false);//srcContainer.ExportParameters(false);

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

            // Зашифровываем симметричный ключ на agree ключе.
            // Тут и происходит ошибка
            byte[] WrappedKey = agree.Wrap(symmetric,
                GostKeyWrapMethod.CryptoProKeyWrap);
Offline fil-pavel  
#4 Оставлено : 1 сентября 2009 г. 17:30:01(UTC)
fil-pavel

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

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

Челпанов А. написал:

2. Какой Sharpei установлен?

КриптоПро CSP KC1 3.0.3300.3

Челпанов А. написал:

3. При создании agree ключа использовался Gost3410Parameters
Код:
Gost3410Parameters srcPublicKeyParameters = alg.ExportParameters(false);
GostSharedSecretAlgorithm agree = srcContainer.CreateAgree(srcPublicKeyParameters);
Какой srcPublicKeyParameters.PublicKeyParamSet?


PublicKeyParamSet "1.2.643.2.2.36.0"
Offline Челпанов А.  
#5 Оставлено : 1 сентября 2009 г. 17:30:28(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
При формировании ключа agree ключ отправителя должен быть секретным, а ключ получателя открытым.
В Вашем же примере оба ключа открытые.
Код:
Gost3410CryptoServiceProvider srcContainer = (Gost3410CryptoServiceProvider)cert2.PrivateKey;
С уважением, Александр.
Offline fil-pavel  
#6 Оставлено : 1 сентября 2009 г. 17:46:09(UTC)
fil-pavel

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

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

Челпанов А. написал:
При формировании ключа agree ключ отправителя должен быть секретным, а ключ получателя открытым.
В Вашем же примере оба ключа открытые.
Код:
Gost3410CryptoServiceProvider srcContainer = (Gost3410CryptoServiceProvider)cert2.PrivateKey;


изменил:
Код:

Gost3410CryptoServiceProvider srcContainer = (Gost3410CryptoServiceProvider)cert2.PrivateKey;


Теперь ошибка:
System.Security.Cryptography.CryptographicException {"Плохой ключ.\r\n"}

StackTrace:
в CryptoPro.Sharpei.COMCryptography.ExportCspBlob(SafeKeyHandleCP hKey, SafeKeyHandleCP hExpKey, Int32 blobType)
в CryptoPro.Sharpei.COMCryptography.ExportSessionWrapedKey(SafeKeyHandleCP hSimmKey, SafeKeyHandleCP hExpKey, GostWrappedKeyObject wrappedKey)
в CryptoPro.Sharpei.GostSharedSecretCryptoServiceProvider.CryptoProWrap(Gost28147CryptoServiceProvider prov)
в CryptoPro.Sharpei.GostSharedSecretCryptoServiceProvider.Wrap(Gost28147CryptoServiceProvider prov, GostKeyWrapMethod method)
в CryptoPro.Sharpei.GostSharedSecretCryptoServiceProvider.Wrap(SymmetricAlgorithm alg, GostKeyWrapMethod method)
в TestCryptoFileStream.Program.EncryptTestFile() в D:\\Мои документы\\Visual Studio 2008\\Projects\\TestCryptoFileStream\\Program.cs:строка 97
в TestCryptoFileStream.Program.Main(String[] args) в D:\\Мои документы\\Visual Studio 2008\\Projects\\TestCryptoFileStream\\Program.cs:строка 36

Offline fil-pavel  
#7 Оставлено : 1 сентября 2009 г. 17:59:33(UTC)
fil-pavel

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

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

Челпанов А. написал:
При формировании ключа agree ключ отправителя должен быть секретным, а ключ получателя открытым.
В Вашем же примере оба ключа открытые.
Код:
Gost3410CryptoServiceProvider srcContainer = (Gost3410CryptoServiceProvider)cert2.PrivateKey;



кроме ошибки теперь выдается запрос пароля для сертификата перед тем как ошибка появляется

В предыдущем сообщении просто не написал

Отредактировано пользователем 1 сентября 2009 г. 18:00:44(UTC)  | Причина: Не указана

Offline fil-pavel  
#8 Оставлено : 1 сентября 2009 г. 18:13:05(UTC)
fil-pavel

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

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

Есть несколько уточнений. Возможно в этом причина.
1) В системе установлено 2 крипто провайдера КриптоПро и VIPNet .
2) Сертификат отправителя сформирован в VIPNet и запрос пароля приходит от его провайдера (это единственный сертификат по ГОСТ с закрытым ключем)
3) Если в качестве отправителя выбирать сертификат без секретного ключа то выдается ошибка "Не задана ссылка на объект"

ЗЫ:
Получить тестовый сертификат КриптоПро не получилось :-(

Отредактировано пользователем 1 сентября 2009 г. 18:13:43(UTC)  | Причина: Не указана

Offline Челпанов А.  
#9 Оставлено : 1 сентября 2009 г. 19:03:21(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
Функционирование Sharpei через другие провайдеры не тестировалось и, скорее всего, не работоспособно (и не планируется).
Ваш пример запустил на CSP 3.0 - тест отработал без ошибок. Проблема скорее всего именно в другом провайдере.
Пробуйте создать секретный ключ с сертификатом на нашем крипто провайдере, например на нашем тестовом центре сертификации.
С уважением, Александр.
Offline fil-pavel  
#10 Оставлено : 1 сентября 2009 г. 20:14:15(UTC)
fil-pavel

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

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

Челпанов А. написал:
Функционирование Sharpei через другие провайдеры не тестировалось и, скорее всего, не работоспособно (и не планируется).
Ваш пример запустил на CSP 3.0 - тест отработал без ошибок. Проблема скорее всего именно в другом провайдере.
Пробуйте создать секретный ключ с сертификатом на нашем крипто провайдере, например на нашем тестовом центре сертификации.


Получил тестовый сертификат.

сама проблема не ушла.

"Указан неправильный тип." System.Security.Cryptography.CryptographicException

Может быть я не тот тип сертификата генерировал?

ЗЫ:
Вообще, задача. Возможно вы подскажете другой, более рациональный путь.
Задача:
Формировать файл вида:
НекоторыеДанные (в том числе о сертификатах получателя и отправителя данных);
ДлинаЗашифрованногоСессионногоКлюча;
ЗашифрованныйСессионныйКлюч;
ДлинаВектораИнициализации;
ВекторИнициализации;
ДлинаЗашифрованныхДанных;
ЗашифрованныеДанные
(Шифрование данных выполняется единым блоком, при этом используется шифрование гаммированием с обратной связью ГОСТ 28147-89.)


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