CNG 算法伪句柄

从 Windows 10 开始,CNG(加密 API:下一代)为加密作提供预定义的算法句柄。 这些算法通过无需手动创建常见加密算法的句柄(包括哈希函数、加密算法、数字签名和密钥派生函数)来简化开发。

哈希和消息身份验证代码 (MAC) 算法

不断 描述 标准
BCRYPT_MD2_ALG_HANDLE
0x00000001
MD2 哈希算法的句柄。 RFC 1319
BCRYPT_MD4_ALG_HANDLE
0x00000011
MD4 哈希算法的句柄。 RFC 1320
BCRYPT_MD5_ALG_HANDLE
0x00000021
MD5 哈希算法的句柄。 RFC 1321
BCRYPT_SHA1_ALG_HANDLE
0x00000031
160 位安全哈希算法的句柄。 FIPS 180-4
BCRYPT_SHA256_ALG_HANDLE
0x00000041
256 位安全哈希算法的句柄。 FIPS 180-4
BCRYPT_SHA384_ALG_HANDLE
0x00000051
384 位安全哈希算法的句柄。 FIPS 180-4
BCRYPT_SHA512_ALG_HANDLE
0x00000061
512 位安全哈希算法的句柄。 FIPS 180-4
BCRYPT_HMAC_SHA1_ALG_HANDLE
0x000000A1
使用 160 位安全哈希算法处理基于哈希的消息身份验证代码的句柄。 FIPS 180-4FIPS 198-1
BCRYPT_HMAC_SHA256_ALG_HANDLE
0x000000B1
使用 256 位安全哈希算法处理基于哈希的消息身份验证代码的句柄。 FIPS 180-4FIPS 198-1
BCRYPT_HMAC_SHA384_ALG_HANDLE
0x000000C1
使用 384 位安全哈希算法处理基于哈希的消息身份验证代码的句柄。 FIPS 180-4FIPS 198-1
BCRYPT_HMAC_SHA512_ALG_HANDLE
0x000000D1
使用 512 位安全哈希算法处理基于哈希的消息身份验证代码的句柄。 FIPS 180-4FIPS 198-1
BCRYPT_HMAC_MD2_ALG_HANDLE
0x00000121
使用 MD2 哈希算法处理基于哈希的消息身份验证代码的句柄。 RFC 1319RFC 2104
BCRYPT_HMAC_MD4_ALG_HANDLE
0x00000131
使用 MD4 哈希算法处理基于哈希的消息身份验证代码的句柄。 RFC 1320RFC 2104
BCRYPT_HMAC_MD5_ALG_HANDLE
0x00000091
使用 MD4 哈希算法处理基于哈希的消息身份验证代码的句柄。 RFC 1321RFC 2104
Windows 11 版本 23H2 中可用
BCRYPT_SHA3_256_ALG_HANDLE
0x000003B1
SHA3 256 位安全哈希算法的句柄。 FIPS 202
BCRYPT_SHA3_384_ALG_HANDLE
0x000003C1
SHA3 384 位安全哈希算法的句柄。 FIPS 202
BCRYPT_SHA3_512_ALG_HANDLE
0x000003D1
SHA3 512 位安全哈希算法的句柄。 FIPS 202
BCRYPT_HMAC_SHA3_256_ALG_HANDLE
0x000003E1
使用 SHA3 256 位安全哈希算法处理基于哈希的消息身份验证代码的句柄。 FIPS 202FIPS 198-1
BCRYPT_HMAC_SHA3_384_ALG_HANDLE
0x000003F1
使用 SHA3 384 位安全哈希算法处理基于哈希的消息身份验证代码的句柄。 FIPS 202FIPS 198-1
BCRYPT_HMAC_SHA3_512_ALG_HANDLE
0x00000401
使用 SHA3 512 位安全哈希算法处理基于哈希的消息身份验证代码的句柄。 FIPS 202FIPS 198-1
BCRYPT_CSHAKE128_ALG_HANDLE
0x00000411
SHA3 派生的 cSHAKE 128 位 XOF(扩展输出函数)哈希算法的句柄。 SP 800-185
BCRYPT_CSHAKE256_ALG_HANDLE
0x00000421
SHA3 派生的 cSHAKE 256 位 XOF(扩展输出函数)哈希算法的句柄。 SP 800-185
BCRYPT_KMAC128_ALG_HANDLE
0x00000431
基于 cSHAKE128 构建的 SHA3 派生 Keccak 消息身份验证代码(KMAC)的句柄。 SP 800-185
BCRYPT_KMAC256_ALG_HANDLE
0x00000441
基于 cSHAKE256 构建的 SHA3 派生 Keccak 消息身份验证代码(KMAC)的句柄。 SP 800-185

