DH 密钥交换算法


1、引言

CSDN搞什么短信验证,7年的账号居然登陆不了,真心抓狂,WTF!!!!

DH,全称为“Diffie-Hellman”,这是一种确保共享KEY安全穿越不安全网络的方法,换句话说就是密钥一致协议,由公开密钥密码体制的奠基人Diffie和Hellman所提出的一种思想。

简单的说就是允许两名用户在公开媒体上交换信息以生成“一致”的、可以共享的密钥。也就是由甲方产出一对密钥(公钥、私钥),乙方依照甲方公钥产生乙方密钥对(公钥、私钥)。它可以让双方在完全没有对方任何预先信息的条件下通过不安全信道建立起一个密钥。这个密钥可以在后续的通讯中作为对称密钥来加密通讯内容。

2、DH密钥交换模型分析

那具体是怎样的一个流程呢?我们还是以甲乙双方发送数据为模型进行分析

  • 1、甲方(消息发送方,下同)构建密钥对(公钥+私钥),甲方公布公钥给乙方(消息接收方,下同)
  • 2、乙方以甲方发送过来的公钥作为参数构造密钥对(公钥+私钥),将构造出来的公钥公布给甲方
  • 3、甲方用“甲方的私钥+乙方的公钥”构造本地密钥
  • 4、乙方用“乙方的私钥+甲方的公钥”构造本地的密钥
  • 5、这个时候,甲乙两方本地新构造出来的密钥应该一样,甲乙双方可以通过本地密钥进行数据的加密和解密
  • 6、然后就可以使用AES这类对称加密算法进行数据的安全传送了。

3、DH密钥交换算法数学原理

有两个全局公开的参数,一个素数p和一个整数g,g是p的一个原根。

服务端的私钥和公钥分别是a和A,客户端的私钥和公钥分别是b和B;

服务端根据a、p、g,可以计算出公钥A;

服务端将g, p, A明文传送给客户端,客户端可以计算自己的公钥B,以及共享密钥K;

客户端将B明文发送给服务端,服务端也可以计算出共享密钥K。

 4、中间人攻击

在最初的描述中,迪菲-赫尔曼密钥交换本身并没有提供通讯双方的身份验证服务,因此它很容易受到中间人攻击。 
一个中间人“丙”在信道的中央进行两次迪菲-赫尔曼密钥交换,一次和甲,另一次和乙,就能够成功的向甲假装自己是乙,反之亦然。
而攻击者可以解密(读取和存储)任何一个人的信息并重新加密信息,然后传递给另一个人。因此通常都需要一个能够验证通讯双方身份的机制来防止这类攻击。
有很多种安全身份验证解决方案使用到了迪菲-赫尔曼密钥交换。例如当甲和乙共有一个公钥基础设施时,可以将他们的返回密钥进行签名。