DH算法

原创 2015年06月05日 14:36:01

1、通信方A和通信方B约定一个初始数g,如g=5,一个质数p,如p=23,g和p是公开的,且1< 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)。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

DH密钥交换算法

迪菲-赫尔曼密钥交换(Diffie–Hellman key exchange,简称“D–H”) 是一种安全协议。 它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。这个密钥可...
  • fw0124
  • fw0124
  • 2013-01-04 09:45
  • 29983

使用wireshark观察SSL/TLS握手过程--双向认证/单向认证

SSL/TLS握手过程实际上就是通信双方协商交换一个用于对称加密的密钥的过程。 这个过程实际上产生三个随机数:client random, server random, pre-master secr...
  • fw0124
  • fw0124
  • 2014-11-11 17:04
  • 31641

DH算法证明及相应的理论知识

迪菲-赫尔曼密钥交换(Diffie–Hellmankey exchange,简称“D–H”) 是一种安全协议。 它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。这个密钥可...

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

注意:只是个人理解,可能有不正确的地方 下文中^代表乘方运算,例如2^3=2*2*2=6,参考:http://zh.wikipedia.org/wiki/%E5%86%AA %代表模运算,例如5%...

Android Studio 通过JNA调用 Clang编译的so库,以及Java JNA 调用x64dll,C# dllimport调用x86dll

Android 通过 JNA 调用 Clang 3.6或者GCC4.9编译的 x86 arm等结果的so库,以及C#使用dllimport在 Window x64 平台调用32位 C/C++ 动态链接...

DiffieHillman密钥交换算法 C/C++实现

DH密钥交换算法因为不能验证数据的来源,所以不能抵御中间人击. 如果需要安全强度更高的非对称加密算法,可以采用Ecc椭圆曲线加密算法或者使用广泛的RSA加密算法.       不对称加密算法主要用...

腾讯十二周年电话是什么

★腾 讯 备 案 电 话【0755十3303十7551】抽 奖 二 线【95013十2195十0586】活 动 热线★抽奖腾讯备案电话【"075533十037十551""℡】抽 奖 二 线【"0755...

深入浅出Linux内核内存管理基础

1 背景知识 1.1 用户空间与内核空间内存的划分        从Linux操作系统层次上,内存可划分为用户空间内存和内核空间内存。        32位的CPU,最大寻址范围为...
  • acs713
  • acs713
  • 2015-01-18 16:45
  • 3176
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)