Функция 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
Универсальные параметры сопоставляют с конкретными параметрами KDF следующим образом:

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.

Значение Значение
BCRYPT_CAPI_AES_FLAG
Указывает, что целевым алгоритмом является AES и поэтому ключ должен быть развернут дважды. Этот флаг действителен только с алгоритмом CAPI_KDF.

Возвращаемое значение

Возвращает код состояния, указывающий на успешное или неудачное выполнение функции.

Комментарии

Перед вызовом BCryptKeyDerivation можно использовать следующие идентификаторы алгоритма в функции BCryptOpenAlgorithmProvider:

  • BCRYPT_CAPI_KDF_ALGORITHM
  • BCRYPT_SP800108_CTR_HMAC_ALGORITHM
  • BCRYPT_SP80056A_CONCAT_ALGORITHM
  • BCRYPT_PBKDF2_ALGORITHM
Чтобы вызвать эту функцию в режиме ядра, используйте Cng.lib, который входит в состав пакета средств разработки драйверов (DDK). Windows Server 2008 и Windows Vista: Чтобы вызвать эту функцию в режиме ядра, используйте Ksecdd.lib.

Требования

Требование Значение
Минимальная версия клиента Windows 8 [классические приложения | Приложения UWP]
Минимальная версия сервера Windows Server 2012 [классические приложения | Приложения UWP]
Целевая платформа Windows
Header bcrypt.h
Библиотека Bcrypt.lib
DLL Bcrypt.dll

См. также раздел

BCryptDeriveKey

NCryptKeyDerivation