1. 程式人生 > >SSH如何保證通訊安全

SSH如何保證通訊安全

SSH的通訊步驟主要包括建立加密通道、認證和通訊三個階段。分析下來風險主要是在建立加密通道階段,分析和應對總結如下。
階段一:協商加密通訊連線。即通過非對稱加密方式先在Client和Server之間安全的協商對稱金鑰(即會話金鑰):
1)雙方協商SSH版本、採用的非對稱加密演算法等資訊;
2)Server傳送公鑰給Client;
3)Client生成對稱金鑰(即會話金鑰)的相關引數,並用公鑰加密後發給Server;
4)Server基於私鑰解密資訊獲取引數,並基於金鑰交換演算法生成同樣的會話金鑰。
5)雙方後續通訊均基於此會話金鑰進行加密,從而避免金鑰被竊取風險。會話金鑰定期更新。
本階段的主要風險在於

:SSH不具備CA證書機制,可能會被鏈路中間人偽造Server併發送自己的公鑰給Client,而Client無法確定其真實性。
解決方案:本階段(協商)完成後,Client使用的客戶端會計算並顯示公鑰的SHA1值,使用者可以用這個值與Server服務方在公開渠道(如網站)提供的公鑰的SHA1值對比,以確保其真實性。
在這裡插入圖片描述
階段二:登入認證、。在會話金鑰建立的安全加密連線上,Client向Server發出登入請求,Server進行認證。認證主要包括兩種方式:
**1)登入使用者名稱和密碼認證,即對稱金鑰方式認證。**這個很簡單,Server根據資訊生成SHA1值進行比對即可。
2)SSH金鑰對認證,即非對稱金鑰方式認證
。在前期(如使用者註冊階段)以安全的方式生成一個非對稱金鑰對,並將公鑰資訊配置到Server端(不同登入賬戶應放到不同賬戶目錄下,具體參考:https://blog.csdn.net/nahancy/article/details/79059135)。 隨後使用Linux命令列或者Windows SSH客戶端配置需要使用的證書路徑,即傳送金鑰對登入請求到Server。Server端獲取需要登入的賬號資訊後,基於非對稱金鑰啟動認證流程,確認請求的私鑰簽名正確即可成功登入。
階段三:通訊階段。
理論上階段二、三因為都是在階段一的會話金鑰加密後進行通訊,因此除非暴力破解否則沒有安全問題。

上面過程涉及到三種金鑰:
1、建立安全通道金鑰:對稱金鑰或者非對稱金鑰。
2、真正用於會話加密的金鑰:建立安全通道的金鑰不適合用於加密。如果是非對稱金鑰,則由於效能較低不適合加密;而如果是對稱金鑰如果直接用於會話加密就會導致該金鑰一直不變,非常容易被破解(哪怕是事後破解也是暴露了金鑰資訊)。因此,真正用於會話的金鑰是由第一步建立安全通道時協商交換生成的,通常做法是增加一個隨機數作為計算會話金鑰的因子,同時週期性更新。
3、最終登入金鑰:對稱金鑰或者非對稱金鑰,均要事先配置。

最後一點思考:
SSH和VPN通訊建立其實是有很大共同點,核心目標都是在傳輸關鍵內容前建立好安全通道,確保資料的機密性和完整性。那麼建立安全通道要考慮的關鍵點就是協商好用於加密會話的對稱金鑰。如果基於對稱金鑰,必須進行事先的配置且確保用於建立安全通道的金鑰分發絕對安全。因此,絕大部分場景下都是採用非對稱金鑰方案,不需要提前協商即可建立金鑰安全交換通道。因此,從上面的分析來看,若場景中沒有的對稱金鑰而必須採用非對稱金鑰機制,最大的威脅就來自於中間人攻擊。
避免中間人攻擊只有兩種方案:
1)在能夠控制鏈路的情況下,避免鏈路上的節點處於不可信任狀態,確保節點都可信。但這個往往很難做到。
2)採用有權威可信機構的認證方案。比如非對稱金鑰領域,需要通訊雙方有可信CA頒發的證書,從而確保雙發的公鑰都是未經中間人偽造的。

參考:
SSH 協議原理:https://www.jianshu.com/p/8e5b7aea52b5
SSH協議認證詳解:https://www.cnblogs.com/alexyuyu/articles/7740213.html
SSH金鑰對登入方式:https://blog.csdn.net/zyboy2000/article/details/53057330