Diffie-Hellman
為什麼 SSH 協議會生成兩個密鑰:客戶端到伺服器通信和伺服器到客戶端通信的加密密鑰?
如SSH RFC中所述,生成到伺服器的初始 IV、到客戶端的初始 IV、客戶端到伺服器的加密密鑰、伺服器到客戶端的加密密鑰、客戶端到伺服器的完整性密鑰以及伺服器到客戶端的完整性密鑰。
為什麼 SSH 會生成伺服器 -> 客戶端通信的密鑰和客戶端 -> 伺服器通信的密鑰?
當涉及到密鑰時,加密中有一條構想:一種用法,一個密鑰。
這給出了在每個方向上使用單獨鍵的第一級基本原理:每個方向是鍵的不同用法。
下一個級別是說明這可以防止哪類攻擊。即:鏡像攻擊。想像一下加密密鑰和(單獨的)身份驗證密鑰在兩個方向上都使用。至少有理由認為,攻擊者可以獲取伺服器發送的加密和經過身份驗證的數據,並將其重新傳輸到伺服器,就好像它來自客戶端一樣。除去協議中的細節,該數據片段將通過身份驗證並被解密,就好像它來自客戶端一樣。這違背了協議目標的簡單陳述,並且是一個突破(它是否可利用取決於我們不想考慮的細節)。與使用不同密鑰的情況相比:身份驗證失敗(如果發生解密,則會產生垃圾)。
補充:還有其他有效的方法可以防止鏡像攻擊(例如,在經過身份驗證的密碼中指明預期的接收者)。有時有充分的理由使用它而不是多個鍵(例如,最小化開放通道的記憶體佔用)。