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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline krasnov  
#1 Оставлено : 8 июня 2011 г. 19:45:11(UTC)
krasnov

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

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

Сказал(а) «Спасибо»: 1 раз
Добрый день!

Возникла необходимость использовать усовершенствованную эцп.
Взял код из примера Крипто-ПРО SDK - Создание подписи (низкоуровневые функции).
Получил сертификат в вашем тестовом центре сертификации (алгоритм подписи ГОСТ Р 34.11/34.10-2001 и алгоритм отпечатка sha1).

Пример падает на вызове CadesMsgOpenToEncode

Код:
    CMSG_SIGNER_ENCODE_INFO signer = { sizeof(CMSG_SIGNER_ENCODE_INFO) };
    signer.pCertInfo = pCertContext->pCertInfo;
    signer.hCryptProv = hProv;
    signer.dwKeySpec = dwKeySpec;
    signer.HashAlgorithm.pszObjId = szOID_OIWSEC_sha1;

    CMSG_SIGNED_ENCODE_INFO info = { sizeof(CMSG_SIGNED_ENCODE_INFO) };
    info.cSigners = 1;
    info.rgSigners = &signer;

    CADES_ENCODE_INFO cadesInfo = { sizeof(cadesInfo) };
    cadesInfo.pSignedEncodeInfo = &info;

    HCRYPTMSG hMsg = CadesMsgOpenToEncode(
        X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,0,&cadesInfo,0,0);


с ошибкой:

Код:
[1128] cades.dll: {1392} /CadesMsgOpenToEncode/ cades.cpp(491) : (dwMsgEncodingType=0x00010001, dwFlags=0x00000000, pvMsgEncodeInfo=0x0012E24C, pszInnerContentObjID=0, pStreamInfo=0x00000000)
[1128] cades.dll: {1392} /CadesMsgOpenToEncodeImpl/ cades.cpp(439) : Start
[1128] cades.dll: {1392} /CadesMsgOpenToEncodeImpl/ cades.cpp(443) : Input parameters checked
[1128] cades.dll: {1392} /CadesMsgOpenToEncodeImpl/ cades.cpp(452) : Copy of input structures is ready
[1128] cades.dll: {1392} /CadesMsgOpenToEncodeImpl/ cades.cpp(458) : Signers updating start
[1128] cades.dll: {1392} /CadesMsgOpenToEncodeImpl/ cades.cpp(463) : Signer #0
[1128] cades.dll: {1392} /CadesMsgOpenToEncodeImplNamespace::CheckAlgorithms/ cades.cpp(407) :  Public key info is exported successfully
[1128] cades.dll: {1392} /CadesMsgOpenToEncodeImplNamespace::CheckAlgorithms/ cades.cpp(413) : Exception thrown: _hr
[1128] cades.dll: {1392} /CadesMsgOpenToEncode/ cades.cpp(510) : COleException, m_sc=0x80092004
[1128] cades.dll: {1392} /CadesMsgOpenToEncode/ cades.cpp(522) : (hMsg=0x00000000, GetLastError=0x80092004)


если попытаться использовать другой сертификат (алгоритм подписи sha1RSA и алгоритм отпечатка sha1), то этот метод проходит успешно

Код:
[1008] cades.dll: {508} /CadesMsgOpenToEncode/ cades.cpp(491) : (dwMsgEncodingType=0x00010001, dwFlags=0x00000000, pvMsgEncodeInfo=0x0012E24C, pszInnerContentObjID=0, pStreamInfo=0x00000000)
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImpl/ cades.cpp(439) : Start
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImpl/ cades.cpp(443) : Input parameters checked
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImpl/ cades.cpp(452) : Copy of input structures is ready
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImpl/ cades.cpp(458) : Signers updating start
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImpl/ cades.cpp(463) : Signer #0
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImplNamespace::CheckAlgorithms/ cades.cpp(407) :  Public key info is exported successfully
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImplNamespace::CheckAlgorithms/ cades.cpp(414) :  Signature algoritm OID info is found: 1.2.840.113549.1.1.5
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImpl/ cades.cpp(470) :  Certificates equality checked
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImplNamespace::DeduceHashAlgorithm/ cades.cpp(157) : (szHashAlgorithm=1.3.14.3.2.26)
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImpl/ cades.cpp(472) :  Hash algorithm deduced
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImplNamespace::AttributeExists/ cades.cpp(181) : (pAttr=0)
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImplNamespace::UpdateSignedAttributes/ cades.cpp(377) :  Signer does not have any of signing-certificate attributes
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImplNamespace::UpdateSignedAttributes/ cades.cpp(383) :  Attributes copied
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImplNamespace::UpdateSignedAttributes/ cades.cpp(386) :  signing-certificate(-v2) attribute assembled
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImplNamespace::UpdateSignedAttributes/ cades.cpp(389) :  Signer is updated successfully
[1008] cades.dll: {508} /CadesMsgOpenToEncodeImpl/ cades.cpp(479) : Calling CryptMsgOpenToEncode()
[1008] cades.dll: {508} /CadesMsgOpenToEncode/ cades.cpp(522) : (hMsg=0x001860A0, GetLastError=0x00000000)


