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

Уведомление

Icon
Error

4 Страницы<1234>
Опции
К последнему сообщению К первому непрочитанному
Offline commander  
#11 Оставлено : 18 мая 2012 г. 14:49:45(UTC)
commander

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

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

Сказал(а) «Спасибо»: 4 раз
dedov написал:
подправил свой функционал
результат:
base64:pbxUB4P0qhEAPMZFf1CFbU6ekXndIFlni0QDZhJo94g=
такой как и у вас

так что похоже хэшируемые данные разные в налоговой и у вас

Буду разбираться с каноникализацией.
Спасибо за помощь!
Offline chekanov  
#12 Оставлено : 28 мая 2012 г. 0:31:30(UTC)
chekanov

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

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

Уважаемый dedov. Подскажите, пожалуйста, что нужно поправить в функционале. у меня получается первый вариант 97xE/bRG9xfdcH5cevDU7JNBG91+zXdTqRRSaejC4AI=
Offline dedov  
#13 Оставлено : 28 мая 2012 г. 11:43:16(UTC)
dedov

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

Группы: Участники
Зарегистрирован: 03.04.2008(UTC)
Сообщений: 380
Мужчина
Откуда: Россия, г. Белгород

Сказал «Спасибо»: 11 раз
Поблагодарили: 9 раз в 9 постах
chekanov написал:
Уважаемый dedov. Подскажите, пожалуйста, что нужно поправить в функционале. у меня получается первый вариант 97xE/bRG9xfdcH5cevDU7JNBG91+zXdTqRRSaejC4AI=


чтобы не быть многословным:
было System.Text.Encoding.Default.GetBytes(хэшируемые_данные)
стало System.Text.Encoding.UTF8.GetBytes(хэшируемые_данные)
Offline Evgen  
#14 Оставлено : 14 августа 2012 г. 11:52:33(UTC)
Evgen

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

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

commander написал:

Буду разбираться с каноникализацией.


Получилось ли реализовать обмен со СМЭВ в Дельфи?
Как решили подпись SOAP запроса??
Offline i25061  
#15 Оставлено : 15 августа 2012 г. 18:58:01(UTC)
i25061

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

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

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

Буду разбираться с каноникализацией.


Получилось ли реализовать обмен со СМЭВ в Дельфи?
Как решили подпись SOAP запроса??
Очень интересно... Так чем закончилось?
Offline i25061  
#16 Оставлено : 24 августа 2012 г. 12:37:20(UTC)
i25061

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

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

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

Так чем закончилось?
Проверил подпись СМЭВ через CryptoAPI c CSP.
Берём сообщение, сгенерированное примером http://www.cryptopro.ru/...olzovaniem-kriptopro-jcp

MIME-Version: 1.0
Content-Type: application/octet-stream; name="soap_net.xml.signed.uri.xml"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="soap_net.xml.signed.uri.xml"

PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48UzpFbnZlbG9wZSB4bWxuczpT
PSJodHRwOi8vc2NoZW1hcy54bWxzb2FwLm9yZy9zb2FwL2VudmVsb3BlLyIgeG1sbnM6ZHM9Imh0
dHA6Ly93d3cudzMub3JnLzIwMDAvMDkveG1sZHNpZyMiIHhtbG5zOndzc2U9Imh0dHA6Ly9kb2Nz
Lm9hc2lzLW9wZW4ub3JnL3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3Mtd3NzZWN1cml0eS1z
ZWNleHQtMS4wLnhzZCIgeG1sbnM6d3N1PSJodHRwOi8vZG9jcy5vYXNpcy1vcGVuLm9yZy93c3Mv
MjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXdzc2VjdXJpdHktdXRpbGl0eS0xLjAueHNkIj4NCjxT
OkhlYWRlcj4NCjx3c3NlOlNlY3VyaXR5IFM6YWN0b3I9Imh0dHA6Ly9zbWV2Lmdvc3VzbHVnaS5y
dS9hY3RvcnMvc21ldiIgeG1sbnM6d3NzZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Blbi5vcmcvd3Nz
LzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy13c3NlY3VyaXR5LXNlY2V4dC0xLjAueHNkIj4NCjx3
c3NlOkJpbmFyeVNlY3VyaXR5VG9rZW4gRW5jb2RpbmdUeXBlPSJodHRwOi8vZG9jcy5vYXNpcy1v
cGVuLm9yZy93c3MvMjAwNC8wMS9vYXNpcy0yMDA0MDEtd3NzLXNvYXAtbWVzc2FnZS1zZWN1cml0
eS0xLjAjQmFzZTY0QmluYXJ5IiBWYWx1ZVR5cGU9Imh0dHA6Ly9kb2NzLm9hc2lzLW9wZW4ub3Jn
L3dzcy8yMDA0LzAxL29hc2lzLTIwMDQwMS13c3MteDUwOS10b2tlbi1wcm9maWxlLTEuMCNYNTA5
djMiIHdzdTpJZD0iU2VuZGVyQ2VydGlmaWNhdGUiPk1JSUJqekNDQVQ2Z0F3SUJBZ0lGQU51ZDA2
Z3dDQVlHS29VREFnSURNREV4Q3pBSkJnTlZCQVlUQWxKVk1SSXdFQVlEVlFRS0V3bEQNCmNubHdk
RzlRY204eERqQU1CZ05WQkFNVEJVRnNhV0Z6TUI0WERURXlNRGd4TlRFd05Ua3pNVm9YRFRFek1E
Z3hOVEV3TlRrek1Wb3cNCk1URUxNQWtHQTFVRUJoTUNVbFV4RWpBUUJnTlZCQW9UQ1VOeWVYQjBi
MUJ5YnpFT01Bd0dBMVVFQXhNRlFXeHBZWE13WXpBY0JnWXENCmhRTUNBaE13RWdZSEtvVURBZ0lr
QUFZSEtvVURBZ0llQVFOREFBUkErMGVWTnRJbnNFaDBpeXdUbTZKQ0hlUEc5dUR1ODd6RG1JZlgN
CkRWMktYUG9SMmdoMEY1b0U4MC9TNnlhRkZqeTRmM2FxK1E0dXJ3amIvUE5ldVZWZnhxTTdNRGt3
RGdZRFZSMFBBUUgvQkFRREFnUG8NCk1CTUdBMVVkSlFRTU1Bb0dDQ3NHQVFVRkJ3TUNNQklHQTFV
ZEV3RUIvd1FJTUFZQkFmOENBUVV3Q0FZR0tvVURBZ0lEQTBFQStqWGENCk04Y3F4alNFaHgxSkph
K3o5Snk1b2dDNW4yM1UxVFZ1YmRyc1YrWU91U2k4K0ZQc2FxQkc1SmVDOFdpeVc4dWsvRUtvaVJP
UXIrNVENCnNrNEVWQT09PC93c3NlOkJpbmFyeVNlY3VyaXR5VG9rZW4+DQo8U2lnbmF0dXJlIHht
bG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj48U2lnbmVkSW5mbz48Q2Fu
b25pY2FsaXphdGlvbk1ldGhvZCBBbGdvcml0aG09Imh0dHA6Ly93d3cudzMub3JnLzIwMDEvMTAv
eG1sLWV4Yy1jMTRuIyIvPjxTaWduYXR1cmVNZXRob2QgQWxnb3JpdGhtPSJodHRwOi8vd3d3Lncz
Lm9yZy8yMDAxLzA0L3htbGRzaWctbW9yZSNnb3N0cjM0MTAyMDAxLWdvc3RyMzQxMSIvPjxSZWZl
cmVuY2UgVVJJPSIjYm9keSI+PFRyYW5zZm9ybXM+PFRyYW5zZm9ybSBBbGdvcml0aG09Imh0dHA6
Ly93d3cudzMub3JnLzIwMDEvMTAveG1sLWV4Yy1jMTRuIyIvPjwvVHJhbnNmb3Jtcz48RGlnZXN0
TWV0aG9kIEFsZ29yaXRobT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS8wNC94bWxkc2lnLW1vcmUj
Z29zdHIzNDExIi8+PERpZ2VzdFZhbHVlPlQxYWtiWW5pekFqUk11dHFmb1p2M3Jhd3ZoS1A0ZkVC
TWhNK1lJWUl6OHc9PC9EaWdlc3RWYWx1ZT48L1JlZmVyZW5jZT48L1NpZ25lZEluZm8+PFNpZ25h
dHVyZVZhbHVlPmgrbWgxRTZpTUFzZGxpK0JGWFRaV082OVprWWJaQTRJV1E1U0lKSXBScTEwcVhh
ZkU1NUoxc2UzMVVINmtrS2M0N2poRGpnQlVnWEgNCmFhVUlaR09WbVE9PTwvU2lnbmF0dXJlVmFs
dWU+PEtleUluZm8+PHdzc2U6U2VjdXJpdHlUb2tlblJlZmVyZW5jZT48d3NzZTpSZWZlcmVuY2Ug
VVJJPSIjU2VuZGVyQ2VydGlmaWNhdGUiIFZhbHVlVHlwZT0iaHR0cDovL2RvY3Mub2FzaXMtb3Bl
bi5vcmcvd3NzLzIwMDQvMDEvb2FzaXMtMjAwNDAxLXdzcy14NTA5LXRva2VuLXByb2ZpbGUtMS4w
I1g1MDl2MyIvPjwvd3NzZTpTZWN1cml0eVRva2VuUmVmZXJlbmNlPjwvS2V5SW5mbz48L1NpZ25h
dHVyZT48L3dzc2U6U2VjdXJpdHk+DQo8L1M6SGVhZGVyPg0KPFM6Qm9keSB3c3U6SWQ9ImJvZHki
Pg0KPCEtLSDQl9C00LXRgdGMINC40LTRkdGCINGC0LXQu9C+INC30LDQv9GA0L7RgdCwLS0+DQo8
L1M6Qm9keT4NCjwvUzpFbnZlbG9wZT4=

