迪菲.赫爾曼(Diffie–Hellman)密鑰交換算法
迪菲.赫爾曼算法是通信線路不安全情況下,交換密鑰的一個算法,應用於TLS協議中
首先說一下生成密鑰的流程,我們有這樣一種計算叫做求摸運算 mod,
比如:27 mod 17 = 10,也就是求余數的運算。
現在有兩個通信者A和B,我們使用一種計算 假如我們這裏選用
3 ^ x mod 17,A和B分別生成一個隨機的整數,這個整數即為x,比如A是2,B是3,那麽A使用2計算:
3^2 mod 17 = 9 ①
B使用3計算:
3^3 mode 17 = 10 ②
然後A將9發送給B,B將10發送給A。當然這裏的9和10是可以被任何人看到。
A收到B的10之後做這樣的計算:
10^2 mod 17 = 15 ③
B收到A的9後做這樣的計算:
9^3 mod 17 = 15 ④
這樣15就可以作為兩人通信加密的密鑰了。
突然一看還有點不明白,為什麽這樣的計算就能計算出相同的數字15?
mod運算的性質 性質如下:
就像普通運算一樣,他是可交換的、可結合的、可分配的,可以表示為
(a+b)mod n=((a mod n)+(b mod n))mod n
(a?b)mod n=((a mod n)?(b mod n))mod n
(a× b)mod n=((a mod n)×(b mod n))mod n
(a× (b+c))mod n=(((a× b)mod n)+((a× c)mod n)))mod n
A:在做③計算的時候使用的10是由②計算來的,也就是:
(3^3 mode 17)^2 mod 17 = 15 ⑤
B:做的④計算的時候使用的9是由①計算來的,也就是:
(3^2 mod 17)^3 mod 17 = 15 ⑥
那麽接下來就證明為什麽⑤和⑥會相等
(3^3 mode 17)^2 mod 17 == (3^2 mod 17)^3 mod 17
其實證明只是用到上面mod計算性質的第三條
計算⑤等於以下的分解
=((3 * 3 * 3) mod 17)^2 mod 17
=(((3 mod 17) * (3 mod 17) * (3 mod 17)) mod 17)^2 mod 17
= ((((3 mod 17) * (3 mod 17) * (3 mod 17)) mod 17) * (((3 mod 17) * (3 mod 17) * (3 mod 17)) mod 17)) mod 17
=((3 mod 17) * (3 mod 17) * (3 mod 17) * (3 mod 17) * (3 mod 17) * (3 mod 17)) mod 17
= (3 mod 17)^6 mod 17
同理分解⑥ 也可得這個結果
= (3 mod 17)^6 mod 17
⑤⑥是相等的得證。
在這個通信過程中可以看到A和B分別生成了一個隨機數2和3,只要2和3不泄露,那麽其他人即使知道3 mod 17、9、10這些信息也得不出15的這個結果。
本文轉自:https://blog.csdn.net/wangbaolongaa/article/details/49468187
迪菲.赫爾曼(Diffie–Hellman)密鑰交換算法