キーとメッセージの交換手順 (CNG の例)

秘密キーと公開キーによる暗号化ソリューションは、man-in-the-middle 攻撃の対象となりやすいソリューションです。このような攻撃には、傍受、置換、サービス拒否、フィッシングなど、さまざまな形態があります。CNG (Cryptography Next Generation) の保護された通信の例では、第三者 (Mallory) が 2 つの通信エンドポイント (Alice と Bob) の間に侵入する置換に対処します。

以下のセクションでは、CNG の例の概要で説明されている 5 つのセキュリティ バージョンに関する背景情報、図、および詳細な手順について説明します。

  • バージョン 1: 基本的なメッセージ交換

  • バージョン 2: 未署名のキーと未署名のメッセージの交換

    • 傍受なし

    • 傍受あり

  • バージョン 3: 署名付きのキーと署名付きのメッセージの交換

  • バージョン 4: 署名付きのキーと署名付きのメッセージの交換 (検出あり)

  • バージョン 5: 署名付きのキーと署名付きのメッセージの交換 (アプリケーションの終了あり)

バージョン 1: 基本的なメッセージ交換

次の図は、man-in-the-middle 攻撃のない状態で Alice と Bob がメッセージを送信しているようすを示します。メッセージは暗号化もデジタル署名も行われていません。この CNG の例は、バージョン 1 を選択した場合のこの手順を示しています。処理の詳細については、図の後に説明しています。

バージョン 1: 基本的なメッセージ交換

バージョン 1: 基本的なメッセージ交換

Alice と Bob による暗号化されていない未署名のメッセージの送信

1.Alice がメッセージを作成します。

2.Alice は Bob にメッセージを送信します。

3.Bob は Alice のメッセージを受信します。

4.Bob がメッセージを作成します。

5.Bob は Alice にメッセージを送信します。

6.Alice は Bob のメッセージを受信します。

バージョン 2: 未署名のキーと未署名のメッセージ (傍受なし)

次の図は、man-in-the-middle 攻撃のない状態でのキーとメッセージの交換を示します。CNG の例では、バージョン 2 を選択して Mallory による傍受をオフにした場合にこの手順が使用されます。処理の詳細については、図の後に説明しています。

バージョン 2: 未署名のキーと未署名のメッセージ (傍受なし)

バージョン 2: 未署名のキーと未署名のメッセージ (傍受なし)

Alice と Bob によるキーの作成

1.Alice が公開キーと秘密キーのペアを生成します。

2.Alice は自分の公開キーを Bob に送信します。

3.Bob は Alice の公開キーを保存します。

4.Bob が公開キーと秘密キーのペアを生成します。

5.Bob は自分の公開キーを Alice に送信します。

6.Alice は Bob の公開キーを保存します。

Alice と Bob による一致するキー マテリアルの生成

7.Alice は、自分の秘密キーと Bob の公開キーを使用して共有秘密協定を生成します。この共有秘密協定を使用して、キー マテリアルを派生させます。

8.Bob は、自分の秘密キーと Alice の公開キーを使用して、同じ共有秘密協定を生成します。この共有秘密協定を使用して、Alice と同じキー マテリアルを派生させます。

共有秘密協定とキーの派生については、「ECDH アルゴリズムの概要 (CNG の例)」を参照してください。

Alice と Bob によるメッセージの相互送信

9.Alice がメッセージを作成し、キー マテリアルを使用して暗号化します。

10.Alice は Bob に暗号化されたメッセージを送信します。

11.Bob はメッセージを受信して復号化します。

12.Bob がメッセージを作成し、キー マテリアルを使用して暗号化します。

13.Bob は Alice にメッセージを送信します。

14.Alice はメッセージを受信して復号化します。

バージョン 2: 未署名のキーと未署名のメッセージ (傍受あり)

次の図は、man-in-the-middle 攻撃が行われている状態でのキーとメッセージのフローを示します。CNG の例では、バージョン 2 を選択して Mallory による傍受をオンにした場合にこの手順が使用されます。

バージョン 2: 未署名のキーと未署名のメッセージ (傍受あり)

