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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline cutecode  
#1 Оставлено : 21 октября 2020 г. 14:30:44(UTC)
cutecode

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

Группы: Участники
Зарегистрирован: 10.01.2018(UTC)
Сообщений: 15
Австралия

Сказал(а) «Спасибо»: 1 раз
c14.txt (1kb) загружен 11 раз(а). body.txt (1kb) загружен 15 раз(а). fss.xml (7kb) загружен 14 раз(а).Помогите разобраться как правильно вычисляется HASH для <DigestValue>?

ФСС ругается на не корректность подписи отправляемого мною xml-файла.
Поэтому решил пойти от обратного и проверить HASH в ответном сообщении от ФСС.



1. беру узел <body> сообщения от ФСС, и вставляю его в файл body.txt
Код:

<S:Body wsu:Id="OGRN_1027739443236">
      <ns1:getNewLNNumResponse xmlns:ns1="http://ru/ibs/fss/ln/ws/FileOperationsLn.wsdl" xmlns:ns2="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
         <ns1:fileOperationsLnUserGetNewLNNumOut>
            <ns1:REQUEST_ID>LNNUMMO_1022601163970_2020_10_21_00009</ns1:REQUEST_ID>
            <ns1:STATUS>0</ns1:STATUS>
            <ns1:MESS>ORA-20001: Некорректная подпись головной организации: ЭЦП неверна. INVALID_SIGNATURE ЭП недействительна. Обратитесь к разработчику программного обеспечения, на котором осуществлялось подписание данных.</ns1:MESS>
            <ns1:DATA xsi:nil="true" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"/>
         </ns1:fileOperationsLnUserGetNewLNNumOut>
      </ns1:getNewLNNumResponse>
   </S:Body>

2. утилитой xmllint привожу этот файл к каноническому виду
Код:

xmllint --exc-c14n body.txt >c14.txt

3. получаю файл c14.txt
Код:

<S:Body wsu:Id="OGRN_1027739443236">
      <ns1:getNewLNNumResponse xmlns:ns1="http://ru/ibs/fss/ln/ws/FileOperationsLn.wsdl">
         <ns1:fileOperationsLnUserGetNewLNNumOut>
            <ns1:REQUEST_ID>LNNUMMO_1022601163970_2020_10_21_00009</ns1:REQUEST_ID>
            <ns1:STATUS>0</ns1:STATUS>
            <ns1:MESS>ORA-20001: Некорректная подпись головной организации: ЭЦП неверна. INVALID_SIGNATURE ЭП недействительна. Обратитесь к разработчику программного обеспечения, на котором осуществлялось подписание данных.</ns1:MESS>
            <ns1:DATA xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"></ns1:DATA>
         </ns1:fileOperationsLnUserGetNewLNNumOut>
      </ns1:getNewLNNumResponse>
   </S:Body>

4. утилитой cpverify вычисляю HASH файла c14.txt, получаю результат в HEX
Код:

cpverify -mk -alg GR3411_2012_256 c14.txt
6476C35D3455FCFF588BD00DDC823F598C0BDE94CA2E99E80989349C48C7A2F2

или после перевода в base64
Код:

ZHbDXTRV/P9Yi9AN3II/WYwL3pTKLpnoCYk0nEjHovI=


Однако значение <DigestValue> ФСС отображает как

Код:

<DigestValue>jinpHKkJFN2YCEQnVnzwFYHwuWe0v+InQwlVWjiHEGo=</DigestValue>

что соответствует hex
Код:

8E29E91CA90914DD98084427567CF01581F0B967B4BFE2274309555A3887106A


т.е. получаются разные значения HASH



Offline cutecode  
#2 Оставлено : 22 октября 2020 г. 0:36:39(UTC)
cutecode

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

Группы: Участники
Зарегистрирован: 10.01.2018(UTC)
Сообщений: 15
Австралия

Сказал(а) «Спасибо»: 1 раз
ФУУУ!!!
Сам разобрался.
Оказывается в <BODY> надо вставить атребуты родителя, а xmllint уже сам выкинет от туда все лишнее
Offline maslito  
#3 Оставлено : 22 октября 2020 г. 18:04:46(UTC)
maslito

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

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

Сказал(а) «Спасибо»: 3 раз
Напиши подробнее какие аттрибуты?
Offline cutecode  
#4 Оставлено : 22 октября 2020 г. 19:21:33(UTC)
cutecode

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

Группы: Участники
Зарегистрирован: 10.01.2018(UTC)
Сообщений: 15
Австралия

Сказал(а) «Спасибо»: 1 раз
Автор: maslito Перейти к цитате
Напиши подробнее какие аттрибуты?


запустите в командной строке
Код:

xmllint --exc-c14n body.txt


xmllint - сам "ругнется" чего там не хватает
Методом "тыка" вставьте недостающий атрибут из родительского узла

например было
Код:

  <ds:Signature Id="SIG-2b48f7f4-bf09-42be-947a-1daf1c48729f" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
            <ds:SignedInfo>      


надо добавить атрибут xmlns:ds="http://www.w3.org/2000/09/xmldsig#
чтобы стало так
Код:

      <ds:SignedInfo xmlns:ds="http://www.w3.org/2000/09/xmldsig#>      


можно даже вставить все атрибуты родителя, xmllint все равно удалит лишние

