ssh詳細登錄過程


轉自 http://blog.csdn.net/gsnumen/article/details/7293266?readlog

ssh詳細登錄過程

 

首先說下相關概念:

明文:需要秘密傳送的消息。
密文:明文經過密碼變換后的消息。
加密:由明文到密文的變換。
解密:從密文恢復出明文的過程。
破解:非法接收者試圖從密文分析出明文的過程。
加密算法:對明文進行加密時采用的一組規則。
解密算法:對密文進行解密時采用的一組規則。
密鑰:加密和解密時使用的一組密碼信息。
對稱加密:是采用單鑰密碼系統的加密方法,使用同一密鑰對信息進行加密和解密的加密方法。
非對稱加密:需要兩個密鑰:公共密鑰和私有密鑰,它們成對出現,公鑰加密的數據有且只有私鑰能解密,私鑰加密的數據有且只有公鑰解密,相對於“對稱加密”,“非對稱加密”加密方法加密和解密使用不同的密鑰,所以叫“非對稱加密”加密方法。
對稱加密和非對稱加密的區別:在於加密和解密是否使用的同一個密鑰。
 
加密、身份認證、數字簽名認證:
     加密:將數據資料加密,使得非法用戶即便獲取加密后的資料,也無法獲取正確的資料內容,所以數據加密可以保證數據防止監聽攻擊;其重點在於數據的安全性。
    身份認證:判斷某身份的真實性,確認身份后,系統才可以依不同的身份賦予不同的權限;其重點在於用戶的真實性。
    數字簽名認證:首先"數字簽名"就是附加在數據單元上的一些數據,或是對數據單元所作的密碼變換。這種數據或變換允許接收者判斷數據的來源和數據的完整性,防止被偽造篡改。數字簽名認證側重於把保證數據的完整性,防止被偽造和篡改。
 
 

認證原理:

有2種認證方式:

    基於賬號和口令的驗證方式 和 基於公鑰和私鑰的驗證方式

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再次解密數據,得到質詢。
    客戶端使用會話密鑰加密質詢,發送給服務端。
    服務端使用會話密鑰解密報文,得到質詢,判斷是不是自己生成的那個質詢,如果不相同,發送失敗消息給客戶端,如果相同,認證通過。
 

參考:

 
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM