祕鑰相關概念及ssh登錄分析

passphrase

       相對“密碼”(password)而言,密碼短語(passphrase)口令以其更爲嚴密的安全性正受到IT界的廣泛關注。在功能上,passphrase同密碼一樣,只是長度較密碼長。通常passphrase使用4到5個單詞取代原來數字、字母結合的方式。

公鑰私鑰 (非對稱加密)
  1,公鑰和私鑰成對出現 
  2,公開的密鑰叫公鑰,只有自己知道的叫私鑰 
  3,用公鑰加密的數據只有對應的私鑰可以解密 
  4,用私鑰加密的數據只有對應的公鑰可以解密 
  5,如果可以用公鑰解密,則必然是對應的私鑰加的密 
  6,如果可以用私鑰解密,則必然是對應的公鑰加的密

 

ssh的登錄過程分爲5個階段

1、版本號協商階段
2、密鑰和算法協商階段
3、認證階段
4、會話請求階段
5、會話交互階段

《1》版本號協商階段
服務端打開端口22,等待客戶連接。
客戶端向服務端發起TCP連接,連接建立後,服務端向客戶端發送第一個報文,包括版本標誌字符串,格式爲“協議版本號 次協議版本號 軟件版本號”。
客戶端收到報文後,解析協議版本號,如果服務端的協議版本號比自己的低,且客戶端能支持服務端的低版本,就使用服務端的協議號,否則使用自己的協議版本號。
客戶端回覆服務端一個報文,包含了客戶端決定使用的協議版本號。
服務端比較客戶端發過來的版本號,決定是否能同客戶端交互。
如果協商成功,就進入密鑰和算法協商階段。否則服務端斷開TCP連接。


《2》密鑰和算法協商階段
服務端和客戶端分別發送算法協商報文給對方,報文中包含自己支持的公鑰算法列表、加密算法列表、消息驗證碼算法列表、壓縮算法列表等。
服務端和客戶端根據對方和自己支持的算法得出最終使用的算法。
服務端和客戶端利用DH交換算法、主機密鑰對等參數,生成會話密鑰和會話ID。

c公 客戶端公鑰
c密 客戶端密鑰
s公 服務端公鑰
s密 服務端密鑰

在版本號協商階段完成後:
服務端將 s公 發送給客戶端。
服務端生成會話ID ,設爲 id ,發送給客戶端。
客戶端生成會話密鑰,設爲 key ,並計算 res = id 異或 key。
客戶端將 res 用 s公 進行加密,將結果發送給服務端。
服務端用 s密 進行解密,得到 res。
服務器計算 res 異或 id,得到 key。
至此服務端和客戶端都知道了會話密鑰和會話ID,以後的數據傳輸都使用會話密鑰進行加密和解密。


《3》認證階段
基於賬號和口令的驗證方式:
客戶端使用密鑰和算法協商階段生成的會話密鑰加密賬號、認證方法、口令,將結果發送給服務器。
服務端使用獲得的會話密鑰解密報文,得到賬號和口令。
服務端對這個賬號和口令進行判斷,如果失敗,向客戶端發送認證失敗報文,其中包含了可以再次認證的方法列表。
客戶端從認證方法列表中選擇一種方法進行再次認證。
這個過程反覆進行,直到認證成功或者認證次數達到上限,服務端關閉本次TCP連接。

基於公鑰和私鑰的驗證方式:
使用ssh-keygen程序生成公鑰 id_dsa.pub 和私鑰 id_dsa,一般是在客戶端上生成,然後把 id_dsa.pub 通過某種方式發送給服務端。
服務端放在將要遠程登錄過來的那個賬號的目錄的.ssh目錄下面。
客戶端使用密鑰和算法協商階段生成的會話密鑰加密賬號、認證方法、id_dsa.pub,將結果發送給服務端。
服務端使用會話密鑰解密報文,得到賬號、id_dsa.pub。
服務端在這個賬號的目錄的.ssh目錄下找對應的公鑰,如果沒有找到,發送失敗消息給客戶端,如果找到,比較客戶發送過來的這個公鑰和找到的公鑰,如果內容相同,服務端生成一個隨機的字符串,簡稱“質詢”,然後使用找到的公鑰加密這個質詢,然後使用會話密鑰再次加密。
服務端把這個雙重加密的數據發送給客戶端。
客戶端使用會話密鑰解密報文,然後使用id_dsa再次解密數據,得到質詢。
客戶端使用會話密鑰加密質詢,發送給服務端。
服務端使用會話密鑰解密報文,得到質詢,判斷是不是自己生成的那個質詢,如果不相同,發送失敗消息給客戶端,如果相同,認證通過。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章