Подскажите пожалуйста первую подсказку.
Offline Новожилова Елена  
#2 Оставлено : 8 июня 2011 г. 22:30:07(UTC)
Новожилова Елена

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

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

Поблагодарили: 99 раз в 95 постах
Скажите пожалуйста, стоит ли на компьютере, где вы запускаете пример, КриптоПро CSP?
Offline krasnov  
#3 Оставлено : 9 июня 2011 г. 13:26:17(UTC)
krasnov

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

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

Сказал(а) «Спасибо»: 1 раз
Новожилова Елена написал:
Скажите пожалуйста, стоит ли на компьютере, где вы запускаете пример, КриптоПро CSP?

Да. Посмотрел настройки и обнаружил что в закладке Алгоритмы отсутствуют типы CSP для настройки параметров. После переустановки КриптоПро CSP - появился тип GOST R 34.10-2001 Signature with Diffie-Hellman Key Exchange. Но переустановка не помогла в проблеме.

Пробовал csptest, но не знаю создает ли он усовершенствованную эцп
Код:
C:\Program Files\Crypto Pro\CSP>csptest.exe -sfsign -sign -in a.txt -out a3.txt -my tnew -add -detached -base64
CSP (Type:75) v3.6.4071 KC1 Release Ver:3.6.5236 OS:Windows CPU:IA32 FastCode:READY,ENABLED.
#0:
Subject: C=RU, CN=tnew
Valid  : 06.06.2011 - 04.10.2014
Issuer : E=info@cryptopro.ru, C=RU, O=CRYPTO-PRO, CN=Test Center CRYPTO-PRO

Source message length: 3
Calculated signature (or signed message) length: 1053
Signature was done. Signature (or signed message) length: 1037
Output file (a3.txt) has been saved
Total: SYS: 0.141 sec USR: 0.078 sec UTC: 5.227 sec
[ErrorCode: 0x00000000]

Код:
C:\Program Files\Crypto Pro\CSP>csptest.exe -sfsign -sign -in a.txt -out a3.txt -my tnew -add -detached -base64 -addsigtime -cades_strict
CSP (Type:75) v3.6.4071 KC1 Release Ver:3.6.5236 OS:Windows CPU:IA32 FastCode:READY,ENABLED.
#0:
Subject: C=RU, CN=tnew
Valid  : 06.06.2011 - 04.10.2014
Issuer : E=info@cryptopro.ru, C=RU, O=CRYPTO-PRO, CN=Test Center CRYPTO-PRO

Source message length: 3
Calculated signature (or signed message) length: 1162
Signature was done. Signature (or signed message) length: 1146
Output file (a3.txt) has been saved
Total: SYS: 0.188 sec USR: 0.078 sec UTC: 2.473 sec
[ErrorCode: 0x00000000]
Offline Новожилова Елена  
#4 Оставлено : 9 июня 2011 г. 16:59:33(UTC)
Новожилова Елена

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

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

Поблагодарили: 99 раз в 95 постах
Внимательно посмотрела код, чтобы создать усовершенствованную ЭЦП на алгоритме ГОСТ, задайте алгоритм хэширования ГОСТ Р 34.11 (szOID_CP_GOST_R3411) вместо SHA1 (szOID_OIWSEC_sha1).

Алгоритм указывается здесь:

Код:
 CMSG_SIGNER_ENCODE_INFO signer = { sizeof(CMSG_SIGNER_ENCODE_INFO) };
    signer.pCertInfo = pCertContext->pCertInfo;
    signer.hCryptProv = hProv;
    signer.dwKeySpec = dwKeySpec;
    signer.HashAlgorithm.pszObjId = szOID_OIWSEC_sha1;
Offline krasnov  
#5 Оставлено : 9 июня 2011 г. 19:10:55(UTC)
krasnov

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

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

Сказал(а) «Спасибо»: 1 раз
Спасибо, с szOID_CP_GOST_R3411 заработало.

Может быть у вас есть алгоритм поиска алгоритма хеширования по сертификату? :)

Мне Кирилл Соболев описал один в теме(можно пропустить до последних двух сообщений), когда я разбирался с обычной эцп под линуксом.
Offline Новожилова Елена  
#6 Оставлено : 9 июня 2011 г. 21:28:45(UTC)
Новожилова Елена

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

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

Поблагодарили: 99 раз в 95 постах
У нас для поиска алгоритма хэширования по сертификату используется алгоритм, который вам описал Кирилл Соболев.

Готового примера, к сожалению, нет.
Offline krasnov  
#7 Оставлено : 10 июня 2011 г. 15:43:29(UTC)
krasnov

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

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

Сказал(а) «Спасибо»: 1 раз
Добрый день!

Перебрал доступные алгоритмы для сертификата:

Код:
Subject: C=RU, CN=tnew
Valid  : 06.06.2011 - 04.10.2014
Issuer : E=info@cryptopro.ru, C=RU, O=CRYPTO-PRO, CN=Test Center CRYPTO-PRO


