SSH 加密和連接過程

1. 介紹

SSH 或 secure shell 是一種安全協(xié)議,是安全管理遠程服務器的最常用方法。使用多種加密技術(shù),SSH 提供了一種機制,用于在雙方之間建立加密安全連接,向另一方驗證每一方,以及來回傳遞命令和輸出。

在其他指南中,我們討論了如何配置基于 SSH 密鑰的訪問,如何使用 SSH 進行連接以及一些 SSH 提示和技巧。

在本指南中,我們將研究 SSH 采用的基礎(chǔ)加密技術(shù)以及它用于建立安全連接的方法。此信息可用于了解各種加密層以及形成連接和驗證雙方所需的不同步驟。

2. 對稱加密,非對稱加密和哈希

為了確保信息的傳輸,SSH 在事務中的各個點采用了許多不同類型的數(shù)據(jù)操作技術(shù)。這些包括對稱加密,非對稱加密和散列的形式。

2.1 對稱加密

加密和解密數(shù)據(jù)的組件的關(guān)系決定加密方案是對稱的還是非對稱的。

對稱加密是一種加密類型,其中一個密鑰可用于加密對方的消息,也可用于解密從另一個參與者接收的消息。這意味著持有該密鑰的任何人都可以加密和解密持有該密鑰的任何其他人的消息。

這種類型的加密方案通常稱為“共享秘密”加密或“秘密密鑰”加密。通常只有一個密鑰用于所有操作,或者一對密鑰,其中關(guān)系易于發(fā)現(xiàn),并且導出相反的密鑰是微不足道的。

SSH 使用對稱密鑰來加密整個連接。與某些用戶假設(shè)的相反,可以創(chuàng)建的公共/私有非對稱密鑰對僅用于身份驗證,而不是用于加密連接。對稱加密允許對密碼認證進行保護以防止窺探。

客戶端和服務器都有助于建立此密鑰,并且外部各方永遠不知道所產(chǎn)生的秘密。密鑰是通過稱為密鑰交換算法的過程創(chuàng)建的。這種交換導致服務器和客戶端通過共享某些公共數(shù)據(jù)并用某些秘密數(shù)據(jù)操縱它們而獨立地到達相同的密鑰。稍后將更詳細地解釋該過程。

此過程創(chuàng)建的對稱加密密鑰是基于會話的,并構(gòu)成服務器和客戶端之間發(fā)送的數(shù)據(jù)的實際加密。一旦建立,其余數(shù)據(jù)必須使用此共享密鑰加密。這是在驗證客戶端之前完成的。

SSH 可以配置為使用各種不同的對稱密碼系統(tǒng),包括 AES,Blowfish,3DES,CAST128 和 Arcfour。服務器和客戶端都可以根據(jù)優(yōu)先順序決定其支持的密碼列表。服務器上可用的客戶端列表中的第一個選項用作兩個方向的密碼算法。

在 Ubuntu 14.04 上,客戶端和服務器都是默認的:aes128-ctr,aes192-ctraes256-ctr,arcfour256,arcfour128,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.comaes128-cbc,blowfish-cbccast128-cbc,aes192-cbcaes256-cbc,arcfour。

這意味著如果兩臺 Ubuntu 14.04 計算機相互連接(不通過配置選項覆蓋默認密碼),它們將始終使用aes128-ctr密碼加密其連接。

2.2 非對稱加密

非對稱加密與對稱加密的不同之處在于,為了在單個方向上發(fā)送數(shù)據(jù),需要兩個相關(guān)的密鑰。其中一個密鑰稱為私鑰,而另一個稱為公鑰。

公鑰可以與任何一方自由共享。它與其配對密鑰相關(guān)聯(lián),但私鑰不能從公鑰中派生。公鑰和私鑰之間的數(shù)學關(guān)系允許公鑰加密只能由私鑰解密的消息。這是一種單向能力,這意味著公鑰無法解密它寫入的消息,也無法解密私鑰可能發(fā)送的任何內(nèi)容。

私鑰應保密,絕不應與另一方共享。這是公鑰范式的關(guān)鍵要求。私鑰是唯一能夠解密使用關(guān)聯(lián)公鑰加密的消息的組件。憑借這一事實,任何能夠解密這些消息的實體已經(jīng)證明它們可以控制私鑰。

