迪菲-赫尔曼密钥交换

   迪菲-赫尔曼密钥交换(Diffie–Hellman key exchange,简称“D–H”) 是一种安全协议。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。
   迪菲-赫尔曼通过公共信道交换一个信息,就可以创建一个可以用于在公共信道上安全通信的共享秘密(shared secret)。

  交换信息的整个过程:

这里写图片描述

其中g、p、A、B是公开在网络中传输,a、b是秘密的。

    最早提出这个协议使用一个素数p整数模n乘法群以及其原根g。下面展示这个算法,绿色表示非秘密信息,红色表示秘密信息。
这里写图片描述

    爱丽丝和鲍勃最终都得到了相同的值,因为在模p下g^ab和g^ba相等,注意a,b和g^ab = g^ba mod p 是秘密的,其他所有的值-p,g,g^a mod p以及g^b mod p-都可以在公共信道上传递,一旦爱丽丝和鲍勃得出了公共秘密。他们就可以把它用作对称密钥,进行双方的加密通信,因为这个密钥只有他们才能得到,当然,为了是这个例子变得安全,必须使用非常大的a,b以及p,否则以实验所有g^ab mod 23的可能取值(总共有最多22个这样的值,计算a和b很大也无济于事)。如果p是至少300位的质数,并且a和b至少有100位长,那么即使使用全人类所有的计算资源和当今最好的算法也不可能从g,p和g^b mod p 中计算出a,这个问题就是著名的离散对数问题,注意g则不需要很大,并且在一般的实践中通常是2或者5,IETF RFC3256文档中有几个常用的大素数可供使用。

算法理论证明:
设 A(Alice)、B(Bob)分别为爱丽丝和鲍勃两人
1、A:    g^a mod p = m   (eg:g=5,p= 23;)
2、B:    g^b mod p = n   
之后A、B两人交换m,n再次进行运算
3、A:    n^a mob p = m^b mob p       :B

下面对上式进行证明,先证明一个引理
假设有 g mod p = c ,则 g^a mod p = c^a mod p
因为:g mod p = c ,则必然存在唯一整数x, 使 g = px +c 
g^a = (px +c )^a = ………(二项式定理展开)
两边同时除以p 我们发现等式右边(二项式展开部分)除去项c^a外,p的次数都大于0,所以除以p的余数必然由c^a这一项产生。
所以: g^a mod p = c^a mod p 
引理证明完毕。

所以 (g mod p)^a = c^a
于是 (g mod p)^a mod p = c^a mod p = g^a mod p 

以上过程主要证明:
(g mod p) ^a mod p  = g^a mod p  

所有对于任意的a,b都有以下式成立
(g^a mod p)^b mod p = (g^a)^b mod p = (g^b mod p)^a mod p

注:二项式分解过程
    (px+c)^a = C(a,0)(px)^a + C(a,1)(px)^(a-1)*c + C(a,2)(px)^(a-2)*c^2 + … +C(a,a-2)(px)^2*c^(a-2) + C(a,a-1)(px)*c(a-1) + C(a,a)n^a

参考:http://www.cnblogs.com/linuxbug/p/5708570.html

  • 0
    点赞
  • 4
    收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

繁星逸夜

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值