ベース プロバイダー キー BLOB

ベース プロバイダーと拡張プロバイダーでは、同じ キー BLOB が使用されます

公開キー BLOB

公開キー BLOB (PUBLICKEYBLOB 型) は、暗号化サービス プロバイダー (CSP) の外部に公開キーを格納するために使用されます。 ベース プロバイダーの公開キー BLOB の形式は次のとおりです。

PUBLICKEYSTRUC  publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];

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

フィールド 説明
modulus 公開キーの剰余データは、 RSAPUBKEY 構造体の直後にあります。 このデータのサイズは、公開キーのサイズによって異なります。 バイト数は、 RSAPUBKEY ビットレン フィールドの値を 8 で割ることによって決定できます。
publickeystruc PUBLICKEYSTRUC 構造体。
rsapubkey RSAPUBKEY 構造体。 マジック メンバーは、0x31415352に設定する必要があります。 この 16 進値は RSA1 の ASCII エンコードです。

 

Note

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

 

秘密キー BLOB

秘密キー BLOB (PRIVATEKEYBLOB 型) は、CSP の外部に秘密キーを格納するために使用されます。 ベース プロバイダーの秘密キー BLOB の形式は次のとおりです。

PUBLICKEYSTRUC  publickeystruc;
RSAPUBKEY rsapubkey;
BYTE modulus[rsapubkey.bitlen/8];
BYTE prime1[rsapubkey.bitlen/16];
BYTE prime2[rsapubkey.bitlen/16];
BYTE exponent1[rsapubkey.bitlen/16];
BYTE exponent2[rsapubkey.bitlen/16];
BYTE coefficient[rsapubkey.bitlen/16];
BYTE privateExponent[rsapubkey.bitlen/8];

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

Note

これらのフィールドは、 公開キー暗号化標準 (PKCS) #1 のセクション 7.2 で説明されているフィールドに対応しています。小さな違いがあります。

 

フィールド 説明
係数 係数。 これは、(q の逆) mod p の数値を持ちます。
exponent1 指数 1。 これには、d mod (p – 1) の数値があります。
exponent2 指数 2。 これには、d mod (q – 1) の数値があります。
剰余 剰余。 この値は Prime1×Prime2 で、多くの場合 n と呼ばれます。
prime1 素数 1。p と呼ばれることがよくあります。
prime2 素数 2(多くの場合、q と呼ばれます)。
privateExponent プライベート指数 (多くの場合、d と呼ばれます)。
publickeystruc PUBLICKEYSTRUC 構造体。
rsapubkey RSAPUBKEY 構造体。 マジック メンバーは、0x32415352に設定する必要があります。 この 16 進値は RSA2 の ASCII エンコードです。

 

Note

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

 

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

Note

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

 

注意事項

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

 

単純キー BLOB

単純キー BLOB ( SIMPLEBLOB 型) は、CSP の外部でセッション キーを格納および転送するために使用されます。 基本プロバイダーの単純キー BLOB は、常に キー交換公開キーを使用して暗号化されます。 SIMPLEBLOBpbData メンバーは、次の形式のバイトシーケンスです。

PUBLICKEYSTRUC  publickeystruc;
ALG_ID algid;
BYTE encryptedkey[rsapubkey.bitlen/8];

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

フィールド 説明
algid セッション キー データの暗号化に使用される暗号化アルゴリズムを指定する ALG_ID 構造体。 通常、この値は CALG_RSA_KEYX です。これは、セッション キー データが RSA 公開キー アルゴリズムを使用してキー交換公開キーで暗号化されたことを示します。
encryptedkey 暗号化されたセッション キー データを PKCS #1 の形式で表す BYTE シーケンス。「2 暗号化ブロック」と入力します。 このデータ形式の詳細については、RSA Data Security, Inc. によって公開されている公開キー暗号化標準 (PKCS) #1 を参照してください。このデータは、常に公開キーの剰余と同じサイズです。 たとえば、Microsoft RSA ベース プロバイダーによって生成される公開キーの長さは 512 ビット (64 バイト) であるため、暗号化されたセッション キー データも常に 512 ビット (64 バイト) になります。
publickeystruc PUBLICKEYSTRUC 構造体。