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

Уведомление

Icon
Error

3 Страницы123>
Опции
К последнему сообщению К первому непрочитанному
Offline Scorpion539  
#1 Оставлено : 8 июня 2017 г. 19:43:31(UTC)
Scorpion539

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

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

Добрый вечер,

Вычисляю отпечаток файла по алгоритму вычисления хэша по ГОСТу 34.11, а затем подписываю по PKCS#7. По требованиям по работе с файловым хранилищем вставляю соответствующие значения в свой запрос и отправляю в СМЭВ. В ответе приходит: Проверка подписи на вложении: Дайджест не прошел проверку!
Использую using CryptoPro.Sharpei;

Прошу подсказать, в чем может быть ошибка, или где о ней почитать/куда обратиться?
Offline android7779  
#2 Оставлено : 26 октября 2017 г. 8:27:37(UTC)
android7779

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

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

Столкнулся с такой же проблемой. Вы нашли ее решение?
Offline administrator  
#3 Оставлено : 15 февраля 2018 г. 8:52:53(UTC)
administrator

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

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

Сказал(а) «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Аналогичная проблема.

Ответ из технической поддержки СМЭВ:
Цитата:

"Ошибка "Дайджест не прошел проверку" возникает из за неверно вычесленного хэш-кода.
Для проверки просьба использовать https://www.gosuslugi.ru/pgu/eds.
Просьба воспользоваться : — электронного документа. ЭП — отсоединенная, в формате PKCS#7

Так же алгоритм формирование подписи PKCS7 указан в Методические рекомендации по работе с Единой системой межведомственного электронного взаимодействия 4.3.1 Подписи в формате PKCS#7 Просим вас ознакомиться."


