기본 공급자 키 BLOB

기본 공급자 및 확장 공급자는 동일한 키 BLOB을 사용합니다.

공개 키 BLOB

퍼블릭 키 BLOB(PUBLICKEYBLOB 형식)은 CSP(암호화 서비스 공급자) 외부에 퍼블릭 키를 저장하는 데 사용됩니다. 기본 공급자 공개 키 BLOB의 형식은 다음과 같습니다.

PUBLICKEYSTRUC  publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];

다음 표에서는 각 공개 키 구성 요소에 대해 설명합니다. 모든 값은 little-endian 형식입니다.

필드 설명
T:System.Security.Cryptography.RSA 공개 키 모듈러스 데이터는 RSAPUBKEY 구조 바로 다음에 있습니다. 이 데이터의 크기는 공개 키의 크기에 따라 달라집니다. RSAPUBKEY bitlen 필드의 값을 8로 나누어 바이트 수를 결정할 수 있습니다.
publickeystruc PUBLICKEYSTRUC 구조체입니다.
rsapubkey RSAPUBKEY 구조체입니다. 매직 멤버는 0x31415352 설정해야 합니다. 이 16진수 값은 RSA1의 ASCII 인코딩입니다.

 

참고

공개 키 BLOB은 암호화되지 않습니다. 일반 텍스트 형식의 공용 키가 포함되어 있습니다.

 

프라이빗 키 BLOB

PRIVATEKEYBLOB 형식의 프라이빗 키 BLOB은 CSP 외부에 프라이빗 키를 저장하는 데 사용됩니다. 기본 공급자 프라이빗 키 BLOB의 형식은 다음과 같습니다.

PUBLICKEYSTRUC  publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];
BYTE prime1[rsapubkey.bitlen/16];
BYTE prime2[rsapubkey.bitlen/16];
BYTE exponent1[rsapubkey.bitlen/16];
BYTE exponent2[rsapubkey.bitlen/16];
BYTE coefficient[rsapubkey.bitlen/16];
BYTE privateExponent[rsapubkey.bitlen/8];

다음 표에서는 프라이빗 키 BLOB 구성 요소에 대해 설명합니다.

참고

이러한 필드는 사소한 차이가 있는 PKCS( 공개 키 암호화 표준 ) #1 섹션 7.2에 설명된 필드에 해당합니다.

 

필드 Description
계수 계수. 숫자 값은 (q의 역) mod p입니다.
exponent1 지수 1. 숫자 값은 d mod(p – 1)입니다.
exponent2 지수 2. 숫자 값은 d mod(q – 1)입니다.
모듈러스 모듈러스입니다. 이 값은 Prime1×Prime2 이며 n이라고도 합니다.
prime1 소수 1, 종종 p로 알려진.
prime2 소수 2, 종종 q로 알려진.
privateExponent 프라이빗 지수(d라고도 함).
publickeystruc PUBLICKEYSTRUC 구조체입니다.
rsapubkey RSAPUBKEY 구조체입니다. 매직 멤버는 0x32415352 설정해야 합니다. 이 16진수 값은 RSA2의 ASCII 인코딩입니다.

 

참고

프라이빗 키 BLOB은 암호화되지 않습니다. 일반 텍스트 형식의 프라이빗 키가 포함되어 있습니다.

 

CryptExportKey를 호출할 때 개발자는 키를 암호화할지 여부를 선택할 수 있습니다. privateKEYBLOBhExpKey 매개 변수에 세션 키에 대한 유효한 핸들이 포함된 경우 암호화됩니다. BLOB의 PUBLICKEYSTRUC 부분을 제외한 모든 항목이 암호화됩니다.

참고

암호화 알고리즘 및 암호화 키 매개 변수는 프라이빗 키 BLOB과 함께 저장되지 않습니다. 애플리케이션은 이 정보를 관리하고 저장해야 합니다. hExpKey에 대해 0이 전달되면 프라이빗 키가 암호화 없이 내보내집니다.

 

주의

암호화 없이 프라이빗 키를 내보내는 것은 권한 없는 엔터티의 가로채기 및 사용에 취약하기 때문에 위험합니다.

 

단순 키 BLOB

SIMPLEBLOB 형식의 단순 키 BLOB은 CSP 외부에 세션 키를 저장하고 전송하는 데 사용됩니다. 기본 공급자 단순 키 BLOB은 항상 키 교환 공개 키로 암호화됩니다. SIMPLEBLOBpbData 멤버는 다음 형식의 바이트 시퀀스입니다.

PUBLICKEYSTRUC  publickeystruc;
ALG_ID algid;
BYTE encryptedkey[rsapubkey.bitlen/8];

다음 표에서는 SIMPLEBLOBpbData 멤버의 각 구성 요소에 대해 설명합니다.

필드 설명
algid 세션 키 데이터를 암호화하는 데 사용되는 암호화 알고리즘을 지정하는 ALG_ID 구조입니다. 일반적으로 CALG_RSA_KEYX 값은 RSA 공개 키 알고리즘을 사용하여 세션 키 데이터가 키 교환 공개 키로 암호화되었음을 나타냅니다.
encryptedkey 암호화된 세션 키 데이터를 PKCS #1 형식으로 나타내는 BYTE 시퀀스로, 암호화 블록 2를 입력합니다. 이 데이터 형식에 대한 자세한 내용은 RSA Data Security, Inc.에서 게시한 PKCS(공개 키 암호화 표준) #1을 참조하세요. 이 데이터는 항상 공개 키의 모듈러스와 같은 크기입니다. 예를 들어 Microsoft RSA 기본 공급자가 생성한 공개 키의 길이는 512비트(64바이트)이므로 암호화된 세션 키 데이터도 항상 512비트(64바이트)입니다.
publickeystruc PUBLICKEYSTRUC 구조체입니다.