CryptGetKeyParam 함수(wincrypt.h)

중요 이 API는 더 이상 사용되지 않습니다. 신규 및 기존 소프트웨어는 Cryptography Next Generation API 사용을 시작해야 합니다. Microsoft는 향후 릴리스에서 이 API를 제거할 수 있습니다.
 
CryptGetKeyParam 함수는 키의 작업을 제어하는 데이터를 검색합니다. Microsoft Cryptographic Service Provider를 사용하는 경우 기본 대칭 키 지정 자료는 이 또는 다른 함수에서 가져올 수 없습니다.

구문

BOOL CryptGetKeyParam(
  [in]      HCRYPTKEY hKey,
  [in]      DWORD     dwParam,
  [out]     BYTE      *pbData,
  [in, out] DWORD     *pdwDataLen,
  [in]      DWORD     dwFlags
);

매개 변수

[in] hKey

쿼리할 키의 핸들입니다.

[in] dwParam

만들 쿼리의 유형을 지정합니다.

모든 키 형식에 대해 이 매개 변수는 다음 값 중 하나를 포함할 수 있습니다.

의미
KP_ALGID
키 알고리즘을 검색합니다. pbData 매개 변수는 키를 만들 때 지정된 알고리즘의 식별자를 수신하는 ALG_ID 값에 대한 포인터입니다.

CryptGenKey 함수의 Algid 매개 변수에 대해 AT_KEYEXCHANGE 또는 AT_SIGNATURE 지정하면 키를 생성하는 데 사용되는 알고리즘 식별자는 사용된 공급자에 따라 달라집니다. 자세한 내용은 ALG_ID 참조하세요.

KP_BLOCKLEN
hKey 매개 변수로 세션 키를 지정하는 경우 키 암호의 블록 길이를 검색합니다. pbData 매개 변수는 블록 길이(비트)를 수신하는 DWORD 값에 대한 포인터입니다. 스트림 암호화의 경우 이 값은 항상 0입니다.

hKey에서 퍼블릭/프라이빗 키 쌍을 지정하는 경우 키 쌍의 암호화 세분성을 검색합니다. pbData 매개 변수는 암호화 세분성을 비트 단위로 받는 DWORD 값에 대한 포인터입니다. 예를 들어 Microsoft 기본 암호화 공급자 는 512비트 RSA 키 쌍을 생성하므로 이러한 키에 대해 값 512가 반환됩니다. 공개 키 알고리즘암호화를 지원하지 않는 경우 검색된 값은 정의되지 않습니다.

KP_CERTIFICATE
pbData는 DER(Distinguished Encoding Rules)를 사용하여 인코딩된 X.509 인증서를 수신하는 버퍼의 주소입니다. 인증서공개 키는 해당 서명 또는 교환 키와 일치해야 합니다.
KP_GET_USE_COUNT
이 값은 사용되지 않습니다.
KP_KEYLEN
키의 실제 길이를 검색합니다. pbData 매개 변수는 키 길이(비트)를 수신하는 DWORD 값에 대한 포인터입니다. KP_KEYLEN 모든 키 형식의 길이를 가져오는 데 사용할 수 있습니다. Microsoft CSP(암호화 서비스 공급자)는 CALG_DES 64비트, CALG_3DES_112 128비트, CALG_3DES 192비트 키 길이를 반환합니다. 이러한 길이는 PP_ENUMALGS 설정된 CryptGetProvParam 함수의 dwParam 값으로 알고리즘을 열거할 때 반환되는 길이와 다릅니다. 이 호출에서 반환되는 길이는 키에 포함된 패리티 비트를 포함하여 키의 실제 크기입니다.

CALG_CYLINK_MEK 지원하는 Microsoft CSP 해당 알고리즘에 대해 64비트 ALG_ID 반환합니다. CALG_CYLINK_MEK 40비트 키이지만 키 길이를 64비트로 만들기 위한 패리티 및 0 키 비트가 있습니다.

KP_SALT
키의 솔트 값을 검색합니다. pbData 매개 변수는 little-endian 형식으로 솔트 값을 받는 BYTE 배열에 대한 포인터입니다. 솔트 값의 크기는 사용 중인 CSP 및 알고리즘에 따라 달라집니다. 솔트 값은 퍼블릭/프라이빗 키 쌍에는 적용되지 않습니다.
KP_PERMISSIONS
키 권한을 검색합니다. pbData 매개 변수는 키에 대한 권한 플래그를 수신하는 DWORD 값에 대한 포인터입니다.

현재 정의된 권한 식별자는 다음과 같습니다. 키 권한은 0이거나 다음 값 중 하나 이상의 조합일 수 있습니다.