PQ 数字签名算法

注释

本部分中的 PQDSA 句柄与预发行版产品相关,该产品在商业发布之前可能会进行大幅修改。 Microsoft对此处提供的信息不作任何明示或暗示的保证。 本节中所述的功能在 Windows 预览体验成员预览版的预发行版本中提供。

不断 描述 标准
BCRYPT_LMS_ALG_HANDLE Leighton-Micali Hash-Based 签名 (LMS) 算法的句柄。 RFC 8554
BCRYPT_MLDSA_ALG_HANDLE 模块Lattice-Based 数字签名算法(ML-DSA)的句柄。 FIPS 204
BCRYPT_SLHDSA_ALG_HANDLE 基于无状态哈希的数字签名算法(SLH-DSA)的句柄。 FIPS 205
BCRYPT_XMSS_ALG_HANDLE eXtended Merkle 签名方案 (XMSS) 有状态基于哈希的算法的句柄。 RFC 8391

流密码算法

不断 描述 标准
BCRYPT_RC4_ALG_HANDLE
0x00000071
RC4 流密码算法的句柄。 均可

随机数生成器算法

不断 描述 标准
BCRYPT_RNG_ALG_HANDLE
0x00000081
随机数生成器算法的句柄。 从 Windows 10 开始: 使用的 RNG 算法是在 SP 800-90A 中定义的 AES CTR_DRBG。

密钥派生函数 (KDF) 算法

不断 描述
BCRYPT_CAPI_KDF_ALG_HANDLE
0x00000321
加密 API (CAPI) 密钥派生函数算法的句柄。 由 BCryptKeyDerivationNCryptKeyDerivation 函数使用。
BCRYPT_PBKDF2_ALG_HANDLE
0x00000331
基于密码的密钥派生函数 2 (PBKDF2) 算法的句柄。 由 BCryptKeyDerivationNCryptKeyDerivation 函数使用。
BCRYPT_SP800108_CTR_HMAC_ALG_HANDLE
0x00000341
计数器模式基于哈希的消息身份验证代码 (HMAC) 密钥派生函数算法的句柄。 由 BCryptKeyDerivationNCryptKeyDerivation 函数使用。
BCRYPT_SP80056A_CONCAT_ALG_HANDLE
0x00000351
SP800-56A 密钥派生函数算法的句柄。 由 BCryptKeyDerivationNCryptKeyDerivation 函数使用。
BCRYPT_HKDF_ALG_HANDLE
0x00000391
基于 HMAC 的提取和扩展密钥派生函数的句柄。 由 BCryptKeyDerivationNCryptKeyDerivation 函数使用。

密钥封装机制 (KEM) 算法

注释

本部分中的 ML-KEM 句柄与预发行产品相关,该产品在商业发布之前可能会进行大幅修改。 Microsoft对此处提供的信息不作任何明示或暗示的保证。 本节中所述的功能在 Windows 预览体验成员预览版的预发行版本中提供。

不断 描述 标准
BCRYPT_MLKEM_ALG_HANDLE 模块Lattice-Based 密钥封装机制(ML-KEM)算法的句柄。 FIPS 203

非对称算法

不断 描述 标准
BCRYPT_DH_ALG_HANDLE
0x00000281
Diffie-Hellman 密钥交换算法的句柄。 PKCS #3
BCRYPT_DSA_ALG_HANDLE
0x000002D1
数字签名算法(DSA)数字签名算法的句柄。 FIPS 186-2
从 Windows 8 开始: 此算法支持 FIPS 186-3。 小于或等于 1024 位的键遵循 FIPS 186-2 ,密钥大于 1024 到 FIPS 186-3
BCRYPT_ECDH_ALG_HANDLE
0x00000291
泛型质椭圆曲线的句柄 Diffie-Hellman 密钥交换算法。 SP 800-56A
BCRYPT_ECDH_P256_ALG_HANDLE
0x000002A1
256 位质椭圆曲线的句柄 Diffie-Hellman 密钥交换算法。 SP 800-56A
BCRYPT_ECDH_P384_ALG_HANDLE
0x000002B1
384 位质椭圆曲线的句柄 Diffie-Hellman 密钥交换算法。 SP 800-56A
BCRYPT_ECDH_P521_ALG_HANDLE
0x000002C1
521 位质椭圆曲线的句柄 Diffie-Hellman 密钥交换算法。 SP 800-56A
BCRYPT_ECDSA_ALG_HANDLE
0x000000F1
泛型质椭圆曲线数字签名算法的句柄。 ANSI X9.62
BCRYPT_ECDSA_P256_ALG_HANDLE
0x000002E1
256 位质椭圆曲线数字签名算法的句柄。 FIPS 186-2、X9.62
BCRYPT_ECDSA_P384_ALG_HANDLE
0x000002F1
384 位质椭圆曲线数字签名算法的句柄。 FIPS 186-2、X9.62
BCRYPT_ECDSA_P521_ALG_HANDLE
0x00000301
521 位质椭圆曲线数字签名算法的句柄。 FIPS 186-2、X9.62
BCRYPT_RSA_ALG_HANDLE
0x000000E1
RSA 公钥算法的句柄。 PKCS #1 v1.5 和 v2.0
BCRYPT_RSA_SIGN_ALG_HANDLE
0x00000311
RSA 签名算法的句柄。 目前不支持此算法。 可以使用 BCRYPT_RSA_ALG_HANDLE 算法来执行 RSA 签名作。 PKCS #1 v1.5 和 v2.0。

