ベース プロバイダー キー 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 は、常に キー交換公開キーを使用して暗号化されます。 SIMPLEBLOB の pbData メンバーは、次の形式のバイトシーケンスです。
PUBLICKEYSTRUC publickeystruc;
ALG_ID algid;
BYTE encryptedkey[rsapubkey.bitlen/8];
次の表では、SIMPLEBLOB の pbData メンバーの各コンポーネントについて説明します。
フィールド | 説明 |
---|---|
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 構造体。 |