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

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline arto  
#1 Оставлено : 8 августа 2011 г. 16:43:22(UTC)
arto

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

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

Визник вопрос по копированию криптоконтейнера (по сети, но это в данном случае неважно).

Попробовал экспортировать криптоконтейнер в транспортный контейнер (blob) через derive key:

CryptAcquireContext(&prov, CRYPTOCONTAINER, NULL, PROV_GOST_2001_DH, CRYPT_SILENT);
CryptSetProvParam(prov, PP_KEYEXCHANGE_PIN, (const BYTE*) CRYPTOPIN, 0);
CryptHashData(hash, (BYTE*) CRYPTOPIN, (DWORD) strlen(CRYPTOPIN), 0);
CryptDeriveKey(prov, CALG_G28147, hash, CRYPT_EXPORTABLE, &transport);
CryptGetUserKey(prov, AT_KEYEXCHANGE, &key);
CryptExportKey(key, transport, PRIVATEKEYBLOB, 0, NULL, (DWORD*) blob_len);

В этом месте возвращается ошибка 0x8009000b (NTE_BAD_KEY_STATE), "Ключ не может быть
использован в указанном состоянии.".

Экспортируемый ключ имеет параметр EXPORTABLE, транспортный -- EXPORT_KEY и IMPORT_KEY.

Где у меня может быть ошибка?
Или в данном случае надо применять схему Диффи-Хеллмана, обмениваться сессионными ключами етц?
Offline arto  
#2 Оставлено : 8 августа 2011 г. 18:44:53(UTC)
arto

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

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

Поправил, для транспортного ключа необходимо выполнить

CryptSetKeyParam(transport, KP_ALGID, (BYTE*) &alg, 0);

где alg = CALG_PRO_EXPORT.

заработало.
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.