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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline altazar  
#1 Оставлено : 9 марта 2011 г. 17:46:24(UTC)
altazar

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

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

Здравствуйте!
Использую программу на С++
для создания detached ЕЦП
Вот кусок кода создания:


SigParams.cbSize = sizeof(CRYPT_SIGN_MESSAGE_PARA);
SigParams.dwMsgEncodingType = MY_ENCODING_TYPE;
SigParams.pSigningCert = pCertContext;
SigParams.HashAlgorithm.pszObjId = szOID_CP_GOST_R3411_R3410;
SigParams.HashAlgorithm.Parameters.cbData = NULL;
SigParams.cMsgCert = 1;
SigParams.rgpMsgCert = &pCertContext;
SigParams.cAuthAttr = 0;
SigParams.dwInnerContentType = 0;
SigParams.cMsgCrl = 0;
SigParams.cUnauthAttr = 0;
SigParams.dwFlags = 0;
SigParams.pvHashAuxInfo = NULL;
SigParams.rgAuthAttr = NULL;

// First, get the size of the signed BLOB.
if(CryptSignMessage(
&SigParams,
TRUE,
1,
MessageArray,
MessageSizeArray,
NULL,
&cbSignedMessageBlob))
{
printf("Size of signature be:%d .\n",
cbSignedMessageBlob);
}
else
{
appendLogErrorMessage(L"Failed get signature size.\r\n");
CryptReleaseContext(hCryptProv, 0);
CertFreeCertificateContext(pCertContext);
CloseHandle(fContentHandle);
HandleError("Error. Ошибка при определении размера для будующей подписи");
}


// Allocate memory for the signed BLOB.
pbSignedMessageBlob = (BYTE*)malloc(cbSignedMessageBlob);

if(CryptSignMessage(
&SigParams,
TRUE,
1,
MessageArray,
MessageSizeArray,
pbSignedMessageBlob,
&cbSignedMessageBlob))
{
printf("Signature made successfuly!!!\r\n");
}
else
{
appendLogErrorMessage(L"Failed get signature.\r\n");
CryptReleaseContext(hCryptProv, 0);
CertFreeCertificateContext(pCertContext);
CloseHandle(fContentHandle);
HandleError("Error. Ошибка при создании подписи.");
}

Потом пытаюсь проверить подпись
с помощью следующего кода:


CRYPT_VERIFY_MESSAGE_PARA msgPara;

const BYTE* DataArray[] = { pbContent };
DWORD SizeArray[] = { cbContent };

// Verify the detached message.
msgPara.cbSize = sizeof(CRYPT_VERIFY_MESSAGE_PARA);
msgPara.dwMsgAndCertEncodingType =
X509_ASN_ENCODING | PKCS_7_ASN_ENCODING;
msgPara.hCryptProv = hCryptProv;
msgPara.pfnGetSignerCertificate = NULL;
msgPara.pvGetArg = NULL;
if ( CryptVerifyDetachedMessageSignature(
&msgPara,
0,
pbDigSign,
cbDigSign,
1,
DataArray,
SizeArray,
NULL
) )
{

return TRUE;
}
else
{

return FALSE;
}


Возникает следующая ситуация:

1) при размере подписываемых данных ~1.2 Kb получаю подпись не верна и GetLastError() = 80091007

2) при размере данных >2Kb - все в порядке подпись проверяется.


Использую Crypto Pro Версия ядра:3.6.5359, Версия продукта:3.6.6497


Не могли бы вы подсказать в чем проблема?
Offline altazar  
#2 Оставлено : 9 марта 2011 г. 17:48:27(UTC)
altazar

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

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

#define MY_ENCODING_TYPE X509_ASN_ENCODING | PKCS_7_ASN_ENCODING
Offline Kirill Sobolev  
#3 Оставлено : 9 марта 2011 г. 18:07:15(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Попробуйте сделать присоединенную подпись, заменив флаг fDetachedSignature в CryptSignMessage с TRUE на FALSE, сохранить полученный результат в файл и сравнить содержимое с переданным MessageArray.
Техническую поддержку оказываем тут
Наша база знаний
Offline altazar  
#4 Оставлено : 9 марта 2011 г. 19:22:31(UTC)
altazar

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

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

Попробовал.

Размер подисываемых данных:1.62k
Размер подписи (detached = FALSE) 3.43k
Размер подписи (detached = TRUE) 1.79k

Как это может помочь?

Offline altazar  
#5 Оставлено : 9 марта 2011 г. 19:23:30(UTC)
altazar

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

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

Мне именно нужна detached подпись, так как передавать/хранить подписываемый контент лишний раз для проекта слишком накладно.
Размер подписываемого содержимого может варьироваться от 1кб до 500 мб.
На данный момент я конечно поставил "заглушку" просто приписывая в конец 2k пробелов, но все таки задач с криптографией еще предстоит много,
хотелось бы понять это я такой(криворукий) или жизнь такая?:)

Отредактировано пользователем 9 марта 2011 г. 19:26:48(UTC)  | Причина: Не указана

Offline Kirill Sobolev  
#6 Оставлено : 9 марта 2011 г. 20:45:33(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Цитата:
Попробовал.

Размер подисываемых данных:1.62k
Размер подписи (detached = FALSE) 3.43k
Размер подписи (detached = TRUE) 1.79k

Как это может помочь?

Дело не в размере.
После сохранения файл присоединенной подписи проверьте ее, например, csptestом и полученный результат сравните с исходными данными.
Кстати - а отделенная подпись csptestом проверяется? И проверяет ли Ваш код подпись, созданную csptestом?
Техническую поддержку оказываем тут
Наша база знаний
Offline altazar  
#7 Оставлено : 14 марта 2011 г. 18:13:20(UTC)
altazar

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

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

csptest -sfsign -verify -detached -in c:\source.dat -signature c:\sign.dat
CSP (Type:75) v3.6.5359 KC1 Release Ver:3.6.6497 OS:Windows CPU:IA32 FastCode:RE
ADY,ENABLED.
An error occurred in running the program.
.\signtsf.c:552:No user cert specified. Cryptocontext will be opened automatical
y.
Error number 0x0 (0).
The operation completed successfully.

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

Error number 0x80091007 (2148077575).
The hash value is not correct.

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

Все таки что я делаю не так?
Offline Kirill Sobolev  
#8 Оставлено : 14 марта 2011 г. 18:49:46(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Цитата:
После сохранения файл присоединенной подписи проверьте ее, например, csptestом и полученный результат сравните с исходными данными.

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