Share via


Diffie-Hellman バージョン 3 公開キー BLOB

バージョン 3 Diffie-Hellman公開キー BLOB (タイプ PUBLICKEYBLOB) は、DH 公開キーに関する情報をエクスポートおよびインポートするために使用されます。 これらの形式は次のとおりです。

BLOBHEADER blobheader; 
                 // As explained under "Data Structures"
DHPUBKEY_VER3 dhpubkeyver3;
BYTE p[dhpubkeyver3.bitlenP/8]; 
                 // Where P is the prime modulus
BYTE q[dhpubkeyver3.bitlenQ/8]; 
                 // Where Q is a large factor of P-1
BYTE g[dhpubkeyver3.bitlenP/8]; 
                 // Where G is the generator parameter
BYTE j[dhpubkeyver3.bitlenJ/8]; 
                 // Where J is (P-1)/Q
BYTE y[dhpubkeyver3.bitlenP/8]; 
                 // Where Y is (G^X) mod P

この BLOB 形式は、CRYPT_BLOB_VER3 フラグが CryptExportKey と共に使用されるときにエクスポートされます。 バージョンは BLOB 内にあるため、CryptImportKey でこの BLOB を使用するときにフラグを指定する必要はありません。

さらに、この BLOB 形式は、dwParam 値KP_PUB_PARAMSを使用して DH キーにキー パラメーターを設定するときに、CryptSetKeyParam 関数と共に使用されます。 これは、キーの生成に CRYPT_PREGEN フラグが使用されている場合に行われます。 この状況で使用する場合、y 値は無視されるため、BLOB に含めてはいけません。

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

フィールド 説明
blobheader BLOBHEADER 構造体。 bType メンバーの値は PUBLICKEYBLOB である必要があります。
dhpubkeyver3 DHPUBKEY_VER3構造体。 マジック メンバーは、公開キーの0x33484400に設定する必要があります。 16 進数の値は、"DH3" の 単なる ASCII エンコードであることに注意してください。
P P 値は 、DHPUBKEY_VER3 構造体の直後にあり、常に、 DHPUBKEY_VER3bitlenP フィールドの長さ (P のビット長) を 8 (リトル エンディアン 形式) で割ったバイト単位にする必要があります。
Q Q 値は P 値の直後にあり、常に 、DHPUBKEY_VER3bitlenQ フィールドの長さを 8 で割ったバイト単位 (リトル エンディアン 形式) にする必要があります。 bitlenQ 値が 0 の場合、値は BLOB に存在しません。
G G 値は Q 値の直後にあり、常に 、DHPUBKEY_VER3bitlenP フィールドの長さ (P のビット長) を 8 で割ったバイト単位にする必要があります。 データの長さが P を 8 で割ったバイトより 1 バイト短い場合、データを目的の長さ (リトル エンディアン 形式) にするために、データに必要なバイト (ゼロ値) を埋め込む必要があります。
J J 値は G 値の直後にあり、常に 、DHPUBKEY_VER3bitlenJ フィールドの長さを 8 で割ったバイト単位 (リトル エンディアン 形式) にする必要があります。 bitlenQ 値が 0 の場合、値は BLOB に存在しません。
Y Y 値 (G^X) mod P は J 値の直後にあり、 常に、DHPUBKEY_VER3bitlenP フィールドの長さ (P のビット長) を 8 で割った値にする必要があります。 (G^X) mod P の計算結果のデータの長さが P を 8 で割ったバイトより 1 バイト短い場合、データを必要な長さ (リトル エンディアン 形式) にするために、データに必要なバイト (ゼロ値) を埋め込む必要があります。 dwParam 値がKP_PUB_PARAMSされた CryptSetKeyParam でこの構造体を使用する場合、この値は BLOB に含まれません。

 

Note

公開キー BLOB は暗号化されませんが、プレーンテキスト形式の公開キーが含まれています。