導航:首頁 > 文檔加密 > ssh加密機制

ssh加密機制

發布時間:2023-03-16 10:47:11

『壹』 linux_180_ssh遠程加密連接介紹

ssh是一套網路協議,目的在於保證安全的網路服務以及加密遠程登錄信息。linux的ssh命令是實現了ssh協議的一個操作,並且以sshd服務的形式在linux上運行。對ssh協議管理的開源軟體是主流的openssh的工具

為什麼要ssh
如果一個用戶,從自己的筆記本,使用ssh協議登錄另一台機器,我們就認為這個登錄的方式是安全的,因為你的登錄信息在傳輸晌梁的時候,是被加密了的,即使被黑客抓取到了信息,也無法破解你的密碼,保證伺服器的安全。
以前的運維人員都是用FTP協議telent工具進行伺服器的遠程登錄,但是這睜游兩種協議登錄都是基於明文的傳輸,你的賬號密碼是以明文的形式,暴露在互聯網中,很容易被黑客截取到數據,對伺服器造成安全隱患。
因此,為了保證數據傳輸時的安全性、加密性,出現了兩種主流的加密方式
(1)對稱加密(使用同一個鑰匙進行對數據加密,解密的時候,也得使用這個鑰匙)
(2)非對稱加密(有2把鑰匙,一個是公鑰,相宴早運當於鎖,一個是私鑰,相當於開鎖的鑰匙)

『貳』 ssh原理及應用

簡單說,SSH是一種網路協議,用於計算機之間的遠程加密登錄。

SSH 為 Secure Shell的縮寫,由 IETF 的網路小組(Network Working Group)所制定,SSH 為建立在應用層基礎上的安全協議。SSH 是目前較可靠,專為遠程登錄會話和其他網路服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄露問題。SSH最初是UNIX系統上的一個程序,後來又迅速擴展到其他操作平台。SSH安裝容易、使用簡單,而且比較常見,一般的Unix系統、Linux系統、FreeBSD系統都附帶有支持SSH的應用程序包。Windows如果需要使用SSH,可以安裝PuTTY或者Cygwin。

SSH 服務基於非對稱加密(public-key cryptography,也稱公開密鑰加密)技術實現數據加密傳輸。該技術會生成一對數學相關的密鑰, 其中一個用於對數據進行加密,而且只能用於加密,而另一個只能用於解密 。使用加密密鑰加密後的數據,只能用對應的解密密鑰才能解密。而且,只知道其中一個密鑰,無法計算出另一個。因此,如果公開了一對密鑰中的一個,並不會危害到另一個的秘密性質。通常把公開的密鑰稱為公鑰(public key),而不公開的密鑰稱為私鑰(private key)。

一般來說,非對稱加密的應用場景有兩個:

與對稱密鑰加密相比,非對稱加密的優點在於不存在共享的通用密鑰。由於解密用的私鑰無需發送給任何用戶,所以可以避免密鑰被劫持或篡改。而加密用的公鑰即便被劫持或篡改,如果沒有與其匹配的私鑰,也無法解密數據。所以,截獲的公鑰是沒有任何用處的。

當前,SSH主要採用 RSA 演算法(協議 V2 默認演算法)和 DSA 演算法(協議 V1 僅支持該演算法)來實現非對稱加密技術。

SSH連接時,整個交互過程如上圖。,主要可以分為三個階段

服務端在每次啟動 SSH 服務時,都會自動檢查 /etc/ssh/ 目錄下相關密鑰文件的有效性。如果相關文件檢查發現異常,則會導致服務啟動失敗,並拋出相應錯誤信息。 如果文件相關不存在,則會自動重新創建。

默認創建的相關文件及用途說明如下:

當伺服器SSH服務啟動,客戶端也安裝了SSH後,就可以進行連接了。

後續登錄校驗及正常的數據傳輸,都會通過雙向加密方式進行。相關交互說明如下:

從這個連接過程中,可以看出,主要使用到兩個文件夾下的內容:

在連接中的兩個過程:

之所以有多組密鑰,是因為使用了不同的加密演算法。
客戶端接收到之後,會存儲在 ~/.ssh/known_hosts 文件里,查看這個文件,可以看到有一行與伺服器 ssh_host_ecdsa_key.pub 內容一致。

所以, ~/.ssh/authorized_keys 里表示本機可以被哪些機器訪問
~/.ssh/known_hosts 里表示本機訪問過哪些機器

SSH配置文件有兩個,一個是 ssh_config ,一個是 sshd_config 。前者是客戶端配置,後者是伺服器配置。也就是說,如果本機是作為客戶端,那麼就修改第一個配置,如果本機是作為伺服器,那麼就修改第二個配置,