バージョン 2: 未署名のキーと未署名のメッセージ (傍受あり)

Mallory による Bob の偽装

1.Alice が公開キーと秘密キーのペアを生成します。

2.Alice は自分の公開キーを Bob に送信します。

3.Mallory は Alice の公開キーを傍受して保存します。

4.Mallory は Alice との間で使用する独自の公開キーと秘密キーのペアを生成します。

5.Mallory は自分の公開キーを Alice に送信し、Bob からのものであると思い込ませます。

6.Alice は Mallory の公開キーを Bob のキーと思い込んで保存します。

Mallory は、Alice との間でキーの交換が完了するまで、Bob に対してチャネルを確立しません。これは、Mallory が PublicChannel を Alice と共有するためです (「ソース コードの概要」を参照)。Mallory は、自分の代替キーを Alice に送信した後でないと、PublicChannel を閉じ、再び開き、Bob に接続することができません。

この手順を手順 17. ~ 22. (Alice によって送信されたメッセージが Bob に転送される手順) と比較してください。

Mallory による Alice の偽装

7.Mallory は Bob との間で使用する第 2 の公開キーと秘密キーのペアを生成します。

8.Mallory は自分の公開キーを Bob に送信します。

9.Bob は Mallory の公開キーを Alice のキーと思い込んで保存します。

10.Bob が公開キーと秘密キーのペアを生成します。

11.Bob は自分の公開キーを Alice に送信します。

12.Mallory は Bob の公開キーを傍受して保存します。

Alice と Mallory による対応するキー マテリアルの生成

13.Alice は、自分の秘密キーと、Bob の公開キーであると思い込んでいるキー (実際には Mallory/Alice の公開キー) を使用して、共有秘密協定を生成します。この共有秘密協定を使用して、Mallory/Alice のキー マテリアルを派生させます。

14.Mallory は、自分の秘密キーと Alice の公開キーを使用して、同じ共有秘密協定を生成します。次に、この共有秘密協定を使用して Alice と同じキー マテリアルを派生させます。

Bob と Mallory による一致するキー マテリアルの生成

15.Mallory は、自分の秘密キーと Bob の公開キーを使用して共有秘密協定を生成します。この共有秘密協定を使用して、Mallory/Bob のキー マテリアルを派生させます。

16.Bob は、自分の秘密キーと、Alice の公開キーであると思い込んでいるキー (実際には Mallory/Bob の公開キー) を使用して、同じ共有秘密協定を生成します。次に、この共有秘密協定を使用して Mallory と同じキー マテリアルを派生させます。

注意

手順 13. ~ 16. の後、Alice と Bob は、同じキー マテリアルを共有していると思い込みます。実際には、互いにキー マテリアルを共有しているのではなく、Mallory とキー マテリアルを共有しています。

Alice から Bob へのメッセージ送信

この時点で、Mallory は 2 つのパイプをオープンしているため、二重の対話を行います。これは手順 1. ~ 6. (Mallory が一度に 1 つのチャネルを開いて暗号化キーを傍受する手順) とは異なります。

17.Alice がメッセージを生成し、手順 13. で生成した Mallory/Alice のキー マテリアルを使用して暗号化します。Alice は Bob に潜在的な販売先の連絡先を知らせます。

18.Alice は Bob にメッセージを送信します。

19.Mallory がメッセージを傍受して復号化します。Mallory は連絡先の情報を盗みます。

20.Mallory は、Alice のメッセージを基にして、連絡先の住所を変更した偽のメッセージを生成します。また、Mallory/Bob のキー マテリアルを使用して偽のメッセージを暗号化します。

21.Mallory は Bob にメッセージを送信します。

22.Bob はメッセージが Alice からのものであると思い込んで復号化します。

Bob から Alice へのメッセージ送信

23.Bob がメッセージを生成し、手順 16. で生成した Mallory/Bob のキー マテリアルを使用して暗号化します。Bob は Alice に販売先に会うのを楽しみにしていると伝えます。

24.Bob は Alice にメッセージを送信します。

25.Mallory がメッセージを傍受して復号化し、メッセージを破棄します。

