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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline ZaaZ  
#1 Оставлено : 6 мая 2010 г. 16:14:08(UTC)
ZaaZ

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

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

Поблагодарили: 1 раз в 1 постах
В наличии сообщение XML содержащее:
- исходный документ;
- подпись ЭЦП (без исходного документа);
- подпись TSP.

Данные подписи созданы на другом рабочем месте с использованием сертификатов от ТрансТелеком.

На моем рабочем месте стоит корневой сертификат УЦ Транстелекома.
Делаю проверку подписи TSP с помощью tsputil -sd или через CADESCOM VerifyCades, все ОК.

Пробую проверить подпись ЭЦП через CADESCOM VerifyCades или через CAPICOM Verify указывая в Content исходный документ, получаю ошибку.
Хотя подпись ЭЦП рабочая 100%. Проблема скорее всего в самом исходном документе, потому что он передается через xml сообщение и соответственно преобразовывается под него, т.e. симовлы " заменяются & q u o t ; и т.п.

Ради интереса пробую проверить через cryptcp -verify выдает что-то типа:
Цитата:
Проверка подписи....
Автор подписи: ....Указываются данные автора подписи.....

Ошибка: Неправильная подпись.
(0x80090006)
[ErrorCode: 0x200001f9]


Вопросы:
Какой утилитой возможно проверить ЭЦП не содержащую исходного документа?
Вариант создания через cryptcp -signf и потом vsignf будет идентична созданиям ЭЦП через Cadescom.VerifyCades (Capicom.Verify) ?
Offline Татьяна  
#2 Оставлено : 6 мая 2010 г. 17:31:29(UTC)
Татьяна

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

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
Здравствуйте.
Никакой утилитой нельзя проверить ЭЦП, если исходный документ не доступен или модифицирован, для успешной проверки подписи необходимо передать утилите исходный документ(не модифицированный).
Цитата:
Вариант создания через cryptcp -signf и потом vsignf будет идентична созданиям ЭЦП через Cadescom.VerifyCades (Capicom.Verify) ?

Нет, эти процедуры не идентичны.

Для усовершенствованной подписи XML можно либо использовать XAdES(без алгоритмов ГОСТ и без наших продуктов), либо просто подписывать файлы xml как обычные файлы.
Татьяна
ООО Крипто-Про
Offline ZaaZ  
#3 Оставлено : 6 мая 2010 г. 18:40:31(UTC)
ZaaZ

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

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

Поблагодарили: 1 раз в 1 постах
Татьяна написал:
Здравствуйте.
Никакой утилитой нельзя проверить ЭЦП, если исходный документ не доступен или модифицирован, для успешной проверки подписи необходимо передать утилите исходный документ(не модифицированный).

Хорошо, а какой утилитой (crtyptcp?) и какие опции указать чтобы проверить ЭЦП, если есть и ЭЦП и исходный документ?
Offline Татьяна  
#4 Оставлено : 6 мая 2010 г. 20:17:25(UTC)
Татьяна

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

Группы: Участники
Зарегистрирован: 06.02.2008(UTC)
Сообщений: 1,491
Откуда: Крипто-Про

Поблагодарили: 40 раз в 37 постах
Зависит от того, подпись какого типа Вы собираетесь проверять. Если Вы собираетесь проверять усовершенствованную подпись (CAdES), то проверить подпись можно например при помощи CADESCOM, так как готовой утилиты для проверки усовершенствованной подписи в настоящий момент нет.

Если Вы собираетесь проверять обычную подпись, то Вы можете использовать утилиту cryptcp:

Чтобы проверить утилитой cryptcp открепленную подпись необходимо запустить её с опцией -vsignf -- посмотрите страницу 6 руководства по cryptcp: http://www.cryptopro.ru/...cryptcp/3-33/CryptCP.pdf . Работа с открепленной подписью поддерживается только в режиме работы с пакетами файлов. То есть, необходимо будет указать папку, содержащую подписи, папку содержащую файлы и шаблон для поиска файлов(если в папке больше ничего нет -- можно *). Имя подписи должно быть "имя_исходного_файла.sgn".
В документации есть пример того, как нужно указывать пути к папкам с файлами и подписями и маску и его расшифровка.


Усовершенствованная подпись также может быть проверена как обычная, но при этом вложенные в подпись доказательства будут проигнорированы.
Татьяна
ООО Крипто-Про
Offline ZaaZ  
#5 Оставлено : 6 мая 2010 г. 21:11:16(UTC)
ZaaZ

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

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

