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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Ilya_Chel  
#1 Оставлено : 17 ноября 2009 г. 14:46:10(UTC)
Ilya_Chel

Статус: Новичок

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

Добрый день!

Не могли бы вы подсказать, в чем причина моей проблемы?
Вкратце ситуация: необходимо с помощью криптобиблиотеки BouncyCastle (v1.6) проверить ЭЦП, сформированную с помощью КриптоПРО CSP 3.6.
Пока тестирую.
Для подписывания генерится закрытый ключ, формируется запрос PKCS#10 и отправляется cryptopro.ru/certsrv, устанавливается подписанный сертификат.
Далее в mmc делается экспорт этого сертификата в DER'е. Этот сертификат содержит мой открытый ключ, и этим открытым ключом по идее я могу проверить собственную подпись.
Генерация подписи происходит через CryptoAPI.

Однако проверка подписи не проходит, подпись не верна.
С использованием CryptoAPI проверка проходит, все нормально, но нужно проверять именно BouncyCastle'ом.
Сообщение записанное и прочитанное совпадают байт в байт, подпись - аналогично.

Вот мой код (пишу на C# на VS2008):

StreamReader sr2;
X509CertificateParser prs; // парсер сертификата
Org.BouncyCastle.X509.X509Certificate cer; // сам объект сертификата
Gost3410DigestSigner gds; // Дайджест-сигнер, генерит для сообщения хэш по ГОСТ Р 34.10-94 и формирует/проверяет подпись по ГОСТ Р 34.10-2001
AsymmetricKeyParameter pubKey2; // объект открытого ключа
byte[] cont = Encoding.UTF8.GetBytes(content); // получаем байты сообщения, content - само прочитанное сообщение

DirectoryInfo di = new DirectoryInfo("D:\\MyDir"); // здесь реализовано просто: прошерстить всю папку, если найден сертификат - выдернуть оттуда открытый ключ и им проверить

foreach (FileInfo fi in di.GetFiles())
{
if (fi.Name.Contains(".cer"))
{
try
{
Console.WriteLine("CERTIFICATE: "+fi.Name );
sr2 = new StreamReader("D:\\MyDir\\"+fi.Name );
prs = new X509CertificateParser();
cer = prs.ReadCertificate(sr2.BaseStream); // разбираем сертификат
sr2.Close();

gds = new Gost3410DigestSigner(new ECGost3410Signer(), new Gost3411Digest()); // инициализируем дайджест-сигнер
pubKey2 = cer.GetPublicKey(); // выдергиваем открытый ключ
gds.Init(false, pubKey2); // инициализируем для проверки

gds.BlockUpdate(cont, 0, cont.Length); // формируем хэш
Console.WriteLine("-----------"+gds.VerifySignature(Convert.FromBase64String(sign))+"---------------"); // собственно, сама проверка. sign - подпись в Base64, формируемая CryptoAPI
}
catch (Exception exc)
{
Console.WriteLine(exc.Message );
}
}
}

Не может ли подпись, сформированная с помощью КриптоПро, по формату отличаться от ГОСТовой?
ГОСТ Р 34.10-2001 параграф 5.3 предусматривает конкатенацию r и s как двоичных векторов в BigEndian, этот массив байт и рассматривается как подпись.
Реверсить биты в прочитанной подписи пробовал также, не помогает.

Подскажите, пожалуйста, в чем моя ошибка?

PS: Подпись, формируемая BouncyCastle'ом проверяется нормально. Генерится ключевая пара, закрытй ключ пишется в файл. На основе этой ключевой пары
генерится запрос на сертификат PKCS#10, открытый ключ из которого используется для проверки подписи. Все читается-пишется-проверяется нормально, длина
Base64 строки 88 символов - как в подписи, формируемой CryptoAPI.

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

Offline Татьяна  
#2 Оставлено : 17 ноября 2009 г. 20:17:39(UTC)
Татьяна

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

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

Поблагодарили: 40 раз в 37 постах
очень сложно сказать, почему библиотека, с которой мы не работали, не смогла проверить подпись.

по поводу соответствия стандартам:

у нас продукты сертифицированы в ФСБ, мы предоставляли туда исходники для исследования и по результатам были получены сертификаты соответствия, которые подтвержают, что средство криптографической защиты информации (СКЗИ) "КриптоПро CSP" соответствует требованиям ГОСТ 28147-89, ГОСТ Р34.10-94, ГОСТ Р34.10-2001, ГОСТ Р34.11-94 и требованиям ФСБ России

кроме того, обычно российские и зарубежные разработчики, намеревающиеся реализовать криптоалгоритмы ГОСТ, берут за основу RFC: http://www.ietf.org/rfc/rfc4357.txt
три из трёх авторов этого rfc являются нашими сотрудниками, наши продукты соответствуют rfc

Отредактировано пользователем 17 ноября 2009 г. 20:19:37(UTC)  | Причина: Не указана

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