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

Уведомление

Icon
Error

2 Страницы12>
Опции
К последнему сообщению К первому непрочитанному
Offline Vasko  
#1 Оставлено : 23 декабря 2008 г. 15:04:36(UTC)
Vasko

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

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

добрый день. пытаюсь создать эцп следующим образом:

Код:
pbMessage = (BYTE*)TEXT(SIGNER_NAME1);
    	cbMessage = (lstrlen((TCHAR*) pbMessage) + 1) * sizeof(TCHAR);
       const BYTE* MessageArray[ ] = {pbMessage};
    DWORD MessageSizeArray[1];
    MessageSizeArray[0] = cbMessage;

  _tprintf(TEXT("The message to be signed is \"%s\".\n"),
        pbMessage);

    // Open the certificate store.
    if ( !( hCertStore = CertOpenStore(
       CERT_STORE_PROV_SYSTEM,
       0,
       NULL,
       CERT_SYSTEM_STORE_CURRENT_USER,
       CERT_STORE_NAME)))
    {
         MyHandleError(TEXT("The  store could not be opened."));
         goto exit_SignMessage;
    }

    

	if(pSignerCert = CertFindCertificateInStore(
       hCertStore,
       MY_ENCODING_TYPE,
       0,
       CERT_FIND_SUBJECT_STR,
       SIGNER_NAME1,
       NULL))
    {
      _tprintf(TEXT("The signer's certificate was found.\n"));
    }
    else
    {
        MyHandleError( TEXT("Signer certificate not found."));
        goto exit_SignMessage;
    }

    // Initialize the signature structure.
    SigParams.cbSize = sizeof(CRYPT_SIGN_MESSAGE_PARA);
    SigParams.dwMsgEncodingType = MY_ENCODING_TYPE;
    SigParams.pSigningCert = pSignerCert;
    SigParams.HashAlgorithm.pszObjId = pSignerCert->pCertInfo->SignatureAlgorithm.pszObjId;//szOID_RSA_SHA1RSA;
    SigParams.HashAlgorithm.Parameters.cbData = NULL;
    SigParams.cMsgCert = 1;
    SigParams.rgpMsgCert = &pSignerCert;
    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,
        FALSE,
        1,
        MessageArray,
        MessageSizeArray,
        NULL,
        &cbSignedMessageBlob))
    {
       _tprintf(TEXT("%d bytes needed for the encoded BLOB.\n"),
            cbSignedMessageBlob);
    }
    else
    {
        MyHandleError(TEXT("Getting signed BLOB size failed"));
        goto exit_SignMessage;
    }

    // Allocate memory for the signed BLOB.
   if(!(pbSignedMessageBlob = 
       //new BYTE[cbSignedMessageBlob]))
	   (BYTE*)malloc(cbSignedMessageBlob)))
    {
        MyHandleError(
            TEXT("Memory allocation error while signing."));
        goto exit_SignMessage;
    }

    
	
	
	// Get the signed message BLOB.
    if(CryptSignMessage(
          &SigParams,
          FALSE,
          1,
          MessageArray,
          MessageSizeArray,
          pbSignedMessageBlob,
          &cbSignedMessageBlob))
    {
        _tprintf(TEXT("The message was signed successfully. \n"));
        _tprintf(TEXT("signature:\n"));
	 printf("size is %d", cbSignedMessageBlob);
	
	 print_signature(cbSignedMessageBlob, pbSignedMessageBlob);
   
		fReturn = true;
    }


возникает следующий вопрос: действительно ли внутри выходной переменной pbSignedMessageBlob будет содержаться моя ЭЦП или чтото другое? сомнения возникают от того что уж очень много символов выводится на экран- в районе 2600. . .
заранее благодарен.
Offline Kirill Sobolev  
#2 Оставлено : 23 декабря 2008 г. 17:41:09(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
если есть сомнения - проверьте получившийся результат, например нашей утилитой csptest.
Техническую поддержку оказываем тут
Наша база знаний
Offline Vasko  
#3 Оставлено : 25 декабря 2008 г. 20:54:05(UTC)
Vasko

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

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

