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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Mastermind  
#1 Оставлено : 9 октября 2017 г. 12:05:05(UTC)
Mastermind

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

Группы: Участники
Зарегистрирован: 09.10.2017(UTC)
Сообщений: 4
Российская Федерация

Добрый день. Мне на вход приходит подписанный массив байт и сама подпись(отсоединенная). Нужно проверить подпись. У меня в системе установлен сертификат с PublicKey для проверки подписи. Варианты провайдеров, которыми осуществлялась подпись:

- CryptoPro2012_256 = "Crypto-Pro GOST R 34.10-2012 Cryptographic Service Provider";
- CryptoPro2012_512 = "Crypto-Pro GOST R 34.10-2012 Strong Cryptographic Service Provider";
- CryptoPro2001 = "Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider";

Подскажите куда копать, какие классы использовать для верификации подписи с указанием ключа(public key).
Offline Mastermind  
#2 Оставлено : 10 октября 2017 г. 12:47:18(UTC)
Mastermind

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

Группы: Участники
Зарегистрирован: 09.10.2017(UTC)
Сообщений: 4
Российская Федерация

Наткнулся на пример, но в моем случае вылетает ошибка "Неправильный параметр набора ключей". В тестовом сертификате, который мне предоставили имеется только PublicKey. С IIS не работаю.
Код:

var parameters = new CspParameters();
parameters.ProviderName = "Crypto-Pro GOST R 34.10-2012 Strong Cryptographic Service Provider";
parameters.ProviderType = 81;


// Объект, реализующий алгоритм ГОСТ 3410.
Gost3410_2012_512CryptoServiceProvider gost3410 = new Gost3410_2012_512CryptoServiceProvider(parameters);
var cert = GetCertificate(serialNumber);
gost3410.ContainerCertificate = cert;

// Данные для проверки подписи.
byte[] data = Encoding.GetEncoding(1251).GetBytes(doc.OuterXml);

 // Объект, реализующий алгоритм хэширования ГОСТ 3411.
Gost3411_2012_512CryptoServiceProvider gostHash = new Gost3411_2012_512CryptoServiceProvider();
//Проверяем правильность подписи и выводим результат.
return gost3410.VerifyData(data, gostHash, sign);


Если закомментировать установку ProviderType, то выходит ошибка "Тип поставщика не соответствует зарегистрированному значению.";
Если вообще убрать объявление CspParametrs, то ошибка "Набор ключей не определен".

Kripto.PNG (16kb) загружен 10 раз(а). Studija.PNG (99kb) загружен 12 раз(а).
Offline Mastermind  
#3 Оставлено : 10 октября 2017 г. 16:17:45(UTC)
Mastermind

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

Группы: Участники
Зарегистрирован: 09.10.2017(UTC)
Сообщений: 4
Российская Федерация

Дошел до такого варианта, ошибок нет, но подпись не проходит проверку.

Код:

        internal static bool VerifyCryptoSign(byte[] data, byte[] sign, string serialNumber)
        {
            // Получаем сертификат из хранилища по его серийному номеру
            var cert = GetCertificate(serialNumber);

            // Объект, реализующий алгоритм ГОСТ 3410.
            Gost3410_2012_512CryptoServiceProvider gost3410 = (Gost3410_2012_512CryptoServiceProvider) cert.PublicKey.Key;

            // Объект, реализующий алгоритм хэширования ГОСТ 3411.
            Gost3411_2012_512CryptoServiceProvider gostHash = new Gost3411_2012_512CryptoServiceProvider();

            //Проверяем правильность подписи и выводим результат.
            bool result = gost3410.VerifyData(data, gostHash, sign);

            return result;
        }


Сравнил данные и подпись, что лежат в первоисточнике с теми, с которыми работаю я. И данные, и подпись совпадают.

Уточнение - изначально файл подписывается с помощью С++.

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

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