Результат:

Код:
Encrypt: GOST 28147-89
Hash: HMAC GOST 28147-89
Exchange: Diffie-Hellman EL


Теперь пытаюсь найти OID найденного алгоритма хеширования, но не находится. Для других алгоритмов находит.

Код:
PROV_ENUMALGS enAlg;
...
PCCRYPT_OID_INFO pOidInfo = CryptFindOIDInfo(CRYPT_OID_INFO_ALGID_KEY,&enAlg.aiAlgid, 0);

Код:
Encrypt: GOST 28147-89 - szOID_CP_GOST_28147 (1.2.643.2.2.21, ГОСТ 28147-89)
Hash: HMAC GOST 28147-89
Exchange: Diffie-Hellman EL - szOID_CP_DH_EL (1.2.643.2.2.98, ГОСТ Р 34.10-2001 DH)


В каком направлении двигаться, чтобы найти szOID_CP_GOST_R3411?
Offline Kirill Sobolev  
#8 Оставлено : 14 июня 2011 г. 19:01:09(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
Цитата:
Результат:
Encrypt: GOST 28147-89
Hash: HMAC GOST 28147-89
Exchange: Diffie-Hellman EL

А как он был получен?
Техническую поддержку оказываем тут
Наша база знаний
Offline krasnov  
#9 Оставлено : 14 июня 2011 г. 19:54:41(UTC)
krasnov

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

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

Сказал(а) «Спасибо»: 1 раз
Код:
	BYTE* enAlgB;
	DWORD enAlgLen;

	DWORD dwFlags;
	CHAR *pszAlgType = NULL;

	std::string retVal = "";

	for (int i=0;;i++)
	{
		if (i==0)
			dwFlags = CRYPT_FIRST;
		else
			dwFlags = CRYPT_NEXT;

		if(!CryptGetProvParam(hProv,PP_ENUMALGS,NULL,&enAlgLen,dwFlags))
		{
			DWORD err = GetLastError();
			if (err != ERROR_NO_MORE_ITEMS)
			{
				CryptReleaseContext(hProv,0);
				CertFreeCertificateContext(pCertContext);
				return MyHandleError("Ошибка в SignCades-CryptGetProvParam-1");
			}
			else
			{
				break;
			}
		}

		if(enAlgB = (BYTE*)malloc(enAlgLen))
		{
		}
		else
		{
			return MyHandleError("Ошибка в SignCades-malloc(enAlnLen)");
		}

		if(!CryptGetProvParam(hProv,PP_ENUMALGS,enAlgB,&enAlgLen,dwFlags))
		{
			DWORD err = GetLastError();
			if (err != ERROR_NO_MORE_ITEMS)
			{
				CryptReleaseContext(hProv,0);
				CertFreeCertificateContext(pCertContext);
				return MyHandleError("Ошибка в SignCades-CryptGetProvParam-1");
			}
			else
			{
				break;
			}
		}

		PROV_ENUMALGS enAlg;
		memcpy(&enAlg,enAlgB,enAlgLen);

		switch(GET_ALG_CLASS(enAlg.aiAlgid)) {
			case ALG_CLASS_DATA_ENCRYPT:
				{
				pszAlgType = "Encrypt";
				break;
				}
			case ALG_CLASS_HASH: 
				{
				pszAlgType = "Hash";
				break;
				}
			case ALG_CLASS_KEY_EXCHANGE: 
				pszAlgType = "Exchange";
				break;
			case ALG_CLASS_SIGNATURE: 
				pszAlgType = "Signature";
				break;
			default: 
				pszAlgType = "Unknown";
		}

		/*PCCRYPT_OID_INFO pubkeyOidInfo = CryptFindOIDInfo(CRYPT_OID_INFO_OID_KEY,pCertContext->pCertInfo->SubjectPublicKeyInfo.Algorithm.pszObjId, CRYPT_PUBKEY_ALG_OID_GROUP_ID );

		ALG_ID* a = new ALG_ID[2];
		a[0] = enAlg.aiAlgid;
		a[1] = pubkeyOidInfo->Algid;

		PCCRYPT_OID_INFO pOidInfo = CryptFindOIDInfo(CRYPT_OID_INFO_SIGN_KEY,&a, 0 );
		PCCRYPT_OID_INFO pOidInfo1 = CryptFindOIDInfo(CRYPT_OID_INFO_ALGID_KEY,&enAlg.aiAlgid, 0 );
		PCCRYPT_OID_INFO pOidInfo2 = CryptFindOIDInfo(CRYPT_OID_INFO_NAME_KEY,&enAlg.szName, 0 );*/

		//signer.HashAlgorithm.pszObjId = (LPSTR)pOidInfo1->pszOID;


		//retVal += std::string(toString(i));
		retVal += std::string(pszAlgType);
		retVal += ": ";
		retVal += std::string(enAlg.szName);
		retVal += "\r\n";
	}

	return retVal;
Offline Kirill Sobolev  
#10 Оставлено : 14 июня 2011 г. 22:21:51(UTC)
Кирилл Соболев

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

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

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