Поделиться через


Ключи RSA/Schannel

Создание и получение ключей RSA/Schannel

RSA/Ключи Schannel можно создать путем вызова функции CryptGenKey. Для вызова CryptGenKey требуется AT_KEYEXCHANGE идентификатор алгоритма, переданный в параметре Algid .

Создание пары открытого и закрытого ключей RSA/Schannel

  1. Вызовите функцию CryptAcquireContext , чтобы получить дескриптор поставщика шифрования Microsoft RSA/Schannel.
  2. Вызовите функцию CryptGenKey для создания ключей. AT_KEYEXCHANGE необходимо передать для параметра Algid , а верхние 16 бит параметра dwFlags должны иметь нужный размер ключа (512 бит). Дескриптор структуры HCRYPTKEY возвращается в параметре hKey .

Получение указателя на ранее созданные ключи пользователя RSA/Schannel

  1. Вызовите функцию CryptAcquireContext , чтобы получить дескриптор поставщика шифрования Microsoft RSA/Schannel.
  2. Вызовите функцию 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-объектами.