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

Уведомление

Icon
Error

4 Страницы«<234
Опции
К последнему сообщению К первому непрочитанному
Offline elena123  
#31 Оставлено : 25 июня 2010 г. 20:04:38(UTC)
elena123

Статус: Новичок

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

Задавали, они посоветовали обратиться к Вам.

Возможно ли шифровать данные на КриптоПро с помощью ключа согласования ?
Offline Максим Коллегин  
#32 Оставлено : 25 июня 2010 г. 20:18:43(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
Можно, но не желательно, как-то так:

Цитата:
ALG_ID dwKeyType = CALG_G28147;
if (!CryptExportKey(hUserFORHASHKey,NULL,PUBLICKEYBLOB, 0, tmpAr, &dwLength))
{
goto err;
}
if (!CryptImportKey(hProv, tmpAr, dwLength, hUserFORHASHKey, 0, &hUserFORHASHEPHKey))
goto err;
free (tmpAr);
tmpAr = NULL;

/*превращаем в ключ шифрования. В первом вызове избегаем рандомизации ключа,
устанавливая IV. Наша IV длины 8 байт, а есть предположение (см. ниже),
что pbData дается минимум 32 байта.*/
if (!CryptSetKeyParam(hUserFORHASHEPHKey, KP_IV, pbData, 0))
goto err;
if (!CryptSetKeyParam(hUserFORHASHEPHKey, KP_ALGID, (PBYTE)&dwKeyType, 0)) {
goto err;
}
Знания в базе знаний, поддержка в техподдержке
Offline elena123  
#33 Оставлено : 25 июня 2010 г. 21:47:23(UTC)
elena123

Статус: Новичок

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

Когда ключ согласования создается, у него KP_IV 8 байт, а KP_ALGID 42529

т.е. CALG_PRO_AGREEDKEY_DH - Идентификатор алгоритма выработки ключа парной связи по Диффи-Хеллману.

Когда начинаем устанавливать параметры ключа функцией CryptSetKeyParam
KP_IV устанавливается и в 8 и в 32 байта
а на KP_ALGID всегда ошибка "NTE_BAD_TYPE".

Этот ключ не получается также экспортировать в блоб - ошибка "NTE_BAD_KEY".
И шифровать этим ключом не получается - ошибка "NTE_BAD_ALGID".

Как же его превратить в ключ для шифрования ?

Отредактировано пользователем 25 июня 2010 г. 21:51:21(UTC)  | Причина: Не указана

Offline Максим Коллегин  
#34 Оставлено : 25 июня 2010 г. 23:01:59(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
приведите код целиком.
Знания в базе знаний, поддержка в техподдержке
Offline elena123  
#35 Оставлено : 28 июня 2010 г. 13:50:52(UTC)
elena123

Статус: Новичок

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

Прошу прошения за задержку с ответом. Вот код целиком:


//Получаем дескриптор CSP

if (!CryptAcquireContext( &hProv, "Public", NULL, 75, 0))
goto err;


//Получаем дескриптор закрытого ключа отправителя

if (!CryptGetUserKey( hProv, AT_SIGNATURE, &hKey))
goto err;


//Получаем ключевой блоб открытого ключа получателя

BYTE KeyBlob[100] = {
0x06, 0x20, 0x00, 0x00, 0x23, 0x2E, 0x00, 0x00, 0x4D, 0x41, 0x47, 0x31, 0x00, 0x02, 0x00, 0x00,
0x30, 0x12, 0x06, 0x07, 0x2A, 0x85, 0x03, 0x02, 0x02, 0x23, 0x01, 0x06, 0x07, 0x2A, 0x85, 0x03,
0x02, 0x02, 0x1E, 0x01
};
//Дополняем блоб самим ключом
CK_BYTE pubKeyValue[64]; //64 байта ключа из eToken
memcpy(KeyBlob + 36, pubKeyValue, 64);


//Получаем ключ согласования

HCRYPTKEY hAgreeKey;
if (!CryptImportKey(hProv, (BYTE*)&KeyBlob, sizeof(KeyBlob), hKey, CRYPT_EXPORTABLE, &hAgreeKey))
goto err;


//Определяем вектор инициализации ключа согласования - он получается 8 байт

BYTE *pbIV = NULL;
DWORD dwIV = 0; // Длина вектора инициализации

if (!CryptGetKeyParam( hAgreeKey, KP_IV, NULL, &dwIV, 0))
goto err;
pbIV = (BYTE*)malloc(dwIV);
if (!CryptGetKeyParam( hAgreeKey, KP_IV, pbIV, &dwIV, 0))
goto err;


//Определяем ключевой алгоритм ключа согласования - он получается CALG_PRO_AGREEDKEY_DH

if (!CryptGetKeyParam( hAgreeKey, KP_ALGID, NULL, &dwIV, 0))
goto err;
pbIV = (BYTE*)malloc(dwIV);
if (!CryptGetKeyParam( hAgreeKey, KP_ALGID, pbIV, &dwIV, 0))
goto err;

//Теперь пытаемся изменить параметры ключа
//Устанавливаем вектор инициализации ключа согласования 8 или 32 байт - здесь всё хорошо

if (!CryptSetKeyParam( hAgreeKey, KP_IV, pbIV, 0))
goto err ;


//Пытаемся изменить KP_ALGID на CALG_G28147 - ошибка "NTE_BAD_TYPE"

ALG_ID dwKeyType = CALG_G28147
if (!CryptSetKeyParam( hAgreeKey, KP_ALGID, (PBYTE)&dwKeyType, 0 ))
goto err;


//Пытаемся экспортировать ключ согласования в блоб - разные ошибки ( "NTE_BAD_KEY" , "NTE_BAD_KEY_STATE" , "NTE_BAD_TYPE" )

DWORD dwBlobLen;
if (!CryptExportKey( hAgreeKey, 0, PUBLICKEYBLOB, 0, NULL, &dwBlobLen)) // тут ошибка "NTE_BAD_KEY"
goto err;
if (!CryptExportKey( hAgreeKey, 0, SIMPLEBLOB , 0, NULL, &dwBlobLen)) // тут ошибка "NTE_BAD_KEY_STATE"
goto err;
if (!CryptExportKey( hAgreeKey, 0, PLAINTEXTKEYBLOB, 0, NULL, &dwBlobLen)) // тут ошибка "NTE_BAD_TYPE"
goto err;


//Пытаемся шифровать ключом согласования - ошибка "NTE_BAD_ALGID"

if (!CryptEncrypt( hAgreeKey, 0, TRUE, 0, pbContent, &cbContent, bufLen))
goto err;






Offline elena123  
#36 Оставлено : 29 июня 2010 г. 16:53:12(UTC)
elena123

Статус: Новичок

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

Если не трудно, отпишитесь пожалуйста о любом результате.
Offline Максим Коллегин  
#37 Оставлено : 29 июня 2010 г. 17:29:04(UTC)
Максим Коллегин

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

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

Сказал «Спасибо»: 37 раз
Поблагодарили: 717 раз в 621 постах
Постараемся
Знания в базе знаний, поддержка в техподдержке
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
4 Страницы«<234
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.