DH密钥交换(Diffie–Hellman key exchange)算法笔记

注意:只是个人理解,可能有不正确的地方

下文中^代表乘方运算,例如2^3=2*2*2=6,参考:http://zh.wikipedia.org/wiki/%E5%86%AA

%代表模运算,例如5%3=2,参考:http://zh.wikipedia.org/wiki/%E6%A8%A1%E9%99%A4

DH密钥交换算法的作用是使通信双方可以在不安全的通道中建立一个相同的密钥,用于加密通信。

基本原理示例:

1、通信方A和通信方B约定一个初始数g,g是公开的,如g=5

2、A生成一个随机数a,a是保密的,如a=6

3、A计算g^a发送给B,g^a=5^6

4、B生成一个随机数b,b是保密的,如b=15

5、B计算g^b发送给A,g^b=5^15

6、A接收到g^b后,再使用保密的a,计算(g^b)^a=g^(a*b)=5^(6*15)

7、B接收到g^a后,再使用保密的b,计算(g^a)^b=g^(a*b)=5^(6*15)

8、这样通信方A和B得到一个相同的“密钥”g^(a*b)=5^(6*15)

整个通信过程中g、g^a、g^b是公开的,但由于g、a、b都是整数,通过g和g^a得到a还是比较容易的,b也是如此,所以最终的“密钥”g^(a*b)还是可以被计算出来的。所以实际的过程还需要在基本原理上加入新的计算——模运算

1、通信方A和通信方B约定一个初始数g,如g=5,一个质数p,如p=23,g和p是公开的

2、A生成一个随机数a,a是保密的,如a=6

3、A计算g^a%p发送给B,g^a%p=5^6%23=8

4、B生成一个随机数b,b是保密的,如b=15

5、B计算g^b%p发送给A,g^b%p=5^15%23=19

6、A接收到g^b%p后,再使用保密的a,计算(g^b%p)^a%p=19^6%23=2

7、B接收到g^a%p后,再使用保密的b,计算(g^a%p)^b%p=8^15%23=2

8、这样通信方A和B得到一个相同的密钥:2

(g^b%p)^a%p=(g^a%p)^b%p的证明:

如果a=2:

(g^b%p)^a%p=(g^b%p)^2%p=(g^b-n*p)^2%p=(g^(2*b)-2*g^b*n*p+(n*p)^2)%p=g^(2*b)%p

可以看出(g^b-n*p)^2展开后除g^(2*b)外,其它都是p的倍数,所以整个算式的结果是g^(2*b)%p

同理对(g^b-n*p)^a展开后除g^(a*b)外,其它都是p的倍数,所以整个算式的结果是g^(a*b)%p

同样可以得出(g^a%p)^b%p=g^(a*b)%p

所以(g^b%p)^a%p=(g^a%p)^b%p

整个通信过程中g、p、g^a%p、g^b%p是公开的,这时通过g、p、g^a%p得到a比较难,同样通过g、p、g^b%p得到b比较难,所以最终的密钥是比较安全的。

以g=5、p=23、g^a%p=8计算a为例,a=log(5, (8+23*n)),这个只能将n的可能值逐个带入公式试验才能得到a的值。如果a、p是比较大的数那么计算更加困难。

如果注意的是,为了防止应用优化算法计算上述问题,质数p不是随便选择的,需要符合一定的条件。随机数a、b的生成算法也必需注意,应使结果尽可能随机,不能出现可预测的规律,否则会使破解变的容易。

通过上述计算过程也可以看出DH算法不仅可以应用在2方通信的情况,如果多方通信,也可以使用该算法。

DH密钥交换算法无法验证对方身份,所以DH密钥交换算法不能抵御中间人攻击(MITM,Man-in-the-middle attack)。

转载:http://my.oschina.net/u/1382972/blog/330456

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值