SSH加密原理、RSA非對稱加密算法學習與理解

     首先聲明一下,這裏所說的SSH,並非Java傳統的三大框架,而是一種創建在應用層和傳輸層基礎上的安全外殼協議,熟悉Linux的朋友常用到一 個SSH Secure Shell Cilent的工具,本文也是基於此工具加密原理的學習,在SSH的加密原理中,使用到了RSA非對稱加密算法,本文也一併作了學習和了解。html

    非對稱加密算法算法

    在平常的工做生產中, 咱們常常須要進行數據的通信,開發人員常常須要對數據進行加解密操做,以保證數據的安全。數據的加密算法非爲對稱加密和非對稱加密兩種,經常使用的DES、三 重DES、AES等都屬於對稱加密,即經過一個密鑰能夠進行數據的加解密,密鑰一旦泄漏,傳輸的數據則不安全。安全

    非對稱加密算法的核心源於數學問題,它存在公鑰和私鑰的概念,要完成加解密操做,須要兩個密鑰同時參與。咱們常說的「公鑰加密,私鑰加密」或「私鑰加密, 公鑰解密」都屬於非對稱加密的範疇,後文中講到的RSA算法也一種典型的非對稱加密算法。公鑰加密的數據必須使用私鑰才能夠解密,一樣,私鑰加密的數據也 只能經過公鑰進行解密。服務器

    相比對稱加密,非對稱加密的安全性獲得了提高,可是也存在明顯的缺點,非對稱加解密的效率要遠遠小於對稱加解密。因此非對稱加密每每被用在一些安全性要求比較高的應用或領域中。框架

    典型的RSA非對稱加密工具

    RSA加密算法是一種典型的非對稱加密算法,它基於大數的因式分解數學難題,它也是應用最普遍的非對稱加密算法,於1978年由美國麻省理工學院(MIT)的三位學着:Ron Rivest、Adi Shamir 和 Leonard Adleman 共同提出。
學習

    它的原理較爲簡單,咱們假設有消息發送方A和消息接收方B,經過下面的幾個步驟,咱們就能夠完成消息的加密傳遞:加密

  1. 消息發送方A在本地構建密鑰對,公鑰和私鑰;spa

  2. 消息發送方A將產生的公鑰發送給消息接收方B;設計

  3. B向A發送數據時,經過公鑰進行加密,A接收到數據後經過私鑰進行解密,完成一次通訊;

  4. 反之,A向B發送數據時,經過私鑰對數據進行加密,B接收到數據後經過公鑰進行解密。

    因爲公鑰是消息發送方A暴露給消息接收方B的,因此這種方式也存在必定的安全隱患,若是公鑰在數據傳輸過程當中泄漏,則A經過私鑰加密的數據就可能被解密。

    若是要創建更安全的加密消息傳遞模型,須要消息發送方和消息接收方各構建一套密鑰對,並分別將各自的公鑰暴露給對方,在進行消息傳遞時,A經過B的公鑰對數據加密,B接收到消息經過B的私鑰進行解密,反之,B經過A的公鑰進行加密,A接收到消息後經過A的私鑰進行解密。

    固然,這種方式可能存在數據傳遞被模擬的隱患,咱們能夠經過數字簽名等技術進行安全性的進一步提高。因爲存在屢次的非對稱加解密,這種方式帶來的效率問題也更加嚴重。   

    SSH加密原理

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

    這裏進行一下說明:

  1. 首先服務端會經過非對稱加密,產生一個公鑰私鑰

  2. 在客戶端發起請求時,服務端將公鑰暴露給客戶端,這個公鑰能夠被任意暴露;

  3. 客戶端在獲取公鑰後,會先產生一個由256位隨機數字組成的會話密鑰,這裏稱爲口令;

  4. 客戶端經過公鑰將這個口令加密,發送給服務器端;

  5. 服務器端經過私鑰進行解密,獲取到通信口令;

  6. 以後,客戶端和服務端的信息傳遞,都經過這個口令進行對稱的加密。

    我的感受,這樣的設計在必定程度上提升了加解密的效率,不過,與客戶端服務端各構建一套密鑰對的加解密方式相比,在安全性上可能有所降低。在上面所述的經過口令進行加密的過程當中,數據也是能夠被竊聽的,不過因爲密鑰是256個隨機數字,有10的256次方中組合方式,因此破解難度也很大。相對仍是比較安全的。服務端和客戶端都提早知道了密鑰,SSH的這種方式,服務端是經過解密獲取到了密鑰。

    DH密鑰交換算法

    SSH的原理,是基於RSA非對稱加密,RSA是基於大數的因式分解數學難題,下面要提到的DH密鑰交換算法則是基於有限域上的離散對數難題。

    DH算法是一種密鑰協商算法,只用於密鑰的分配,不用於消息的加解密。它提供了一種安全的交換密鑰的方式,經過交換的密鑰進行數據的加解密。就像SSH原理中,口令的交換,不過DH算法更安全。

    咱們舉個例子來進行說明,假設有A、B兩方,A做爲發送者,B做爲接收者。經過下面的幾個步驟就能夠構建出一個只屬於雙方的密鑰口令,以下:

  1. 首先A、B雙方,在通訊前構建專屬於本身的密鑰對,假設分別是公鑰A,私鑰A,公鑰B,私鑰B;

  2. A將本身的公鑰A暴露給B,B經過私鑰B公鑰A通過必定的運算產生出本地的密鑰B

  3. 一樣,B將本身的公鑰B暴露給A,A經過私鑰A公鑰B通過必定的運算產生出本地的密鑰A

  4. 最後,這個算法有意思的一點就是,密鑰A密鑰B是一致的,這樣A、B雙方就擁有了一個屬於雙方的「祕密」口令;

    DH算法的產生是,對稱加密向非對稱加密的過分,爲後續非對稱加密的產生和發展奠基了基礎。

    總結:成文的過程當中,閱讀了一些關於加密解密的算法,作出瞭如上的理解,畢竟術業有專攻,也可能存在理解偏頗,甚至錯誤的地方,但願你們批評指正。

    更多請看這裏:SSH加密原理、RSA非對稱加密算法學習與理解

相關文章
相關標籤/搜索