次の方法で共有


RSA/Schannel キー

RSA/Schannel キーの生成と取得

Rsa/Schannel キーは 、CryptGenKey 関数を呼び出すことによって生成できます。 CryptGenKey の呼び出しには、Algid パラメーターで渡されるAT_KEYEXCHANGEアルゴリズム識別子が必要です。

RSA/Schannel 公開キーと秘密キーのペアを生成するには

  1. CryptAcquireContext 関数を呼び出して、Microsoft RSA/Schannel 暗号化プロバイダーへのハンドルを取得します。
  2. キーを生成するには 、CryptGenKey 関数を呼び出します。 Algid パラメーターにAT_KEYEXCHANGEを渡す必要があり、dwFlags パラメーターの上位 16 ビットを目的のキー サイズ (512 ビット) に設定する必要があります。 HCRYPTKEY 構造体ハンドルは hKey パラメーターで返されます。

以前に生成された RSA/Schannel ユーザー キーへのポインターを取得するには

  1. CryptAcquireContext 関数を呼び出して、Microsoft RSA/Schannel 暗号化プロバイダーへのハンドルを取得します。
  2. 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 でのみ使用することを目的としています。