共用方式為


DSS 第 3 版公鑰 BLOB

DSS 第 3 版 公鑰 BLOB 類型 PUBLICKEYBLOB,可用來匯出和匯入 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

當 CRYPT_BLOB_VER3 旗標搭配 CryptExportKey使用時,會導出此 BLOB 格式。 因為版本位於 BLOB 中,因此在搭配使用此 BLOB 時不需要指定旗標,CryptImportKey

此外,當 dwParam 值KP_PUB_PARAMS用來設定 DSS 金鑰上的索引鍵參數時,此 BLOB 格式會與 CryptSetKeyParam 函式搭配使用。 當CRYPT_PREGEN旗標用來產生索引鍵時,就會完成此動作。 在此情況下,會忽略 y 值,因此不應包含在 BLOB 中。

下表描述金鑰 BLOB 的每個元件。

描述
Blobheader BLOBHEADER 結構。 bType 成員必須具有 PUBLICKEYBLOB 的值。
Dsspubkeyver3 DSSPUBKEY_VER3 結構。 magic 成員應設定為公鑰的 “DSS3” (0x33535344)。 請注意,十六進位值只是 “DSS3”編碼ASCII。
P P 值位於 DSSPUBKEY_VER3 結構後面,而且一律應該是DSSPUBKEY_VER3 bitlenP 欄位的長度(P 的位長度)除以八(小端 格式)。
Q Q 值直接位於 P 值之後,且一律為 DSSPUBKEY_VER3bitlenQ 成員的長度除以八(位元組 格式)。
G G 值位於 Q 值後面,而且一律應該是 DSSPUBKEY_VER3bitlenP 成員的長度(P 的位長度)除以 8。 如果數據的長度比 P 短一或多個字節除以 8,數據就必須以必要的位元組(零值)填補,讓數據成為所需的長度(小端 格式)。
J J 值直接位於 G 值之後,而且一律是 DSSPUBKEY_VER3bitlenJ 成員的長度除以八(位元組 格式)。 如果 bitlenQ 值為 0,則值不存在於 BLOB 中。
Y Y 值 (G^X) mod P 位於 J 值後面,而且應該一律是 DSSPUBKEY_VER3bitlenP 成員(P 的位長度)除以 8 的長度。 如果計算產生的數據長度 (G^X) mod P 比 P 短一或多個字節除以 8,則數據必須以必要的位元組(零值)填補,讓數據成為所需的長度(小端 格式)。 注意: 當此結構與 CryptSetKeyParam 搭配 搭配 dwParam 值KP_PUB_PARAMS時,BLOB 中不會包含此值。

 

注意

公鑰 BLOB 不會加密,但會以純文字形式包含公鑰。