기본 공급자 키 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를 호출할 때 개발자는 키를 암호화할지 여부를 선택할 수 있습니다. privateKEYBLOB은 hExpKey 매개 변수에 세션 키에 대한 유효한 핸들이 포함된 경우 암호화됩니다. BLOB의 PUBLICKEYSTRUC 부분을 제외한 모든 항목이 암호화됩니다.
참고
암호화 알고리즘 및 암호화 키 매개 변수는 프라이빗 키 BLOB과 함께 저장되지 않습니다. 애플리케이션은 이 정보를 관리하고 저장해야 합니다. hExpKey에 대해 0이 전달되면 프라이빗 키가 암호화 없이 내보내집니다.
주의
암호화 없이 프라이빗 키를 내보내는 것은 권한 없는 엔터티의 가로채기 및 사용에 취약하기 때문에 위험합니다.
단순 키 BLOB
SIMPLEBLOB 형식의 단순 키 BLOB은 CSP 외부에 세션 키를 저장하고 전송하는 데 사용됩니다. 기본 공급자 단순 키 BLOB은 항상 키 교환 공개 키로 암호화됩니다. SIMPLEBLOB의 pbData 멤버는 다음 형식의 바이트 시퀀스입니다.
PUBLICKEYSTRUC publickeystruc;
ALG_ID algid;
BYTE encryptedkey[rsapubkey.bitlen/8];
다음 표에서는 SIMPLEBLOB의 pbData 멤버의 각 구성 요소에 대해 설명합니다.
필드 | 설명 |
---|---|
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 구조체입니다. |