キー BLOB の Diffie-Hellman

BLOB は、暗号化サービス プロバイダー (CSP) との間でキーをエクスポートし、キーをインポートするために、Diffie-Hellman プロバイダーと共に使用されます。

  • 公開キー BLOB
  • 秘密キー BLOB する

公開キー BLOB

公開キー BLOBDiffie-Hellman、PUBLICKEYBLOB 型は、Diffie-Hellman キー交換で (G^X) mod P 値を交換するために使用されます。 これらのキーは、次の形式のバイト シーケンスとしてエクスポートおよびインポートされます。

PUBLICKEYSTRUC  publickeystruc; 
DHPUBKEY dhpubkey;
BYTE y[dhpubkey.bitlen/8]; // Where y = (G^X) mod P

次の表では、キー BLOBの各コンポーネントについて説明します。

形容
dhpubkey DHPUBKEY 構造体。 マジック メンバーは0x31484400に設定する必要があります。 この 16 進数の値は、"DH1" の ASCII エンコードです。
publickeystruc PUBLICKEYSTRUC 構造体。
y BYTE シーケンス。 Y 値 (G^X) mod P は、DHPUBKEY 構造体の直後にあり、常に、DHPUBKEY bitlen フィールドの長さ (P のビット長) を 8 で割ったバイト単位にする必要があります。 (G^X) mod P の計算結果のデータの長さが P を 8 で除算したバイトより 1 つ以上短い場合、データを目的の長さ (リトル エンディアン形式) にするために必要なバイト (ゼロ値) でデータを埋め込む必要があります。

 

秘密キー BLOB

秘密キー BLOBDiffie-Hellman、PRIVATEKEYBLOB 型は、Diffie-Hellman キーの公開/秘密情報を格納するために使用されます。 これらのキーは、次の形式のバイト シーケンスとしてエクスポートおよびインポートされます。

PUBLICKEYSTRUC  publickeystruc; 
DHPUBKEY        dhpubkey;
BYTE            prime[dhpubkey.bitlen/8];
BYTE            generator[dhpubkey.bitlen/8];
BYTE            secret[dhpubkey.bitlen/8];

次の表では、キー BLOB の各コンポーネントについて説明します。

形容
dhpubkey DHPUBKEY 構造体。 マジック メンバーは0x32484400に設定する必要があります。 この 16 進数の値は、"DH2" の ASCII エンコードです。
ジェネレータ BYTE シーケンス。 ジェネレーター、G.
publickeystruc PUBLICKEYSTRUC 構造体。
盛り BYTE シーケンス。 素剰余 Pこのデータには、最上位バイトの最上位ビットが常に 1 に設定されている必要があります。
秘密 BYTE シーケンス。 シークレット指数 X。

 

手記

ジェネレーターとシークレットは、常に同じ長さ (バイト単位) である必要があります。 どちらかが 1 バイト以上短い場合は、同じにするために必要なゼロ値バイト数を埋め込む必要があります。 ジェネレーターとシークレットの両方が、リトル エンディアン形式