:: Visual Foxpro, Foxpro for DOS
Хэш по ГОСТ Р 34.11-2012
ilya73

Сообщений: 40
Откуда: Вологда
Дата регистрации: 24.08.2006
Помогите разобраться.
Есть пример (прикреплен в файле req.rar).
Служба технической поддержки утверждает, что для строки
#5e261f52-887d-4972-bb3d-d3ea966e8a3c
хэшем (ГОСТ Р 34.11-2012) является строка
yEiByHM0u6HYXdAr4j983UnIE+aCTaMA4XM9t25mWUw=
С помощью следующего кода, взятого с данного форума и немного мною видоизмененного
? CalcHash('#5e261f52-887d-4972-bb3d-d3ea966e8a3c')
RETURN
PROCEDURE CalcHash
PARAMETERS m.StrInput
#DEFINE PROV_GOST_2001_DH 75
#DEFINE CALG_GR3411_2012_256 32801
#DEFINE dnHP_HASHVAL 2
DECLARE INTEGER CryptAcquireContext IN win32api ;
INTEGER @, STRING, STRING, INTEGER, INTEGER
DECLARE INTEGER CryptCreateHash IN win32api ;
INTEGER, INTEGER, INTEGER, INTEGER, INTEGER @
DECLARE INTEGER CryptHashData IN win32api ;
INTEGER, STRING, INTEGER, INTEGER
DECLARE INTEGER CryptGetHashParam IN win32api ;
INTEGER, INTEGER, STRING @, INTEGER @, INTEGER
DECLARE INTEGER CryptDestroyHash IN win32api ;
INTEGER
DECLARE INTEGER CryptReleaseContext IN win32api ;
INTEGER, INTEGER
m.ProviderHandle = 0
m.HashHandle = 0
m.StrHash = SPACE(32)
m.StrHashLen = 32
=CryptAcquireContext(@m.ProviderHandle, "", "", PROV_GOST_2001_DH, 0xF0000000)
=CryptCreateHash(m.ProviderHandle, CALG_GR3411_2012_256, 0, 0, @m.HashHandle)
=CryptHashData(m.HashHandle, m.StrInput, LEN(m.StrInput), 0)
=CryptGetHashParam(m.HashHandle, dnHP_HASHVAL, @m.StrHash, @m.StrHashLen,0)
=CryptDestroyHash(m.HashHandle)
=CryptReleaseContext(m.ProviderHandle, 0)
RETURN STRCONV(m.StrHash,13)
Пробую получить хэш строки:
#5e261f52-887d-4972-bb3d-d3ea966e8a3c
Получаю
/thNMQllQu7lgJx1lVe3TOpBoUYtKCf1T9tqGOuHLsY=
Не совпадает.



Исправлено 1 раз(а). Последнее : ilya73, 14.06.17 11:32
Ratings: 0 negative/0 positive
Re: Хэш по ГОСТ Р 34.11-2012
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
С чего ты взял что в хэшируется именно строка "#5e261f52-887d-4972-bb3d-d3ea966e8a3c"? Приведенный для неё твой хэш совпадает с тем что выдаёт штатная утилита cpverify.exe для указанного алгоритма - т.е. ты сам хэш посчитал правильно, но...

Если исходить из приложенного XML-я, а это документ со структурой xmldsig, то хэшируется содержимое документа (часть начиная с узла <soap:Body wsu:Id="5e261f52-887d-4972-bb3d-d3ea966e8a3c">), а никак не строка с его id. При том перед хэшированием оно (поддерево XML-я) каноникализируется по алгоритму Exclusive XML Canonicalization Version 1.0

С чего ты взял что используется алгоритм ГОСТ Р 34.11-2012?
Его идентификатор для целей xmldsig это "urn:EAEUigest:gostr34.11-2012" тогда как имеющийся в теле документа идентификатор "http://www.w3.org/2001/04/xmldsig-more#gostr3411" соответствует (более старому) алгоритму ГОСТ Р 34.11-94

В общем в деле освоения ЭЦП в XML-ях тебе ещё очень, очень много чего нужно изучить и понять...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Хэш по ГОСТ Р 34.11-2012
ilya73

Сообщений: 40
Откуда: Вологда
Дата регистрации: 24.08.2006
Цитата:
С чего ты взял что в хэшируется именно строка "#5e261f52-887d-4972-bb3d-d3ea966e8a3c"?
Цитата:
С чего ты взял что используется алгоритм ГОСТ Р 34.11-2012?

Вы подтвердили мои подозрения. В СТП ЕГИСЗ сидят некомпетентные люди, именно они дали эту информации.
Добавил к узлу пространство имен (ручная каноникализация) и хэш совпал.
Большое спасибо.
Ratings: 0 negative/0 positive
Re: Хэш по ГОСТ Р 34.11-2012
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Да, то что в госконторах зачастую скапливаются именно те кто не смог найти себя в другом месте - это печальная традиция...

Насчёт "ручной" каноникализации - если схемы этих запросов не будут меняться, то, наверное, это решение можно оставить для продуктива (конечной версии ПО). Но для более "динамических" систем (или если нужно 100500 разных soap-методов дёргать да все со своими "тараканами") всё же лучше будет поискать какую-то готовую библиотеку реализующую этот муторный процесс. В конце концов на том же .NET нарисовать компонентик...


------------------
WBR, Igor
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 27 (Гостей: 27)

© 2000-2024 Fox Club 
Яндекс.Метрика