寫代碼的木公算法
本文轉載自:https://baijiahao.baidu.com/s?id=1612411213158569988&wfr=spider&for=pc安全
熟悉Linux的人確定都知道SSH。SSH是一種用於安全訪問遠程服務器的網絡協議。它將客戶端與服務端之間的消息經過加密保護起來,這樣就沒法被竊取或篡改了。那麼它安全性是如何實現的呢?服務器
爲了理解SSH,先要介紹兩個重要概念:對稱加密和非對稱加密。網絡
在對稱加密中,客戶端和服務端使用同一個密鑰對數據進行加密和解密。這種方法的好處是加密強度高,很難破解。缺點也很明顯,即密鑰自己容易被泄漏。所以,如何保存密鑰成爲了關鍵問題。因而引出了第二種加密方式:非對稱加密。ssh
在非對稱加密中有兩個密鑰,公鑰和私鑰。這兩個密鑰配對產生和使用。用公鑰加密的數據,必須用與其對應的私鑰才能解開。而且,私鑰沒法經過公鑰獲取。所以,公鑰是能夠被公開的,而私鑰則必須被安全存放。ide
在SSH中,非對稱加密被用來在會話初始化階段爲通訊雙方進行會話密鑰的協商。因爲非對稱加密的計算量開銷比較大,所以一旦雙方的會話密鑰協商完成,後續的加密都將採用對稱加密來進行。加密
服務端的公鑰:客戶端在收到這個公鑰後,會在本身的「known_hosts」文件進行搜索。若是找到了相同的公鑰,則說明此前鏈接過該服務器。若是沒有找到,則會在終端上顯示一段警告信息,由用戶來決定是否繼續鏈接。
服務器所支持的加密算法列表:客戶端根據此列表來決定採用哪一種加密算法。.net
1)服務端在本身的「authorized_keys」文件中搜索與客戶端匹配的公鑰。
2)若是找到了,服務端用這個公鑰加密一個隨機數,並把加密後的結果發送給客戶端。
3)若是客戶端持有正確的私鑰,那麼它就能夠對消息進行解密從而得到這個隨機數。
4)客戶端由這個隨機數(這個隨機數能夠看作是鹽)和當前的會話密鑰(祕鑰纔是咱們真正須要加密的數據)共同生成一個MD5值。
5)客戶端把MD5值發給服務端。
6)服務端一樣用會話密鑰和原始的隨機數計算MD5值,並與客戶端發過來的值進行對比。若是相等,則驗證經過。blog
至此,通訊雙方完成了加密信道的創建,能夠開始正常的通訊了。get
總結:SSH巧妙地利用了對稱加密與非對稱加密各自的特色,實現了一套安全保密的遠程控制協議。
更詳細的對SSH的介紹還能夠參考這篇文章