Вытаскиваем оттуда 403 байта сертификата, 64 байта подписи.
Берём тег SignedInfo и строим каноническую форму. Это отдельная песня, не для этого поста. Рекомендую вставить уровень выдачи логов DEBUG для log4j в примере выше. Увидите эту форма в логах. Я оттуда взял :) В нашем случае она будет такая:

<SignedInfo xmlns="http://www.w3.org/2000/09/xmldsig#"><CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></CanonicalizationMethod><SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"></SignatureMethod><Reference URI="#body"><Transforms><Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"></Transform></Transforms><DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"></DigestMethod><DigestValue>T1akbYnizAjRMutqfoZv3rawvhKP4fEBMhM+YIYIz8w=</DigestValue></Reference></SignedInfo>

Ровно 575 байтов, ни больше и не меньше.
Для других примеров будет другая...

Пишем программу на Си.

Загружаем сертификат: CertCreateCertificateContext( X509_ASN_ENCODING | PKCS_7_ASN_ENCODING, cert, 403 )
Создаём провайдер: CryptAcquireContext(&hCryptProv,NULL,_T("Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider"),75,CRYPT_VERIFYCONTEXT)
Получем открытый ключ сертификата:
CryptImportPublicKeyInfoEx( hCryptProv, X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,&(cert->pCertInfo->SubjectPublicKeyInfo),CALG_GR3410EL,0,NULL,&publicKey )
Считаем хэш по канонической форме SignedInfo:
CryptCreateHash( hCryptProv,CALG_GR3411,0,0,&hHash)
CryptHashData( hHash, &data[0], 575, 0 )
А теперь фокус! Нужно изменить порядок байтов в подписи на противоположный. Не спрашивайте почему - не знаю. Интимная связь между CSP и JCP :)
for( int i=0; i < 64; i++ ) signature_reverse[64-i-1]=signature[i];
Ну, и, собственно, проверяем:
CryptVerifySignature( hHash, &signature_reverse[0], 64, publicKey, NULL, 0 )
О! Чудо! Возвращается true.

Расчёт и проверка хэша тега body оставляется читателю...
Надеюсь, кому-нибудь поможет.
Offline Vladimir_K  
#17 Оставлено : 29 августа 2012 г. 13:35:32(UTC)
Vladimir_K

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

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

Здравствуйте.

Столкнулся со сходной задачей. Пытаюсь рассчитать хеш для пустой строки получаю
981E5F3CA30C841487830F84FB433E13AC1101569B9C13584AC483234CD656C0
вроде верно!?


но вот при кодировке в base64 получаю
mB5fPKMMhBSHgw+E+0M+E6wRAVabnBNYSsSDI0zWVsB8bTsCfG0=
mB5fPKMMhBSHgw+E+0M+E6wRAVabnBNYSsSDI0zWVsAgbjsCIG4=

получается длиннее и последняя часть всегда разная. Подскажите ,пожалуйста, что сделать.
Offline i25061  
#18 Оставлено : 29 августа 2012 г. 14:27:16(UTC)
i25061

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

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

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

Столкнулся со сходной задачей. Пытаюсь рассчитать хеш для пустой строки получаю
981E5F3CA30C841487830F84FB433E13AC1101569B9C13584AC483234CD656C0
вроде верно!?


но вот при кодировке в base64 получаю
mB5fPKMMhBSHgw+E+0M+E6wRAVabnBNYSsSDI0zWVsB8bTsCfG0=
mB5fPKMMhBSHgw+E+0M+E6wRAVabnBNYSsSDI0zWVsAgbjsCIG4=

получается длиннее и последняя часть всегда разная. Подскажите ,пожалуйста, что сделать.
Отлаживать взаимодействие с программой кодирования Base64. ОЧЕНЬ тщательно проверить передаваемые параметры в точке вызова.
Должно всегда получаться
mB5fPKMMhBSHgw+E+0M+E6wRAVabnBNYSsSDI0zWVsA=
Offline Vladimir_K  
#19 Оставлено : 29 августа 2012 г. 14:33:59(UTC)
Vladimir_K

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

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

вот что у меня
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?
Offline Андрей Писарев  
#20 Оставлено : 29 августа 2012 г. 14:36:11(UTC)
Андрей *

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

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

Сказал «Спасибо»: 569 раз
Поблагодарили: 2288 раз в 1789 постах
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

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