標籤:密碼編譯演算法 金鑰交換
前兩節講到了資訊的加密和資訊的完整性,可是無法解決密碼(密鑰)傳輸保密的問題。如何在不安全的網路上來進行協商密碼(密鑰)呢?
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通訊,協商密碼。這樣我們又掉進坑裡了,好像永遠都無法解決通訊安全的問題。那麼還有沒有一種機制能夠協助到我們呢?欲知詳情,請繼續關注下回講解。^_^
加密的類型及其相關演算法--金鑰交換