訓練
DSS 提供者金鑰 BLOB
BLOB 會與 數位簽章標準 (DSS) 提供者搭配使用,以匯出金鑰,並將金鑰匯入至 密碼編譯服務提供者 (CSP) 。
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位元組填補。 |
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傳遞零,則會匯出私密金鑰而不加密。
警告
在沒有加密的情況下匯出私密金鑰會很危險,因為它們很容易遭到未經授權的實體攔截和使用。