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

Уведомление

Icon
Error

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

Статус: Активный участник

Группы: Участники
Зарегистрирован: 20.06.2012(UTC)
Сообщений: 30
Мужчина
Чехия
Откуда: Москва

Сказал «Спасибо»: 4 раз
Поблагодарили: 4 раз в 2 постах
Андрей * написал:
Zester написал:


Большое спасибо за помощь! Часто работа с криптографией похожа на игру в черный ящикBrick wall


Anxious
Capicom лишь вершина айсберга...

всего-то с десяток "строк кода" ...

Насчёт айсберга очень точно подмечено. Это такая тема, которую можно копать всю жизнь...
Offline henkb  
#22 Оставлено : 28 сентября 2012 г. 20:25:38(UTC)
henkb

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

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

Господа, подскажите, а как (и возможно ли), все же с помощью CAPICOM для Delphi реализовать полный алгоритм подписи в соответсвии с требованиями СМЭВ?? В соответствии с требованиями СМЭВ п.5.5. ПОРЯДОК ФОРМИРОВАНИЯ ЭЛЕКТРОННОЙ ПОДПИСИ ИНФОРМАЦИОННОЙ СИСТЕМЫ

Вот их пример.
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ds="http://www.w3.org/2000/09/xmldsig#" xmlns:smev="http://smev.gosuslugi.ru/ rev120315" 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">

<soapenv:Header><wsse:Security soapenv:actor="http://smev.gosuslugi.ru/actors/smev" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"><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-1E42AC2E0B920AAF70131180067340425" 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">MIIDjjCCAz2gAwIBAgIKEUWKtwAAAAAB8DAIBgYqhQMCAgMweTEXMBUGCSqGSIb3DQEJARYIY2FAcnQucnUxCzAJBgNVBAYTAlJVMRUwEw
YDVQQHDAzQnNC+0YHQutCy0LAxJDAiBgNVBAoMG9Ce0JDQniDQoNC+0YHRgtC10LvQtdC60L7QvDEUMBIGA1UEAxMLUlRLIFRlc3QgQ0EwHhcNMTEw
=.....
</wsse:BinarySecurityToken><ds:Signature Id="Signature-10" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
<ds:SignatureMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411"/>
<ds:Reference URI="#sampleRequest">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmldsig-more#gostr3411"/>
<ds:DigestValue>5gIY+iLbtYhCJWjSo6QIMWhSR+zKFse3H98dyaWWUEo=</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
aTUt+Ok2vt9qjMlVQt+wK4nxRXP9W2MRY1ZQGZpBb1fKeAyr8BtA2LJzPQZdwp4H0SIQ3GHsqrDp
7wIwtGOlWg==
</ds:SignatureValue>
<ds:KeyInfo Id="KeyId-1E42AC2E0B920AAF70131180067340426">
<wsse:SecurityTokenReference wsu:Id="STRId-1E42AC2E0B920AAF70131180067340427" 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"><wsse:Reference URI="#CertId-1E42AC2E0B920AAF70131180067340425" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509v3" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"/></wsse:SecurityTokenReference>
</ds:KeyInfo>
</ds:Signature></wsse:Security>
</soapenv:Header>

<soapenv:Body wsu:Id="sampleRequest">
<smevSampleMsg:sampleRequest xmlns:smevSampleMsg="http://smev.gosuslugi.ru/SampleMessage">

<smev:Message>
<smev:Sender/>
<smev:Recipient/>
<smev:Originator/>
<smev:TypeCode/>
<smev:Status/>
<smev:Date/>
<smev:ServiceCode/>
<smev:CaseNumber/>
<smev:ExchangeType/>
<smev:RequestIdRef/>
<smev:OriginRequestIdRef/>
. . . . .
</smev:Message>
<smev:MessageData>
<smev:AppData/>

<smev:AppDocument/>
</smev:MessageData>
</smevSampleMsg:sampleRequest>
</soapenv:Body>
</soapenv:Envelope>

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

