기본 공급자 및 확장 공급자는 동일한 키 BLOB사용합니다.
- 공개 키 BLOB
- 프라이빗 키 BLOB
- 간단한 키 BLOB
공개 키 BLOB
공개 키 BLOBpublicKEYBLOB 형식은 CSP(암호화 서비스 공급자) 외부에공개 키를 저장하는 데 사용됩니다. 기본 공급자 공개 키 BLOB의 형식은 다음과 같습니다.
PUBLICKEYSTRUC publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];
다음 표에서는 각 공개 키 구성 요소에 대해 설명합니다. 모든 값은 little-endian 형식입니다.
| 밭 | 묘사 |
|---|---|
| 계수 | 공개 키 모듈러스 데이터는 RSAPUBKEY 구조 바로 뒤의 위치에 있습니다. 이 데이터의 크기는 공개 키의 크기에 따라 달라집니다. 바이트 수는 RSAPUBKEY bitlen 필드의 값을 8로 나누어 확인할 수 있습니다. |
| publickeystruc | PUBLICKEYSTRUC 구조체입니다. |
| rsapubkey | RSAPUBKEY 구조체입니다. 매직 멤버는 0x31415352 설정해야 합니다. 이 16진수 값은 RSA1의 ASCII 인코딩입니다. |
메모
공개 키 BLOB은 암호화되지 않습니다. 공용 키는 일반 텍스트 형식으로 포함되어 있습니다.
프라이빗 키 BLOB
privateKEYBLOB 형식인 프라이빗 키 BLOBCSP 외부에프라이빗 키를 저장하는 데 사용됩니다. 기본 공급자 프라이빗 키 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에 설명된 필드에 해당합니다.
| 밭 | 묘사 |
|---|---|
| 계수 | 계수. 이 값의 숫자 값은 (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호출할 때 개발자는 키를 암호화할지 여부를 선택할 수 있습니다. hExpKey 매개 변수에 세션 키에 대한 유효한 핸들이 포함된 경우 PRIVATEKEYBLOB 암호화됩니다. BLOB의 PUBLICKEYSTRUC 부분을 제외한 모든 항목이 암호화됩니다.
메모
암호화 알고리즘 및 암호화 키 매개 변수는 프라이빗 키 BLOB과 함께 저장되지 않습니다. 애플리케이션은 이 정보를 관리하고 저장해야 합니다. hExpKey대해 0이 전달되면 프라이빗 키가 암호화 없이 내보내집니다.
주의
암호화 없이 프라이빗 키를 내보내는 것은 무단 엔터티의 가로채기 및 사용에 취약하기 때문에 위험합니다.
단순 키 BLOB
SIMPLEBLOB 형식인 단순 키 BLOBCSP 외부에 세션 키를 저장하고 전송하는 데 사용됩니다. 기본 공급자 단순 키 BLOB은 항상 키 교환 공개 키사용하여 암호화됩니다. SIMPLEBLOBpbData 멤버는 다음 형식의 바이트 시퀀스입니다.
PUBLICKEYSTRUC publickeystruc;
ALG_ID algid;
BYTE encryptedkey[rsapubkey.bitlen/8];
다음 표에서는 SIMPLEBLOBpbData 멤버의 각 구성 요소에 대해 설명합니다.
| 밭 | 묘사 |
|---|---|
| algid | 세션 키 데이터를 암호화하는 데 사용되는 암호화 알고리즘을 지정하는 ALG_ID 구조체입니다. 일반적으로 CALG_RSA_KEYX 값이 있습니다. 이는 세션 키 데이터가 RSA 공개 키 알고리즘사용하여 키 교환 공개 키로 암호화되었음을 나타냅니다. |
| encryptedkey | 암호화된 세션 키 데이터를 PKCS #1 형식의 2 암호화 블록 형식으로 나타내는 BYTE 시퀀스입니다. 이 데이터 형식에 대한 자세한 내용은 RSA Data Security, Inc.에서 게시한 PKCS(공개 키 암호화 표준) #1을 참조하세요. 이 데이터는 항상 공개 키의 모듈러스와 같은 크기입니다. 예를 들어 Microsoft RSA 기본 공급자가 생성한 공개 키는 길이가 512비트(64바이트)일 수 있으므로 암호화된 세션 키 데이터도 항상 512비트(64바이트)입니다. |
| publickeystruc | PUBLICKEYSTRUC 구조체입니다. |