阻止基于密码和基于密码的消息身份验证代码算法

不断 描述 标准
BCRYPT_AES_CMAC_ALG_HANDLE
0x00000101
高级加密标准(AES)基于密码的消息身份验证代码(CMAC)对称加密算法的句柄。 SP 800-38B
BCRYPT_AES_GMAC_ALG_HANDLE
0x00000111
高级加密标准 (AES) Galois 消息身份验证代码 (GMAC) 对称加密算法的句柄。 SP800-38D
BCRYPT_3DES_CBC_ALG_HANDLE
0x00000141
使用密码块链模式(CBC)的三重数据加密标准算法的句柄。 SP 800-67SP 800-38A
BCRYPT_3DES_ECB_ALG_HANDLE
0x00000151
使用电子代码手册模式的三重数据加密标准算法的句柄(ECB)。 SP 800-67SP 800-38A
BCRYPT_3DES_CFB_ALG_HANDLE
0x00000161
使用密码反馈模式的三重数据加密标准算法的句柄(CFB)。 SP 800-67SP 800-38A
BCRYPT_3DES_112_CBC_ALG_HANDLE
0x00000171
使用密码块链模式 (CBC) 的 112 位三重数据加密标准算法的句柄。 SP 800-67SP 800-38A
BCRYPT_3DES_112_ECB_ALG_HANDLE
0x00000181
使用电子 Codebook 模式的 112 位三重数据加密标准算法(ECB)的句柄。 SP 800-67SP 800-38A
BCRYPT_3DES_112_CFB_ALG_HANDLE
0x00000191
使用密码反馈模式 (CFB) 的 112 位三重数据加密标准算法的句柄。 SP 800-67SP 800-38A
BCRYPT_AES_CBC_ALG_HANDLE
0x000001A1
使用密码块链模式(CBC)的高级加密标准(AES)算法的句柄。 FIPS 197
BCRYPT_AES_ECB_ALG_HANDLE
0x000001B1
使用电子代码手册模式(ECB)的高级加密标准(AES)算法的句柄。 FIPS 197
BCRYPT_AES_CFB_ALG_HANDLE
0x000001C1
使用密码反馈模式(CFB)的高级加密标准 (AES) 算法的句柄。 FIPS 197
BCRYPT_AES_CCM_ALG_HANDLE
0x000001D1
将计数器与 CBC-MAC 模式(CCM)配合使用的高级加密标准 (AES) 算法的句柄。 FIPS 197
BCRYPT_AES_GCM_ALG_HANDLE
0x000001E1
使用 Galois 计数器模式 (GCM) 的高级加密标准 (AES) 算法的句柄。 FIPS 197
BCRYPT_DES_CBC_ALG_HANDLE
0x000001F1
使用密码块链模式(GCM)的数据加密标准(DES)算法的句柄。 FIPS 46-3FIPS 81
BCRYPT_DES_ECB_ALG_HANDLE
0x00000201
使用电子编解码器模式(ECB)的数据加密标准(DES)算法的句柄。 FIPS 46-3FIPS 81
BCRYPT_DES_CFB_ALG_HANDLE
0x00000211
使用密码反馈模式(CFB)的数据加密标准(DES)算法的句柄。 FIPS 46-3FIPS 81

言论

在任何需要算法句柄的情况下,都可以使用这些句柄。 但是,当算法句柄共享且无法修改时,对 BCryptSetProperty 的任何调用都会失败。 此外,这些句柄不能在 IRQL=DISPATCH 内核模式下使用。