為了滿足安全需求,IETF的網絡工作組制定了Secure Shell(縮寫為SSH),這是壹種基於應用層和傳輸層的安全協議,為Shell在計算機上提供了安全的傳輸和使用環境。
SSH是目前可靠的協議,為遠程登錄會話和其他網絡服務提供安全性。使用SSH協議可以有效防止遠程管理過程中的信息泄露。所有傳輸的數據都可以通過SSH加密,還可以防止DNS欺騙和IP欺騙。
本文將重點介紹SSH中使用的加密算法以及建立安全連接的過程。
為了保證信息傳輸的安全性,SSH使用了對稱加密、非對稱加密和哈希技術。
對稱密鑰加密又稱對稱加密、私鑰加密和* * *共享密鑰加密,是密碼學中的壹種加密算法。這種算法在加密和解密時使用相同的密鑰,或者使用兩個可以簡單地相互推導出的密鑰。
SSH使用對稱密鑰對整個連接過程中傳輸的信息進行加密。值得註意的是,用戶創建的公/私鑰對僅用於驗證,不會用於加密連接。對稱加密允許驗證密碼以防止第三方窺探。
* * *共享密鑰由密鑰交換算法生成,該算法允許雙方通過不安全的通道創建密鑰,而無需另壹方的任何事先信息。客戶端和服務器都參與這個過程,稍後將詳細介紹該過程的細節。
生成的密鑰將用於加密會話期間客戶端和服務器傳輸的數據。該過程將在驗證客戶身份之前完成。
SSH支持多種對稱密鑰算法,包括AES、Blowfish、3DES、CAST128和Arcfour。客戶端和服務器可以配置所采用的算法列表。將采用服務器支持的客戶端列表中的第壹個算法。
例如,在Ubuntu 14.04上,客戶端和服務器的默認配置如下:AES 128-CTR、AES 192-CTR、AES 256-CTR、ArcFour 256、ArcFour 128、aes128-gcm@openssh.com、aes256-gcm@openssh.com、chacha20-poly1305@openssh.com、aes128-cbc、blowfish-cbc、cast128-cbc
也就是說,如果兩個Ubuntu 14.04采用默認配置,它們將始終使用aes128-ctr算法來加密連接。
在非對稱加密方法中,需要壹對密鑰,壹個是私鑰,另壹個是公鑰。這兩個鍵在數學上是相關的。用公鑰加密的信息只能用私鑰解密。如果妳知道其中壹個,妳就不能計算另壹個。因此,如果壹對密鑰中的壹個被公開,則不會危及另壹個密鑰的秘密性質。
SSH在某些地方使用不對稱加密。
密鑰交換過程中使用非對稱加密。在此階段,客戶端和服務器生成壹個臨時密鑰對並交換公鑰以生成壹個共享密鑰。
不對稱加密也用於身份驗證過程。SSH密鑰對用於向服務器認證客戶端。客戶端創建壹對密鑰,然後將公鑰上傳到遠程服務器並將其寫入文件~/。ssh/authorized_keys
創建* * *共享密鑰後,客戶端必須向服務器證明其身份。服務器將使用文件中的公鑰加密壹條信息,並將加密的信息發送給客戶端。如果客戶端能夠破解這些信息,就可以證明它擁有相關的私鑰。之後,服務器將為客戶端設置shell環境。
哈希是計算機科學中的壹種數據處理方法。它通過特定的算法將待搜索的項目與進來的索引相關聯,並生成便於搜索的數據結構(哈希表)。它還經常被用作信息安全方法,通過哈希算法在壹串數據中計算出的數據指紋來識別文件和數據是否被篡改。
SSH主要使用帶密鑰的散列消息認證碼(縮寫為HMAC)來確認消息沒有被篡改。
消息認證碼(MAC)算法將用於上述對稱加密協商。該算法將從客戶端支持的算法中選擇。
密鑰協商完成後,所有消息都必須攜帶MAC,雙方使用MAC來驗證消息的壹致性。MAC值由* * *共享密鑰、消息的數據包序列和實際消息內容計算得出。
在對稱加密區域之外,MAC本身作為數據包的最後壹部分發送。研究人員通常建議在計算MAC之前使用機密數據。
SSH協議使用客戶機-服務器模型對雙方進行身份驗證並對雙方之間的數據進行加密。
服務器正在指定端口監視器連接請求。它負責協商安全連接、對連接方進行身份驗證以及為客戶端生成正確的shell環境。
客戶端負責協商安全連接,驗證服務器的身份是否與先前記錄的信息匹配,並提供身份驗證憑據。
SSH會話分為兩個階段。首先是同意並建立加密機制以保護未來的通信。第二階段是對用戶進行身份驗證,並確定是否應該授予訪問服務器的權限。
當客戶端發起請求時,服務器返回支持的協議版本。如果客戶端可以匹配其中壹個協議版本,連接將繼續。服務器將提供其公共主機密鑰,客戶端可以使用該密鑰來驗證服務器是否合法。
此時,通信雙方使用Diffie-Herman算法來協商會話密鑰。
該算法的壹般過程如下:
用於連接其余部分的* * *共享密鑰加密稱為二進制數據包協議。上述過程允許雙方平等地參與* * *共享密鑰的生成。
生成的密鑰是對稱密鑰,這意味著用於加密消息的密鑰也可以用於解密。其目的是將下面的通信打包在壹個外人無法解密的加密隧道中。
生成會話密鑰後,用戶身份驗證開始。
根據服務器的接受方式,有幾種不同的方法可用於身份驗證。
最簡單的方法是密碼驗證,服務器要求客戶端輸入密碼以嘗試登錄帳戶。密碼通過協商加密發送。
雖然密碼是加密的,但由於密碼的復雜性有限,通常不建議使用這種方法。與其他身份驗證方法相比,自動腳本相對容易破解正常長度的密碼。
最推薦的選擇是使用SSH密鑰對。SSH密鑰對是非對稱密鑰。
公鑰用於加密只能用私鑰解密的數據。公鑰可以自由共享,因為沒有辦法從公鑰導出私鑰。
驗證過程如下:
可以看出,密鑰的不對稱性允許服務器用公鑰加密發送給客戶端的消息。然後,客戶端可以通過正確解密消息來證明它擁有私鑰。
我本科是信息安全專業的,但畢業後沒有從事安全行業。工作4年了,上課學的基本都忘了。
SSH是工作中最常用的東西之壹,它的工作原理涉及到很多密碼學的東西。
寫這篇博文,希望能幫助讀者了解宋承憲,也希望能學到壹些專業知識。在互聯網/軟件相關行業中,無論您是否從事安全工作,都有必要知道這些事情。