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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline Dmitry Panchenko  
#1 Оставлено : 7 октября 2009 г. 22:03:31(UTC)
Dmitry Panchenko

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

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

Здравствуйте!

Есть такой вопрос. Пользователь A через веб интерфейс подписывает (с помощью CAPICOM) и загружает файл на сервер. Сервер должен выполнить проверку ЭЦП прежде чем сохранить файл в БД, а также каждый раз, предоставляя пользователю Б возможность скачать этот файл проверять ЭЦП на случай подмены. Вопросы такие:
1. Как грамотно организовать получение сертификата пользователя А на стороне сервера? Видел получение из сессии, но соединение скорее всего будет не по SSL.
2. Даже вручную установив сертификат пользователя в хранилище система порождает исключение "Поставщик не смог выполнить действие, поскольку контекст был получен как "тихий"" в момент выполнения Gost.VerifyData. Что это означает?

Код:

string StringSign =...
byte[] Data =...

UTF8Encoding ByteConverter = new UTF8Encoding();
Byte[] Sign = ByteConverter.GetBytes(StringSign);
var GostHash = new Gost3411CryptoServiceProvider();
var Gost = new Gost3410CryptoServiceProvider();
bool b = Gost.VerifyData(Data, GostHash, Sign);
Offline Челпанов А.  
#2 Оставлено : 8 октября 2009 г. 16:58:52(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
1. Все зависит от доверия сертификату.
Если Вы доверяете абсолютно всем сертификатам, чьи центры находятся находятся в хранилище сервера, то можно передавать сертификат вместе с сообщением, а при проверке - строить и проверять цепочку.
Если Вы доверяете только ограниченному набору пользователей, то придется доставать сертификат из хранилища доверенных пользователей.
Если Вы доверяете любому пользователю, кто смог установить с сервером SSL соединение и при этом сообщение обязательно должно быть подписано этим сертификатом, то можно доставать и из SSL сессии.
2. Не понятно как приведенный выше код связан с сертификатами...
Цитата:
var Gost = new Gost3410CryptoServiceProvider();
bool b = Gost.VerifyData(Data, GostHash, Sign);

Означает примерно следующее:
1. Открыть провайдер ГОСТ.
2. Так как в провайдере отсутствует ключ, на котором проверять, то сгенерировать случайный ключ.
3. Проверить на этом случайном ключе подпись с заданым hash.
Сообщение "Поставщик не смог выполнить действие, поскольку контекст был получен как "тихий"" означает, что Sharpei с CSP попытались выдать окно (скорее всего при генерации секретного ключа), а выдача окон была запрещена.
С уважением, Александр.
Offline zosimovkv  
#3 Оставлено : 16 декабря 2011 г. 21:52:22(UTC)
zosimovkv

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

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

Здравствуйте,

Не могли бы вы уточнить "2. Так как в провайдере отсутствует ключ, на котором проверять, то сгенерировать случайный ключ.", что это за ключ? ведь для проверки валидности подписи требуется открытый ключ, который содержится в подписи.
Видимо это связано с тем что получаю я, а именно: при проверке подписи выводится окно с просьбой установки пароля на создаваемый контейнер..

Код следующий:
var Gost = new Gost3410CryptoServiceProvider();
var GostHash = new Gost3411CryptoServiceProvider();
var isVerified = Gost.VerifyData(fileContent, GostHash, signedFileContent);

Помогите разобраться плиз!


Offline Максим Коллегин  
#4 Оставлено : 17 декабря 2011 г. 2:18:23(UTC)
Максим Коллегин

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

Группы: Администраторы
Зарегистрирован: 12.12.2007(UTC)
Сообщений: 6,377
Мужчина
Откуда: КРИПТО-ПРО

Сказал «Спасибо»: 32 раз
Поблагодарили: 706 раз в 614 постах
Могу посоветовать покурить примеры из SDK. Возвращаться через пару дней.
Знания в базе знаний, поддержка в техподдержке
Offline zosimovkv  
#5 Оставлено : 20 декабря 2011 г. 15:49:08(UTC)
zosimovkv

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

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

Это было первое что я сделал =)

При использовании следующего:

var Gost = new Gost3410CryptoServiceProvider();
bool b = GostVerifyHash(fileContent, signedFileContent, Gost, "Gost3411");

Метод GostVerifyHash взял из примеров..
static bool GostVerifyHash(byte[] HashValue, byte[] SignedHashValue, AsymmetricAlgorithm key, string HashAlg)
{
try
{
//Создаем форматтер подписи с закрытым ключом из переданного
//функции криптопровайдера.
GostSignatureDeformatter Deformatter = new GostSignatureDeformatter(key);

//Устанавливаем хэш-алгоритм.
Deformatter.SetHashAlgorithm(HashAlg);

//Проверяем подпись и возвращаем результат.
return Deformatter.VerifySignature(HashValue, SignedHashValue);
}
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
return false;
}
}

возвращает ошибку: Размер значения хеш-функции GOST3411:32 байт(ов).

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