Функция BCryptKeyDerivation (bcrypt.h)
Функция BCryptKeyDerivation наследует ключ, не требуя секретного соглашения. Он похож по функциональности на BCryptDeriveKey , но не требует BCRYPT_SECRET_HANDLE значения в качестве входных данных.
Синтаксис
NTSTATUS BCryptKeyDerivation(
[in] BCRYPT_KEY_HANDLE hKey,
[in, optional] BCryptBufferDesc *pParameterList,
[out] PUCHAR pbDerivedKey,
[in] ULONG cbDerivedKey,
[out] ULONG *pcbResult,
[in] ULONG dwFlags
);
Параметры
[in] hKey
Дескриптор входного ключа.
[in, optional] pParameterList
Указатель на структуру BCryptBufferDesc , содержащую параметры KDF. Этот параметр является необязательным и может иметь значение NULL , если он не требуется. Параметры могут быть характерными для функции наследования ключа (KDF) или универсальной. В следующей таблице показаны обязательные и необязательные параметры для конкретных KDF, реализованных поставщиком Microsoft Primitive.
KDF | Параметр | Обязательно |
---|---|---|
SP800-108 HMAC в режиме счетчика | KDF_LABEL | да |
KDF_CONTEXT | да | |
KDF_HASH_ALGORITHM | да | |
SP800-56A | KDF_ALGORITHMID | да |
KDF_PARTYUINFO | да | |
KDF_PARTYVINFO | да | |
KDF_HASH_ALGORITHM | да | |
KDF_SUPPPUBINFO | нет | |
KDF_SUPPPRIVINFO | нет | |
PBKDF2 | KDF_HASH_ALGORITHM | да |
KDF_SALT | да | |
KDF_ITERATION_COUNT | нет | |
CAPI_KDF | KDF_HASH_ALGORITHM | да |
Можно использовать следующий универсальный параметр:
- KDF_GENERIC_PARAMETER
SP800-108 HMAC в режиме счетчика:
- KDF_GENERIC_PARAMETER = KDF_LABEL||0x00||KDF_CONTEXT
SP800-56A
- KDF_GENERIC_PARAMETER = KDF_ALGORITHMID || KDF_PARTYUINFO || KDF_PARTYVINFO {|| KDF_SUPPPUBINFO } {|| KDF_SUPPPRIVINFO }
PBKDF2
- KDF_GENERIC_PARAMETER = KDF_SALT
- KDF_ITERATION_COUNT — по умолчанию — 10000
CAPI_KDF
- KDF_GENERIC_PARAMETER = не используется
[out] pbDerivedKey
Адрес буфера, получающего ключ. Параметр cbDerivedKey содержит размер этого буфера.
[in] cbDerivedKey
Размер (в байтах) буфера, на который указывает параметр pbDerivedKey .
[out] pcbResult
Указатель на переменную, которая получает количество байтов, скопированных в буфер, на который указывает параметр pbDerivedKey .
[in] dwFlags
Флаги, которые изменяют поведение этой функции. Следующее значение можно использовать с поставщиком Microsoft Primitive.
Значение | Значение |
---|---|
|
Указывает, что целевым алгоритмом является AES и поэтому ключ должен быть развернут дважды. Этот флаг действителен только с алгоритмом CAPI_KDF. |
Возвращаемое значение
Возвращает код состояния, указывающий на успешное или неудачное выполнение функции.
Комментарии
Перед вызовом BCryptKeyDerivation можно использовать следующие идентификаторы алгоритма в функции BCryptOpenAlgorithmProvider:
- BCRYPT_CAPI_KDF_ALGORITHM
- BCRYPT_SP800108_CTR_HMAC_ALGORITHM
- BCRYPT_SP80056A_CONCAT_ALGORITHM
- BCRYPT_PBKDF2_ALGORITHM
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 8 [классические приложения | Приложения UWP] |
Минимальная версия сервера | Windows Server 2012 [классические приложения | Приложения UWP] |
Целевая платформа | Windows |
Header | bcrypt.h |
Библиотека | Bcrypt.lib |
DLL | Bcrypt.dll |