一、DH算法是一種密鑰交換協議,它可以讓雙方在不泄漏密鑰的情況下協商出一個密鑰來。
DH算法基於數學原理,比如小明和小紅想要協商一個密鑰,可以這么做:
1. 小明先選一個素數和一個底數,例如,素數p=23,底數g=5(底數可以任選),再選擇一個秘密整數a=6,計算A=(g^a mod p)=8,然后大聲告訴小紅:p=23,g=5,A=8; 2. 小紅收到小明發來的p,g,A后,也選一個秘密整數b=15,然后計算B=(g^b mod p)=19,並大聲告訴小明:B=19; 3. 小明自己計算出s=(B^a mod p)=2,小紅也自己計算出s=(A^b mod p)=2,因此,最終協商的密鑰s為2。
在這個過程中,密鑰2並不是小明告訴小紅的,也不是小紅告訴小明的,而是雙方協商計算出來的。
第三方只能知道p=23,g=5,A=8,B=19,由於不知道雙方選的秘密整數a=6和b=15,因此無法計算出密鑰2。
二、數學證明:
對於小明的密鑰計算過程有: s1 = (g^b mod p)^a mod p = g^(b*a) mod p 對於小紅的密鑰計算過程有:: s2 = (g^a mod p)^b mod p = g^(a*b) mod p 根據乘法交換律,s1 == s2
三、神奇的數學,完美的加密算法?
開始看到這個過程的時候,我着實小激動了一下,選擇合適的素數,這個密鑰的協商簡直是”無懈可擊“,怎么應用不怎么廣泛呢?
查了一下資料,好吧,這個如果用於實戰的話,一個”代理“就輕易的使這種加密完全無效。
所以現在用的比較廣泛的加密算法是RSA(非對稱加密算法)
參考文檔:
https://www.liaoxuefeng.com/wiki/1022910821149312/1023025778520640