DSS バージョン 3 の公開キー BLOB
DSS バージョン 3 の PUBLICKEYBLOB 型の 公開キー BLOB は 、DH 公開キーに関する情報をエクスポートおよびインポートするために使用されます。 形式は次のとおりです。
BLOBHEADER blobheader;
// As explained under "Data Structures"
DSSPUBKEY_VER3 dsspubkeyver3;
BYTE p[dsspubkeyver3.bitlenP/8];
// Where P is the prime modulus
BYTE q[dsspubkeyver3.bitlenQ/8];
// Where Q is a large factor of P-1
BYTE g[dsspubkeyver3.bitlenP/8];
// Where G is the generator parameter
BYTE j[dsspubkeyver3.bitlenJ/8];
// Where J is (P-1)/Q
BYTE y[dsspubkeyver3.bitlenP/8];
// Where Y is (G^X) mod P
この BLOB 形式は、CRYPT_BLOB_VER3 フラグが CryptExportKey と共に使用されるときにエクスポートされます。 バージョンは BLOB 内にあるため、 CryptImportKey でこの BLOB を使用するときにフラグを指定する必要はありません。
さらに、この BLOB 形式は、dwParam 値KP_PUB_PARAMSを使用して DSS キーにキー パラメーターを設定するときに、CryptSetKeyParam 関数で使用されます。 これは、キーの生成に CRYPT_PREGEN フラグが使用されている場合に行われます。 この状況で使用する場合、y 値は無視されるため、BLOB に含めないようにする必要があります。
次の表では、キー BLOB の各コンポーネントについて説明します。
フィールド | 説明 |
---|---|
Blobheader | BLOBHEADER 構造体。 bType メンバーの値は PUBLICKEYBLOB である必要があります。 |
Dsspubkeyver3 |
DSSPUBKEY_VER3構造体。
マジック メンバーは、公開キーの "DSS3" (0x33535344) に設定する必要があります。 16 進数の値は、単なる "DSS3" の ASCII エンコードであることに注意してください。 |
P | P 値は 、DSSPUBKEY_VER3 構造体の直後にあり、常に、DSSPUBKEY_VER3 bitlenP フィールドの長さ (P のビット長) を 8 (リトル エンディアン 形式) で割ったバイト単位にする必要があります。 |
Q | Q 値は P 値の直後にあり、 常に、DSSPUBKEY_VER3bitlenQ メンバーの長さ (バイト単位) を 8 (リトル エンディアン 形式) で割った値にする必要があります。 |
G | G 値は Q 値の直後にあり、常に、 DSSPUBKEY_VER3bitlenP メンバーの長さ (バイト単位) (P のビット長) を 8 で割った値にする必要があります。 データの長さが P を 8 で割ったバイトより 1 バイト短い場合、データを目的の長さ (リトル エンディアン 形式) にするために必要なバイト (ゼロ値) を埋め込む必要があります。 |
J | J 値は G 値の直後にあり、 常に、DSSPUBKEY_VER3bitlenJ メンバーの長さ (バイト単位) を 8 で除算する必要があります (リトル エンディアン 形式)。 bitlenQ 値が 0 の場合、値は BLOB に存在しません。 |
Y | Y 値 (G^X) mod P は J 値の直後にあり、 DSSPUBKEY_VER3bitlenP メンバー (P のビット長) の長さを常にバイト単位で 8 で割った値にする必要があります。 (G^X) mod P の計算結果のデータの長さが、P を 8 で割ったバイトより 1 バイト短い場合は、データに必要なバイト (ゼロ値) を埋め込んで、データを目的の長さ (リトル エンディアン 形式) にする必要があります。
メモ:dwParam 値がKP_PUB_PARAMSされた CryptSetKeyParam でこの構造体を使用する場合、この値は BLOB に含まれません。 |
注意
公開キー BLOB は暗号化されませんが、プレーンテキスト形式の公開キーが含まれています。