ssh 為 secure shell 的縮寫,由 ietf 的網路小組(network working group)所制定;ssh 為建立在應用層基礎上的安全協議。ssh 是目前較可靠,專為遠端登入會話和其他網路服務提供安全性的協議。利用 ssh 協議可以有效防止遠端管理過程中的資訊洩露問題。簡單來說ssh是一種加密的用於遠端登入的協議。
對稱加密的原理非常簡單,假如計算機a要傳送一段文字給計算機b,但是又不想讓別人知道,最簡單的辦法就是,使用一大段密碼進行加密,讓別人不知道什麼意思,這裡術語就叫金鑰,然後加密過後的文字通過網路傳送給計算機b之後,計算機b為了讀懂這段文字,這時就需要之前的金鑰進行解密,如下圖:
然而這裡存在乙個問題,萬一別人通過網路傳輸或者其他手段把金鑰給擷取了,就涼了,所以這裡需要乙個複雜一點的非對稱加密。
既然把金鑰傳輸給別人不安全,那我們就要避免這個問題,首先計算機a和計算機b,分別擁有兩個東西,叫做公鑰和私鑰,這兩個東西有什麼用呢,簡單來說這兩個東西是配套來使用的,一段文字通過公鑰加密後,需要通過私鑰解密才能看到,公鑰就像鎖,而私鑰就像鑰匙,現在計算機a擁有一把鎖和鑰匙,計算機b也擁有一把鎖和鑰匙,需要注意的是這兩個東西是配套使用的,也就是只有自己的鑰匙能開自己的鎖。然後我們需要怎麼做呢,原理很簡單,計算機a和計算機b把自己的公鑰複製乙份,傳送給對對方,也就是交換公鑰,需要加密資料的時候就用對方的公鑰解密,然後傳送給對方,然後對方就用自己的金鑰解密。如下圖:
注:梯形為客戶端公鑰和私鑰,長方形為伺服器端公鑰和私鑰
公鑰的交換過程也略微有點複雜,我們先來看個圖:
簡單來講一下這個過程
1.首先客戶端建立乙個連線
2.伺服器端將自己的公鑰還有乙個會話的id發回給客戶端,現在客戶端得到了伺服器端的公鑰
3.客戶端把自己的公鑰(客戶端公鑰)和會話id做乙個異或運算,得到乙個結果,然後把結果用伺服器端的公鑰加密發給伺服器端
4.伺服器端拿到那串東西後,用自己的私鑰(伺服器端私鑰)解密得到那個結果,然後再和會話id做異或運算,這樣伺服器端也得到了客戶端的公鑰
linux利用ssh遠端登入,一般有兩種方式,一種是需要密碼的,一種是不需要輸入密碼的,現在我們先來討論下利用前面的原理如何實現,先看下圖:
如上圖所示,客戶端想登入到伺服器端怎麼辦呢
1.先做乙個公鑰交換,具體過程像上面那樣
2.不是需要輸入密碼嗎,那我就先把密碼用伺服器端的公鑰加密一波在發出去給伺服器端
3.伺服器端得到加密後的密碼後用自己的私鑰(伺服器私鑰)解密一波就知道是不是正確了,然後密碼正不正確得搞個反饋回去,這個反饋呢伺服器端用客戶端的公鑰加密一波,再發回去給客戶端
4.客戶端拿到這個加密後的反饋,就直接用自己的私鑰(客戶端私鑰)解密一下就完事
免密登入是怎麼做的呢,我們先來看個圖:
1.首先不必做公鑰交換了,在登入請求之前我需要將客戶端的公鑰發給伺服器端
2.現在客戶端發起乙個登入請求
3.伺服器端怎麼做呢,先隨機生成一串東西,然後用客戶端的公鑰進行加密,發給客戶端
4.客戶端拿到這串解密後的東西後用自己的私鑰(客戶端私鑰)解密一下,如無意外,會得到原來的字串,然後再把這個解密後的字串發給伺服器端
5.伺服器端拿到這串字串後和自己之前生成的字串比對一下,看是不是一樣,一樣的話就是自己人了,把登入反饋回去
SSH協議(從對稱加密到非對稱加密)
ssh 為 secure shell 的縮寫,由 ietf 的網路小組 network working group 所制定 ssh 為建立在應用層基礎上的安全協議。ssh 是目前較可靠,專為遠端登入會話和其他網路服務提供安全性的協議。利用 ssh 協議可以有效防止遠端管理過程中的資訊洩露問題。簡單來...
對稱加密和非對稱加密!
主要是對稱加密和非對稱加密兩種。可供各位參考 using system using system.collections.generic using system.linq using system.text using system.security.cryptography using syst...
對稱加密和非對稱加密!
對稱加密演算法 對稱加密演算法是應用較早的加密演算法,技術成熟。在對稱加密演算法中,資料發信方將明文 原始資料 和加密金鑰一起經過特殊加密演算法處理後,使其變成複雜的加密密文傳送出去。收信方收到密文後,若想解讀原文,則需要使用加密用過的金鑰及相同演算法的逆演算法對密文進行解密,才能使其恢復成可讀明文...