다음을 통해 공유


Diffie-Hellman 버전 3 공개 키 BLOB

Diffie-Hellman 버전 3 공개 키 BLOB (PUBLICKEYBLOB 형식)은 DH 공개 키에 대한 정보를 내보내고 가져오는 데 사용됩니다. 형식은 다음과 같습니다.

BLOBHEADER blobheader; 
                 // As explained under "Data Structures"
DHPUBKEY_VER3 dhpubkeyver3;
BYTE p[dhpubkeyver3.bitlenP/8]; 
                 // Where P is the prime modulus
BYTE q[dhpubkeyver3.bitlenQ/8]; 
                 // Where Q is a large factor of P-1
BYTE g[dhpubkeyver3.bitlenP/8]; 
                 // Where G is the generator parameter
BYTE j[dhpubkeyver3.bitlenJ/8]; 
                 // Where J is (P-1)/Q
BYTE y[dhpubkeyver3.bitlenP/8]; 
                 // Where Y is (G^X) mod P

이 BLOB 형식은 CRYPT_BLOB_VER3 플래그가 CryptExportKey와 함께 사용될 때 내보내집니다. 버전은 BLOB에 있으므로 CryptImportKey와 함께 BLOB을 사용할 때 플래그를 지정할 필요가 없습니다.

또한 이 BLOB 형식은 dwParam 값 KP_PUB_PARAMS 사용하여 DH 키에 키 매개 변수를 설정하는 경우 CryptSetKeyParam 함수와 함께 사용됩니다. 이 작업은 CRYPT_PREGEN 플래그를 사용하여 키를 생성할 때 수행됩니다. 이 상황에서 사용하면 y 값이 무시되므로 BLOB에 포함되지 않아야 합니다.

다음 표에서는 키 BLOB의 각 구성 요소에 대해 설명합니다.

필드 설명
Blobheader BLOBHEADER 구조체입니다. bType 멤버에는 PUBLICKEYBLOB 값이 있어야 합니다.
dhpubkeyver3 DHPUBKEY_VER3 구조체입니다. 매직 멤버는 공개 키에 대한 0x33484400 설정해야 합니다. 16진수 값은 "DH3"의 ASCII 인코딩일 뿐입니다.
P P 값은 DHPUBKEY_VER3 구조체 바로 뒤의 위치에 있으며 항상 DHPUBKEY_VER3 bitlenP 필드(비트 길이 P)의 길이(바이트)를 8(little-endian 형식)으로 나눈 값이어야 합니다.
Q Q 값은 P 값 바로 앞에 위치하며 항상 DHPUBKEY_VER3 bitlenQ 필드의 길이(바이트)를 8(little-endian 형식)으로 나누어야 합니다. bitlenQ 값이 0이면 BLOB에서 값이 없습니다.
G G 값은 Q 값 바로 앞에 있으며 항상 DHPUBKEY_VER3 비트렌프 필드(P의 비트 길이)의 길이(바이트)를 8로 나눈 값이어야 합니다. 데이터 길이가 P보다 1바이트 이상 짧으면 데이터를 원하는 길이(little-endian 형식)로 만드는 데 필요한 바이트(값 0)로 채워야 합니다.
J J 값은 G 값 바로 앞에 있으며 항상 DHPUBKEY_VER3 bitlenJ 필드의 길이(바이트)를 8(little-endian 형식)으로 나누어야 합니다. bitlenQ 값이 0이면 BLOB에서 값이 없습니다.
Y Y 값(G^X) mod P는 J 값 바로 다음에 위치하며 항상 DHPUBKEY_VER3 bitlenP 필드의 길이(P의 비트 길이)를 8로 나누어야 합니다. (G^X) mod P의 계산 결과 데이터의 길이가 P보다 1바이트 더 짧은 경우 데이터를 원하는 길이(little-endian 형식)로 만드는 데 필요한 바이트(0 값)로 채워야 합니다. 이 구조체가 dwParam 값 KP_PUB_PARAMS CryptSetKeyParam과 함께 사용되는 경우 이 값은 BLOB에 포함되지 않습니다.

 

참고 항목

공개 키 BLOB은 암호화되지 않지만 일반 텍스트 형식의 공개 키를 포함합니다.