Offline henkb  
#23 Оставлено : 28 сентября 2012 г. 20:27:18(UTC)
henkb

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

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

Используя предложенный выше алгоритм
...
oSignedData.Sign(oSigner, TRUE, CAPICOM_ENCODE_BASE64);
....
я получаю только лишь некий зашифрованный файл
MIIDjjCCAz2gAwIBAgIKEUWKtwAAAAAB8DAIBgYqhQMCAgMweTEXMBUGCSqGSIb3DQEJARYIY2FAcnQucnUxCzAJBgNVBAYTAlJVMRUwEw
YDVQQHDAzQnNC+0YHQutCy0LAxJDAiBgNVBAoMG9Ce0JDQniDQoNC+0YHRgtC10LvQtdC60L7QvDEUMBIGA1UEAxMLUlRLIFRlc3QgQ0EwHhcNMTEw
=.....

Что с ним делать далее??? Как это разложить по тэгам?

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

Offline Андрей Писарев  
#24 Оставлено : 28 сентября 2012 г. 20:30:18(UTC)
Андрей *

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

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

Сказал «Спасибо»: 574 раз
Поблагодарили: 2304 раз в 1805 постах
henkb написал:
Используя предложенный выше алгоритм
...
oSignedData.Sign(oSigner, TRUE, CAPICOM_ENCODE_BASE64);
....
я получаю только лишь некий зашифрованный файл. Что с ним делать далее???


Не увидел шифрования, может стоит почитать прежде теорию и описания методов CAPICOM?

Цитата:

Sign(oSigner, TRUE, CAPICOM_ENCODE_BASE64);

Это создание подписи и кодирование результата в Base64


Цитата:

Что с ним делать далее??? Как это разложить по тэгам?

Т.е. и с формированием XML есть сложности, так?



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

Техническую поддержку оказываем тут
Наша база знаний
Offline henkb  
#25 Оставлено : 28 сентября 2012 г. 20:38:56(UTC)
henkb

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

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

Ок, просто не стал загромождать раздел.. Тогда подробнее. Нужно вязять XML-ик, и подписать его по правилам СМЭВ. В приведенном на предыдущих страницах примере получался зашифрованный отдельный файл. Собственно, взял Ваши научные труды за основу (опускаю все объявления переменных). На вход подписания подпихивается эксемельник в виде переменной inXML. Может быть в этом и ошибка, нужно обязательно файл подписывать?

try
oStore := CoStore.Create;
oSignedData := CoSignedData.Create;
oSigner := CreateComObject(CLASS_Signer) as CAPICOM_TLB.ISigner2;

// Обратиться к контейнеру
oStore.Open(CAPICOM_CURRENT_USER_STORE,'My', CAPICOM_STORE_OPEN_READ_ONLY);

// Нужно поставить галку "Включить время создания подписи"
oAttribute := CoAttribute.Create;
oAttribute.Name := CAPICOM_AUTHENTICATED_ATTRIBUTE_SIGNING_TIME;
oAttribute.Value := now; // в UTC нужно...
oSigner.AuthenticatedAttributes.Add(oAttribute);
except
on oErr: Exception do
begin
ShowMessage('Для подписи запроса электронно-цифровой подписью необходимо наличие установленного компонента Microsoft CAPICOM на вашей рабочей станции.'+chr(13)+
'Пожалуйста, обратитесь к системному администратору.'+Chr(13)+
Trim(oErr.Message));
exit;
end;
end;

