DH介紹
Diffie-Hellman密鑰協議算法是一種確保共享密鑰安全穿越不安全網絡的方法。
這個機制的巧妙在于需要安全通信的雙方可以用這個方法確定對稱密鑰,然后可以用這個密鑰進行加密和解密。
但是注意,這個密鑰交換協議 只能用于密鑰的交換,而不能進行消息的加密和解密。 雙方確定要用的密鑰后,要使用其他對稱密鑰操作加密算法實際加密和解密消息。
這種秘鑰交換技術的目的在于使兩個用戶安全的協商一個會話密鑰。
DH密鑰交換流程
- 步驟1:Alice和Bob共同確定公開的大素數 P P P和一個整數 G G G,其中 G G G是 P P P的原根
- 步驟2:Alice選取一個秘密整數 a a a作為私鑰,然后對 a a a進行冪模計算,得到公鑰 A A A: A = G a m o d P A=G^a~\mathrm{mod}~P A=Ga?mod?P,然后將 A A A發給Bob
- 步驟3:和Alice一樣,Bob選取一個秘密整數 b b b作為私鑰,然后對 b b b進行冪模計算,得到公鑰 B B B: B = G b m o d P B=G^b~\mathrm{mod}~P B=Gb?mod?P,然后將 B B B發給Alice【 A , B A, B A,B就是所謂的Diffie-Hellman公開值】
- Alice計算密鑰 K 1 = B a m o d P K_1=B^a~\mathrm{mod}~P K1?=Ba?mod?P
- 和Alice一樣,Bob計算密鑰 K 2 = A b m o d P K_2=A^b~\mathrm{mod}~P K2?=Ab?mod?P
- K 1 = B a m o d P = ( G b ) a m o d P = G a b m o d P , K 2 = A b m o d P = ( G a ) b m o d P = G a b m o d P K_1=B^a~\mathrm{mod}~P=(G^b)^a~\mathrm{mod}~P=G^{ab}~\mathrm{mod}~P, K_2=A^b~\mathrm{mod}~P=(G^a)^b~\mathrm{mod}~P=G^{ab}~\mathrm{mod}~P K1?=Ba?mod?P=(Gb)a?mod?P=Gab?mod?P,K2?=Ab?mod?P=(Ga)b?mod?P=Gab?mod?P,因此, K 1 = K 2 K_1=K_2 K1?=K2?【 K 1 , K 2 K_1, K_2 K1?,K2?就是所謂的共享密鑰】
安全性分析
對于冪模運算 c = b e m o d m c=b^e~\mathrm{mod}~m c=be?mod?m,只要給定 b , e , m b, e, m b,e,m,求模冪的過程是非常高效的。另一方面,當 m m m是大素數時,給定 b , c , m b, c, m b,c,m,求指數 e e e的過程是很難的【稱為離散對數的難題】。這種單向函數的特性使模冪運算被多次用于密碼算法中。
DH通信過程可見,只有 G , P , A , B G, P, A, B G,P,A,B會在傳輸,而 a , b a, b a,b是不會傳輸的。同時,因為離散對數的難解,當 G , P G, P G,P選的足夠大時,通過 A , B A, B A,B分別推算 a , b a, b a,b是極其困難的。進而,破解出最終的對稱密鑰K也是極其困難的。