SSH 在幾個不同的地方使用非對稱加密。在用于建立對稱加密(用于加密會話)的初始密鑰交換過程中,使用非對稱加密。在這個階段,雙方都生成臨時密鑰對并交換公鑰,以便產(chǎn)生將用于對稱加密的共享密鑰。

使用 SSH 進行非對稱加密的更好討論來自基于 SSH 密鑰的身份驗證。 SSH 密鑰對可用于向服務器驗證客戶端。客戶端創(chuàng)建密鑰對,然后將公鑰上載到其希望訪問的任何遠程服務器。它放在遠程服務器上用戶帳戶主目錄的~/ .ssh目錄下名為authorized_keys的文件中。

在建立對稱加密以保護服務器和客戶端之間的通信之后,客戶端必須進行身份驗證以允許訪問。服務器可以使用此文件中的公鑰來加密到客戶端的質(zhì)詢消息。如果客戶端可以證明它能夠解密此消息,則表明它擁有相關(guān)的私鑰。然后,服務器可以為客戶端設(shè)置環(huán)境。

2.3 哈希

SSH 利用的另一種形式的數(shù)據(jù)操作是加密散列。加密散列函數(shù)是創(chuàng)建簡潔“簽名”或一組信息摘要的方法。它們的主要區(qū)別在于它們永遠不會被顛倒,它們幾乎不可能以可預測的方式影響,它們實際上是獨一無二的。

使用相同的散列函數(shù)和消息應該產(chǎn)生相同的散列;修改數(shù)據(jù)的任何部分應該產(chǎn)生完全不同的哈希。用戶不應該能夠從給定的哈希生成原始消息,但是他們應該能夠判斷給定的消息是否產(chǎn)生給定的哈希。

鑒于這些屬性,散列主要用于數(shù)據(jù)完整性目的并驗證通信的真實性。 SSH 中的主要用途是使用 HMAC 或基于散列的消息驗證代碼。這些用于確保收到的消息文本完整且未經(jīng)修改。

作為上面概述的對稱加密協(xié)商的一部分,選擇消息認證碼(MAC)算法。通過客戶端可接受的 MAC 選擇列表來選擇算法。將使用服務器支持的列表中的第一個。

協(xié)商加密后發(fā)送的每條消息都必須包含 MAC,以便另一方可以驗證數(shù)據(jù)包的完整性。 MAC 是根據(jù)對稱共享密鑰,消息的分組序列號和實際消息內(nèi)容計算的。

MAC 本身作為數(shù)據(jù)包的最后部分發(fā)送到對稱加密區(qū)域之外。研究人員通常建議首先加密數(shù)據(jù),然后計算 MAC。

3. SSH如何工作?

您可能已經(jīng)基本了解 SSH 的工作原理。 SSH 協(xié)議使用客戶端 - 服務器模型來驗證雙方并加密它們之間的數(shù)據(jù)。

服務器組件偵聽指定的端口以進行連接。它負責協(xié)商安全連接,驗證連接方,并在接受憑證時生成正確的環(huán)境。

客戶端負責開始與服務器的初始 TCP 握手,協(xié)商安全連接,驗證服務器的身份是否與先前記錄的信息匹配,以及提供身份驗證的憑據(jù)。

SSH 會話分兩個階段建立。首先是同意并建立加密以保護未來的通信。第二階段是對用戶進行身份驗證,并發(fā)現(xiàn)是否應授予對服務器的訪問權(quán)限。

4. 協(xié)商會話加密

當客戶端建立 TCP 連接時,服務器會使用它支持的協(xié)議版本進行響應。如果客戶端可以匹配其中一個可接受的協(xié)議版本,則繼續(xù)連接。服務器還提供其公共主機密鑰,客戶端可以使用該密鑰來檢查這是否是預期的主機。

此時,雙方使用稱為 Diffie-Hellman 算法的版本協(xié)商會話密鑰。該算法(及其變體)使得每一方能夠?qū)⑺麄冏约旱乃接袛?shù)據(jù)與來自另一系統(tǒng)的公共數(shù)據(jù)組合以得到相同的秘密會話密鑰。

會話密鑰將用于加密整個會話。用于此部分過程的公鑰和私鑰對與用于向服務器驗證客戶端的SSH密鑰完全分開。

