logo Обзор КриптоПро NGate для защищённого доступа к корпоративным ресурсам
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline two_oceans  
#1 Оставлено : 6 августа 2019 г. 8:03:23(UTC)
two_oceans

Статус: Эксперт

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

Сказал(а) «Спасибо»: 46 раз
Поблагодарили: 155 раз в 147 постах
Добрый день.
Коллеги, прошу помощи, что-то я уже всю голову сломал в чем дело. Вкратце ситауция такая: уже почти год мучаюсь с добавлением поддержки гост-2012 в свою программу для подписи по форматам СМЭВ. Сначала не было верных примеров, реализовал и отложил задачу. Потом примеры появились, но не проходили проверку. Потом исправил ошибку с указанием алгоритма гост-2001 для вычисления хэша SignedInfo и SignatureValue по гост-2012 в xmldsig стало проходить проверку. Тем не менее, хэши гост-2012 из signedinfo не сходятся. А если при проверке хэши не сходятся, то и подписать верно не получится.

Как бы понятно, что вариантов немного: или функция хэширования дает неверный результат или неверный алгоритм хэша или неправильный endian или неправильный текст.

Если смотреть методом исключения, то вроде как что неверная функция хэша отпадает (82801) и неверный endian отпадает (проверено оба), значение возвращаемое функцией также верное, как я понимаю для гост-2012 даже не предусмотрено установки параметров хэша. По логике остаются трансформы для получения текста.

Да дело оказалось в тексте, но не в трансформах, а в замене адресов пространств СМЭВ, когда у отправителя и получателя разные версии конверта СМЭВ 3 (например, у одного 1.2, у другого 1.1). На верное подписание эта ошибка не влияет.

Отредактировано пользователем 19 августа 2019 г. 13:15:22(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#2 Оставлено : 6 августа 2019 г. 12:13:14(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 11 раз
Поблагодарили: 540 раз в 490 постах
Попробуйте получить эталоны в .NET
SignedXML умеет писать дампы всех трансформов.
https://social.msdn.micr...buglog?forum=xmlandnetfx
Знания в базе знаний, поддержка в техподдержке
Offline two_oceans  
#3 Оставлено : 6 августа 2019 г. 13:34:23(UTC)
two_oceans

Статус: Эксперт

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

Сказал(а) «Спасибо»: 46 раз
Поблагодарили: 155 раз в 147 постах
Спасибо за оперативный ответ. Честно говоря, свою программу я начал писать именно из-за того, что .Net и Java мне не хотелось осваивать. Поэтому наверно советом воспользоваться не получится.

Отредактировано пользователем 19 августа 2019 г. 13:16:18(UTC)  | Причина: Не указана

Offline two_oceans  
#4 Оставлено : 14 августа 2019 г. 10:15:53(UTC)
two_oceans

Статус: Эксперт

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

Сказал(а) «Спасибо»: 46 раз
Поблагодарили: 155 раз в 147 постах
Короче получается какое-то вообще сумасшествие: перепроверил снова документ с подписью гис гмп по гост-2012 и смэв по гост-2001 через инструмент смэв. Получилось что гис гмп подпись неверная, а смэв верная. Там же проверил 2 других запроса в котором только гост-2012, оба прошли проверку и в инструменте смэв и в моей программе. Выходит подпись гис гмп и правда битая, буду разбираться техподдержками сиэв (почему смэв подписал ответ с битой подписью или испортил подпись гис гмп) и гис гмп (почему битая).
Offline two_oceans  
#5 Оставлено : 19 августа 2019 г. 12:51:15(UTC)
two_oceans

Статус: Эксперт

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

Сказал(а) «Спасибо»: 46 раз
Поблагодарили: 155 раз в 147 постах
На заметку пилящим интеграцию через СМЭВ 3 - пришел ответ поддержки СМЭВ о том, что со стороны гис гмп как ни странно все верно и "подпись ответа в SendResponseRequest верна". Проблема в том, что ответ гис гмп был отправлен в конверте смэв 3 версии 1.2, а запрос на получение ответа GetResponseRequest отправлен в версии 1.1, поэтому СМЭВ ответил GetResponseResponse как будто ответ был в версии 1.1.

При этом (уже своими словами) адреса пространств в SenderProvidedResponseData в ответе гис гмп не благословлены отдельным объявлением адреса и потому за счет изменения адресов пространств в вышестоящих тегах стали не по версии 1.2, а версии 1.1 и из-за этого проверка дает ошибку целостности ЭП. Другими словами, ЭП нарушается при формировании ответа СМЭВ, если были разные версии конверта СМЭВ 3 у отправителя и получателя. Немного в шоке от такого понимания кроссверсионности конверта.

И правда, если в тексте, полученном после трансформов, поменять 1.1 на 1.2, то хэш сходится. В ответе много неиспользуемых объявления пространств с версией 1.2 (все выкидываются про эксклюзивной каноникализации), то есть надо по лишнему объявлению во вложенном теге подписываемого тега или в самой подписи надо догадаться что ответ был в другой версии конверта СМЭВ и заменить адрес пространства имен подписанного элемента.

Отредактировано пользователем 19 августа 2019 г. 12:53:36(UTC)  | Причина: Не указана

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