一般來說,和密鑰登錄的配置有關的有以下幾個,如果密鑰配置好後無法登錄,嘗試配置以下三項。

其他

傳統的網路服務程序,如FTP、Pop和Telnet在傳輸機制和實現原理上是沒有考慮安全機制的,其本質上都是不安全的。因為它們在網路上用明文傳送數據、用戶帳號和用戶口令,別有用心的人通過竊聽等網路攻擊手段非常容易地就可以截獲這些數據、用戶帳號和用戶口令。而且,這些網路服務程序的簡單安全驗證方式也有其弱點,那就是很容易受到"中間人"(man-in-the-middle)這種攻擊方式的攻擊。

所謂"中間人"的攻擊方式,就是"中間人"冒充真正的伺服器接收你的傳給伺服器的數據,然後再冒充你把數據傳給真正的伺服器。伺服器和你之間的數據傳送被"中間人"一轉手做了手腳之後,就會出現很嚴重的問題。中間人能夠攻擊,主要原因在於他能認識截取的信息,也能發出讓接受者認識的信息。

使用SSH,你可以把所有傳輸的數據進行加密,這樣"中間人"這種攻擊方式就不可能實現了,而且也能夠防止DNS欺騙和IP欺騙。使用SSH,還有一個額外的好處就是傳輸的數據是經過壓縮的,所以可以加快傳輸的速度。SSH有很多功能,它既可以代替Telnet,又可以為FTP、Pop、甚至為PPP提供一個安全的"通道"。

最初的SSH是由芬蘭的一家公司開發的。但是因為受版權和加密演算法的限制,現在很多人都轉而使用OpenSSH。OpenSSH是SSH的替代軟體包,而且是免費的,可以預計將來會有越來越多的人使用它而不是SSH。

『叄』 非對稱加密、SSH加密演算法、數字簽名簡介

非對稱加密演算法的核心源於數學問題,它存在公鑰和私鑰的概念,要完成加解密操作,需要兩個密鑰同時參與。我們常說的「公鑰加密,私鑰加密」或「私鑰加密, 公鑰解密」都屬於非對稱加密的范疇。公鑰加密的數據必須使用私鑰才可以解密,同樣,私鑰加密的數據也 只能通過公鑰進行解密。
  相比對稱加密,非對稱加密的安全性得到了提升,但是也存在明顯的缺點,非對稱加解密的效率要遠遠小於對稱加解密。所以非對稱加密往往被用在一些安全性要求比較高的應用或領域中。

RSA加密演算法是一種典型的非對稱加密演算法,它基於大數的因式分解數學難題,它也是應用最廣泛的非對稱加密演算法,於1978年由美國麻省理工學院(MIT)的三位學者:Ron Rivest、Adi Shamir 和 Leonard Adleman 共同提出。
  它的原理較為簡單,我們假設有消息發送方A和消息接收方B,通過下面的幾個步驟,我們就可以完成消息的加密傳遞:
 (1)消息發送方A在本地構建密鑰對,公鑰和私鑰;
 (2)消息發送方A將產生的公鑰發送給消息接收方B;
 (3)B向A發送數據時,通過公鑰進行加密,A接收到數據後通過私鑰進行解密,完成一次通信;
 (4)反之,A向B發送數據時,通過私鑰對數據進行加密,B接收到數據後通過公鑰進行解密。
  由於公鑰是消息發送方A暴露給消息接收方B的,所以這種方式也存在一定的安全隱患,如果公鑰在數據傳輸過程中泄漏,則A通過私鑰加密的數據就可能被解密。
  如果要建立更安全的加密消息傳遞模型,需要消息發送方和消息接收方各構建一套密鑰對,並分別將各自的公鑰暴露給對方,在進行消息傳遞時,A通過B的公鑰對數據加密,B接收到消息通過B的私鑰進行解密,反之,B通過A的公鑰進行加密,A接收到消息後通過A的私鑰進行解密。
  當然,這種方式可能存在數據傳遞被模擬的隱患,我們可以通過數字簽名等技術進行安全性的進一步提升。由於存在多次的非對稱加解密,這種方式帶來的效率問題也更加嚴重。可以詳讀這兩篇文章:RSA 演算法原理 (一) (二)

在SSH安全協議的原理中, 是一種非對稱加密與對稱加密演算法的結合,先看下圖:

這里進行一下說明:
(1)首先服務端會通過非對稱加密,產生一個 公鑰 私鑰
(2)在客戶端發起請求時,服務端將 公鑰 暴露給客戶端,這個 公鑰 可以被任意暴露;
(3)客戶端在獲取 公鑰 後,會先產生一個由256位隨機數字組成的會話密鑰,這里稱為口令;
(4)客戶端通過 公鑰 將這個口令加密,發送給伺服器端;
(5)伺服器端通過 私鑰 進行解密,獲取到通訊口令;
 之後,客戶端和服務端的信息傳遞,都通過這個口令進行對稱的加密。
 這樣的設計在一定程度上提高了加解密的效率,不過,與客戶端服務端各構建一套密鑰對的加解密方式相比,在安全性上可能有所下降。在上面所述的通過口令進行加密的過程中,數據也是可以被竊聽的,不過由於密鑰是256個隨機數字,有10的256次方中組合方式,所以破解難度也很大。相對還是比較安全的。服務端和客戶端都提前知道了密鑰,SSH的這種方式,服務端是通過解密獲取到了密鑰。

現在知道了有非對稱加密這東西,那數字簽名是怎麼回事呢?
 數字簽名的作用是我對某一份數據打個標記,表示我認可了這份數據(簽了個名),然後我發送給其他人,其他人可以知道這份數據是經過我認證的,數據沒有被篡改過。
 有了上述非對稱加密演算法,就可以實現這個需求:

『肆』 SSH的工作原理

傳統的網路服務程序,比如 FTP , POP , Telnet ,本質上都是不安全的,因為它們在網路上用明文傳送數據、用戶賬號和用戶口令,很容易受到 中間人 攻擊方式的攻擊,攻擊者會冒充真正的伺服器接收用戶傳給伺服器的數據,然後再冒充用戶把數據傳給真正的伺服器。

為了滿足安全性的需求, IETF 的網路工作小組制定了 Secure Shell (縮寫為 SSH ),這是一項創建在 應用層 和 傳輸層 基礎上的安全協議,為計算機上的 Shell 提供安全的傳輸和使用環境。

SSH 是目前較可靠,專為遠程登錄會話和其他網路服務提供安全性的協議。利用 SSH 協議可以有效防止遠程管理過程中的信息泄漏問題。通過 SSH 可以對所有傳輸的數據進行加密,也能夠防止DNS欺騙和IP欺騙。

本文將會重點討論 SSH 中用到的加密演算法和建立安全連接的過程。

為了保證信息傳輸的安全性, SSH 使用了對稱加密、非對稱加密和散列等技術。

對稱密鑰加密又稱為對稱加密、私鑰加密、共享密鑰加密,是密碼學中一類加密演算法。這類演算法在加密和解密時使用相同的密鑰,或是使用兩個可以簡單地相互推算的密鑰。

SSH 使用對稱密鑰加密整個連接過程中傳輸的信息。值得注意的是,用戶自己創建的public/private密鑰對僅僅用於驗證,不會用在加密連接上。對稱加密允許對密碼進行身份驗證,以防止第三方窺探。

共享密鑰通過密鑰交換演算法生成,它可以讓雙方在完全沒有對方任何預先信息的條件下通過不安全信道創建起一個密鑰。客戶端和服務端都參與了這個過程,過程的細節將在後面闡述。

生成的密鑰將用來加密這次會話過程中客戶端和服務端傳輸的數據。這個過程會在驗證客戶身份之前完成。

SSH 支持多種對稱密鑰演算法,包括AES,Blowfish,3DES,CAST128和Arcfour。客戶端和服務端可以配置採用演算法的列表。客戶端列表中第一個能被服務端支持的演算法將被採用。

比如在Ubuntu 14.04上,客戶端和服務端默認的配置如下: aes128-ctr , aes192-ctr , aes256-ctr , arcfour256 , arcfour128 , [email protected] , [email protected] , [email protected] , aes128-cbc , blowfish-cbc , cast128-cbc , aes192-cbc , aes256-cbc , arcfour 。
也就是說,如果兩台Ubuntu 14.04採用默認配置,它們總是會採用 aes128-ctr 演算法來加密連接。

在非對稱加密方法中,需要一對密鑰,一個是私鑰,一個是公鑰。這兩個密鑰數學相關。用公鑰加密後所得的信息,只能用私鑰才能解密。如果知道了其中一個,並不能計算另外一個。因此,如果公開了一對密鑰中的一個,並不會危害到另外一個的秘密性質。

SSH 在一些地方使用了非對稱加密。

在密鑰交換過程中使用到了非對稱加密。在這個階段,客戶端和服務端生成臨時密鑰對,並且交換公鑰來生成共享密鑰。

