【网络安全】SSH协议科普文
寫代碼的木公
本文轉載自:https://baijiahao.baidu.com/s?id=1612411213158569988&wfr=spider&for=pc
熟悉Linux的人肯定都知道SSH。SSH是一種用于安全訪問遠程服務器的網絡協議。它將客戶端與服務端之間的消息通過加密保護起來,這樣就無法被竊取或篡改了。那么它安全性是如何實現的呢?
為了理解SSH,先要介紹兩個重要概念:對稱加密和非對稱加密。
對稱加密
在對稱加密中,客戶端和服務端使用同一個密鑰對數據進行加密和解密。這種方法的好處是加密強度高,很難破解。缺點也很明顯,即密鑰本身容易被泄漏。因此,如何保存密鑰成為了關鍵問題。于是引出了第二種加密方式:非對稱加密。
非對稱加密
在非對稱加密中有兩個密鑰,公鑰和私鑰。這兩個密鑰配對產生和使用。用公鑰加密的數據,必須用與其對應的私鑰才能解開。并且,私鑰無法通過公鑰獲取。因此,公鑰是可以被公開的,而私鑰則必須被安全存放。
在SSH中,非對稱加密被用來在會話初始化階段為通信雙方進行會話密鑰的協商。由于非對稱加密的計算量開銷比較大,因此一旦雙方的會話密鑰協商完成,后續的加密都將采用對稱加密來進行。
SSH會話建立流程
- step1:客戶端發起一個TCP連接,默認端口號為22;
- step2:服務端收到連接請求后,將自己的一些關鍵信息發給客戶端。這些信息包括:
服務端的公鑰:客戶端在收到這個公鑰后,會在自己的“known_hosts”文件進行搜索。如果找到了相同的公鑰,則說明此前連接過該服務器。如果沒有找到,則會在終端上顯示一段警告信息,由用戶來決定是否繼續連接。
服務器所支持的加密算法列表:客戶端根據此列表來決定采用哪種加密算法。
- step3:生成會話密鑰。此時,客戶端已經擁有了服務端的公鑰。接下來,客戶端和服務端需要協商出一個雙方都認可的密鑰,并以此來對雙方后續的通信內容進行加密(一般會使用對稱加密算法,經過這步后,客戶端和服務端都會有一個相同的秘鑰來對通信的內容進行加密)。
- step4:接下來,客戶端將自己的公鑰id(服務端可以配置很多公鑰文件,所以需要客戶端發送一個id說明是哪個公鑰文件)發送給服務端,服務端需要對客戶端的合法性進行驗證:
1)服務端在自己的“authorized_keys”文件中搜索與客戶端匹配的公鑰。
2)如果找到了,服務端用這個公鑰加密一個隨機數,并把加密后的結果發送給客戶端。
3)如果客戶端持有正確的私鑰,那么它就可以對消息進行解密從而獲得這個隨機數。
4)客戶端由這個隨機數(這個隨機數可以看做是鹽)和當前的會話密鑰(秘鑰才是我們真正需要加密的數據)共同生成一個MD5值。
5)客戶端把MD5值發給服務端。
6)服務端同樣用會話密鑰和原始的隨機數計算MD5值,并與客戶端發過來的值進行對比。如果相等,則驗證通過。
至此,通信雙方完成了加密信道的建立,可以開始正常的通信了。
總結:SSH巧妙地利用了對稱加密與非對稱加密各自的特點,實現了一套安全保密的遠程控制協議。
更詳細的對SSH的介紹還可以參考這篇文章
總結
以上是生活随笔為你收集整理的【网络安全】SSH协议科普文的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 路径处理库pathlib使用详解
- 下一篇: eclipse 下配置安卓环境