Ключи RSA/Schannel
Создание и получение ключей RSA/Schannel
RSA/Ключи Schannel можно создать путем вызова функции CryptGenKey. Для вызова CryptGenKey требуется AT_KEYEXCHANGE идентификатор алгоритма, переданный в параметре Algid .
Создание пары открытого и закрытого ключей RSA/Schannel
- Вызовите функцию CryptAcquireContext , чтобы получить дескриптор поставщика шифрования Microsoft RSA/Schannel.
- Вызовите функцию CryptGenKey для создания ключей. AT_KEYEXCHANGE необходимо передать для параметра Algid , а верхние 16 бит параметра dwFlags должны иметь нужный размер ключа (512 бит). Дескриптор структуры HCRYPTKEY возвращается в параметре hKey .
Получение указателя на ранее созданные ключи пользователя RSA/Schannel
- Вызовите функцию CryptAcquireContext , чтобы получить дескриптор поставщика шифрования Microsoft RSA/Schannel.
- Вызовите функцию CryptGetUserKey с параметром dwKeySpec , равным AT_KEYEXCHANGE.
Экспорт ключей RSA/Schannel
Главные ключи можно экспортировать в структуры больших двоичных объектов простых ключей. Это должно быть реализовано так же, как экспорт обычных ключей массового шифрованияRC4 или DATA Encryption Standard (DES), как описано в разделе Простой ключ BLOB. Члену aiKeyAlg структуры PUBLICKEYSTRUC присваивается идентификатор алгоритма ключа master (CALG_PCT1_MASTER, CALG_SSL2_MASTER, CALG_SSL3_MASTER или CALG_TLS1_MASTER).
Если функция CPExportKey экспортирует ключ master SSL2 и установлен флаг CRYPT_SSL2_FALLBACK, то, чтобы предотвратить атаки отката версии, задайте первые восемь байтов заполнения блока шифрования 0x03, а не случайные данные.
Если константа CRYPT_DESTROYKEY указана в параметре dwFlags функции CPExportKey , CSP уничтожает ключ или дескриптор ключа после экспорта ключа. Этот флаг предназначен только для использования с непрозрачными BLOB-объектами.