迪菲.赫尔曼算法是通信线路不安全情况下,交换密钥的一个算法,应用于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