Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
Создание подписи через CryptSignMessage(detached) и проверка через CryptVerifyDetachedMessageSignatu
Статус: Участник
Группы: Участники
Зарегистрирован: 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
Не могли бы вы подсказать в чем проблема?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.01.2011(UTC) Сообщений: 16
|
#define MY_ENCODING_TYPE X509_ASN_ENCODING | PKCS_7_ASN_ENCODING
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Попробуйте сделать присоединенную подпись, заменив флаг fDetachedSignature в CryptSignMessage с TRUE на FALSE, сохранить полученный результат в файл и сравнить содержимое с переданным MessageArray. |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.01.2011(UTC) Сообщений: 16
|
Попробовал.
Размер подисываемых данных:1.62k Размер подписи (detached = FALSE) 3.43k Размер подписи (detached = TRUE) 1.79k
Как это может помочь?
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 13.01.2011(UTC) Сообщений: 16
|
Мне именно нужна detached подпись, так как передавать/хранить подписываемый контент лишний раз для проекта слишком накладно. Размер подписываемого содержимого может варьироваться от 1кб до 500 мб. На данный момент я конечно поставил "заглушку" просто приписывая в конец 2k пробелов, но все таки задач с криптографией еще предстоит много, хотелось бы понять это я такой(криворукий) или жизнь такая?:) Отредактировано пользователем 9 марта 2011 г. 19:26:48(UTC)
| Причина: Не указана
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:Попробовал.
Размер подисываемых данных:1.62k Размер подписи (detached = FALSE) 3.43k Размер подписи (detached = TRUE) 1.79k
Как это может помочь? Дело не в размере. После сохранения файл присоединенной подписи проверьте ее, например, csptestом и полученный результат сравните с исходными данными. Кстати - а отделенная подпись csptestом проверяется? И проверяет ли Ваш код подпись, созданную csptestом? |
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 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]
Все таки что я делаю не так?
|
|
|
|
Статус: Сотрудник
Группы: Участники
Зарегистрирован: 25.12.2007(UTC) Сообщений: 1,733 Откуда: КРИПТО-ПРО Поблагодарили: 177 раз в 168 постах
|
Цитата:После сохранения файл присоединенной подписи проверьте ее, например, csptestом и полученный результат сравните с исходными данными. Вы вот это сделали? |
|
|
|
|
Форум КриптоПро
»
Общие вопросы
»
Общие вопросы
»
Создание подписи через CryptSignMessage(detached) и проверка через CryptVerifyDetachedMessageSignatu
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close