真的有什麼方法可以消除或避免 MITM 攻擊嗎?
這個問題幾乎概括了它。
有沒有辦法讓成功執行 MITM 攻擊的攻擊者實際上無法讀取或更改消息?假設沒有攻擊前密鑰傳輸或在攻擊對話中未傳輸的商定密鑰。
您無法從真空中獲得抗中間人(MitM) 的通道。
您需要事先了解一些常識。幸運的是,所有人都需要一種共享的信任關係。
假設伺服器 Steve 信任 Carol,進一步假設客戶端 Charlie 也信任 Carol。
作為一個例子,我將給出一個簡化的TLS-RSA 密鑰交換,因為它特別容易。
首先,Steve 需要將他的公共 RSA 密鑰送出給 Carol 以進行認證。Carol 對 Steve 的密鑰進行數字簽名,並嵌入將他的名字(“Steve”)與他的公鑰綁定的證書中。假設查理可以驗證卡羅爾的簽名。這只需要做一次。
Charlie 現在啟動與 Steve 的連接,其中包含通信請求並指定Charlie 支持的可用*密碼套件。*它們包含有關如何在密鑰交換完成後加密和驗證數據的資訊。此外,將在初始消息中發送一個隨機數。Steve 將回答他選擇的密碼套件和他的隨機數。
在下一步中,Steve 將發送他的證書。Charlie 將通過檢查 Carol 的簽名來驗證證書,如果有效,將接受來自 Steve 的密鑰。現在查理隨機選擇一個隨機的“預主密鑰”並使用史蒂夫的公鑰對其進行加密。他把這個寄給史蒂夫。Charlie 現在從他的隨機數、pre-master secret 和 Steve 的隨機數中導出主密碼。現在 Charlie 發送一條消息,指示從現在開始將使用選定的加密方法。他使用主密鑰作為密鑰,在所有先前數據上使用消息驗證碼(MAC) 來完成此消息。
只有史蒂夫能夠解密這個預主密鑰。他將其解密並自己推導出主秘密。現在他驗證他收到的 MAC。接下來,他發送消息,表明他已準備好使用加密。他以相同的 MAC 結束(在所有以前的數據上)。
Charlie 對其進行驗證並可以確保沒有發生中間人攻擊,因為只有私鑰的持有者可以發送 MAC,並且他知道 Steve 是密鑰的持有者,因為 Carol 通過證書確認了它。
現在開始一個標準的預共享密鑰數據交換協議(在 TLS 術語中也稱為“記錄層”)
TL;DR:您使用數字簽名將公鑰綁定到身份,並使用這些密鑰來建構安全的密鑰交換。