金鑰和訊息的逐步交換 (CNG 範例)
密碼編譯公開/私密金鑰方案頗容易遭受攔截式攻擊 (Man-in-the-middle Attack)。這些攻擊有許多型式,包括竊聽、替代、拒絕服務和網路釣魚。Cryptography Next Generation (CNG) 安全通訊範例將解決其中的替代型式,範例中的第三方 (Mallory) 讓自己可以介入兩個通訊端點 (Alice 和 Bob) 之間。
下列小節提供您 CNG 範例概觀中討論的 5 個安全性版本的相關背景資訊、說明圖例和逐步指示。
版本 1:基本訊息交換
版本 2:未簽署金鑰和未簽署訊息交換:
沒有攔截的情況
有攔截的情況
版本 3:已簽署金鑰和已簽署訊息交換並搭配攔截
版本 4:已簽署金鑰和已簽署訊息交換並搭配偵測
版本 5:已簽署金鑰和已簽署訊息交換並搭配應用程式終止
版本 1:基本訊息交換
下圖顯示 Alice 和 Bob 在沒有攔截式攻擊情況下的訊息傳送。這些訊息未經加密或數位簽署。CNG 範例會在您選取版本 1 時示範這個程序。圖例後會提供這個程序的逐步說明。
版本 1:基本訊息交換
Alice 和 Bob 傳送未加密未簽署訊息
1.Alice 建立訊息。
2.Alice 將訊息傳送給 Bob。
3.Bob 收到 Alice 的訊息。
4.Bob 建立訊息。
5.Bob 將訊息傳送給 Alice。
6.Alice 收到 Bob 的訊息。
版本 2:未簽署金鑰和未簽署訊息交換:沒有攔截的情況
下圖顯示在沒有攔截式攻擊情況下的金鑰和訊息交換。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:未簽署金鑰和未簽署訊息交換:有攔截的情況
下圖顯示在有攔截式攻擊情況下的金鑰和訊息流動。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 的通道。這麼做的原因是他要與 Alice 共用 PublicChannel (請參閱原始程式碼概觀)。他要先傳送他的替代金鑰給 Alice,然後才能關閉、重新開啟 PublicChannel 並與 Bob 連接。
比較這部分和步驟 17-22,在該處,Alice 傳送的訊息會傳輸給 Bob。
Mallory 模擬 Alice
7.Mallory 產生第二個公開/私密金鑰組,與 Bob 搭配使用。
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 就可以從事雙向對談,因為他有兩個開放管道可供使用。這個部分與步驟 1-6 不同,在該處 Mallory 一次只能開啟一個通道,才能攔截密碼編譯金鑰。
17.Alice 產生訊息,並使用在步驟 13 產生的 Mallory/Alice 金鑰內容來加密訊息。她告訴 Bob 有關值得開發的銷售連絡人資訊。
18.Alice 將訊息傳送給 Bob。
19.Mallory 攔截並解密該訊息,也就竊取到該連絡資訊。
20.Mallory 根據 Alice 的訊息產生假的訊息,變更其中的連絡位址。並使用共用的 Mallory/Bob 金鑰內容來加密假訊息。
21.Mallory 將訊息傳送給 Bob。
22.Bob 解密該訊息,認定這是來自 Alice 的。
Bob 將訊息傳送給 Alice
23.Bob 產生訊息,並使用在步驟 16 產生的 Mallory/Bob 金鑰內容來加密訊息。他告訴 Alice 希望能與該連絡人會面。
24.Bob 將訊息傳送給 Alice。
25.Mallory 攔截、解密並捨棄該訊息。
26.Mallory 使用共用的 Mallory/Alice 金鑰內容來產生假訊息。他告訴 Alice 他認為該銷售連絡位址不正確,但他會繼續嘗試聯繫該連絡人。
27.Mallory 將訊息傳送給 Alice。
28.Alice 解密該訊息,認定這是來自 Bob 的。她接受他的說法並轉而開發其他的客戶。
版本 3:已簽署金鑰和已簽署訊息交換並搭配攔截
下圖顯示密碼編譯金鑰和訊息流動、攔截式攻擊,以及使用數位簽章來簽署金鑰和訊息。CNG 範例會在您選取版本 3 時示範這個案例,並啟用 Mallory 的攔截作業。
版本 3:已簽署金鑰和已簽署訊息交換並搭配攔截
版本 3 與版本 2 相同,不同的是,版本 3 示範使用數位簽章來簽署訊息和密碼編譯金鑰。
在步驟 1-6 中,Alice 在不安全的 PublicChannel 上傳送數位簽章金鑰而遭到 Mallory 的攔截,Mallory 使用這個金鑰來簽署他的替代金鑰和訊息。因此,Alice、Bob 和 Mallory 使用相同的數位簽章金鑰。當 Alice 和 Bob 在步驟 15、20、35 和 42 中驗證金鑰和訊息簽章時,並沒有察覺到 Mallory 的攔截作業。
版本 4:已簽署金鑰和已簽署訊息交換並搭配偵測
下圖顯示密碼編譯金鑰和訊息流動、攔截式攻擊,以及使用數位簽章來簽署金鑰和訊息。除此之外,版本 4 軟體會偵測到無效的簽章。CNG 範例會在您選取版本 4 時示範這個案例,並啟用 Mallory 的攔截作業。
版本 4:已簽署金鑰和已簽署訊息交換並搭配偵測
版本 4 與版本 3 在下列方面有所不同:
只有 Alice 和 Bob 收到版本 4 軟體。
版本 4 會傳送版本 3 中使用的數位簽章金鑰,但會將其視為假的金鑰。
版本 4 會讓 Alice 透過 Mallory 不知道的私用通道,傳送第二個數位簽章金鑰給 Bob (這是上圖中的步驟 0)。Alice 和 Bob 會使用這個私密數位簽章來簽署金鑰和訊息。
版本 4 會在步驟 15、20、35 和 42 中偵測到 Mallory 的無效簽章,並顯示安全性警告。
Mallory 繼續使用版本 3 數位簽章來簽署他的替代金鑰和訊息。因此:
他不知道有版本 4 的私密數位簽章金鑰。
他不會收到安全性警告。
他不知道 Alice 和 Bob 可以偵測到他的無效金鑰和訊息簽章。
版本 5:已簽署金鑰和已簽署訊息交換並搭配應用程式終止
下圖顯示密碼編譯金鑰和訊息流動、攔截式攻擊,以及使用數位簽章來簽署金鑰和訊息。跟版本 4 一樣會偵測到無效的簽章。CNG 範例會在您選取版本 5 時示範這個案例,並啟用 Mallory 的攔截作業。
版本 5:已簽署金鑰和已簽署訊息交換並搭配應用程式終止
版本 5 與版本 4 相同,不同的是,當 Alice 和 Bob 收到的公開密碼編譯金鑰具有無效數位簽章時,會結束工作階段。