非對稱加密算法
在日常的工作生產中, 我們經常需要進行數據的通訊,開發人員經常需要對數據進行加解密操作,以保證數據的安全。數據的加密算法非為對稱加密和非對稱加密兩種,常用的DES、三 重DES、AES等都屬於對稱加密,即通過一個密鑰可以進行數據的加解密,密鑰一旦洩漏,傳輸的數據則不安全。
非對稱加密算法的核心源於數學問題,它存在公鑰和私鑰的概念,要完成加解密操作,需要兩個密鑰同時參與。我們常說的“公鑰加密,私鑰加密”或“私鑰加密, 公鑰解密”都屬於非對稱加密的范疇,後文中講到的RSA算法也一種典型的非對稱加密算法。公鑰加密的數據必須使用私鑰才可以解密,同樣,私鑰加密的數據也 只能通過公鑰進行解密。
相比對稱加密,非對稱加密的安全性得到了提升,但是也存在明顯的缺點,非對稱加解密的效率要遠遠小於對稱加解密。所以非對稱加密往往被用在一些安全性要求比較高的應用或領域中。
典型的RSA非對稱加密
RSA加密算法是一種典型的非對稱加密算法,它基於大數的因式分解數學難題,它也是應用最廣泛的非對稱加密算法,於1978年由美國麻省理工學院(MIT)的三位學著:Ron Rivest、Adi Shamir 和 Leonard Adleman 共同提出。
它的原理較為簡單,我們假設有消息發送方A和消息接收方B,通過下面的幾個步驟,我們就可以完成消息的加密傳遞:
消息發送方A在本地構建密鑰對,公鑰和私鑰;
消息發送方A將產生的公鑰發送給消息接收方B;
B向A發送數據時,通過公鑰進行加密,A接收到數據後通過私鑰進行解密,完成一次通信;
反之,A向B發送數據時,通過私鑰對數據進行加密,B接收到數據後通過公鑰進行解密。
由於公鑰是消息發送方A暴露給消息接收方B的,所以這種方式也存在一定的安全隱患,如果公鑰在數據傳輸過程中洩漏,則A通過私鑰加密的數據就可能被解密。
如果要建立更安全的加密消息傳遞模型,需要消息發送方和消息接收方各構建一套密鑰對,並分別將各自的公鑰暴露給對方,在進行消息傳遞時,A通過B的公鑰對數據加密,B接收到消息通過B的私鑰進行解密,反之,B通過A的公鑰進行加密,A接收到消息後通過A的私鑰進行解密。
當然,這種方式可能存在數據傳遞被模擬的隱患,我們可以通過數字簽名等技術進行安全性的進一步提升。由於存在多次的非對稱加解密,這種方式帶來的效率問題也更加嚴重。
SSH加密原理
在SSH安全協議的原理中, 是一種非對稱加密與對稱加密算法的結合,先看下圖:
這裡進行一下說明:
首先服務端會通過非對稱加密,產生一個公鑰和私鑰;
在客戶端發起請求時,服務端將公鑰暴露給客戶端,這個公鑰可以被任意暴露;
客戶端在獲取公鑰後,會先產生一個由256位隨機數字組成的會話密鑰,這裡稱為口令;
客戶端通過公鑰將這個口令加密,發送給服務器端;
服務器端通過私鑰進行解密,獲取到通訊口令;
之後,客戶端和服務端的信息傳遞,都通過這個口令進行對稱的加密。
個人感覺,這樣的設計在一定程度上提高了加解密的效率,不過,與客戶端服務端各構建一套密鑰對的加解密方式相比,在安全性上可能有所下降。在上面所述的通過口令進行加密的過程中,數據也是可以被竊聽的,不過由於密鑰是256個隨機數字,有10的256次方中組合方式,所以破解難度也很大。相對還是比較安全的。服務端和客戶端都提前知道了密鑰,SSH的這種方式,服務端是通過解密獲取到了密鑰。
DH密鑰交換算法
SSH的原理,是基於RSA非對稱加密,RSA是基於大數的因式分解數學難題,下面要提到的DH密鑰交換算法則是基於有限域上的離散對數難題。
DH算法是一種密鑰協商算法,只用於密鑰的分配,不用於消息的加解密。它提供了一種安全的交換密鑰的方式,通過交換的密鑰進行數據的加解密。就像SSH原理中,口令的交換,不過DH算法更安全。
我們舉個例子來進行說明,假設有A、B兩方,A作為發送者,B作為接收者。通過下面的幾個步驟就可以構建出一個只屬於雙方的密鑰口令,如下:
首先A、B雙方,在通信前構建專屬於自己的密鑰對,假設分別是公鑰A,私鑰A,公鑰B,私鑰B;
A將自己的公鑰A暴露給B,B通過私鑰B和公鑰A經過一定的運算產生出本地的密鑰B;
同樣,B將自己的公鑰B暴露給A,A通過私鑰A和公鑰B經過一定的運算產生出本地的密鑰A;
最後,這個算法有意思的一點就是,密鑰A和密鑰B是一致的,這樣A、B雙方就擁有了一個屬於雙方的“秘密”口令;
DH算法的產生是,對稱加密向非對稱加密的過度,為後續非對稱加密的產生和發展奠定了基礎。
總結:成文的過程中,閱讀了一些關於加密解密的算法,做出了如上的理解,畢竟術業有專攻,也可能存在理解偏頗,甚至錯誤的地方,希望大家批評指正。