手動セッション キー交換
手記
このセクションで説明する手順では、ユーザー (または CryptoAPI クライアント) は、既に独自の 公開キーと秘密キーのペア セットを所有しており、互いの公開キーも取得していることを前提としています。
次の図は、この手順を使用して暗号化されたメッセージを送信する方法を示しています。
暗号化されたメッセージ
このアプローチは、少なくとも 1 つの一般的な攻撃に対して脆弱です。 傍受者は、1 つ以上の暗号化されたメッセージと暗号化されたキーのコピーを取得できます。 その後、傍受者はこれらのメッセージの 1 つを受信者に送信でき、受信者はメッセージが元の送信者から直接送信されなかったことを知る方法がありません。 このリスクは、すべてのメッセージにタイムスタンプを付けたり、シリアル番号を使用したりすることで軽減できます。
暗号化されたメッセージを別のユーザーに送信する最も簡単な方法は、ランダムなセッション キーで暗号化されたメッセージを、受信側の キー交換公開キーで暗号化されたセッション キーと共に送信。
暗号化されたセッション キーを送信する手順を次に示します。
暗号化されたセッション キー を送信するには
- CryptGenKey 関数を使用して、ランダムな セッション キー を作成します。
- セッション キーを使用してメッセージを暗号化します。 この手順については、「データの暗号化と復号化の」を参照してください。
- CryptExportKey 関数を使用して、キー BLOB にセッション キーをエクスポートし、そのキーを宛先ユーザーのキー交換公開キーで暗号化することを指定します。
- 暗号化されたメッセージと暗号化されたキー BLOB の両方を宛先ユーザーに送信します。
- 宛先ユーザーは、CryptImportKey 関数を使用して、キー BLOB を CSP にインポートします。 これは、宛先ユーザーのキー交換公開キーが手順 3 で指定されている場合に、セッション キーを自動的に復号化します。
- 宛先ユーザーは、Data Encryption and Decryptionで説明されている手順に従って、セッション キーを使用してメッセージを復号化できます。