Cryptography Next Generation (CNG) 安全通訊範例
Cryptography Next Generation (CNG) 安全通訊範例會模型化處理攔截式攻擊 (Man-in-the-middle Attack) 的密碼編譯方案。 這個範例會模擬虛構廣告公司中 3 位人員 Alice、Bob 和 Mallory 間的通訊。範例中會使用 CNG 類別、具名管道傳輸和互動式主控台視窗,示範攔截式攻擊的安全性方案。
這是屬於進階範例,並假設您很熟悉密碼編譯、處理序間通訊和網路安全性等資訊。
注意事項 |
---|
CNG 類別只適用於 Windows Vista 和後續的 Windows 作業系統。 |
本主題提供您 CNG 範例的概觀。其中會討論下列內容:
範例案例
IM 工具的安全性弱點
版本 1:具名管道
版本 2-5:累加的安全性改善措施
測試結果
範例程式碼
命名規範
詳細資訊
範例案例
某家廣告公司在開發桌上型電腦所執行的即時訊息 (IM) 工具。所有的員工都可以檢視輸入這個工具中的訊息。
Alice 和 Bob 服務於銷售部門。他們使用 IM 工具互相傳送銷售連絡資訊。Mallory 是服務於系統作業的網路工程師。他在暗地裡監視 Alice 和 Bob 的訊息。為了個人利益,他每隔一個月就複製珍貴的銷售連絡資訊並販賣給公司的競爭者。
幾個月過後,公司發現到有人在竊取銷售連絡資訊,而且跨部門的通訊發生資訊外洩。公司決定建立新的 IM 工具,並從分析現有工具的安全性做為第一步。
IM 工具的安全性弱點
公司了解到現有的 IM 工具有下列安全性弱點:
該工具會傳輸純文字 (非加密) 訊息。
該工具會在整個公司網路廣播這些訊息。
任何人皆可檢視甚至記錄這些訊息。
公司決定要在公司網路上啟用點對點 (Point-To-Point) 通訊,讓新的 IM 工具可以解決這些問題。
版本 1:具名管道
公司建立的新 IM 工具是靠具名管道 (或通道) 進行處理序間的通訊 (IPC)。這個版本並沒有使用加密 (Encryption) 或數位簽章。
Alice 和 Bob 接獲下列指示:
在名為 PublicChannel 的通道上建立初始連接。
傳送私用通道名稱給彼此,再立即中斷與 PublicChannel 的連接。
使用私用通道進行連接,並傳送銷售連絡資訊給彼此。
公司希望這種點對點的通訊通道,可以足夠與其餘的公司網路隔離。但他們很快就知道,這個方案不足以解決問題。Mallory 發現新系統的缺點,並繼續竊取銷售連絡資訊,同時開始謹慎地變更銷售人員的連絡人位址以隱藏自己的罪行。
公司決定為 IM 工具加入更多的安全性防護措施,以停止竊取的行為。
版本 2-5:累加的安全性改善措施
隨後的幾個月,對新軟體進行許多的測試和加強。當測試完成時,共額外建立了 4 個版本的 IM 工具。每個版本都是依前一個版本為基礎而建置的:
版本 2 納入 CNG 加密,使用公開/私密金鑰組。
版本 3 使用數位簽章,簽署密碼編譯金鑰和訊息。
版本 4 加入私用通道,傳輸用來簽署密碼編譯金鑰和訊息的數位簽章。
版本 5 則藉由在任何 IM 工作階段所收到的簽署金鑰具有無效簽章時結束該工作階段,進而終止入侵。
測試結果
版本 2 使用高度安全性的加密演算法。要破解這個加密需要耗費大量的資源和時間。因此,公司非常驚訝這個方案依舊阻止不了資料外洩。
使用數位簽章的版本 3 還是沒有辦法防止竊取行為。然而,這個版本卻讓公司得到一個重大的發現:如果密碼編譯金鑰和數位簽章遭到攔截和替換,則用於傳輸金鑰和簽章的通道就一定是問題的來源。
這個想法可以藉由在版本 4 加入私用通道來傳輸數位簽章而進行測試。另外,當金鑰或訊息具有無效的簽章時,版本 4 也會顯示警告。公司中只有兩個人拿到版本 4:Alice 和 Bob。而當 Alice 和 Bob 傳送第一個訊息,就立即開始顯示安全性警告時,公司終於了解到他們的網路遭遇到攔截式攻擊。
版本 5 跟版本 4 一樣,唯一的不同在於,版本 5 會在發生第一個安全性違規時結束工作階段。一旦安裝這個版本,銷售連絡資訊的竊取行為也就會終止。
範例程式碼
本範例所提供的程式碼會模型化處理這 5 個安全性版本。在原始程式碼概觀 (CNG 範例) 中有提供您相關的程式碼概觀。
注意事項 |
---|
本範例並不是提供您完整的安全性方案。其目的僅在於藉由接近真實的安全性案例示範 CNG API。完整的安全性應用程式並不在本範例所討論的範圍內。 |
命名規範
本範例的說明內容會參照 5 個軟體版本,並以編號對應其安全性層級 (例如,版本 1、版本 2 等等)。
隨前後文之不同,名稱 "Alice"、"Bob" 和 "Mallory" 可能代表範例情節中提及的 3 個人員或是 3 個 Visual Studio 應用程式。為了簡潔性,說明內容會使用相同的名稱表示這些人員或應用程式。例如,「Alice 會自動載入 Bob 和 Mallory」,即代表 Alice 應用程式會自動載入 Bob 和 Mallory 應用程式。
詳細資訊
下列主題提供您有關範例案例和程式碼的深入資訊:
實作攔截式攻擊:說明範例如何示範這個典型攔截式攻擊的模擬。
ECDH 演算法概觀:簡短討論 Elliptic Curve Diffie-Hellman (ECDH) 演算法的數學運算。
逐步說明金鑰和訊息交換:提供範例中 5 個版本所使用之金鑰和訊息交換程序的逐步指引。
HOW TO:建置和執行 CNG 範例:說明範例架構,並提供建置、執行階段和用法指示。本節也包含原始程式碼清單。
原始程式碼概觀:說明程式碼元件的互動和流程。
Utility 類別的程式碼分析:說明 Utilities.cs 檔案的內容和用途。
ChannelManager 類別的程式碼分析:說明 ChannelManager.cs 檔案的內容和用途。
Communicator 類別的程式碼分析:說明 Communicator.cs 檔案的內容和用途。
預期的輸出:顯示範例程式碼的輸出。