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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline vovka_tm  
#1 Оставлено : 22 апреля 2011 г. 14:40:15(UTC)
vovka_tm

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

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

Доброго дня. Возникла необходимость переделать реализованную ранее и хорошо работающую ЭЦП, основанную на подписании документа xml на более общую модель.
Сама подпись отрабатывает без ошибок:
using (var gost = new Gost3411CryptoServiceProvider())
{
var sign = new GostSignatureFormatter(certificate.PrivateKey);

var buff = Encoding.UTF8.GetBytes(data);
var hash = gost.ComputeHash(buff);

result = sign.CreateSignature(hash);
}

а вот при попытке проверить соответствующую подпись принимающей стороной

using (var gost = new Gost3411CryptoServiceProvider())
{
var sign = new GostSignatureDeformatter(certificate.PublicKey.Key); //<- Тут вываливается исключение

var buff = Encoding.UTF8.GetBytes(data);
var hash = gost.ComputeHash(buff);

sign.VerifySignature(hash, signature);
}

вываливается исключение "Параметр должен поддерживать алгоритм GOST R 34.10".

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

Если попытаться сделать примерно так:
var sign = new GostSignatureDeformatter(certificate.PublicKey.Key as Gost3410);
появляется другое исключение: "Значение не может быть неопределенным.\r\nИмя параметра: key", а при отладке и быстром просмотре самого выражения с этим as Gost3410 появляется сообщение Тип "CryptoPro.Sharpei.Gost3410" существует как в "CryptoPro.Sharpei.Base.dll", так и в "CryptoPro.Sharpei.Base.dll".

Пожалуйста, подскажите, где я не прав. Мой код мало чем отличается от того, что должен работать (http://www.cryptopro.ru/forum2/Default.aspx?g=posts&t=758)
Offline Челпанов А.  
#2 Оставлено : 22 апреля 2011 г. 15:42:15(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
Уберите из путей и текущей директории все файлы КриптоПро Sharpei. Очень похоже, что прогружаются два CryptoPro.Sharpei.Base.dll - один из GAC второй откуда то еще.
Если таких файлов нет, то все таки вышлите osinfo.xml от alarm на support@cryptopro.ru, ошибки там обнаруживаются только базовые.
С уважением, Александр.
Offline timkin_vn  
#3 Оставлено : 13 мая 2011 г. 13:48:24(UTC)
timkin_vn

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

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

У меня точно такое же сообщение вываливалось в следующей ситуации: перенесли исправно работающий проект на .NET Framework 4.0, а ссылки на файлы Sharpei по недосмотру не поменяли (то есть, они остались те же, что и для предыдущей версии .NET). При создании подписи для XML стала вываливаться эта ошибка, а при проверке все проходило гладко. После исправления проекта все заработало.
Предполагаю, что при переходе к новой версии .NET некоторые алгоритмы поменялись (и в них стала происходить ошибка при таком неправильном построении), а некоторые - нет (и в них все продолжало работать), и это несколько сбивает с толку.
Offline Челпанов А.  
#4 Оставлено : 13 мая 2011 г. 14:11:27(UTC)
Челпанов А.

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

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

Поблагодарили: 2 раз в 2 постах
В этом вопросе есть существенная разница как осуществляется подпись.
В первом случае, классы проверки (GostSignatureDeformatter) и подписи (GostSignatureFormatter) прогружаются всегда явно, поэтому конфликт воникает при попытке Sharpei прогрузить "свои" сборки.
В Вашем же случае, при проверке подписи XML явные ссылки от вашего проекта на Sharpei (то есть загрузка сборок) вообще не нужны и Sharpei грузит свои сборки без проблем. А вот при подписи они скорее всего требуются. Поэтому при проверке Sharpei через Microsoft грузил "новую сборку", а вот при подписи возникал конфликт.
С уважением, Александр.
Offline ibragimova  
#5 Оставлено : 9 октября 2014 г. 17:34:31(UTC)
ibragimova

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

Группы: Участники
Зарегистрирован: 07.10.2014(UTC)
Сообщений: 2
Российская Федерация
Откуда: Казань

Добрый день.
Столнулась с такой же проблемой.
Все советы, что здесь описаны я использовала, но проблема осталась. На почту я писала, но ответа не последовало. Подскажите, пожалуйста, возможные варианты источника ошибки.

var inputXml = new XmlDocument();
inputXml.Load(inputFile);

SignedXml sgnDoc = new SignedXml(inputXml);
sgnDoc.SigningKey = selectedCertificate.PrivateKey;

Reference reference = new Reference();
reference.Uri = "";

reference.DigestMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3411UrlObsolete;

XmlDsigEnvelopedSignatureTransform anv = new XmlDsigEnvelopedSignatureTransform();
reference.AddTransform(anv);

XmlDsigExcC14NTransform c14 = new XmlDsigExcC14NTransform(false);

reference.AddTransform(c14);

sgnDoc.AddReference(reference);

KeyInfo keyInfo = new KeyInfo();
keyInfo.AddClause(new KeyInfoX509Data(selectedCertificate));
sgnDoc.KeyInfo = keyInfo;
sgnDoc.SignedInfo.CanonicalizationMethod = c14.Algorithm;

sgnDoc.SignedInfo.SignatureMethod = CryptoPro.Sharpei.Xml.CPSignedXml.XmlDsigGost3410UrlObsolete;
sgnDoc.ComputeSignature();

Отредактировано пользователем 9 октября 2014 г. 19:49:00(UTC)  | Причина: Не указана

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