Функция CryptSetKeyParam (wincrypt.h)
поставщик шифрования Microsoft Base Cryptographic Provider не разрешает устанавливать значения для ключей обмена ключами или ключами подписи; однако настраиваемые поставщики могут определять значения, которые можно задать для ключей.
Синтаксис
BOOL CryptSetKeyParam(
[in] HCRYPTKEY hKey,
[in] DWORD dwParam,
[in] const BYTE *pbData,
[in] DWORD dwFlags
);
Параметры
[in] hKey
Дескриптор ключа, для которого необходимо задать значения.
[in] dwParam
В следующих таблицах содержатся предопределенные значения, которые можно использовать.
Для всех типов ключей этот параметр может содержать одно из следующих значений.
Ценность | Значение |
---|---|
|
pbData указывает на соответствующий ALG_ID. Это используется при обмене ключами сеансов с помощью стандарта DSS( Microsoft Base Digital Signature Standard), Diffie-Hellman поставщика шифрования или совместимых поставщиков служб. После согласования ключа с функцией CryptImportKey ключ сеанса можно использовать, задав его тип алгоритма. |
|
pbData — это адрес буфера, который содержит сертификат X.509, который был закодирован с помощью различающихся правил кодирования (DER). Открытый ключ в сертификате должен соответствовать соответствующему сигнатуре или ключу exchange. |
|
pbData указывает на значение DWORD, указывающее ноль или больше флагов разрешений. Описание этих флагов см. в разделе CryptGetKeyParam. |
|
pbData указывает на массив BYTE, указывающий новое значение соли, которое необходимо сделать частью ключа сеанса. Размер значения соли зависит от используемого CSP. Перед заданием этого значения определите размер значения соли, вызвав функцию CryptGetKeyParam. Значения соли используются для повышения уникальности ключей сеанса, что затрудняет атаки словаря. Значение соли по умолчанию равно нулю для поставщика шифрования Microsoft Base. |
|
pbData указывает на структуру CRYPT_INTEGER_BLOB, содержащую соль. Дополнительные сведения см. в разделе Указание значения соли. |
Если ключ (DSS)
Ценность | Значение |
---|---|
|
|
|
pbData указывает на основной модуль P ключа DSS. Данные в виде структуры CRYPT_INTEGER_BLOB. Элемент pbData является значением, а элемент cbData — длина значения. Ожидается, что значение не имеет сведений о заголовке и в малоконечной форме. |
|
pbData указывает на основной Q ключа DSS. Данные имеют форму структуры CRYPT_INTEGER_BLOB, в которой элемент pbData является значением, а элемент cbData — длина значения. Ожидается, что значение не имеет сведений о заголовке и в малоконечной форме. |
|
После задания значений P, Q и G вызов, указывающий значение KP_X для dwParam и NULL для параметра pbData можно выполнить в функцию CryptSetKeyParam. Это приводит к созданию значений X и Y. |
Если ключ алгоритма Diffie-Hellman или алгоритма цифровой подписи (DSA) задается hKey, значение dwParam также может быть задано одним из следующих значений.
Ценность | Значение |
---|---|
|
Задает сведения для импортированного ключа Diffie-Hellman. Параметр pbData — это адрес структуры CMS_DH_KEY_INFO, содержащей заданные ключевые сведения. |
|
Задает открытые параметры (P, Q, G и т. д.) ключа DSS или Diffie-Hellman. Дескриптор ключа для этого ключа должен находиться в состоянии PREGEN, созданном с помощью флага CRYPT_PREGEN. Параметр pbData |
Если ключа сеанса
Ценность | Значение |
---|---|
|
Этот тип значения можно использовать только с ключами RC2 и добавлен из-за реализации функции CryptSetKeyParam в расширенном поставщике шифрования Майкрософт до Windows 2000. В предыдущей реализации ключи RC2 в расширенном поставщике были 128 битами, но эффективная длина ключа, используемая для расширения ключей в таблице ключей, составила всего 40 бит. Это снизило силу алгоритма до 40 бит. Для обеспечения обратной совместимости предыдущая реализация останется как есть. Однако эффективная длина ключа может быть больше 40 бит с помощью KP_EFFECTIVE_KEYLEN в вызове CryptSetKeyParam. Эффективная длина ключа передается в параметре pbData в качестве указателя на значение DWORD с эффективным значением длины ключа. Минимальная эффективная длина ключа в поставщике шифрования Microsoft Base — одна, а максимальная — 40. В расширенном поставщике шифрования Майкрософт минимальное значение равно 1, а максимальное — 1024. Длина ключа должна быть задана перед шифрованием или расшифровкой с помощью ключа. |
|
Задает максимальную разрешенную версию (TLS). Это свойство применяется только к ключам SSL и TLS. Параметр |
|
pbData указывает на массив BYTE, указывающий вектор инициализации. Этот массив должен содержать элементы BlockLength/8. Например, если длина блока составляет 64 бита, вектор инициализации состоит из 8 байт.
Вектор инициализации по умолчанию равен нулю для поставщика шифрования Microsoft Base. |
|
Задайте значение ключа для ключа шифрования данных уровня "Стандартный" (DES). Параметр pbData |
|
Задайте режим заполнения. Параметр
|
|
|
|
pbData указывает на значение DWORD, указывающее количество битов, обработанных на цикл, когда используется режим вывода обратной связи (OFB) или режим обратной связи шифров (CFB). Число битов, обработанных на цикл, по умолчанию равно 8 для поставщика шифрования Microsoft Base. |
Если ключ RSA
Ценность | Значение |
---|---|
|
Задайте параметры оптимального асимметричного шифрования (OAEP) (PKCS #1 версии 2) для ключа. Параметр pbData является адресом CRYPT_DATA_BLOB структуры, содержащей метку OAEP. Это свойство применяется только к ключам RSA. |
Обратите внимание, что следующие значения не используются:
- KP_ADMIN_PIN
- KP_CMS_KEY_INFO
- KP_INFO
- KP_KEYEXCHANGE_PIN
- KP_PRECOMP_MD5
- KP_PRECOMP_SHA
- KP_PREHASH
- KP_PUB_EX_LEN
- KP_PUB_EX_VAL
- KP_RA
- KP_RB
- KP_ROUNDS
- KP_RP
- KP_SIGNATURE_PIN
- KP_Y
[in] pbData
Указатель на буфер, инициализированный со значением, заданным перед вызовом CryptSetKeyParam. Форма этих данных зависит от значения dwParam.
[in] dwFlags
Используется только в том случае, если dwParam KP_ALGID. Параметр dwFlags
Возвращаемое значение
Если функция выполнена успешно, возвращаемое значение ненулевое (TRUE).
Если функция завершается ошибкой, возвращаемое значение равно нулю (FALSE). Для получения расширенных сведений об ошибке вызовите GetLastError.
Коды ошибок, предуставленные NTE, создаются конкретным используемым поставщиком служб CSP. Ниже приведены некоторые возможные коды ошибок.
Замечания
Если параметры KP_Q, KP_P или KP_X заданы в ключе PREGEN Diffie-Hellman или DSS, длина ключа должна быть совместима с длиной ключа с использованием верхних 16 бит dwFlags при создании ключа с помощью CryptGenKey. Если длина ключа не была задана в CryptGenKey, используется длина ключа по умолчанию. Это приведет к возникновению ошибки, если для задания P, Q или X используется длина ключа, не относящийся к неразрешенности.
Примеры
Пример использования этой функции см. в разделе пример программы C: дедупликация ключа сеанса. Дополнительные сведения о коде, использующего эту функцию, см. в примере программы C: настройка и получение параметров ключа сеанса.
Требования
Требование | Ценность |
---|---|
минимальные поддерживаемые клиентские | Windows XP [только классические приложения] |
минимальный поддерживаемый сервер | Windows Server 2003 [только классические приложения] |
целевая платформа | Виндоус |
заголовка | wincrypt.h |
библиотеки |
Advapi32.lib |
DLL | Advapi32.dll |