Статус: Новичок
Группы: Участники
Зарегистрирован: 08.06.2017(UTC) Сообщений: 1 Откуда: Moscow
|
Добрый вечер,
Вычисляю отпечаток файла по алгоритму вычисления хэша по ГОСТу 34.11, а затем подписываю по PKCS#7. По требованиям по работе с файловым хранилищем вставляю соответствующие значения в свой запрос и отправляю в СМЭВ. В ответе приходит: Проверка подписи на вложении: Дайджест не прошел проверку! Использую using CryptoPro.Sharpei;
Прошу подсказать, в чем может быть ошибка, или где о ней почитать/куда обратиться?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 28.11.2016(UTC) Сообщений: 1 Откуда: Пермь
|
Столкнулся с такой же проблемой. Вы нашли ее решение?
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,357 Сказал «Спасибо»: 550 раз Поблагодарили: 2217 раз в 1731 постах
|
Автор: 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 вычисляется и подписывается хеш. |
|
2 пользователей поблагодарили Андрей * за этот пост.
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,357 Сказал «Спасибо»: 550 раз Поблагодарили: 2217 раз в 1731 постах
|
В ContentInfo необходимо передавать данные (fileStream) |
|
2 пользователей поблагодарили Андрей * за этот пост.
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 16.03.2018(UTC) Сообщений: 8 Откуда: Краснодар
|
Добрый день! Проблема таже! По поводу "В ContentInfo необходимо передавать данные (fileStream)" реализована только byte[], возможно что-то напутано, поясните, пожалуйста.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,357 Сказал «Спасибо»: 550 раз Поблагодарили: 2217 раз в 1731 постах
|
Здравствуйте.
Поясните, в чем проблема. |
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 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 (при ассинхронной проверка) падает - Подпись на вложении не верна, для чего использую выше приведенный код. Мозг вскипел, если, что нет подскажите, буду признателен.
|
|
|
|
Статус: Новичок
Группы: Участники
Зарегистрирован: 16.03.2018(UTC) Сообщений: 8 Откуда: Краснодар
|
X509Certificate2Collection found = store.Certificates.Find(X509FindType.FindBySerialNumber, serialNumber, false); - здесь по факту 3-ий параметр true.
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 26.07.2011(UTC) Сообщений: 13,357 Сказал «Спасибо»: 550 раз Поблагодарили: 2217 раз в 1731 постах
|
Код:
byte[] byteArray = Encoding.UTF8.GetBytes(fileNameForHash);
Поясните, что получается в byteArray? |
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close