Удачи
Offline two_oceans  
#5 Оставлено : 24 октября 2020 г. 13:05:54(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Добавлю такие поправки по терминологии:
1) это не просто все подряд атрибуты, а "объявления пространств имен" (xmlns [двоеточие префикс]="URN_имя_пространства_имен") и специальные атрибуты с префиксом xml (xml:lang="ru" например) - они отличаются от остальных тем, что наследуются в теги-потомки;
2) само их множество называется "ancestor context" или "контекст предков";
3) если не копировать часть строки, а использовать библиотеки работы с xml для выделения фрагмента из документа, то контекст предков вставится в результат автоматически, без подбора методом тыка.
Offline cutecode  
#6 Оставлено : 24 октября 2020 г. 14:10:33(UTC)
cutecode

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

Группы: Участники
Зарегистрирован: 10.01.2018(UTC)
Сообщений: 15
Австралия

Сказал(а) «Спасибо»: 1 раз
Автор: two_oceans Перейти к цитате

3) если использовать библиотеки работы с xml для выделения фрагмента из документа, то контекст предков вставится в результат автоматически, без подбора методом тыка.


А вот это интересно.
В xmllint я такого не шел в параметрах



Можете посоветовать такую либу?
Желательно для WIN/MAC/LINUX
И либо с командной строки, либо на С++

Или лучше канонизировать весь файл, а потом вытащить от туда нужный мне блок?
Просто я подумал, что есть либа которой указываешь весь файл и блок который надо канонизировать.

Отредактировано пользователем 24 октября 2020 г. 14:41:12(UTC)  | Причина: Не указана

Offline two_oceans  
#7 Оставлено : 24 октября 2020 г. 17:07:30(UTC)
two_oceans

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

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

Сказал(а) «Спасибо»: 110 раз
Поблагодарили: 393 раз в 366 постах
Автор: cutecode Перейти к цитате
В xmllint я такого не шел в параметрах
...
--xpath expr: evaluate the XPath expression, imply --noout
... Можете посоветовать такую либу?
Желательно для WIN/MAC/LINUX
И либо с командной строки, либо на С++
Через XPath в теории можно выбрать все что угодно. По спецификации первой версии это работает так: документ представляется в виде дерева узлов и для каждого узла вычисляется указанное выражение: если оно истинно, то узел включается в результат. Можно, например, указать выбор если ancestor-or-self (предок, не обязательно родитель, или сам узел) имеет атрибут Id с нужным значением (или является определенным тегом), что как раз выберет поддерево ниже нужного узла (фрагмент). Есть еще Xpath2. Конкретно про xmllint не проверял вставляет ли он при вычислении XPath весь контекст предков, но теоретически должен как минимум добавить недостающее.

Автор: cutecode Перейти к цитате
Или лучше канонизировать весь файл, а потом вытащить от туда нужный мне блок?
Просто я подумал, что есть либа которой указываешь весь файл и блок который надо канонизировать.
К сожалению, если применить 1) приведение к каноническому виду потом 2) взятие фрагмента результат будет иной чем если применить сначала 2) потом 1). Ну, для простых фрагментов (как SignedInfo) конечно разницы не будет, но более-менее сложный фрагмент запроса уже даст различие. Так что обычно это 2 разные операции - сначала выбор, потом каноничный вид. В целом, проблема еще шире - каноничный вид во версии конкретной отечественной ГИС может не совпасть с каноничным видом из зарубежных библиотек.
Offline Михаил К.  
#8 Оставлено : 11 января 2021 г. 12:52:35(UTC)
Михаил К.

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

Группы: Участники
Зарегистрирован: 16.08.2017(UTC)
Сообщений: 19
Мужчина
Российская Федерация
Откуда: Санкт-Петербург

Сказал «Спасибо»: 2 раз
Добрый день.

Пытаюсь понять, от чего рассчитан хеш в спецификации ФСС версии 2: full_from_spec_v20.xml (17kb) загружен 11 раз(а).
Судя по <Reference URI="#REGNO_6312023223">, то от всего тега <BODY>.
Привел <BODY> к каноническому виду: body_from_spec_v20.xml (2kb) загружен 12 раз(а).
Но хеш не совпадает.
Привел к каноническому виду тег <ROW>: row_from_spec_v20_canonical.xml (1kb) загружен 2 раз(а).
Но и от него хеш не совпадает с тем, что в спецификации.
Так и застрял на этом моменте...
Offline Norguhtar  
#9 Оставлено : 19 января 2021 г. 13:33:46(UTC)
Norguhtar

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

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

Поблагодарили: 2 раз в 2 постах
Автор: Михаил К. Перейти к цитате
Добрый день.

Пытаюсь понять, от чего рассчитан хеш в спецификации ФСС версии 2: full_from_spec_v20.xml (17kb) загружен 11 раз(а).
Судя по <Reference URI="#REGNO_6312023223">, то от всего тега <BODY>.
Привел <BODY> к каноническому виду: body_from_spec_v20.xml (2kb) загружен 12 раз(а).
Но хеш не совпадает.

А вы заменили CRLF на LF? Они должны быть заменены, а пробелы сохранены. Иначе будет ой.

thanks 1 пользователь поблагодарил Norguhtar за этот пост.
Михаил К. оставлено 19.01.2021(UTC)
Offline Михаил К.  
#10 Оставлено : 22 января 2021 г. 14:43:05(UTC)
Михаил К.

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

Группы: Участники
Зарегистрирован: 16.08.2017(UTC)
Сообщений: 19
Мужчина
Российская Федерация
Откуда: Санкт-Петербург

Сказал «Спасибо»: 2 раз
Исправил переносы строк, пробелы оставил body_from_spec_v20.xml (2kb) загружен 6 раз(а)..
Считал хэш и с коментариями и без. Все равно не выхожу на тот хеш, что в примере.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.