1. 程式人生 > >加密的類型及其相關算法--密鑰交換

加密的類型及其相關算法--密鑰交換

加密算法 密鑰交換

前兩節講到了信息的加密和信息的完整性,可是無法解決密碼(密鑰)傳輸保密的問題。如何在不安全的網絡上來進行協商密碼(密鑰)呢?

1976年,W.Diffie和M.Hellman在發表的論文中提出了公鑰加密算法思想,但當時並沒有給出具體的實施方案,原因在於沒有找到單向函數(也就是消息摘要算法),但在該論文中給出了通信雙方通過信息交換協商密鑰的算法,即Diffie-Hellman密鑰交換算法(簡稱為DH算法)。該算法的目的在於讓消息的收發雙方可以在安全的條件下交換密鑰,以備後續加密/解密使用。因此,DH算法是第一個密鑰協商算法,但僅能用於密鑰分配,不能用於加密或者解密消息。

那麽這是如何進行密鑰交換的呢?

1、A與B協商一個大素數p和一個生成數g,在網絡上都是公開的,任何人都可以截取到

2、此時A與B就偷偷的在背後搞小動作,A生成隨機數x,B生成隨機數y

3、A對g^x%p的結果發送給B

4、B對g^y%p的結果發送給A

5、網絡上僅能看到p,g,g^x%p,g^y%p這四個數字

6、A能得到p,g,g^y%p,x

7、B能得到p,g,g^x%p,y

8、此時A與B分別開始計算,A就是(g^y%p)^x % p,B就是(g^x%p)^y %p,這個結果就是A與B協商的結果了。

技術分享圖片

此圖來自網絡

既然如此,我們來做數學題驗證一下吧。

1、A與B協商了p=23和g=5

2、A生成一個隨機數x=3,計算A=g^a%p並發送給B

A=5^3%23=10

3、B生成一個隨機數y=5,計算B=g^b%p並發送給A

B=5^5%23=20

4、將A得到的信息進行計算密碼(密鑰)K1=(g^b%p)^x%p

K1=20^3%23=19

5、將B得到的信息進行計算密碼(密鑰)K2=(g^a%p)^x%p

K2=10^5%23=19

此時就可以得到K1=K2=19,這個就是A與B進行密鑰交換了。

每次A與B進行通訊時可以重新生成密碼(密鑰)。原本這種算法,想通過暴力破解都很難,每次通訊都重新協商新的密碼,這樣就極大減少了被暴力破解的可能。


事到如此,我們能夠放心了嗎?不!!!E這個壞家夥又跑出來了,A與B每次通訊都是使用隨機密碼,那麽還是A還是無法驗證通訊的對象就是B,E可以偽裝成B的嘛。E又在從中作梗,截取A發往B的信息,協商密碼,然後篡改之後,又發起與B通訊,協商密碼。這樣我們又掉進坑裏了,好像永遠都無法解決通訊安全的問題。那麽還有沒有一種機制能夠幫助到我們呢?欲知詳情,請繼續關註下回講解。^_^

加密的類型及其相關算法--密鑰交換