Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ 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 (2)
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.