RSA/Schannel キー
RSA/Schannel キーの生成と取得
Rsa/Schannel キーは 、CryptGenKey 関数を呼び出すことによって生成できます。 CryptGenKey の呼び出しには、Algid パラメーターで渡されるAT_KEYEXCHANGEアルゴリズム識別子が必要です。
RSA/Schannel 公開キーと秘密キーのペアを生成するには
- CryptAcquireContext 関数を呼び出して、Microsoft RSA/Schannel 暗号化プロバイダーへのハンドルを取得します。
- キーを生成するには 、CryptGenKey 関数を呼び出します。 Algid パラメーターにAT_KEYEXCHANGEを渡す必要があり、dwFlags パラメーターの上位 16 ビットを目的のキー サイズ (512 ビット) に設定する必要があります。 HCRYPTKEY 構造体ハンドルは hKey パラメーターで返されます。
以前に生成された RSA/Schannel ユーザー キーへのポインターを取得するには
- CryptAcquireContext 関数を呼び出して、Microsoft RSA/Schannel 暗号化プロバイダーへのハンドルを取得します。
- dwKeySpec パラメーターを AT_KEYEXCHANGE に設定して、CryptGetUserKey 関数を呼び出します。
RSA/Schannel キーのエクスポート
マスター キー は、単純なキー BLOB 構造にエクスポートできます。 これは、「Simple Key BLOB」で説明されているように、通常の RC4 または Data Encryption Standard (DES) 一括暗号化キーのエクスポートと同じ方法で実装する必要があります。 PUBLICKEYSTRUC 構造体の aiKeyAlg メンバーは、マスター キーのアルゴリズム識別子 (CALG_PCT1_MASTER、CALG_SSL2_MASTER、CALG_SSL3_MASTER、またはCALG_TLS1_MASTER) に設定されます。
CPExportKey 関数が SSL2 マスター キーをエクスポートしていて、CRYPT_SSL2_FALLBACK フラグが設定されている場合は、バージョンロールバック攻撃を防ぐために、暗号化ブロックパディングの最初の 8 バイトをランダム データではなく0x03に設定します。
CPExportKey 関数の dwFlags パラメーターにCRYPT_DESTROYKEY定数が指定されている場合、CSP はキーをエクスポートした後、キーまたはキー ハンドルを破棄します。 このフラグは、 不透明な BLOB でのみ使用することを目的としています。