經(jīng)典 Diffie-Hellman 秘鑰協(xié)商的基本流程為:

  1. 雙方都同意一個大的素數(shù),它將作為種子值。
  2. 雙方就密文生成器(通常為 AES)達成一致,該生成器將用于以預定義的方式操縱值。
  3. 獨立地,每一方都提出另一個素數(shù),該號碼對另一方保密。此編號用作此交互的私鑰(與用于身份驗證的專用 SSH 密鑰不同)。
  4. 生成的私鑰,密文生成器和共享素數(shù)用于生成從私鑰導出但可以與另一方共享的公鑰。
  5. 然后兩個參與者交換他們生成的公鑰。
  6. 接收實體使用他們自己的私鑰,另一方的公鑰和原始共享素數(shù)來計算共享密鑰。雖然這是由各方獨立計算的,但使用相反的私鑰和公鑰,它將產(chǎn)生相同的共享密鑰。
  7. 然后使用共享密鑰加密隨后的所有通信。

用于其余連接的共享秘密加密稱為二進制數(shù)據(jù)包協(xié)議。上述過程允許每一方平等地參與生成共享秘密,這不允許一端控制秘密。它還完成了生成相同的共享秘密的任務,而無需通過不安全的通道發(fā)送該信息。

生成的秘密是對稱密鑰,這意味著用于加密消息的相同密鑰可用于在另一側(cè)解密它。這樣做的目的是將所有進一步的通信包裝在一個無法被外人破譯的加密隧道中。

建立會話加密后,用戶身份驗證階段開始。

5. 驗證用戶對服務器的訪問權(quán)限

下一階段涉及驗證用戶和決定訪問權(quán)限。根據(jù)服務器接受的內(nèi)容,有幾種不同的方法可用于身份驗證。

最簡單的可能是密碼驗證,其中服務器只是提示客戶端輸入他們嘗試登錄的帳戶的密碼。密碼通過協(xié)商加密發(fā)送,因此對外方是安全的。

即使密碼將被加密,由于密碼復雜性的限制,通常不建議使用此方法。與其他身份驗證方法相比,自動腳本可以非常輕松地破壞正常長度的密碼。

最受歡迎和推薦的替代方案是使用 SSH 密鑰對。 SSH 密鑰對是非對稱密鑰,這意味著兩個關(guān)聯(lián)密鑰服務于不同的功能。

公鑰用于加密只能使用私鑰解密的數(shù)據(jù)。公鑰可以自由共享,因為雖然它可以加密私鑰,但是沒有從公鑰導出私鑰的方法。

在建立對稱加密之后,使用 SSH 密鑰對進行身份驗證,如上一節(jié)所述。程序如下:

  1. 客戶端首先向服務器發(fā)送要對其進行身份驗證的密鑰對的 ID。
  2. 服務器檢查客戶端嘗試登錄密鑰ID的帳戶的 authorized_keys 文件。
  3. 如果在文件中找到具有匹配 ID 的公鑰,則服務器生成隨機數(shù)并使用公鑰加密該號碼。
  4. 服務器向客戶端發(fā)送此加密消息。
  5. 如果客戶端實際上具有關(guān)聯(lián)的私鑰,則它將能夠使用該密鑰解密消息,從而顯示原始號碼。
  6. 客戶端將解密的號碼與用于加密通信的共享會話密鑰組合,并計算該值的 MD5 哈希值。
  7. 然后,客戶端將此 MD5 哈希值發(fā)送回服務器,作為加密號碼消息的答案。
  8. 服務器使用相同的共享會話密鑰和它發(fā)送給客戶端的原始編號來自行計算 MD5 值。它將自己的計算與客戶端發(fā)回的計算進行比較。如果這兩個值匹配,則證明客戶端擁有私鑰并且客戶端已經(jīng)過身份驗證。

如您所見,密鑰的不對稱性允許服務器使用公鑰加密到客戶端的消息。然后,客戶端可以通過正確解密消息來證明它擁有私鑰。使用的兩種類型的加密(對稱共享密鑰和非對稱公鑰 - 私鑰)都能夠利用它們在此模型中的特定優(yōu)勢。

6. 總結(jié)

了解 SSH 中的連接協(xié)商步驟和加密層可以幫助您更好地了解登錄到遠程服務器時發(fā)生的情況。 希望您現(xiàn)在能夠更好地了解各種組件和算法之間的關(guān)系,并了解所有這些組件如何組合在一起。

7. 原文

https://www.digitalocean.com/community/tutorials/understanding-the-ssh-encryption-and-connection-process

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容