CRYPT_ARCHIVE
키 핸들의 수명 동안 내보내기를 허용합니다. 이 권한은 키의 내부 권한 필드에 이미 설정된 경우에만 설정할 수 있습니다. 이 사용 권한을 지우려는 시도는 무시됩니다.
CRYPT_DECRYPT
암호 해독을 허용합니다.
CRYPT_ENCRYPT
암호화를 허용합니다.
CRYPT_EXPORT
키를 내보낼 수 있도록 허용합니다.
CRYPT_EXPORT_KEY
키를 내보내는 데 사용할 키를 허용합니다.
CRYPT_IMPORT_KEY
키를 가져오는 데 사용할 키를 허용합니다.
CRYPT_MAC
MAC( 메시지 인증 코드 )를 키와 함께 사용할 수 있도록 허용합니다.
CRYPT_READ
값을 읽을 수 있도록 허용합니다.
CRYPT_WRITE
값을 설정할 수 있습니다.
 

hKey 매개 변수로 DSS(디지털 서명 표준) 키를 지정하는 경우 dwParam 값을 다음 값 중 하나로 설정할 수도 있습니다.

의미
KP_P
DSS 키의 모듈러스 소수 P를 검색합니다. pbData 매개 변수는 little-endian 형식으로 값을 수신하는 버퍼에 대한 포인터입니다. pdwDataLen 매개 변수에는 버퍼 크기(바이트)가 포함됩니다.
KP_Q
DSS 키의 모듈러스 소수 Q를 검색합니다. pbData 매개 변수는 little-endian 형식으로 값을 수신하는 버퍼에 대한 포인터입니다. pdwDataLen 매개 변수에는 버퍼 크기(바이트)가 포함됩니다.
KP_G
DSS 키의 생성기 G를 검색합니다. pbData 매개 변수는 little-endian 형식으로 값을 수신하는 버퍼에 대한 포인터입니다. pdwDataLen 매개 변수에는 버퍼 크기(바이트)가 포함됩니다.
 

hKey 매개 변수로 블록 암호세션 키를 지정하는 경우 dwParam 값을 다음 값 중 하나로 설정할 수도 있습니다.

의미
KP_EFFECTIVE_KEYLEN
RC2 키의 유효 키 길이를 검색합니다. pbData 매개 변수는 유효 키 길이를 받는 DWORD 값에 대한 포인터입니다.
KP_IV
키의 초기화 벡터를 검색합니다. pbData 매개 변수는 초기화 벡터를 수신하는 BYTE 배열에 대한 포인터입니다. 이 배열의 크기는 블록 크기(바이트)입니다. 예를 들어 블록 길이가 64비트인 경우 초기화 벡터는 8바이트로 구성됩니다.
KP_PADDING
안쪽 여백 모드를 검색합니다. pbData 매개 변수는 암호에서 사용하는 안쪽 여백 메서드를 식별하는 숫자 식별자를 수신하는 DWORD 값에 대한 포인터입니다. 다음 값 중 하나일 수 있습니다.
PKCS5_PADDING
PKCS 5(초 6.2) 패딩 메서드를 지정합니다.
RANDOM_PADDING
안쪽 여백은 난수를 사용합니다. 이 패딩 메서드는 Microsoft 제공 CSP에서 지원되지 않습니다.
ZERO_PADDING
안쪽 여백은 0을 사용합니다. 이 패딩 메서드는 Microsoft 제공 CSP에서 지원되지 않습니다.
KP_MODE
암호 모드를 검색합니다. pbData 매개 변수는 암호 모드 식별자를 수신하는 DWORD 값에 대한 포인터입니다. 암호 모드에 대한 자세한 내용은 데이터 암호화 및 암호 해독을 참조하세요.

현재 다음 암호 모드 식별자가 정의되어 있습니다.

CRYPT_MODE_CBC
암호 모드는 암호 블록 체인입니다.
CRYPT_MODE_CFB
암호화 모드는 CFB( 암호 피드백 )입니다. Microsoft CSP는 현재 암호 피드백 모드에서 8비트 피드백만 지원합니다.
CRYPT_MODE_ECB
암호 모드는 전자 코드북입니다.
CRYPT_MODE_OFB
암호 모드는 OFB( 출력 피드백 )입니다. Microsoft CSP는 현재 출력 피드백 모드를 지원하지 않습니다.
CRYPT_MODE_CTS
암호 모드는 암호 텍스트 도용 모드입니다.
KP_MODE_BITS
다시 공급할 비트 수를 검색합니다. pbData 매개 변수는 OFB 또는 CFB 암호화 모드를 사용할 때 주기당 처리되는 비트 수를 수신하는 DWORD 값에 대한 포인터입니다.
 

diffie-Hellman 알고리즘 또는 DSA(디지털 서명 알고리즘) 키가 hKey로 지정된 경우 dwParam 값을 다음 값으로 설정할 수도 있습니다.

의미
KP_VERIFY_PARAMS
Diffie-Hellman 알고리즘 또는 DSA 키의 매개 변수를 확인합니다. pbData 매개 변수는 사용되지 않으며 pdwDataLen이 가리키는 값은 0을 받습니다.