Вычисление хэш-кода (C#):

Цитата:
var gost = new Gost3411CryptoServiceProvider();
return gost.ComputeHash(fileStream);


Подпись хэш-кода:

Цитата:

var payloadInfo = new ContentInfo(hash);
var signedCms = new SignedCms(payloadInfo, true);
var signer = new CmsSigner(certificate);
signedCms.ComputeSignature(signer);
return signedCms.Encode();


В чём может быть проблема?

Отредактировано пользователем 15 февраля 2018 г. 8:55:37(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#4 Оставлено : 15 февраля 2018 г. 14:18:47(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,342
Мужчина
Российская Федерация

Сказал «Спасибо»: 550 раз
Поблагодарили: 2213 раз в 1727 постах
Автор: administrator Перейти к цитате
Аналогичная проблема.

Ответ из технической поддержки СМЭВ:
Цитата:

"Ошибка "Дайджест не прошел проверку" возникает из за неверно вычесленного хэш-кода.
Для проверки просьба использовать https://www.gosuslugi.ru/pgu/eds.
Просьба воспользоваться : — электронного документа. ЭП — отсоединенная, в формате PKCS#7

Так же алгоритм формирование подписи PKCS7 указан в Методические рекомендации по работе с Единой системой межведомственного электронного взаимодействия 4.3.1 Подписи в формате PKCS#7 Просим вас ознакомиться."


Вычисление хэш-кода (C#):

Цитата:
var gost = new Gost3411CryptoServiceProvider();
return gost.ComputeHash(fileStream);


Подпись хэш-кода:

Цитата:

var payloadInfo = new ContentInfo(hash);
var signedCms = new SignedCms(payloadInfo, true);
var signer = new CmsSigner(certificate);
signedCms.ComputeSignature(signer);
return signedCms.Encode();


В чём может быть проблема?


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

Внутри ComputeSignature вычисляется и подписывается хеш.



Техническую поддержку оказываем тут
Наша база знаний
thanks 2 пользователей поблагодарили Андрей * за этот пост.
administrator оставлено 15.02.2018(UTC), HF_HF оставлено 26.09.2019(UTC)
Offline Андрей Писарев  
#5 Оставлено : 15 февраля 2018 г. 14:26:01(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,342
Мужчина
Российская Федерация

Сказал «Спасибо»: 550 раз
Поблагодарили: 2213 раз в 1727 постах
В ContentInfo необходимо передавать данные (fileStream)
Техническую поддержку оказываем тут
Наша база знаний
thanks 2 пользователей поблагодарили Андрей * за этот пост.
administrator оставлено 15.02.2018(UTC), HF_HF оставлено 26.09.2019(UTC)
Offline rostor  
#6 Оставлено : 16 марта 2018 г. 20:34:54(UTC)
rostor

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

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

Добрый день!
Проблема таже!
По поводу "В ContentInfo необходимо передавать данные (fileStream)" реализована только byte[], возможно что-то напутано, поясните, пожалуйста.
Offline Андрей Писарев  
#7 Отправлено: : 16 марта 2018 г. 20:40:16(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,342
Мужчина
Российская Федерация

Сказал «Спасибо»: 550 раз
Поблагодарили: 2213 раз в 1727 постах
Здравствуйте.

Поясните, в чем проблема.
Техническую поддержку оказываем тут
Наша база знаний
Offline rostor  
#8 Оставлено : 16 марта 2018 г. 20:58:23(UTC)
rostor

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

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

Для создания хеш использую:
byte[] byteArray = Encoding.UTF8.GetBytes(fileNameForHash);
MemoryStream fileStream = new MemoryStream(byteArray);

hashValue = hashGost_3411.ComputeHash(fileStream);

fileStream.Close();

for (int i = 0; i < hashValue.Length; i++)
_resultHashAsString += string.Format("{0:X2}", hashValue[i]);

где fileNameForHash - файл (в данном случае поток данных в виде строки, но через файл также пробовал) подлежащий хешированию,
hashGost_3411 - Gost3411CryptoServiceProvider hashGost_3411 = new Gost3411CryptoServiceProvider();

Для подписания хеш использую и получения подписи:
signedData = signGost_3410.SignHash(hashValue);

for (int i = 0; i < signedData.Length; i++)
_resultSignAsString += string.Format("{0:X2}", signedData[i]);

где signGost_3410 - new Gost3410CryptoServiceProvider(cspParameters);
cspParameters = new CspParameters75, null, keyContainerInfo.KeyContainerName);
где:
privateKey = certificate.PrivateKey;
ICspAsymmetricAlgorithm iasym = privateKey as ICspAsymmetricAlgorithm;
keyContainerInfo = iasym.CspKeyContainerInfo;

так же:
X509Store store = new X509Store(storeName, StoreLocation.CurrentUser);
store.Open(OpenFlags.OpenExistingOnly | OpenFlags.ReadOnly);

X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;

X509Certificate2Collection found = store.Certificates.Find(X509FindType.FindBySerialNumber, serialNumber, false);

if (found.Count == 0)
{
throw new Exception("Сертификат по серийному номеру не найден.");
}
if (found.Count > 1)
{
throw new Exception("Слишком много сертификатов по серийному номеру.");
}

certificate = found[0];

так же пробовал, что у у коллег:
var payloadInfo = new ContentInfo(byteArray);//hashValue
var signedCms = new SignedCms(payloadInfo, true);
var signer = new CmsSigner(certificate);
signedCms.ComputeSignature(signer);
signedData = signedCms.Encode();
for (int i = 0; i < signedData.Length; i++)
_resultSignAsString += string.Format("{0:X2}", signedData[i]);

SendRequestReuqerst - проходит, ЭП-ОП валидируется (подпись таже, что и для вложений), но далее GetResponce (при ассинхронной проверка) падает - Подпись на вложении не верна, для чего использую выше приведенный код.
Мозг вскипел, если, что нет подскажите, буду признателен.


Offline rostor  
#9 Оставлено : 16 марта 2018 г. 20:59:54(UTC)
rostor

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

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

X509Certificate2Collection found = store.Certificates.Find(X509FindType.FindBySerialNumber, serialNumber, false); - здесь по факту 3-ий параметр true.
Offline Андрей Писарев  
#10 Оставлено : 16 марта 2018 г. 21:40:04(UTC)
Андрей *

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

Группы: Участники
Зарегистрирован: 26.07.2011(UTC)
Сообщений: 13,342
Мужчина
Российская Федерация

Сказал «Спасибо»: 550 раз
Поблагодарили: 2213 раз в 1727 постах
Код:

byte[] byteArray = Encoding.UTF8.GetBytes(fileNameForHash);


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