CNG (Cryptography Next Generation) のセキュリティで保護された通信の例
CNG (Cryptography Next Generation) の保護された通信の例では、man-in-the-middle 攻撃に対する暗号化ソリューションをモデル化しています。架空の広告会社での Alice、Bob、および Mallory という 3 人の通信をシミュレートします。例では、CNG クラス、名前付きパイプ トランスポート、および対話形式のコンソール ウィンドウを使用して、man-in-the-middle 攻撃のセキュリティ ソリューションを示します。
この例は高度な内容を含むため、暗号、プロセス間通信、およびネットワーク セキュリティの知識があることを前提としています。
注意
CNG クラスは、Windows Vista およびそれ以降の Windows オペレーティング システムでのみ使用できます。
ここでは、CNG 例の概要について説明します。説明する項目は次のとおりです。
例のシナリオ
IM ツールのセキュリティの脆弱性
バージョン 1 : 名前付きパイプ
バージョン 2 ~ 5 : セキュリティの段階的な強化
テスト結果
例のコード
名前付け規則
詳細情報
例のシナリオ
ある広告会社は、デスクトップ上で動作するインスタント メッセージング (IM) ツールを開発しました。すべての従業員がツールに入力されたメッセージを表示できます。
Alice と Bob は営業部門で働いています。彼らは IM ツールを使用して営業情報を相互に送信します。Mallory は、システム運用担当のネットワーク エンジニアです。彼はひそかに Alice と Bob のメッセージを監視しています。月に 1 回、彼は重要な営業情報をコピーし、個人的な利益のためにそれを競合他社に売り込みます。
数か月後、この会社は営業情報を盗み出している者がいることと、部署間の通信から情報漏洩の問題が起きていることに気付きます。そこで、新しい IM ツールの作成を決定し、現在のツールのセキュリティを分析し始めました。
IM ツールのセキュリティの脆弱性
この会社は、現在の IM ツールに次のようなセキュリティの脆弱性があることを認識しています。
プレーンテキスト (非暗号化) メッセージを転送すること
企業ネットワーク全体にメッセージをブロードキャストすること
メッセージの表示、記録がだれでもできること
会社は、企業ネットワーク上でポイント間通信を有効にすることで、新しい IM ツールがこれらの問題に対処できると判断しました。
バージョン 1 : 名前付きパイプ
この会社は、プロセス間通信 (IPC) に名前付きパイプ (またはチャネル) を必要とする新しい IM ツールを作成しました。このバージョンは、暗号化またはデジタル署名を使用しません。
Alice と Bob には次のような指示が与えられました。
PublicChannel というチャネルを介する初期接続を作成します。
プライベート チャネルの名前を相互に送信し、その後直ちに PublicChannel の接続を解除します。
プライベート チャネルを使用して接続し、営業情報を相互に送信します。
会社は、ポイント間通信チャネルにより、それ以外の企業ネットワークから十分に隔離されていると考えていました。しかしすぐに、このソリューションでは十分でないことに気付きました。Mallory が新しいシステムを破る方法を見つけます。彼は、営業情報の持ち出しを再開し、営業情報を慎重に変更して自分の不正行為を隠し始めます。
会社は、盗用を防止するために IM ツールにセキュリティ対策を追加することを決めました。
バージョン 2 ~ 5 : セキュリティの段階的な強化
新しいソフトウェアのテストと拡張は数か月に及びました。テストの完了時点までに、さらに 4 つのバージョンの IM ツールが作成されました。各バージョンは前のバージョンに基づいて作成されています。
バージョン 2 には、公開キーと秘密キーのペアを使用する CNG ベースの暗号化が組み込まれています。
バージョン 3 では、デジタル署名を使用して暗号化キーおよびメッセージを署名します。
バージョン 4 では、プライベート チャネルを追加し、暗号化キーおよびメッセージを署名するデジタル署名を送信します。
バージョン 5 では、無効な署名を持つキーを受信する IM セッションをすべて終了することで侵入を防止します。
テスト結果
バージョン 2 では、高度なセキュリティ暗号化アルゴリズムを使用します。暗号化の解読には、多大なリソースと時間が必要です。そのため、会社は、このソリューションが侵害されたことを知って愕然とします。
バージョン 3 では、デジタル署名を使用していますが、ここでも盗用を防ぐことはできません。しかし、このバージョンが役立つのは、会社にとって重要な発見が得られることです。暗号化キーおよびデジタル署名が傍受され置き換えられていれば、キーおよび署名の送信に使用するチャネルに問題の原因があります。
この発想は、バージョン 4 にプライベート チャネルを追加してデジタル署名を送信することで確認できます。また、バージョン 4 では、キーまたはメッセージが無効な署名を持っている場合に警告を表示します。バージョン 4 は会社内で Alice と Bob の 2 人にのみ与えられました。Alice と Bob が最初のメッセージを送信すると、すぐにセキュリティ警告が表示され始めました。会社は、ネットワークが man-in-the-middle 攻撃を受けていることをようやく認識します。
バージョン 5 では、最初のセキュリティ違反でセッションを終了する点を除き、バージョン 4 と同じです。このバージョンをインストールすると直ちに営業情報の盗用を防止できます。
例のコード
この例で用意されているコードは、これら 5 つのセキュリティ バージョンをモデル化しています。コードの概要は、「ソース コードの概要 (CNG の例)」で説明しています。
注意
この例は、包括的なセキュリティ ソリューションを提供するものではありません。実際に近いシナリオを用いて CNG API を具体的に示すためのものです。完全なセキュリティ アプリケーションについては、この例の対象外です。
名前付け規則
この例のドキュメントでは、数字 (たとえば、"バージョン 1"、"バージョン 2" など) で 5 つのソフトウェア リリースおよび対応するセキュリティ レベルを表しています。
"Alice"、"Bob"、"Mallory" という名前は、文脈に応じて、サンプル シナリオに登場する 3 人の人物を指す場合と、3 つの Visual Studio アプリケーションを表す場合があります。簡略化のために、このドキュメントでは両方を表すのに同じ名前を使用しています。たとえば、"Alice が Bob および Mallory を自動的に読み込む" という場合は、Alice アプリケーションが Bob アプリケーションおよび Mallory アプリケーションを自動的に読み込むという意味になります。
詳細情報
以下のトピックでは、この例のシナリオとコードについて詳しく説明します。
「man-in-the-middle 攻撃の実装」では、この例で偽装 (典型的な man-in-the-middle 攻撃) が行われる方法を説明します。
「ECDH アルゴリズムの概要」では、ECDH (Elliptic Curve Diffie-Hellman) アルゴリズムの計算について簡単に説明します。
「キーとメッセージの順を追った交換」では、この例の 5 つのバージョンで使用されるキーおよびメッセージの交換処理の手順を説明します。
「方法 : CNG 例をビルドおよび実行する」では、この例のアーキテクチャを解説し、ビルド手順、実行時の手順、使用方法を説明します。このセクションには、ソース コードの一覧も含まれています。
「ソース コードの概要」では、コード コンポーネントの相互作用およびフローを説明します。
「Utility クラスのコード分析」では、Utilities.cs ファイルの内容と目的を説明します。
「ChannelManager クラスのコード分析」では、ChannelManager.cs ファイルの内容と目的を説明します。
「Communicator クラスのコード分析」では、Communicator.cs ファイルの内容と目的を説明します。
「出力される結果」では、この例のコードの出力を表示します。