// Содержимое
oSignedData.Content := inXML;
// Выбрать сертификат
try
oCertificates := oStore.Certificates;
//oCertificates := ICertificates2(IDisPatch(oStore.Certificates));
oCer1 := oCertificates.Select('Выбор сертификата', 'Пожалуйста, выберите сертификат для подписи.', FALSE);
oSigner.Certificate := CAPICOM_TLB.ICertificate2(IDisPatch(oCer1.Item[1]));
except
on oErr: Exception do
begin
if Pos('cancelled by the user', oErr.Message)<=0 then // отмену пользователя не показываем
ShowMessage('Сертификат не найден. Пожалуйста, обратитесь к системному администратору!'
+ #13#10 + Trim(oErr.Message));
Exit;
end;
end;
// Создание ЭЦП
try
Result := oSignedData.Sign(oSigner, TRUE, CAPICOM_ENCODE_BASE64{CAPICOM_ENCODE_BINARY});
except
on oErr: Exception do
if Pos('отменено пользователем', oErr.Message)<=0 then // отмену пользователя не показываем
ShowMessage('Ошибка при подписания документа. Проверьте корректность ЭЦП!'
+ #13#10 + Trim(oErr.Message));
end;
Offline henkb  
#26 Оставлено : 28 сентября 2012 г. 20:43:12(UTC)
henkb

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

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

Собственно, по ссылка http://www.cryptopro.ru/...olzovaniem-kriptopro-jcp лежит джавовский пример.. Его бы и хотелось бы привести к Delphi... Там же есть еще реализация на .net, а для дельфей, к сожалению - нет..
Offline Zester  
#27 Оставлено : 28 сентября 2012 г. 22:08:56(UTC)
Zester

Статус: Активный участник

Группы: Участники
Зарегистрирован: 20.06.2012(UTC)
Сообщений: 30
Мужчина
Чехия
Откуда: Москва

Сказал «Спасибо»: 4 раз
Поблагодарили: 4 раз в 2 постах
Да, помимо 2 подписей (подпись в теле см.zip приложение в soapenv:Body -> smev:AppDocument и подпись в заголовке см.soapenv:Header -> wsse:BinarySecurityToken) тут нужно решить еще кучу задач (в крупную клетку): работа с XML(поиск и исправление), каноникализация, хеширование
Всё это можно увидеть вооружённым взглядом в приведённом выше SOAP-конверте
Offline henkb  
#28 Оставлено : 1 октября 2012 г. 12:12:44(UTC)
henkb

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

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

Вот в том-то и вопрос - все видно, не понятно как это решать с помощью библиотеки CAPICOM. Описание на msdn - крайне "лаконичное". Собственно, не ясный вопрос с получением параметров тэгов
wsu:Id="CertId-01cd0369c82612000000000900520a4a">
Reference URI="#bodyId-4H2Z76M0-AHPQ-2WJL-RKJG-VIOZQ6WPMZ5L">
ds:DigestValue>E/56ZUzL6UPMyk/bQyyggM9lns+7TaOCnXfkPJyvvCI=</ds:DigestValue>
ds:SignatureValue>EoVoaUbL52X0L9pfe+YzlmK6Y+t+Pd7Nlgk1s36ABWi+5dkbW/+PGxC4VyWZGn+zOnTLsjQM44UPwtSLOSkwSg==
wsse:Reference URI="#CertId-01cd0369c82612000000000900520a4a"

вопрос с ручной "рулежкой" xml-ка не так сложен...
Offline henkb  
#29 Оставлено : 3 октября 2012 г. 14:56:22(UTC)
henkb

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

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

Все же хотелось бы услышать авторитетное мнение от авторов Крипто ПРО - где-то можно найти примеры реализации функционала подписи СМЭВ на дельфи? В конце-концов, не переписывать же продукты на дотнет или джаву...
Offline Андрей Писарев  
#30 Оставлено : 3 октября 2012 г. 15:03:48(UTC)
Андрей *

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

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

Сказал «Спасибо»: 574 раз
Поблагодарили: 2304 раз в 1805 постах
Причем здесь среда разработки?

Кроме CAPICOM есть MS CryptoAPI
Там и SignatureValue и DigestValue и другие бонусы ...

Отредактировано пользователем 3 октября 2012 г. 15:07:01(UTC)  | Причина: Не указана

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