DSS 提供者金鑰 BLOB

BLOB 會與 數位簽章標準 (DSS) 提供者搭配使用,以匯出金鑰,並將金鑰匯入至 密碼編譯服務提供者 (CSP) 。

公開金鑰 BLOB

DSS 公開金鑰 會匯出並匯入為 BLOB,這是結構化的位元組序列,如下所示。

PUBLICKEYSTRUC    publickeystruc;
DSSPUBKEY         dsspubkey;
BYTE              p[dsspubkey.bitlen/8];
BYTE              q[20];
BYTE              g[dsspubkey.bitlen/8];
BYTE              y[dsspubkey.bitlen/8];
DSSSEED           seedstruct;

下表描述這些元件。 所有值都是 以小到大 的格式。

欄位 Description
dsspubkey DSSPUBKEY結構。 magic成員必須具有0x31535344值。 這個十六進位數位是 DSS1 的 ASCII 編碼方式。
g BYTE序列。 產生器 g. 長度必須與 p 相同。 如果長度與 p 不同,則必須以0x00位元組填補。
p BYTE序列。 質數模數 p。 最大有效位元組的最大位必須設定為一個。
publickeystruc PUBLICKEYSTRUC結構。
q BYTE序列。 質數,q,長度為 20 個位元組。 最大有效位元組的最大位必須設定為一個。
種子結構 DSSSEED結構。 用於驗證質數的種子和計數器值。
y BYTE序列。 公開金鑰 y。 長度必須與 p 相同。 如果長度與 p 不同,則必須以0x00位元組填補。

 

注意

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

 

私密金鑰 BLOB

DSS 私密金鑰 會匯出並匯入為結構化的位元組序列,如下所示。

PUBLICKEYSTRUC    publickeystruc;
DSSPUBKEY         dsspubkey;
BYTE              p[dsspubkey.bitlen/8];
BYTE              q[20];
BYTE              g[dsspubkey.bitlen/8];
BYTE              x[20];
DSSSEED           seedstruct;

下表描述每個元件。 所有值都是 以小到大 的格式。

欄位 Description
dsspubkey DSSPUBKEY結構。 magic成員必須設定為 0x32535344。 這個十六進位數位是 DSS2 的 ASCII 編碼方式。
g BYTE序列。 產生器 g. 長度必須與 p 相同。 如果長度與 p 不同,則必須以0x00位元組填補。
publickeystruc PUBLICKEYSTRUC結構。
p BYTE序列。 質數模數 p。 最大有效位元組的最大位必須設定為一個。
q BYTE序列。 質數 q. q 為 20 位元組的長度。 最大有效位元組的最大位必須設定為一個。
種子結構 DSSSEED結構。 用於驗證質數的種子和計數器值。
x BYTE序列。 秘密指數 x。 長度必須一律為 20 個位元組。 如果 x 的長度小於 20 個位元組,則必須以0x00填補。

 

呼叫 CryptExportKey時,開發人員可以選擇是否要加密金鑰。 如果hExpKey參數包含工作階段金鑰的有效控制碼,則 PRI加值稅EKEYBLOB會加密。 除了 BLOB 的 PUBLICKEYSTRUC 部分,所有專案都會加密。

注意

加密演算法和加密金鑰參數不會與私密金鑰 BLOB 一起儲存。 應用程式必須管理和儲存此資訊。 如果 hExpKey傳遞零,則會匯出私密金鑰而不加密。

 

警告

在沒有加密的情況下匯出私密金鑰會很危險,因為它們很容易遭到未經授權的實體攔截和使用。