【網絡安全】SSH協議科普文

寫代碼的木公算法

本文轉載自:https://baijiahao.baidu.com/s?id=1612411213158569988&wfr=spider&for=pc安全


熟悉Linux的人確定都知道SSH。SSH是一種用於安全訪問遠程服務器的網絡協議。它將客戶端與服務端之間的消息經過加密保護起來,這樣就沒法被竊取或篡改了。那麼它安全性是如何實現的呢?服務器

爲了理解SSH,先要介紹兩個重要概念:對稱加密和非對稱加密。網絡

對稱加密

在對稱加密中,客戶端和服務端使用同一個密鑰對數據進行加密和解密。這種方法的好處是加密強度高,很難破解。缺點也很明顯,即密鑰自己容易被泄漏。所以,如何保存密鑰成爲了關鍵問題。因而引出了第二種加密方式:非對稱加密。ssh

非對稱加密


在非對稱加密中有兩個密鑰,公鑰和私鑰。這兩個密鑰配對產生和使用。用公鑰加密的數據,必須用與其對應的私鑰才能解開。而且,私鑰沒法經過公鑰獲取。所以,公鑰是能夠被公開的,而私鑰則必須被安全存放。ide

在SSH中,非對稱加密被用來在會話初始化階段爲通訊雙方進行會話密鑰的協商。因爲非對稱加密的計算量開銷比較大,所以一旦雙方的會話密鑰協商完成,後續的加密都將採用對稱加密來進行。加密

SSH會話創建流程

  • step1:客戶端發起一個TCP鏈接,默認端口號爲22;
  • step2:服務端收到鏈接請求後,將本身的一些關鍵信息發給客戶端。這些信息包括:

服務端的公鑰:客戶端在收到這個公鑰後,會在本身的「known_hosts」文件進行搜索。若是找到了相同的公鑰,則說明此前鏈接過該服務器。若是沒有找到,則會在終端上顯示一段警告信息,由用戶來決定是否繼續鏈接。
服務器所支持的加密算法列表:客戶端根據此列表來決定採用哪一種加密算法。.net

  • step3:生成會話密鑰。此時,客戶端已經擁有了服務端的公鑰。接下來,客戶端和服務端須要協商出一個雙方都承認的密鑰,並以此來對雙方後續的通訊內容進行加密(通常會使用對稱加密算法)。
  • step4:接下來,客戶端將本身的公鑰id(服務端能夠配置不少公鑰文件,因此須要客戶端發送一個id說明是哪一個公鑰文件)發送給服務端,服務端須要對客戶端的合法性進行驗證:

1)服務端在本身的「authorized_keys」文件中搜索與客戶端匹配的公鑰。
2)若是找到了,服務端用這個公鑰加密一個隨機數,並把加密後的結果發送給客戶端。
3)若是客戶端持有正確的私鑰,那麼它就能夠對消息進行解密從而得到這個隨機數。
4)客戶端由這個隨機數(這個隨機數能夠看作是鹽)和當前的會話密鑰(祕鑰纔是咱們真正須要加密的數據)共同生成一個MD5值。
5)客戶端把MD5值發給服務端。
6)服務端一樣用會話密鑰和原始的隨機數計算MD5值,並與客戶端發過來的值進行對比。若是相等,則驗證經過。blog

至此,通訊雙方完成了加密信道的創建,能夠開始正常的通訊了。get

總結:SSH巧妙地利用了對稱加密與非對稱加密各自的特色,實現了一套安全保密的遠程控制協議。

更詳細的對SSH的介紹還能夠參考這篇文章

相關文章
相關標籤/搜索