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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline EgorovAlexandr  
#1 Оставлено : 28 августа 2009 г. 18:13:36(UTC)
EgorovAlexandr

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

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

Добрый день! Есть задача поместить ЭЦП хэша некоторых данных и сертификат, ключом которого подписан этот хэш в сообщение формата PKCS#7 (например, *.p7b). Этап формирования и подписания хэша прошел на ура, но на моменте сборки итогового файла у меня произошел затык. Если сохранять только один сертификат, то проблем нет никаких, но как к нему присоединить еще и ЭЦП -- не понимаю...

Буду очень признателен, если у кого-нибудь найдутся мысли и идеи по этому поводу.
Заранее спасибо!
Offline EgorovAlexandr  
#2 Оставлено : 28 августа 2009 г. 19:13:14(UTC)
EgorovAlexandr

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

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

Нашел похожую тему http://www.cryptopro.ru/....aspx?g=posts&m=7887 Сейчас активно курю мануалы MSDN в эту сторону... По результатам отпишусь, но по прежнему принимаю идеи и предложения =)

Отредактировано пользователем 28 августа 2009 г. 19:15:04(UTC)  | Причина: Не указана

Offline Kirill Sobolev  
#3 Оставлено : 28 августа 2009 г. 19:17:01(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
http://www.cryptopro.ru/...p;f=9&q=7803&p=2
там на середине страницы есть идея как это сделать
Техническую поддержку оказываем тут
Наша база знаний
Offline EgorovAlexandr  
#4 Оставлено : 31 августа 2009 г. 21:36:46(UTC)
EgorovAlexandr

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

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

