次の方法で共有


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;

次の表は、これらのコンポーネントについての説明です。 すべての値は リトル エンディアン 形式です。

フィールド 説明
dsspubkey DSSPUBKEY 構造体。 マジック メンバーには、0x31535344の値が必要です。 この 16 進数は DSS1 の ASCII エンコードです。
G BYTE シーケンス。 ジェネレーター, g. p と同じ長さにする必要があります。 p と同じ長さでない場合は、0x00 バイトで埋め込む必要があります。
p BYTE シーケンス。 素係数、p。 最上位バイトの最上位ビットは 1 に設定する必要があります。
publickeystruc PUBLICKEYSTRUC 構造体。
q BYTE シーケンス。 素数 q、20 バイトの長さ。 最上位バイトの最上位ビットは 1 に設定する必要があります。
seedstruct DSSSEED 構造体。 素数を検証するためのシード値とカウンター値。
y BYTE シーケンス。 公開キー y。 p と同じ長さにする必要があります。 p と同じ長さでない場合は、0x00 バイトで埋め込む必要があります。

 

Note

公開キー 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;

次の表では、各コンポーネントについて説明します。 すべての値は リトル エンディアン 形式です。

フィールド 説明
dsspubkey DSSPUBKEY 構造体。 マジック メンバーは、0x32535344に設定する必要があります。 この 16 進数は DSS2 の ASCII エンコードです。
G BYTE シーケンス。 ジェネレーター, g. p と同じ長さにする必要があります。 p と同じ長さでない場合は、0x00 バイトで埋め込む必要があります。
publickeystruc PUBLICKEYSTRUC 構造体。
p BYTE シーケンス。 素係数、p。 最上位バイトの最上位ビットは 1 に設定する必要があります。
q BYTE シーケンス。 素数 q. q は 20 バイトの長さです。 最上位バイトの最上位ビットは 1 に設定する必要があります。
seedstruct DSSSEED 構造体。 素数を検証するためのシード値とカウンター値。
x BYTE シーケンス。 シークレット指数 x。 長さは常に 20 バイトにする必要があります。 x の長さが 20 バイトより小さい場合は、0x00で埋め込む必要があります。

 

CryptExportKey を呼び出すとき、開発者はキーを暗号化するかどうかを選択できます。 hExpKey パラメーターにセッション キーへの有効なハンドルが含まれている場合、PRIVATEKEYBLOB は暗号化されます。 BLOB の PUBLICKEYSTRUC 部分以外はすべて暗号化されます。

Note

暗号化アルゴリズムと暗号化キーパラメーターは、秘密キー BLOB と共に格納されません。 アプリケーションは、この情報を管理して格納する必要があります。 hExpKey に 0 が渡された場合、秘密キーは暗号化なしでエクスポートされます。

 

注意事項

秘密キーは、承認されていないエンティティによる傍受と使用に対して脆弱であるため、暗号化なしでエクスポートするのは危険です。