다음을 통해 공유


DSS 버전 3 공개 키 BLOB

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

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

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

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

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

필드 설명
Blobheader BLOBHEADER 구조체입니다. bType 멤버의 값은 PUBLICKEYBLOB여야 합니다.
Dsspubkeyver3 DSSPUBKEY_VER3 구조체입니다. 매직 멤버는 퍼블릭 키에 대해 "DSS3"(0x33535344)으로 설정해야 합니다. 16진수 값은 "DSS3"의 ASCII 인코딩일 뿐입니다.
P P 값은 DSSPUBKEY_VER3 구조 바로 다음에 위치하며 항상 DSSPUBKEY_VER3 bitlenP 필드(비트 길이 P)의 길이(바이트)를 8(little-endian 형식)으로 나눈 값이어야 합니다.
Q Q 값은 P 값 바로 다음에 위치하며 항상 DSSPUBKEY_VER3bitlenQ 멤버의 길이(바이트)를 8(little-endian 형식)으로 나누어야 합니다.
G G 값은 Q 값 바로 다음에 위치하며 항상 DSSPUBKEY_VER3bitlenP 멤버(P의 비트 길이)의 길이(바이트)여야 합니다. 데이터 길이가 P보다 1바이트 더 짧은 경우 데이터를 원하는 길이(little-endian 형식)로 만들기 위해 필요한 바이트(값 0)로 채워야 합니다.
J J 값은 G 값 바로 다음에 위치하며 항상 DSSPUBKEY_VER3bitlenJ 멤버의 길이(바이트)를 8(little-endian 형식)으로 나누어야 합니다. bitlenQ 값이 0이면 BLOB에서 값이 없습니다.
Y Y 값(G^X) 모드 P는 J 값 바로 다음에 위치하며 항상 DSSPUBKEY_VER3bitlenP 멤버(P의 비트 길이)의 길이(바이트)여야 합니다. (G^X) mod P의 계산으로 인한 데이터의 길이가 P보다 1바이트 더 짧은 경우 데이터를 원하는 길이(little-endian 형식)로 만드는 데 필요한 바이트(값 0)로 채워야 합니다. 참고: 이 구조체가 dwParam 값 KP_PUB_PARAMS CryptSetKeyParam과 함께 사용되는 경우 이 값은 BLOB에 포함되지 않습니다.

 

참고

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