次の方法で共有


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 は暗号化されませんが、プレーンテキスト形式の公開キーが含まれています。