劫持完整會話時如何防止中間人攻擊?
假設在連接到伺服器的客戶端之間存在相互身份驗證,該伺服器在其他不安全的 TCP 通道上。雙方根據預共享的對稱密鑰創建一個隨機挑戰,另一方使用密鑰散列進行回答。
$$ C\rightarrow open ,, connection \rightarrow S $$ $$ C\rightarrow challenge_C \rightarrow S $$ $$ C\leftarrow challenge_S \leftarrow S $$
$$ C\rightarrow H_K(challenge_S) \rightarrow S $$ $$ C\leftarrow H_K(challenge_C) \leftarrow S $$
$$ C \leftarrow authenticated \rightarrow S $$
但是,對手“中間人”可以通過任何方式監聽網路。每當客戶端 C 將要與伺服器建立 TCP 連接時,MitM 可以同時建立另一個對手客戶端會話 C’ 並將他在 C 和 S 之間偵聽的所有通信注入到 C’ 和 S 之間的會話中,所以 C’針對 S 進行身份驗證。
這似乎太簡單了 - 那麼我的錯誤在哪裡?
並不是說 C 或 C` 得到了身份驗證,因此從那時起 S 就可以信任一般意義上看似源自 C 或 C’ 的數據。如果這是真的,S 將信任任何看似從 C 發送到 S 的未經身份驗證的明文資訊。這顯然會受到中間人攻擊,它只是等待最初的挑戰-響應步驟完成在此之前干預正在傳達的資訊。
在安全協議中真正發生的是,C 和 S 在建立對稱會話密鑰的過程中相互驗證,然後它們都使用經過驗證的對稱加密進行通信。這證明了他們確實仍在相互交談,而不是中間人攻擊者。
如果您不關心每個會話的對稱密鑰以便具有前向保密性,並且如果雙方都維護一個長期計數器(以防止重放攻擊),那麼如果您有一個預共享的對稱密鑰,您可以只需直接跳轉到通過經過身份驗證的加密(發送的每條消息使用並增加計數器)進行通信,而無需您在問題中概述的質詢 - 響應步驟。