在身份驗證的過程中也使用了非對稱加密。 SSH 密鑰對用來向服務端驗證客戶端身份。客戶端創建一對密鑰,然後將公鑰上傳到遠程伺服器上,寫入文件 ~/.ssh/authorized_keys 。

在創建共享密鑰後,客戶端必須向服務端證明身份。服務端會使用文件中的公鑰加密一段信息,並將加密後的信息發送給客戶端。如果客戶端可以能夠破解這段信息,那麼就能夠證明自己擁有相關的私鑰。之後服務端會為客戶端設置shell環境。

散列是電腦科學中一種對資料的處理方法,它通過某種特定的演算法將要檢索的項與涌來檢索的索引關聯起來,生成一種便於搜索的數據結構(散列表)。它也常用做一種資訊安全的方法,由一串資料中經過散列演算法計算出來的資料指紋,來識別檔案和資料是否有被篡改。

SSH 主要使用了散列消息認證碼(Keyed-hash message authentication code,縮寫為HMAC),來確認消息沒有被篡改。

上面提到的對稱加密協商過程中,會使用消息認證碼(MAC)演算法。這個演算法會從客戶端支持的演算法中選出。

在密鑰協商完成後,所有的消息都必須攜帶MAC,用於通信雙方驗證消息的一致性。MAC值由共享密鑰,消息的分組序列和實際消息內容計算得到。

在對稱加密區域之外,MAC本身作為分組的最後部分被發送。研究者通常建議先機密數據,然後計算MAC

SSH 協議採用客戶端-服務端模型對兩方進行身份驗證,並對它們之間的數據進行加密。

服務端在指定埠監聽連接請求。它負責協商安全連接,認證連接方,並為客戶端生成正確的shell環境。

客戶端負責協商安全連接,驗證伺服器的身份是否與以前記錄的信息相匹配,並提供憑證進行身份驗證。

SSH會話分為兩個階段。第一個是同意和建立加密來保護未來的溝通。第二個階段是對用戶進行身份驗證,並發現是否應該授予對伺服器的訪問許可權。

當客戶端發起請求後,服務端返回支持的協議版本。如果客戶端可以匹配其中一個協議版本,則連接繼續。服務端會提供它的公共主機密鑰,客戶端可以用這個密鑰來驗證服務端是否合法。

此時,通信雙方採用迪菲-赫爾曼演算法來協商會話密鑰。

該演算法的大致過程如下:

用於其餘連接的共享密鑰加密被稱為二進制數據包協議。上述過程允許雙方平等地參與生成共享密鑰。

生成的密鑰是對稱密鑰,這意味著用於加密消息的密鑰也可以用於解密。其目的是將後面的通信包裝在不能被外部人員解密的加密隧道中。

在生成會話密鑰後,就開始進行用戶身份驗證。

根據伺服器接受的方式,有幾種不同的方法可用於身份驗證。

最簡單的方法是密碼驗證,其中伺服器要求客戶端輸入嘗試登陸賬號的密碼。密碼是通過協商加密發送的。

雖然密碼被加密,但由於密碼的復雜性受到限制,因此通常不建議使用此方法。與其他身份驗證的方法相比,自動腳本相對容易攻破正常長度的密碼。

最為推薦的選擇是使用SSH密鑰對。SSH密鑰對是非對稱密鑰。

公鑰用於加密只能用私鑰解密的數據。公鑰可以自由共享,因為沒有從公鑰中導出私鑰的方法。

驗證流程如下:

可以看到,密鑰的不對稱性允許服務端使用公鑰加密消息給客戶端。然後,客戶端可以通過正確解密消息來證明它擁有私鑰。

筆者本科專業是信息安全,不過畢業後並沒有從事安全行業,工作4年課堂上學習的知識基本忘的差不多了。
而SSH算是工作中最常用到的東西之一,其工作原理涉及不少密碼學的東西。
寫這篇博文,一是希望能幫助讀者了解SSH,二也是希望自己能撿起一些專業知識。在互聯網/軟體相關行業里,不論是否從事安全工作,了解這些東西都是很有必要的。

『伍』 ssh使用詳解

簡單來說,ssh是一種 網路協議 ,用於計算機之間的加密登錄。如果一個用戶從本地計算機,使用ssh協議登錄另一台遠程計算機,我們就可以認為,這種登錄是安全的,即使被中途截獲,密碼也不會泄露。

SSH 之所以安全是採用了公鑰加密的方式,通過客戶自己簽發公鑰加密用戶密碼,再通過主機持有的私鑰解密;不像 HTTPS 協議存在證書管理中心CA用於驗證公鑰的合法性,因此,存在被中間人劫持的風險,即劫持登錄請求發送篡改的公鑰來截獲用戶登錄密碼,俗稱」中間人攻擊「;

