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-4, FIPS 198-1 |
|
BCRYPT_HMAC_SHA256_ALG_HANDLE 0x000000B1 |
256비트 보안 해시 알고리즘을 사용하는 해시 기반 메시지 인증 코드에 대한 핸들입니다. | FIPS 180-4, FIPS 198-1 |
|
BCRYPT_HMAC_SHA384_ALG_HANDLE 0x000000C1 |
384비트 보안 해시 알고리즘을 사용하는 해시 기반 메시지 인증 코드에 대한 핸들입니다. | FIPS 180-4, FIPS 198-1 |
|
BCRYPT_HMAC_SHA512_ALG_HANDLE 0x000000D1 |
512비트 보안 해시 알고리즘을 사용하는 해시 기반 메시지 인증 코드에 대한 핸들입니다. | FIPS 180-4, FIPS 198-1 |
|
BCRYPT_HMAC_MD2_ALG_HANDLE 0x00000121 |
MD2 해시 알고리즘을 사용하는 해시 기반 메시지 인증 코드에 대한 핸들입니다. | RFC 1319, RFC 2104 |
|
BCRYPT_HMAC_MD4_ALG_HANDLE 0x00000131 |
MD4 해시 알고리즘을 사용하는 해시 기반 메시지 인증 코드에 대한 핸들입니다. | RFC 1320, RFC 2104 |
|
BCRYPT_HMAC_MD5_ALG_HANDLE 0x00000091 |
MD4 해시 알고리즘을 사용하는 해시 기반 메시지 인증 코드에 대한 핸들입니다. | RFC 1321, RFC 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 202, FIPS 198-1 |
|
BCRYPT_HMAC_SHA3_384_ALG_HANDLE 0x000003F1 |
SHA3 384비트 보안 해시 알고리즘을 사용하는 해시 기반 메시지 인증 코드에 대한 핸들입니다. | FIPS 202, FIPS 198-1 |
|
BCRYPT_HMAC_SHA3_512_ALG_HANDLE 0x00000401 |
SHA3 512비트 보안 해시 알고리즘을 사용하는 해시 기반 메시지 인증 코드에 대한 핸들입니다. | FIPS 202, FIPS 198-1 |
|
BCRYPT_CSHAKE128_ALG_HANDLE 0x00000411 |
SHA3 파생 cSHAKE 128비트 XOF(extendable-output 함수) 해시 알고리즘에 대한 핸들입니다. | SP 800-185 |
|
BCRYPT_CSHAKE256_ALG_HANDLE 0x00000421 |
SHA3 파생 cSHAKE 256비트 XOF(extendable-output 함수) 해시 알고리즘에 대한 핸들입니다. | SP 800-185 |
|
BCRYPT_KMAC128_ALG_HANDLE 0x00000431 |
cSHAKE128을 기반으로 하는 SHA3 파생 KMAC(Keccak 메시지 인증 코드)에 대한 핸들입니다. | SP 800-185 |
|
BCRYPT_KMAC256_ALG_HANDLE 0x00000441 |
cSHAKE256을 기반으로 하는 SHA3 파생 KMAC(Keccak 메시지 인증 코드)에 대한 핸들입니다. | SP 800-185 |
PQ 디지털 서명 알고리즘
비고
이 섹션의 PQDSA 핸들은 상용 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다. 이 섹션에 설명된 기능은 Windows Insider Preview의 시험판 버전에서 사용할 수 있습니다.
| 상수 | 묘사 | 표준 |
|---|---|---|
| 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 Signature Scheme(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 |
CAPI(Crypto API) 키 파생 함수 알고리즘에 대한 핸들입니다. BCryptKeyDerivation 및 NCryptKeyDerivation 함수에서 사용됩니다. |
|
BCRYPT_PBKDF2_ALG_HANDLE 0x00000331 |
PBKDF2(암호 기반 키 파생 함수 2) 알고리즘에 대한 핸들입니다. BCryptKeyDerivation 및 NCryptKeyDerivation 함수에서 사용됩니다. |
|
BCRYPT_SP800108_CTR_HMAC_ALG_HANDLE 0x00000341 |
카운터 모드, HMAC(해시 기반 메시지 인증 코드) 키 파생 함수 알고리즘에 대한 핸들입니다. BCryptKeyDerivation 및 NCryptKeyDerivation 함수에서 사용됩니다. |
|
BCRYPT_SP80056A_CONCAT_ALG_HANDLE 0x00000351 |
SP800-56A 키 파생 함수 알고리즘에 대한 핸들입니다. BCryptKeyDerivation 및 NCryptKeyDerivation 함수에서 사용됩니다. |
|
BCRYPT_HKDF_ALG_HANDLE 0x00000391 |
HMAC 기반 추출 및 확장 키 파생 함수에 대한 핸들입니다. BCryptKeyDerivation 및 NCryptKeyDerivation 함수에서 사용됩니다. |
KEM(키 캡슐화 메커니즘) 알고리즘
비고
이 섹션의 ML-KEM 핸들은 상용 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다. 이 섹션에 설명된 기능은 Windows Insider Preview의 시험판 버전에서 사용할 수 있습니다.
| 상수 | 묘사 | 표준 |
|---|---|---|
| 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 |
키 교환 알고리즘을 Diffie-Hellman 256비트 소수 타원 곡선에 대한 핸들입니다. | SP 800-56A |
|
BCRYPT_ECDH_P384_ALG_HANDLE 0x000002B1 |
키 교환 알고리즘을 Diffie-Hellman 384비트 소수 타원 곡선에 대한 핸들입니다. | SP 800-56A |
|
BCRYPT_ECDH_P521_ALG_HANDLE 0x000002C1 |
키 교환 알고리즘을 Diffie-Hellman 521비트 소수 타원 곡선에 대한 핸들입니다. | 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(Advanced Encryption Standard) 암호화 기반 CMAC(메시지 인증 코드) 대칭 암호화 알고리즘에 대한 핸들입니다. | SP 800-38B |
|
BCRYPT_AES_GMAC_ALG_HANDLE 0x00000111 |
AES(Advanced Encryption Standard) GMAC(Galois 메시지 인증 코드) 대칭 암호화 알고리즘에 대한 핸들입니다. SP800-38D | |
|
BCRYPT_3DES_CBC_ALG_HANDLE 0x00000141 |
CBC(암호 블록 체인 모드)를 사용하는 삼중 데이터 암호화 표준 알고리즘에 대한 핸들입니다. | SP 800-67, SP 800-38A |
|
BCRYPT_3DES_ECB_ALG_HANDLE 0x00000151 |
ECB(전자 코드북 모드)를 사용하는 삼중 데이터 암호화 표준 알고리즘에 대한 핸들입니다. | SP 800-67, SP 800-38A |
|
BCRYPT_3DES_CFB_ALG_HANDLE 0x00000161 |
CFB(암호 피드백 모드)를 사용하는 삼중 데이터 암호화 표준 알고리즘에 대한 핸들입니다. | SP 800-67, SP 800-38A |
|
BCRYPT_3DES_112_CBC_ALG_HANDLE 0x00000171 |
CBC(암호화 블록 체인 모드)를 사용하는 112비트 삼중 데이터 암호화 표준 알고리즘에 대한 핸들입니다. | SP 800-67, SP 800-38A |
|
BCRYPT_3DES_112_ECB_ALG_HANDLE 0x00000181 |
ECB(전자 코드북 모드)를 사용하는 112비트 삼중 데이터 암호화 표준 알고리즘에 대한 핸들입니다. | SP 800-67, SP 800-38A |
|
BCRYPT_3DES_112_CFB_ALG_HANDLE 0x00000191 |
CFB(암호 피드백 모드)를 사용하는 112비트 삼중 데이터 암호화 표준 알고리즘에 대한 핸들입니다. | SP 800-67, SP 800-38A |
|
BCRYPT_AES_CBC_ALG_HANDLE 0x000001A1 |
CBC(암호화 블록 체인 모드)를 사용하는 AES(Advanced Encryption Standard) 알고리즘에 대한 핸들입니다. | FIPS 197 |
|
BCRYPT_AES_ECB_ALG_HANDLE 0x000001B1 |
ECB(전자 코드북 모드)를 사용하는 AES(Advanced Encryption Standard) 알고리즘에 대한 핸들입니다. | FIPS 197 |
|
BCRYPT_AES_CFB_ALG_HANDLE 0x000001C1 |
CFB(암호 피드백 모드)를 사용하는 AES(Advanced Encryption Standard) 알고리즘에 대한 핸들입니다. | FIPS 197 |
|
BCRYPT_AES_CCM_ALG_HANDLE 0x000001D1 |
CCM(CBC-MAC 모드)에서 Counter를 사용하는 AES(Advanced Encryption Standard) 알고리즘에 대한 핸들입니다. | FIPS 197 |
|
BCRYPT_AES_GCM_ALG_HANDLE 0x000001E1 |
GCM(Galois 카운터 모드)을 사용하는 AES(Advanced Encryption Standard) 알고리즘에 대한 핸들입니다. | FIPS 197 |
|
BCRYPT_DES_CBC_ALG_HANDLE 0x000001F1 |
GCM(암호화 블록 체인 모드)을 사용하는 DES(데이터 암호화 표준) 알고리즘에 대한 핸들입니다. | FIPS 46-3, FIPS 81 |
|
BCRYPT_DES_ECB_ALG_HANDLE 0x00000201 |
ECB(전자 코드북 모드)를 사용하는 DES(데이터 암호화 표준) 알고리즘에 대한 핸들입니다. | FIPS 46-3, FIPS 81 |
|
BCRYPT_DES_CFB_ALG_HANDLE 0x00000211 |
CFB(암호 피드백 모드)를 사용하는 DES(데이터 암호화 표준) 알고리즘에 대한 핸들입니다. | FIPS 46-3, FIPS 81 |
발언
알고리즘 핸들이 필요한 모든 상황에서 이러한 핸들을 사용할 수 있습니다. 그러나 알고리즘 핸들이 공유되고 수정할 수 없으므로 BCryptSetProperty 에 대한 호출이 실패합니다. 또한 커널 모드에서는 IRQL=DISPATCH 이러한 핸들을 사용할 수 없습니다.