キーとメッセージの交換手順 (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: 基本的なメッセージ交換
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: 未署名のキーと未署名のメッセージ (傍受なし)
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: 未署名のキーと未署名のメッセージ (傍受あり)
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 は、デジタル署名を使用してメッセージと暗号化キーに署名する点を除き、バージョン 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 は、次の点がバージョン 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 は、Alice と Bob が無効なデジタル署名付きの公開暗号キーを受信したときにセッションが終了する点を除き、バージョン 4 と同じです。