Внимательно изучил указанную тему, но понял, что у меня более тривиальная задача: у меня есть исходное сообщение в текстовом виде и сертификат подписанта. Следующий код создает открепленную подпись (за основу взял пример из MSDN http://msdn.microsoft.com/en-us/library/aa382372(VS.85).aspx) :
Код:
CRYPT_SIGN_MESSAGE_PARA SignPara;
const BYTE * rgpbToBeSigned[] = {pbContent}; //pbContent -- собственно сообщение
DWORD rgcbToBeSigned[] = {cbContent}; //cbContent -- размер сообщения
DWORD cbSignedBlob;
BYTE * pbSignedBlob;

memset(&SignPara,0,sizeof(CRYPT_SIGN_MESSAGE_PARA));
SignPara.cbSize = sizeof(CRYPT_SIGN_MESSAGE_PARA);
SignPara.dwMsgEncodingType = X509_ASN_ENCODING | PKCS_7_ASN_ENCODING;
SignPara.pSigningCert = pUserCert; //указатель на CERT_CONTEXT с сертификатом подписанта
SignPara.HashAlgorithm.pszObjId = szOID_RSA_SHA1RSA;  //я не уверен, что здесь именно такой алгоритм надо использовать
SignPara.HashAlgorithm.Parameters.cbData = 0;
SignPara.pvHashAuxInfo = 0;
SignPara.cMsgCert = 1;
SignPara.rgpMsgCert = &pUserCert; 
SignPara.cMsgCrl = 0;
SignPara.rgpMsgCrl = 0;
SignPara.cAuthAttr = 0;
SignPara.rgAuthAttr = 0;
SignPara.cUnauthAttr = 0;
SignPara.rgUnauthAttr = 0;
SignPara.dwFlags = NULL;
SignPara.dwInnerContentType = NULL;

if( !CryptSignMessage(&SignPara,TRUE,1,rgpbToBeSigned,rgcbToBeSigned,NULL,&cbSignedBlob) )
{
	puts("Error in CryptSignMessage 1");
	printf("%X\n",GetLastError());
	return -100;
}

pbSignedBlob = (BYTE *)malloc(sizeof(BYTE));

if( !CryptSignMessage(&SignPara,TRUE,1,rgpbToBeSigned,rgcbToBeSigned,pbSignedBlob,&cbSignedBlob) )
{
	puts("Error in CryptSignMessage 2");
	printf("%X\n",GetLastError());
	return -100;
}

FILE * tmp = fopen("out.p7b","wb");
fwrite(pbSignedBlob,cbSignedBlob,sizeof(BYTE),tmp);
fclose(tmp);


Проблема в том, что при проверке программой csptest я получаю следующую ошибку:
Цитата:
C:\Program Files\Crypto Pro\CSP>csptest -sfsign -verify -detached -in signed-data.txt -signature CMS.p7b
CSP (Type:75) v3.6.5355 KC1 Release Ver:3.6.5371 OS:Windows CPU:IA32 FastCode:READY,ENABLED.
An error occurred in running the program.
.\signtsf.c:554:No user cert specified. Cryptocontext will be opened automaticaly.
Error number 0x0 (0).
Операция успешно завершена.

An error occurred in running the program.
.\signtsf.c:681:Detached Signature was NOT verified

Error number 0x80091007 (2148077575).
Неправильное значение хеша.

Total: SYS: 0.000 sec USR: 0.000 sec UTC: 0.031 sec
[ErrorCode: 0x80091007]


Что я в данной ситуации делаю неправильно?

Отредактировано пользователем 31 августа 2009 г. 21:38:45(UTC)  | Причина: Не указана

Offline Kirill Sobolev  
#5 Оставлено : 31 августа 2009 г. 21:50:56(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
Цитата:
SignPara.HashAlgorithm.pszObjId = szOID_RSA_SHA1RSA; //я не уверен, что здесь именно такой алгоритм надо использовать

Если подпись по ГОСТ, то и хэширование тоже должно быть по ГОСТ.
Техническую поддержку оказываем тут
Наша база знаний
Offline EgorovAlexandr  
#6 Оставлено : 1 сентября 2009 г. 14:36:57(UTC)
EgorovAlexandr

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

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

В качестве алгоритма хеширования пробовал указывать алгоритмы:

szOID_CP_GOST_R3411 "1.2.643.2.2.9"
szOID_GostR3411_94_CryptoProParamSet "1.2.643.2.2.30.1"

Эффекта не дало, ошибка по-прежнему остается.
Offline Kirill Sobolev  
#7 Оставлено : 1 сентября 2009 г. 16:02:03(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
А присоединенная подпись работает?
Техническую поддержку оказываем тут
Наша база знаний
Offline EgorovAlexandr  
#8 Оставлено : 1 сентября 2009 г. 16:15:34(UTC)
EgorovAlexandr

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

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

Присоедниненная подпись работает. И создается нормально и проверяется по сертификату подписанта тоже корректно.

Отредактировано пользователем 1 сентября 2009 г. 16:46:50(UTC)  | Причина: Не указана

Offline Юрий  
#9 Оставлено : 1 сентября 2009 г. 16:49:57(UTC)
Юрий

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

Группы: Участники
Зарегистрирован: 22.01.2008(UTC)
Сообщений: 671
Мужчина
Российская Федерация
Откуда: Йошкар-Ола

Сказал «Спасибо»: 3 раз
Поблагодарили: 95 раз в 68 постах

Отредактировано пользователем 1 сентября 2009 г. 19:08:07(UTC)  | Причина: Не указана

С уважением,
Юрий Строжевский
Offline Kirill Sobolev  
#10 Оставлено : 1 сентября 2009 г. 16:51:42(UTC)
Кирилл Соболев

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

Группы: Участники
Зарегистрирован: 25.12.2007(UTC)
Сообщений: 1,733
Мужчина
Откуда: КРИПТО-ПРО

Поблагодарили: 177 раз в 168 постах
значит проблема где-то здесь
Цитата:
const BYTE * rgpbToBeSigned[] = {pbContent}; //pbContent -- собственно сообщение
DWORD rgcbToBeSigned[] = {cbContent}; //cbContent -- размер сообщения

попробуйте снять подпись с файла с присоединенной подписью (это можно сделать csptest при проверке) и сравнить полученный результат с signed-data.txt - они одинаковы?
Техническую поддержку оказываем тут
Наша база знаний
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest (2)
2 Страницы12>
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.