程序員之網絡安全系列(四):數據加密之非對稱祕鑰

系列目錄:html

前文回顧

假如,明明和麗麗相互不認識,明明想給麗麗寫一封情書,讓隔壁老王送去程序員

  1. 如何保證隔壁老王不能看到情書內容?(保密性)
  2. 如何保證隔壁老王不修改情書的內容?(完整性)
  3. 如何保證隔壁老王不冒充明明?(身份認證)
  4. 如何保證實明不可否認情書是本身寫的?(來源的不能否認)

程序員之網絡安全系列(二):如何安全保存用戶密碼及哈希算法 咱們保證了數據的完整性算法

程序員之網絡安全系列(三):數據加密之對稱加密算法
咱們對數據進行了加密安全

可是上面的問題是明明和麗麗必須提早知道祕鑰,可是若是雙方提早不知道祕鑰,那麼明明就須要「隔壁的王叔叔" 把祕鑰告訴麗麗,這個顯然是風險太大了,由於」隔壁王叔叔「有了祕鑰和密文,那麼就等於有了明文。網絡

非對稱祕鑰

DH(Diffie-Hellman)算法

1976年,美國學者Dime和Henman爲解決信息公開傳送和密鑰管理問題,提出一種新的密鑰交換協議,容許在不安全的媒體上的通信雙方交換信息,安全地達成一致的密鑰,這就是「公開密鑰系統」。相對於「對稱加密算法」這種方法也叫作「非對稱加密算法」。加密

與對稱加密算法不一樣,非對稱加密算法須要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,若是用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;若是用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。由於加密和解密使用的是兩個不一樣的密鑰,因此這種算法叫做非對稱加密算法。code

算法原理及示例

  1. 假如明明和麗麗但願交換一個密鑰。
  2. 明明取一個素數p =97和97的一個原根a=5,讓隔壁的王叔叔告訴麗麗。
  3. 明明和麗麗分別選擇祕密密鑰XA=36和XB=58,並計算各自的公開密鑰,而後讓隔壁的王叔叔幫忙交換公開祕鑰。htm

    YA=a^XA mod p=5^36 mod 97=50
    
     YB=a^XB mod p=5^58 mod 97=44
  4. 明明和麗麗交換了公開密鑰以後,計算共享密鑰以下:blog

    明明:K=(YB) ^XA mod p=44^36 mod 97=75
    
     麗麗:K=(YA) ^XB mod p=50^58 mod 97=75

因爲只有明明知道XA, 而只有麗麗知道XB, 那麼「隔壁的王叔叔」 是不可能經過 P, A, YA, YB來獲得最終密碼K的。網絡安全

DiffieˉHellman不是加密算法,它只是生成可用做對稱密鑰的祕密數值。

非對稱加密特色

與對稱加密算法不一樣,非對稱加密算法須要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,若是 用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;若是用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。由於加密和解密使用的是兩個不一樣的密鑰,因此這種算法叫做非對稱加密算法。

那麼若是甲(收信方)想收到只有本身才能解讀的加密信息,那麼須要把本身的公鑰告訴乙(發送發), 乙經過甲的公鑰加密,把加密後的密文告訴甲,因爲只有甲有私鑰,那麼也就只有甲才能加密。
因而可知,非對稱加密只須要保存一對公鑰和私鑰,大大方便了祕鑰管理。可是因爲要作更多的計算,非對稱加密只適合一些小數據量加密,通常狀況都是用非對稱加密算法來交換祕鑰,隨後經過對稱加密算法來加密數據。

經常使用非對稱加密算法

RSA、Elgamal、揹包算法、Rabin、D-H、ECC(橢圓曲線加密算法)。

使用最普遍的是RSA算法,Elgamal是另外一種經常使用的非對稱加密算法。

最後

咱們對數據的完整性使用Hash進行了保證,用DH算法交換了祕鑰,使用RSA算法對數進行了加密,那麼若是王叔叔在交換祕鑰的過程當中作了手腳呢?

如何作手腳?看下圖:

  1. 王叔叔本身生成一個公私鑰,和明明以及麗麗交換。
  2. 王叔叔冒充麗麗把本身的公鑰發給明明。
  3. 明明用王叔叔的公鑰對信件加密。
  4. 王叔叔用本身的私鑰解密就能夠看到明明給麗麗的郵件。
  5. 王叔叔冒充明明把本身的公鑰發給麗麗。
  6. 麗麗用王叔叔的公鑰對信件加密。
  7. 王叔叔用本身的私鑰解密就能夠看到麗麗給明明內容。

至此,郵件內容又赤裸裸地被王叔叔看到了,怎麼辦呢?咱們下文繼續解釋。

相關文章
相關標籤/搜索