共用方式為


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 中,所以搭配 CryptImportKey使用此 BLOB 時,不需要指定旗標。

此外,當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_VER3 bitlenQ成員長度除以八個 (小端格式) 。
G G 值緊接在 Q 值之後,而且一律應該是DSSPUBKEY_VER3 bitlenP成員的長度,以位元組為單位, (P) 除以八。 如果資料的長度小於 P 除以 8 的一或多個位元組,則資料必須以零值 (的必要位元組填補,) 讓資料成為所需的長度 (小端 格式) 。
J J 值會直接位於 G 值後面,而且一律必須是以位元組為單位的DSSPUBKEY_VER3 bitlenJ成員長度除以八個 (小端格式) 。 如果 bitlenQ 值為 0,則值不存在於 BLOB 中。
Y Y 值 (G^X) mod P 位於 J 值之後,而且一律應該是 P) 除以八DSSPUBKEY_VER3 bitlenP (成員的長度,以位元組為單位。 如果計算 (G^X) mod P 所產生的資料長度比 P 除以 8 還短一或多個位元組,則資料必須以零值 (填補,) 以零值 (填補資料,讓資料成為所需的長度 (小端 格式) 。 注意: 當此結構搭配 CryptSetKeyParam 搭配 dwParam 值KP_PUB_PARAMS使用時,BLOB 中不會包含此值。

 

注意

公開金鑰 BLOB 不會加密,但包含純文字格式的公開金鑰。