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
指向包含 KDF 参数的 BCryptBufferDesc 结构的指针。 此参数是可选的,如果不需要,可以为 NULL 。 参数可以特定于密钥派生函数, (KDF) 或泛型。 下表显示了 Microsoft Primitive 提供程序实现的特定 KDF 的必需参数和可选参数。
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 |
标头 | bcrypt.h |
Library | Bcrypt.lib |
DLL | Bcrypt.dll |