이 함수는 키 매개 변수가 유효하거나 그렇지 않으면 0이 아닌 값을 반환합니다.

KP_KEYVAL
이 값은 사용되지 않습니다.

Windows Vista, Windows Server 2003 및 Windows XP: CALG_AGREEDKEY_ANY 형식의 가져온 Diffie-Hellman 알고리즘 키에서 비밀 계약 값을 검색합니다. pbData 매개 변수는 비밀 계약 값을 수신하는 버퍼의 주소(little-endian 형식)입니다. 이 버퍼는 키와 길이가 같아야 합니다. dwFlags 매개 변수는 0xF42A19B6 설정해야 합니다. 이 속성은 로컬 시스템 계정으로 실행되는 스레드에서만 검색할 수 있습니다. 이 속성은 위에 나열된 운영 체제에서 사용할 수 있습니다. 이후 버전에서는 변경되거나 제공되지 않을 수 있습니다.

 

hKey로 인증서를 지정하는 경우 dwParam 값을 다음 값으로 설정할 수도 있습니다.

의미
KP_CERTIFICATE
DER로 인코딩된 X.509 인증서를 포함하는 버퍼입니다. pbData 매개 변수는 사용되지 않으며 pdwDataLen이 가리키는 값은 0을 받습니다.

이 함수는 키 매개 변수가 유효하거나 그렇지 않으면 0이 아닌 값을 반환합니다.

[out] pbData

데이터를 수신하는 버퍼에 대한 포인터입니다. 이 데이터의 형식은 dwParam 값에 따라 달라집니다.

이 버퍼의 크기를 알 수 없는 경우 이 매개 변수에 대해 NULL 을 전달하고 pdwDataLen 에서 가리키는 값을 0으로 설정하여 런타임에 필요한 크기를 검색할 수 있습니다. 이 함수는 pdwDataLen이 가리키는 값에 필요한 버퍼 크기를 바이트 단위로 배치합니다. 자세한 내용은 알 수 없는 길이의 데이터 검색을 참조하세요.

[in, out] pdwDataLen

항목에서 pbData 매개 변수가 가리키는 버퍼의 크기(바이트)를 포함하는 DWORD 값에 대한 포인터입니다. 함수가 반환되면 DWORD 값에는 버퍼에 저장된 바이트 수가 포함됩니다.

참고 버퍼에서 반환된 데이터를 처리할 때 애플리케이션은 반환된 데이터의 실제 크기를 사용해야 합니다. 실제 크기는 입력에 지정된 버퍼의 크기보다 약간 작을 수 있습니다. 입력에서 버퍼 크기는 가능한 가장 큰 출력 데이터가 버퍼에 맞도록 충분히 큰 크기로 지정되기도 합니다. 출력에서 이 매개 변수가 가리키는 변수는 버퍼에 복사된 데이터의 실제 크기를 반영하도록 업데이트됩니다.
 

[in] dwFlags

이 매개 변수는 나중에 사용할 수 있도록 예약되어 있으며 0으로 설정해야 합니다.

반환 값

함수가 성공하면 함수는 0이 아닌 값을 반환합니다.

함수가 실패하면 0을 반환합니다. 확장 오류 정보는 GetLastError를 호출합니다.

"NTE"가 앞에 있는 오류 코드는 사용 중인 특정 CSP에 의해 생성됩니다. 몇 가지 가능한 오류 코드에는 다음이 포함됩니다.

반환 코드 설명
ERROR_INVALID_HANDLE
매개 변수 중 하나는 유효하지 않은 핸들을 지정합니다.
ERROR_INVALID_PARAMETER
매개 변수 중 하나에 유효하지 않은 값이 포함되어 있습니다. 이는 가장 자주 유효하지 않은 포인터입니다.
ERROR_MORE_DATA
pbData 매개 변수로 지정된 버퍼가 반환된 데이터를 저장할 만큼 크지 않은 경우 함수는 ERROR_MORE_DATA 코드를 설정하고 pdwDataLen이 가리키는 변수에 필요한 버퍼 크기를 바이트 단위로 저장합니다.
NTE_BAD_FLAGS
dwFlags 매개 변수가 0이 아닌 경우
NTE_BAD_KEY 또는 NTE_NO_KEY
hKey 매개 변수로 지정된 키가 잘못되었습니다.
NTE_BAD_TYPE
dwParam 매개 변수는 알 수 없는 값 번호를 지정합니다.
NTE_BAD_UID
키를 만들 때 지정된 CSP 컨텍스트 를 찾을 수 없습니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows XP [데스크톱 앱만 해당]
지원되는 최소 서버 Windows Server 2003 [데스크톱 앱만 해당]
대상 플랫폼 Windows
헤더 wincrypt.h
라이브러리 Advapi32.lib
DLL Advapi32.dll

추가 정보

CryptSetKeyParam

키 생성 및 Exchange 함수