迪菲-赫尔曼**交换算法
可以让双方在完全没有对方任何预先信息的条件下通过不安全信道创建起一个**。这个**可以在后续的通讯中作为对称**来加密通讯内容。
交换过程

此时需要解决两个问题,才能说明交换协议有效
-
secretA=secretB
-
攻击者根据网络中传输的P,G,A,B,以及**计算方式并不能推算出最终的**
证明
1. 模指数运算法则的证明
模指数运算法则
abmodp=((amodp)b)modp(1)
设a=kp+n,
(kp+n)b=z=0∑b(zb)(kp)z∗nb−z
观察上式可知,只有当z=0时,多项式中才不会有以kp为系数的单项式,最终可以写成下列形式:
因为:(kp+n)b=kp∗(kp0∗nb−1+⋯+kpb−1∗n0)+nb
所以:(kp+n)bmodp=nbmodp
结合式(2)可知,式(1)成立
2. secretA=secretB的证明
分别将小明,小红选择的自然数ab代入到计算**的公式中
{secretA=Bamodp=(Gbmodp)amodpsecretB=Abmodp=(Gamodp)bmodp
由公式(1)可知:
{(Gbmodp)amodp=Gbamodp(Gamodp)bmodp=Gabmodp
至此,secretA=secretB得证。
怎样保证根据p,G,A,B不能推算出**
- 必须保证
p是一个很大的质数(至少 300 位),因为我们的**是模运算的结果,P越大就能保证**越长,从而攻击者猜测出**的可能性就越小
- 同时我们要保证
a,b也要足够大(至少100位长),因为攻击者知道**的计算方式为Bamodp,如果a太小的话,也能够很快的猜测出**
如果 P 是一个至少 300 位的质数,并且a和b至少有100位长, 那么即使使用全人类所有的计算资源和当今最好的算法也不可能从G, p和$G^a \bmod p $ 中计算出 a。这个问题就是著名的离散对数问题。
参考资料
蒙哥马利算法-百度百科
蒙哥马利算法-维基百科
a ^ b mod c 取模运算优化反思(老物)
迪菲-赫尔曼**交换
模指数运算法则