Поблагодарили: 1 раз в 1 постах
Да, спасибо, проверить через утилиту cryptcp получилось.
Для подписания используется обычная подпись.

A вот с Cadescom или Capicom интересная ситуация. Использую Borland C++ Builder 6.0.

Для проверки использую такой код Capicom:
Цитата:

Variant oSignedData;
oSignedData = Variant::CreateObject("CAPICOM.SignedData");
//подпись ЭЦП в Мемо2
AnsiString Message = Memo2->Lines->Text;
// Исходный документ в Мемо3
oSignedData.OlePropertySet("Content",Memo3->Lines->Text.c_str());
oSignedData.OleFunction("Verify",Message.c_str(),True,CAPICOM_VERIFY_SIGNATURE_ONLY);

или как вариант через Cadescom:
Цитата:

Variant oSignedData;
oSignedData = Variant::CreateObject("CAdESCOM.CadesSignedData");
//подпись ЭЦП в Мемо2
AnsiString Message = Memo2->Lines->Text;
// Исходный документ в Мемо3
oSignedData.OlePropertySet("Content",Memo3->Lines->Text.c_str());
oSignedData.OleFunction("VerifyCades",Message.c_str(),CADESCOM_CADES_BES,True);
oSignedData.OleFunction("Display");


Проверка не проходит.
Как заметил если подписывать документ через cryptcp -sign , то потом проверив его через cryptcp -verify получаем исходный документ в выходном файле.
Если подписывать через Capicom или Cadescom , а потом делать проверку через cryptcp -verify , то в выходном файле получаю Юникод документ.
Получается что в момент создания подписи документ уже преобразован в Юникод, отсюда и не проходит проверка через COM объекты, так как подпись ЭЦП создавалась для документа в нормальном виде вин-1251, a не в Юникоде.
Цитата:

oSignedData = Variant::CreateObject("CAPICOM.SignedData");
oSignedData.OlePropertySet("Content",Memo3->Lines->Text.c_str());
Variant sSignedData;
sSignedData = oSignedData.OleFunction("Sign",oSigner, True);
Memo2->Lines->Text=VarToStr(sSignedData);


Или Мемо3->Lines->Text.c_str() выдает уже юникод, хотя навряд ли,
либо процедура OlePropertySet("Content",Memo3->Lines->Text.c_str()) это делает.
Буду копать дальше.
Offline Павел Смирнов  
#6 Оставлено : 7 мая 2010 г. 11:04:46(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Про подись через CAPICOM и кодировку исходного сообщения см. http://www.cryptopro.ru/cryptopro/products/csp/faq.htm#11.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline ZaaZ  
#7 Оставлено : 7 мая 2010 г. 13:28:03(UTC)
ZaaZ

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

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

Поблагодарили: 1 раз в 1 постах
В общем понятно, как ни крути, на выходе все равно получишь юникод при использовании CОМ объектов.
И соответственно если другая сторона подписывает ЭЦП в нормальном виде через CryptoApi, то проверить подпись через COM объекты не удастся. Соответственно и наоборот если создать ЭЦП с помощью COM объекта, то другая сторона его посчитает неверной.
Offline Павел Смирнов  
#8 Оставлено : 7 мая 2010 г. 13:31:40(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Вовсе не так всё плохо. Если используемая платформа для разработки позволяет перекодировать строки, то можно обеспечить совместимость подписей. Нам это удавалось для .NET, VB6 и VBScript.
Техническую поддержку оказываем тут.
Наша база знаний.
Offline ZaaZ  
#9 Оставлено : 7 мая 2010 г. 14:36:09(UTC)
ZaaZ

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

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

Поблагодарили: 1 раз в 1 постах
T.e. сперва документ надо преобразовать с помощью метода ByteArrayToBinaryString класса Utilities библиотеки CAPICOM, а затем его подписывать?
Offline Павел Смирнов  
#10 Оставлено : 7 мая 2010 г. 15:31:58(UTC)
Павел Смирнов

Статус: Вам и не снилось

Группы: Администраторы
Зарегистрирован: 24.12.2007(UTC)
Сообщений: 831
Откуда: Крипто-Про

Сказал(а) «Спасибо»: 1 раз
Поблагодарили: 48 раз в 44 постах
Например так. Не присваивайте результат вызова ByteArrayToBinaryString строковой переменной - пусть останется Variant, и тогда есть шанс, что она без изменений попадёт в CAPICOM.
Техническую поддержку оказываем тут.
Наша база знаний.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.