добрый день. подумал и решил что всётаки хочу "короткую" подпись, т.е пользуясь низкоуровневыми ф-иями. но изменяя подписываемое сообщение, подпись всегда остаётся одной и той же.(причём чтото странно типа cdcdcdcdcdcdcdcd...) код:

Код:
HCRYPTHASH hHash;
if(CryptCreateHash(
    phProv, 
    CALG_SHA,
    0, 
    0, 
    &hHash)) 
  {
    printf("Hash object created.\n");
  }
  
  if(CryptHashData(
    hHash, 
    pbMessage, 
    cbMessage, 
    0)) 
  {
    printf("Hash object vu4islen.\n");
  }
  

  if(CryptSignHash(
    hHash, 
    AT_KEYEXCHANGE,
    NULL, 
    0, 
    NULL, 
    &dwSigLen)) 
  {
    printf("Sign length %d .\n",dwSigLen);
  }

  if(pbSignature = new BYTE[dwSigLen]) 
  {
    printf("member for sign vudel.\n");
  }

  if(CryptSignHash(
    hHash, 
    AT_KEYEXCHANGE,
    NULL, 
    0, 
    pbSignature, 
    &dwSigLen)) 
  {
      print_signature(dwSigLen, pbSignature);
  }
 


замена AT_KEYEXCHANGE на AT_SIGNATURE приводит к ошибке. . .

pbMessage и сbMessage получаю след образом:
Код:
BYTE* pbMessage = (BYTE*)SIGNER_NAME1;
DWORD cbMessage = (DWORD)strlen((char*) pbMessage + 1) ;


подскажите плз в чём может быть косяк?
заранее благодарен.
Offline Kure  
#4 Оставлено : 26 декабря 2008 г. 14:12:31(UTC)
Kure

Статус: Администратор

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

Поблагодарили: 33 раз в 10 постах
А где возврат значения хэша GetHashParam
Скачайте с сайте примеры в исходных текстах http://www.cryptopro.ru/...o/products/csp/usage.htm
Offline Kirill Sobolev  
#5 Оставлено : 26 декабря 2008 г. 14:35:43(UTC)
Кирилл Соболев

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

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

Поблагодарили: 177 раз в 168 постах
phProv откуда берется?
чему равно dwSigLen после первого вызова CryptSignHash?
Техническую поддержку оказываем тут
Наша база знаний
Offline Vasko  
#6 Оставлено : 30 декабря 2008 г. 15:10:03(UTC)
Vasko

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

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

С наступающими!!
phProve беру из
Код:
CryptAcquireContext( &phProv,
					NULL,
					"Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider",75,
					CRYPT_VERIFYCONTEXT
					);


dwSigLen после первого вызова CryptSignHash =64
Offline Vasko  
#7 Оставлено : 30 декабря 2008 г. 15:14:51(UTC)
Vasko

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

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

при использовании CryptAcquireCertificatePrivateKey возникает undeclared identifier, поэтому отказался от него
Offline Vasko  
#8 Оставлено : 30 декабря 2008 г. 15:38:13(UTC)
Vasko

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

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

после перввого вызова CryptAcquireContext, делаю :
Код:
CryptAcquireContext(&phProv,
                              CERT_STORE,
                              "Crypto-Pro GOST R 34.10-2001 Cryptographic Service Provider",
                               75,
                               CRYPT_MACHINE_KEYSET))
Offline Vasko  
#9 Оставлено : 30 декабря 2008 г. 16:05:49(UTC)
Vasko

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

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

где CERT_STORE - хранилище(например 38ab179f-5ba5-40e6-bdf4-7e0be367ebbc)
Offline Kirill Sobolev  
#10 Оставлено : 30 декабря 2008 г. 17:11:33(UTC)
Кирилл Соболев

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

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

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