Utility クラスのコード分析 (CNG の例)

CNG (Cryptography Next Generation) のセキュリティで保護された通信の例に含まれる Utilities.cs ファイルには、アプリケーション全体の制御フラグと、Alice、Bob、および Mallory の各プロジェクトで使用されるメソッドが定義されています。次の各セクションでは、これらのフラグとメソッドについて説明します。

  • Version フラグ、fVerbose フラグ、および fMallory フラグ

  • Autoloader メソッド

  • InitConsole メソッド

  • SplashScreen メソッド

  • ReadALine メソッドおよび ReadAChar メソッド

  • InitializeOptions メソッド

  • Display メソッド

例の概要については、「CNG (Cryptography Next Generation) のセキュリティで保護された通信の例」を参照してください。

Version フラグ、fVerbose フラグ、および fMallory フラグ

  • Version: 実行するセキュリティ モデルを決定する整数値。次の表のように定義されます。

    [バージョン]

    セキュリティ モデル

    1

    暗号化なし (プレーンテキスト メッセージ)。

    2

    暗号化メッセージ。

    3

    暗号化キーと暗号化メッセージにセキュリティで保護されない署名を使用。

    4

    暗号化キーと暗号化メッセージにセキュリティで保護されたデジタル署名を使用。

    5

    セキュリティ エラーの発生時にプログラムを終了。

  • fVerbose: 画面出力を制御するブール値。値が true の場合、すべてのメッセージを ASCII 形式と暗号化形式で表示します。値が false の場合、メッセージを ASCII 形式でのみ表示します。

  • fMallory: Mallory プロジェクトを有効にするかどうかを制御するブール値。値が true の場合、Mallory を有効にして例を実行します。値が false の場合、Mallory による傍受を行わずに例を実行します。このフラグは、man-in-the-middle 攻撃前後の分析に使用できます。

Autoloader メソッド

static bool Autoloader()

このメソッドは、Bob.exe と Mallory.exe を読み込みます。Alice の Main メソッドの開始時に呼び出されます。

オートローダは、Alice がスタンドアロン アプリケーションとして読み込まれたのか、Visual Studio によって読み込まれたのかを検出します。これを行うために、Process.GetProcessesByName(String) メソッドが呼び出され、Alice.exe プロセスに関連付けられた Process コンポーネントが取得されます。

  • オートローダで Process コンポーネントが取得された場合、Alice はスタンドアロン アプリケーションです。Alice は、Bob および Mallory に対して Process.Start(String) メソッドを呼び出すことで、Bob.exe と Mallory.exe を起動します。Bob.exe または Mallory.exe が見つからない場合は、例外がスローされます。

  • オートローダで Process コンポーネントが取得されなかった場合、Alice.exe は Visual Studio によって読み込まれたことを示します。この場合は、Visual Studio デバッガーの別のインスタンスを 2 つ読み込んで、手動で Bob.exe と Mallory.exe を実行する必要があります。

オートローダの詳細については、「方法 : CNG 例をビルドおよび実行する」を参照してください。

InitConsole メソッド

static void InitConsole(string name, int left, int top)

このメソッドは、文字列と 2 つの整数を受け取ります。文字列はコンソール ウィンドウのタイトルとして使用されます。整数は、画面上にコンソール ウィンドウを配置するときに使用する、左上のピクセル座標の既定値を表します。

各ウィンドウは、既定の座標を基準として配置されます。Alice のウィンドウは、画面の左上隅に配置されます。Bob のウィンドウは、画面の右上隅に配置されます。Mallory のウィンドウは、Alice と Bob のウィンドウの下に配置されます。

2 つのプラットフォーム呼び出し宣言により、アンマネージ Win32 関数である MoveWindowGetConsoleWindow へのアクセスが実現されます。実際の配置は、これらの関数によって実行されます。

SplashScreen メソッド

static void SplashScreen()

このメソッドは、コンソールをクリアし、Alice、Bob、および Mallory の各ウィンドウのタイトルを設定します。

ReadALine メソッドおよび ReadAChar メソッド

static string ReadALine(bool fBlankOkay)
static string ReadAChar(string options)

これらの小さいユーティリティ メソッドは、連動して Console.ReadLine 呼び出しをラップします。

ReadALine はブール値を受け取ります。その値が true の場合、ReadALine は、ユーザーが Enter キーを押したときに制御を戻します。値が false の場合は、ユーザーが 1 文字以上を入力して Enter キーを押すまで、ReadALine は制御を戻しせん。

ReadAChar は文字列を受け取り、その文字列に指定された文字のいずれかが入力されると、制御を戻します。

InitializeOptions メソッド

static string InitializeOptions()

このメソッドは、このトピックで既に説明した Version、fVerbose、および fMallory の各フラグを設定するためのメニューを表示します。また、"x" という値を選択して、アプリケーションを閉じることもできます。

Display メソッド

Utilities.cs ファイルには、2 つの Display メソッドがあります。

  • static void Display(string s)

    このメソッドは、受け取った文字列と現在の MyColor パラメーターを 2 つ目の Display メソッド オーバーロードに渡します。

  • static void Display(string DisplayString, int color)

    このメソッドは、Console.WriteLine 呼び出しをラップし、出力の色分けを可能にします。色を使用することで、各メッセージの所有者を追跡しやすくなります。たとえば、Alice のメッセージは、3 つのどのウィンドウでも緑で表示されます。例で使用される色とその意味の一覧を次の表に示します。

[ID]

用途

0

セキュリティ エラー メッセージ。

1

オプション メニューおよびアプリケーション メッセージ。

2

Bob のメッセージ。

3

シアン

ユーザーの入力。

4

Alice のメッセージ。

5

Mallory のメッセージ。

6

アプリケーション再起動のプロンプト。

7

灰色

暗号化されたメッセージ データ。

参照

参照

Console

ConsoleColor

概念

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

Utilities.cs ソース コード (CNG の例)

ソース コードの概要 (CNG の例)

その他の技術情報

プラットフォーム呼び出しによるデータのマーシャリング