26.Mallory は、Mallory/Alice の共有キー マテリアルを使用して偽のメッセージを生成します。Mallory は Alice に、販売先の住所が誤っていると思われるものの、引き続き販売先に連絡を試みるつもりであると伝えます。

27.Mallory は Alice にメッセージを送信します。

28.Alice はメッセージが Bob からのものであると思い込んで復号化します。Alice はその説明を了解し、他のクライアントに話を移します。

バージョン 3: 署名済みのキーと署名済みのメッセージ (傍受あり)

次の図は、暗号化キーとメッセージのフロー、man-in-the-middle 攻撃、およびデジタル署名を使用したキーとメッセージの署名を示しています。CNG の例では、バージョン 3 を選択して Mallory による傍受をオンにした場合にこのシナリオが使用されます。

バージョン 3: 署名済みのキーと署名済みのメッセージ (傍受あり)

バージョン 3: 署名済みのキーと署名済みのメッセージ (傍受あり)

バージョン 3 は、デジタル署名を使用してメッセージと暗号化キーに署名する点を除き、バージョン 2 と同じです。

手順 1. ~ 6. で、Alice はセキュリティで保護されていない PublicChannel を介してデジタル署名キーを送信します。Mallory はこれを傍受し、代替キーとメッセージに署名するために使用します。その結果、Alice、Bob、および Mallory は、同じデジタル署名キーを使用することになります。Alice と Bob がキーとメッセージの署名を手順 15.、20.、35.、および 42. で検証しても、Mallory が傍受していることは検出されません。

バージョン 4: 署名済みのキーと署名済みのメッセージ (検出あり)

次の図は、暗号化キーとメッセージのフロー、man-in-the-middle 攻撃、およびデジタル署名を使用したキーとメッセージの署名を示しています。さらに、バージョン 4 のソフトウェアでは、無効な署名が検出されます。CNG の例では、バージョン 4 を選択して Mallory による傍受をオンにした場合にこのシナリオが使用されます。

バージョン 4: 署名済みのキーと署名済みのメッセージ (検出あり)

バージョン 4: 署名済みのキーと署名済みのメッセージ (検出あり)

バージョン 4 は、次の点がバージョン 3 と異なっています。

  • バージョン 4 のソフトウェアは、Alice と Bob にだけ渡されます。

  • バージョン 4 は、バージョン 3 で使用したデジタル署名キーを送信しますが、それを偽のキーとして扱います。

  • バージョン 4 では、Mallory が知らないプライベート チャネルを通じて、Alice から Bob に第 2 のデジタル署名キーを送信できます (これが上の図の手順 0. です)。Alice と Bob は、この秘密のデジタル署名を使用してキーとメッセージに署名します。

  • バージョン 4 では、手順 15.、20.、35.、および 42. で Mallory の無効な署名が検出され、セキュリティ警告が表示されます。

Mallory は、バージョン 3 のデジタル署名を使用して自分の代替キーとメッセージに署名し続けます。結果は次のようになります。

  • Mallory は、バージョン 4 の秘密デジタル署名キーについて知りません。

  • Mallory は、セキュリティ警告を受け取りません。

  • Mallory は、Alice と Bob が Mallory の無効なキーとメッセージ署名を検出できることに気付きません。

バージョン 5: 署名済みのキーと署名済みのメッセージ (セッションの終了あり)

次の図は、暗号化キーとメッセージのフロー、man-in-the-middle 攻撃、およびデジタル署名を使用したキーとメッセージの署名を示しています。バージョン 4 と同様に、無効な署名が検出されます。CNG の例では、バージョン 5 を選択して Mallory による傍受をオンにした場合にこのシナリオが使用されます。

バージョン 5: 署名済みのキーと署名済みのメッセージ (終了あり)

バージョン 5: 署名済みのキーと署名済みのメッセージ (セッションの終了あり)

バージョン 5 は、Alice と Bob が無効なデジタル署名付きの公開暗号キーを受信したときにセッションが終了する点を除き、バージョン 4 と同じです。

参照

概念

CNG (Cryptography Next Generation) のセキュリティで保護された通信の例

暗号サービス