基本原理
取一個大素數P,較小數r(r是P的一個原根),數字A(A介於1到P之間),則獲得公鑰K:
K=r^A/P
(公鑰K為r的A次方結果對P取模)
由於,較小數r(r是P的一個原根),
則r^1、r^2、r^3、r^4、......r^(P-1)分別模P都不相同,
則當我們知道P、r、r^A,則很難用數學方法推到出A的方法。
類似定理
同餘定理
中國餘數定理源出三國或晉朝的"孫子算經",其中有一題:今有物不知其數,三三數之剩2,五五數之剩3,七七數之剩2,問物幾何?
以同餘式表之,即 解,孫子算經中給出答案 x=23
一元一次聯立同餘式,後世稱為"大衍",其解法稱為"大衍求一術",到宋代秦九韶(1202~1261年)集大成同餘中的一些定理。
DH比對
我們再來看看DH是怎么計算出共享密鑰的:
以下各試“=”均讀作同餘,且假定A和B生成的g和p均相同,至於為什麼這裡就不做討論了
首先A先計算X = g^a mod p
B 計算Y= g^b mod p
然後A和B交換X和Y
這樣A就得到了Y,通過通余定理:
因為Y= g^b mod p
所以Y^a=(g^b)^a mod p
=g^(ba) mod p
同理 B計算出: X^b=g^(ab) mod p
顯然,這裡Y^a =X^b
也就是說A和B計算出一個只有他們知道的相同的共享密鑰了。
當然如果有個第三者他只知道X、Y,他在有限的時間內是算不出a和b的,至於為什麼,因為我不是數學家所以我也不知道(上面的公式也是我想了n久才想通的)。
以上就是我對DH算法的一些總結,希望這些東西對大家理解IPsec VPN有所幫助。
註:通余定理的公式符號表示的不完整,大家容易產生誤解,改後:
如果Y= g^b mod p(就是Y mod p = g^b mod p)
那么Y^a= (g^b)^a mod p (就是Y^a mod p = (g^b)^a mod p)
這樣就沒問題了。