不過 SSH 存在一套自有的驗證方式:口令驗證及密鑰驗證,可有效避免大部分的攻擊;

使用上述命令測試連接性及驗證流程;

通過 ssh-keygen 工具生成本地公鑰文件,常用命令如下:

在 $HOME/.ssh/ 目錄下,會新生成兩個文件: id_rsa.pub 和 id_rsa 。 id_rsa.pub 是公鑰, id_rsa 是私鑰,其中 id_rsa 為默認文件名稱,若如上圖指定了文件路徑及名稱,則按照指定路徑及文件名生成;

說明:若 ssh 登錄使用密鑰驗證方式登錄,則需要輸入私鑰的密碼(生成密鑰時指定的密碼),若使用 ssh-agent 代理,則在同一個 session 會話下,只需要輸入一次私鑰密碼即可,由 ssh-agent 幫我們代理,避免每次登錄都需要輸入私密碼;

若登錄時未開啟,可手動開啟 ssh-agent ,可通過如下命令:

添加生成的 SSH key 到 ssh-agent :

查看添加的 SSH key :

若需要免密登錄,則需要將用戶的 public key 文件內存追加復制到登錄主機的 authorized_keys 配置文件中(默認路徑為 ~/.ssh/authorized_keys ),或者直接通過 ssh--id 工具完成,具體如下:

使用上述命令後即可實現 免密登錄

ssh 配置包括系統級別的(針對客戶端的默認為 /etc/ssh/ssh_config ,針對服務端的``/etc/ssh/sshd_config )及用戶級別的配置文件(默認為 ~/.ssh/config`);且配置文件存在優先順序,低優先順序的配置項可視作默認值;而高優先順序的配置項則會覆蓋默認值。按優先順序,有如下排序:

/etc/ssh/config 配置文件選項如下:

/etc/ssh/sshd_config 配置文件選項如下:

常用的選項如下:

ssh -T [email protected] 驗證連接性,成功如下:

ssh配置文件詳解

git-ssh 配置和使用

ssh-keygen - Generate a New SSH Key

最佳搭檔:利用 SSH 及其配置文件節省你的生命

『陸』 ssh和telnet區別

telnet是明文傳輸,而ssh是加密傳輸,相對來說比較安全。

1.ssh機制第一種是路由器公鑰加密,私鑰解密。ssh路由器會產生一個公鑰public,一個明圓穗私鑰pri.當客戶端通過ssh登錄到設備的時候,路由器會將自己的公鑰發送給客戶端,客戶端接受並保存這個公鑰,接下來的過程就是加密,客戶端輸入用戶名和密碼的過程是通過路由器的公鑰來加密的,客戶端輸入完成將這個在發送給路由器,路由器通過自腔巧己的私鑰來解密這個公鑰。再將這個用戶名和密碼發送到本地進行認證。認證成功,整個登錄即ok。激卜

2.ssh機制第二種是路由器產生一個公鑰秘鑰,客戶端也產生一個公鑰秘鑰。當客戶端試圖登錄路由器,客戶端輸入正確的用戶名admin後,路由器發現admin用戶被綁定到名稱為AR1的rsa秘鑰。所以路由器會將此公鑰發送給客戶端進行驗證,因為客戶端有對應的私鑰可以解密公鑰,故認證成功。難點:客戶端的公鑰如何產生,客戶端的公鑰如何導入路由器。路由器的公鑰如何產生,路由器的公鑰如何導入客戶端。

閱讀全文

與ssh加密機制相關的資料

熱點內容
加密狗插上去了怎麼辦 瀏覽:622
錘子m1怎麼把文件夾重置 瀏覽:213
APP的數據會存在哪裡 瀏覽:64
一支輕快又解壓的舞 瀏覽:586
80x86編程手冊 瀏覽:765
android機制使用 瀏覽:361
國外太空探索網站源碼 瀏覽:643
dotaimba命令大全 瀏覽:13
手解剖pdf 瀏覽:733
單片機無法燒寫程序 瀏覽:413
pline命令 瀏覽:111
760貼片機編程視頻 瀏覽:333
歐姆龍plc編程第36講 瀏覽:915
我的世界如何將一個伺服器弄崩 瀏覽:8
php網站訪問量代碼 瀏覽:431
怠速壓縮機咔咔響 瀏覽:176
怎麼才能修改APP中的數據 瀏覽:688
哪裡有搶單的app 瀏覽:462
演算法概率題 瀏覽:465
長方形拉伸的命令 瀏覽:279