系列目錄:html
假如,明明和麗麗相互不認識,明明想給麗麗寫一封情書,讓隔壁老王送去程序員
程序員之網絡安全系列(二):如何安全保存用戶密碼及哈希算法 咱們保證了數據的完整性算法
程序員之網絡安全系列(三):數據加密之對稱加密算法
咱們對數據進行了加密安全
可是上面的問題是明明和麗麗必須提早知道祕鑰,可是若是雙方提早不知道祕鑰,那麼明明就須要「隔壁的王叔叔" 把祕鑰告訴麗麗,這個顯然是風險太大了,由於」隔壁王叔叔「有了祕鑰和密文,那麼就等於有了明文。網絡
1976年,美國學者Dime和Henman爲解決信息公開傳送和密鑰管理問題,提出一種新的密鑰交換協議,容許在不安全的媒體上的通信雙方交換信息,安全地達成一致的密鑰,這就是「公開密鑰系統」。相對於「對稱加密算法」這種方法也叫作「非對稱加密算法」。加密
與對稱加密算法不一樣,非對稱加密算法須要兩個密鑰:公開密鑰(publickey)和私有密鑰(privatekey)。公開密鑰與私有密鑰是一對,若是用公開密鑰對數據進行加密,只有用對應的私有密鑰才能解密;若是用私有密鑰對數據進行加密,那麼只有用對應的公開密鑰才能解密。由於加密和解密使用的是兩個不一樣的密鑰,因此這種算法叫做非對稱加密算法。code
明明和麗麗分別選擇祕密密鑰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
明明和麗麗交換了公開密鑰以後,計算共享密鑰以下: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算法對數進行了加密,那麼若是王叔叔在交換祕鑰的過程當中作了手腳呢?
如何作手腳?看下圖:
至此,郵件內容又赤裸裸地被王叔叔看到了,怎麼辦呢?咱們下文繼續解釋。