29.10.2005 1:14:49Генерация ключа в обход CryptGenKey Ответов: 1
Mr. Bean
Возник такой вот вопрос: Как функция CryptImportKey определеяет, с каким типом импортировать ключ в хранилище (как ключ подписи или как ключ обмена или иной какой-нибудь...), если ключ создвался так:
...
CryptDeriveKey(phProv, CALG_RC4, hHash, dwFlags, @authKey);
CryptExportKey(authKey,0,PLAINTEXTKEYBLOB,0,pbuf,@buflen);
CryptImportKey(phProv,pbuf,bufLen,0,dwFlags,@authKey);
Импортирование отрабатывает без ошибок, но потом при попытке достать ключ из хранилища возникает вопрос: а какой именно нужно доставать?
Или скажите, как создать например, ключ обмена ключами (AT_KEYEXCHANGE) не случайно (функцией CryptGenKey), а на основе некого пароля (через функцию CryptDeriveKey). Заранее благодарю.
 
Ответы:
08.11.2005 11:12:12Василий
См. MSDN

CryptDeriveKey(..., ALG_ID Algid,...)

Algid
[in] An ALG_ID structure that identifies the symmetric encryption algorithm for which the key is to be generated. The algorithms available will most likely be different for each CSP. For more information about which algorithm identifier is used by the different providers for the key specs AT_KEYEXCHANGE and AT_SIGNATURE, see ALG_ID.


For the Microsoft Base Cryptographic Provider, the Microsoft Strong Provider, and the Microsoft Enhanced Cryptographic Provider, the ALG_IDs used for the key specs AT_KEYEXCHANGE and AT_SIGNATURE are as follows:


CALG_RSA_KEYX is used for AT_KEYEXCHANGE
CALG_RSA_SIGN is used for AT_SIGNATURE


For the Microsoft DSS Cryptographic Provider and the Diffie-Hellman Provider, the ALG_IDs used for the key specs AT_KEYEXCHANGE and AT_SIGNATURE are as follows:


CALG_DH_SF is used for AT_KEYEXCHANGE
CALG_DSS_SIGN is used for AT_SIGNATURE