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

Уведомление

Icon
Error

4 Страницы<1234>
Опции
К последнему сообщению К первому непрочитанному
Offline Vladimir_K  
#21 Оставлено : 29 августа 2012 г. 15:07:36(UTC)
Vladimir_K

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

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

Андрей * написал:
Vladimir_K написал:
вот что у меня
CryptHashData(hash, PByte(memo1.Lines.Text), Length(memo1.Lines.Text), 0)
CryptGetHashParam(hash, HP_HASHVAL, nil, dwHashLen,0);
GetMem(pbHash, dwHashLen);
CryptGetHashParam(Hash,HP_HASHVAL,pbHash, dwHashLen,0)
memo2.Lines.add('Hash GOST BASE64 - ' + tobase64(AnsiString(pbHash)));

хм. Может дело в AnsiString?


(AnsiString(pbHash) - зачем?
полученный хеш -нужно преобразовать побайтно в base64



Прошу прощения, но очень плохо когда не знаешь а еще и забыл.

Подскажите пожалуйста как это можно сделать?
Offline Sergey_M  
#22 Оставлено : 29 августа 2012 г. 16:04:38(UTC)
Sergey_M

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

Группы: Участники
Зарегистрирован: 29.08.2012(UTC)
Сообщений: 2
Откуда: Москва

День добрый!
Подскажите пжл. корректный хэш по ГОСТ Р 34.11-94 в hex и base64 на строку (без кавычек): "Here is some data to sign."

У меня получается в base64: hYXqxZOgcvvn1uLTJScHcIMJiwUZA39xPp1LaRB6kSw=
Offline Андрей Писарев  
#23 Оставлено : 29 августа 2012 г. 16:19:34(UTC)
Андрей *

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

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

Сказал «Спасибо»: 570 раз
Поблагодарили: 2293 раз в 1794 постах
Sergey_M написал:
День добрый!
Подскажите пжл. корректный хэш по ГОСТ Р 34.11-94 в hex и base64 на строку (без кавычек): "Here is some data to sign."

У меня получается в base64: hYXqxZOgcvvn1uLTJScHcIMJiwUZA39xPp1LaRB6kSw=



по ГОСТ Р 34.11-94
Цитата:
Here is some data to sign.
, в hex
D5CF46C81344F02F58A1B99B1BAEC349F2D5A7AAFA681C99C7B1CE052B055015


Другие примеры в разделе "Набор параметров CryptoPro"

Техническую поддержку оказываем тут
Наша база знаний
Offline Vladimir_K  
#24 Оставлено : 29 августа 2012 г. 16:54:20(UTC)
Vladimir_K

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

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

Андрей * написал:


(AnsiString(pbHash) - зачем?
полученный хеш -нужно преобразовать побайтно в base64


По-моему какой-то шайтан случился но я получил в base64 то, что у вас от ""
было так
Цитата:

strhash := '';
if CryptGetHashParam(Hash,HP_HASHVAL,pbHash, dwHashLen,0) then begin
memo2.Lines.add('Hash GOST - ');
for I := 0 to dwHashLen - 1 do
begin
strhash := strhash + (Format('%2.2x', [Ord(Pansichar(AnsiString(pbHash))[I])]));
end;
memo2.Lines.add(strhash);
memo2.Lines.add('Hash GOST BASE64 - ' + (PAnsiChar(AnsiString(pbHash))));
end;



и получалась всегда разная концовка, да и к тому же длиннее.


Сделал так
Цитата:

strhash := '';
if CryptGetHashParam(Hash,HP_HASHVAL,pbHash, dwHashLen,0) then begin
memo2.Lines.add('Hash GOST - ');
for I := 0 to dwHashLen - 1 do
begin
strhash := strhash + (Format('%2.2x', [Ord(Pansichar(AnsiString(pbHash))[I])]));
data := data + ansistring(pbhash)[i+1];
end;
memo2.Lines.add(strhash);
memo2.Lines.add('Hash GOST BASE64 - ' + tobase64(data));
end;




Кто-нибудь пояснит почему i+1 - нумерация с 0 же!?!?!?!?

Отредактировано пользователем 29 августа 2012 г. 16:56:51(UTC)  | Причина: Не указана

Offline Андрей Писарев  
#25 Оставлено : 29 августа 2012 г. 17:05:53(UTC)
Андрей *

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

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

Сказал «Спасибо»: 570 раз
Поблагодарили: 2293 раз в 1794 постах
BinToHex из Classes Anxious


типа так:
Код:

function Get_BinToHex( s:AnsiString ) : AnsiString;
begin
  setlength(Result,length(s)*2);
  BinToHex( PAnsiChar(s), PAnsiChar(Result), length(s) );
end;

Отредактировано пользователем 29 августа 2012 г. 17:06:40(UTC)  | Причина: Не указана

Техническую поддержку оказываем тут
Наша база знаний
Offline Sergey_M  
#26 Оставлено : 29 августа 2012 г. 17:46:42(UTC)
Sergey_M

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

Группы: Участники
Зарегистрирован: 29.08.2012(UTC)
Сообщений: 2
Откуда: Москва

Андрей * написал:

по ГОСТ Р 34.11-94
Цитата:
Here is some data to sign.
, в hex
D5CF46C81344F02F58A1B99B1BAEC349F2D5A7AAFA681C99C7B1CE052B055015


Спасибо. Удалось воспроизвести такойже хэш. В base64 он: 1c9GyBNE8C9YobmbG67DSfLVp6r6aByZx7HOBSsFUBU=

PS Юмор в том, что это вроде бы верное значение хэш не совпадает с контрольным примером DigestValue сервиса в СМЭВ (SID0003318, метод VerifyXmlSignature «Проверка подписи в формате XMLDSIG»)
Кусок контрольного примера:
<?xml version="1.0" encoding="utf-8"?>
<MyXML Signed="true">
<ElementToSign Signed="true">
Here is some data to sign.
</ElementToSign>
<Signature xmlns="http://www.w3.org/2000/09/xmldsig#"><SignedInfo><CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411" /><Reference URI=""><Transforms><Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature" /><Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315" /></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411" /><DigestValue>laGWSZGexy5krjPI2GvqUZzzhZtsO2oaQC5fWEgyI00=</DigestValue>

В hex указанный DigestValue: 95A19649919EC72E64AE33C8D86BEA519CF3859B6C3B6A1A402E5F584832234D
Воспользовался онлайн сервисом перевода из base64 в hex: http://tomeko.net/online_tools/base64.php?lang=en

Какой для СМЭВ идентификатор параметров хэш: "1.2.643.2.2. 9!1" или "1.2.643.2.2. 301" ?

Отредактировано пользователем 29 августа 2012 г. 23:11:50(UTC)  | Причина: Не указана

Offline bash81  
#27 Оставлено : 3 сентября 2012 г. 13:16:33(UTC)
bash81

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

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

commander написал:
Программа-клиент на Delphi должна отправлять подписанные SOAP запросы к веб-сервисам СМЭВ.
Требования к подписи:
[Каноникализацию я делаю на основе процедуры из Clever Internet Suite (TclXmlCanonicalizer), а процедура расчета хэша написал такую:
Если надо, могу показать функцию каноникализации.
Спасибо.


Уважаемый коммандер, не подскажите как у Вас успехи с канонкализацией? В данный момент решаю схожую Вашей задачу, уперся в подготовку XML для хеширования.
Offline Vladimir_K  
#28 Оставлено : 3 сентября 2012 г. 20:16:01(UTC)
Vladimir_K

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

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

Продолжаем работать над этим вопросом.


Имею вот такую XML ку.

Код:
<SOAP-ENV:Envelope xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:m0="http://smev.gosuslugi.ru/rev111111" xmlns:m1="http://roszdravnadzor.ru/soap/ServiceLicences" xmlns:m2="http://www.w3.org/2004/08/xop/include" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Header xmlns:ds="http://www.w3.org/2000/09/xmldsig#"><wsse:Security SOAP-ENV:actor="http://smev.gosuslugi.ru/actors/smev"><wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" wsu:Id="CertId">MIIG............zODM</wsse:BinarySecurityToken><ds:Signature><ds:SignedInfo><ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:CanonicalizationMethod><ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"></ds:SignatureMethod><ds:Reference URI="#body"><ds:Transforms><ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></ds:Transform></ds:Transforms><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"></ds:DigestMethod><ds:DigestValue>vCgDSHq3hcB9bKxsqDxWYCTCSfdqk7CVXPzJ+nkMXTU=</ds:DigestValue></ds:Reference></ds:SignedInfo><ds:SignatureValue>Lalo6D7sFqxpcoEe8xXHLz+aP+Vms6TCuIFJQe/emrbjk7egdHWLBVZHHpPcn5P6FhPCyvzdz86xiF21GFZN2g==</ds:SignatureValue><ds:KeyInfo><wsse:SecurityTokenReference><wsse:Reference URI="#CertId" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3"></wsse:Reference></wsse:SecurityTokenReference></ds:KeyInfo></ds:Signature></wsse:Security></SOAP-ENV:Header><SOAP-ENV:Body wsu:Id="body"><m:LicencesRequest_2 xmlns:m="http://roszdravnadzor.ru/soap/ServiceLicences"><m0:Message><m0:Sender><m0:Code>SenderCode</m0:Code><m0:Name>SenderName</m0:Name></m0:Sender><m0:Recipient><m0:Code>ROSZDRAVNADZOR_SYS_1</m0:Code><m0:Name>ROSZDRAVNADZOR_SYS_1</m0:Name></m0:Recipient><m0:TypeCode>GSRV</m0:TypeCode><m0:Status>REQUEST</m0:Status><m0:Date>2001-12-17T09:30:47Z</m0:Date><m0:ExchangeType>2</m0:ExchangeType></m0:Message><m0:MessageData><m0:AppData><m1:Request><m1:INN>5024118963</m1:INN><m1:OGRN>1115024001290</m1:OGRN></m1:Request></m0:AppData></m0:MessageData></m:LicencesRequest_2></SOAP-ENV:Body></SOAP-ENV:Envelope>


Канонизированная и подписанная нашим криптосервером. Пытаюсь получить Хеш по госту от канонизированных данных.Копирую прямо отсюда с ..по..

Код:

<SOAP-ENV:Body wsu:Id="body"><m:LicencesRequest_2 xmlns:m="http://roszdravnadzor.ru/soap/ServiceLicences"><m0:Message><m0:Sender><m0:Code>SenderCode</m0:Code><m0:Name>SenderName</m0:Name></m0:Sender><m0:Recipient><m0:Code>ROSZDRAVNADZOR_SYS_1</m0:Code><m0:Name>ROSZDRAVNADZOR_SYS_1</m0:Name></m0:Recipient><m0:TypeCode>GSRV</m0:TypeCode><m0:Status>REQUEST</m0:Status><m0:Date>2001-12-17T09:30:47Z</m0:Date><m0:ExchangeType>2</m0:ExchangeType></m0:Message><m0:MessageData><m0:AppData><m1:Request><m1:INN>5024118963</m1:INN><m1:OGRN>1115024001290</m1:OGRN></m1:Request></m0:AppData></m0:MessageData></m:LicencesRequest_2></SOAP-ENV:Body>



Получаю Хеши
Код:

367A2949776924035919531E04294EF7641AAC3040A5477F95850628F10DB2E3

Hash GOST BASE64  - NnopSXdpJANZGVMeBClO92QarDBApUd/lYUGKPENsuM=


Убираю
Код:
<SOAP-ENV:Body wsu:Id="body"></SOAP-ENV:Body wsu:Id="body">



Код:
<m:LicencesRequest_2 xmlns:m="http://roszdravnadzor.ru/soap/ServiceLicences"><m0:Message><m0:Sender><m0:Code>SenderCode</m0:Code><m0:Name>SenderName</m0:Name></m0:Sender><m0:Recipient><m0:Code>ROSZDRAVNADZOR_SYS_1</m0:Code><m0:Name>ROSZDRAVNADZOR_SYS_1</m0:Name></m0:Recipient><m0:TypeCode>GSRV</m0:TypeCode><m0:Status>REQUEST</m0:Status><m0:Date>2001-12-17T09:30:47Z</m0:Date><m0:ExchangeType>2</m0:ExchangeType></m0:Message><m0:MessageData><m0:AppData><m1:Request><m1:INN>5024118963</m1:INN><m1:OGRN>1115024001290</m1:OGRN></m1:Request></m0:AppData></m0:MessageData></m:LicencesRequest_2>


Получаю


Код:

C46C5AE6F509249D40E784E6A3646109BDFE48F815F24901CB18109CA9ED0EFD

Hash GOST BASE64  - xGxa5vUJJJ1A54Tmo2RhCb3+SPgV8kkByxgQnKntDv0=



А надо получить как я понимаю vCgDSHq3hcB9bKxsqDxWYCTCSfdqk7CVXPzJ+nkMXTU=

И в Hex он будет видимо такой

BC2803487AB785C07D6CAC6CA83C566024C249F76A93B0955CFCC9FA790C5D35

Перепробовал, как мне кажется, все варианты Brick wall

Подскажите пожалуйста от чего надо считать хеш.

Файл в кодировке UTF-8.
Offline i25061  
#29 Оставлено : 4 сентября 2012 г. 12:13:14(UTC)
i25061

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

Группы: Участники
Зарегистрирован: 09.03.2011(UTC)
Сообщений: 28
Мужчина
Откуда: Екатеринбург

Сказал «Спасибо»: 2 раз
Поблагодарили: 1 раз в 1 постах
Vladimir_K написал:

Подскажите пожалуйста от чего надо считать хеш.
От канонической формы SignedInfo для проверки подписи, и от канонической формы тега, на которые есть References в SignedInfo.
В Вашем случае от тега SOAP-ENV:Body. Каноникализация должна производиться алгоритмом http://www.w3.org/2001/10/xml-exc-c14n#.
Переводы строк, пробелы, табуляции... имеют значение, вы должны их сохранить как они имели место быть в момент подписания. Обратите внимание на символы концов строк. Алгоритм http://www.w3.org/2001/10/xml-exc-c14n# завершает строки символом 0x0A. В Windows конец строки это пара символов 0x0D, 0x0A. Ваша каноническая форма должна совпадать с канонической формой СМЭВа с точностью до байта, иначе хеши не сойдутся.
Каноническая форма у Вас кривая. Что такое префиксы m0, m1, wsu? Почему их нет в атрибутах SOAP-ENV:Body?

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

Offline bash81  
#30 Оставлено : 4 сентября 2012 г. 12:32:55(UTC)
bash81

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

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

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