Diffie-Hellman密钥交换算法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Diffie-Hellman密钥交换算法相关的知识,希望对你有一定的参考价值。

参考技术A 以前写的一篇文章,copy过来.

根据百度百科的解释: Diffie-Hellman密钥交换算法是一种确保共享KEY安全穿越不安全网络的方法, 它是OAKLEY的一个组成部分. Whitefield与Martin Hellman在1976年提出了一个奇妙的密钥交换协议, 称为Diffie-Hellman密钥交换协议/算法(Diffie-Hellman Key Exchange/Agreement Algorithm). 这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥. 然后可以用这个密钥进行加密和解密. 但是注意, 这个密钥交换协议/算法只能用于密钥的交换, 而不能进行消息的加密和解密, 双方确定要用的密钥后, 要使用其他对称密钥操作加密算法实际加密和解密消息.
该算法的基本原理是: 在有限域上计算离散对数非常困难.

单向函数(one-way function)的概念是公开密钥密码的中心. 单向函数的基本思想就是单向函数计算起来相对容易, 但求逆却非常困难. 也就是说, 已知x, 我们很容易计算f(x), 但已知f(x), 却难于计算出x.
在Diffie-Hellman密钥交换算法中运用的单向函数就是模运算:

例如, 设p = 7, 已知x = 9, 则f(x) = 2, 非常容易计算. 但是若已知f(x) = 2, 要逆向计算出x, 几乎是不可能的, 因为x的可能性非常多.

假设Bob和Jim需要交换密钥, 而中间有一个Eve在窃听, 其基本步骤如下(下文中'^'表示多少次方):

在整个过程中, Bob和Jim得出的密钥是一致的, 因此双方可以用共享的密钥来加密. 而窃听者Eve由于没有私钥信息, 无法计算出密钥. 其中较为关键的一点是:

第四步Bob计算的密钥和第五步Jim计算的密钥一定是一致的. 在此例中:

下面证明一般情况.

其中, a和p是公开的公钥, b是Bob生成的随机数(私钥), c是Jim生成的随机数(私钥).

首先证明:

利用式(2)可以很容易的证明式(1).

Diffie-Hellman秘钥交换算法

DH算法是第一个公钥方案

使用在一些常用安全协议或产品(例如SSH等)

密钥交换方案

  不能直接用于有大量数据传输的保密通信

  允许两个用户可以安全地建立一个共享的秘密信息,用于后续的通讯过程

  该秘密信息仅为两个参与者知道

算法的安全性依赖于有限域上计算离散对数的问题

 

DH算法

通信双方/多方选择大素数P,以及p的一个原根a

用户A选择一个随机数Xa≤p,计算Ya=aXa mod p

用户B选择一个随机数Xb≤p,计算Yb=aXb mod p

每一方保密X值,而将Y值交换给对方

即:X是私钥,Y是公钥  (Xa是A的私钥,Ya是A的公钥)

 

双方获得一个共享密钥K=aXaXbmodp

对于用户A,计算出K= YBXa mod p (a有b的公钥YB

用户B,可计算出K=YaXbmodp(b有a的公钥YA

攻击者要获得K,需要求解离散对数

实际使用中,素数P以及P的原根a可由一方选择后发给对方

 

DH算法显然不能做加解密 它只能交换一个对称秘钥

 

以上是关于Diffie-Hellman密钥交换算法的主要内容,如果未能解决你的问题,请参考以下文章

Diffie-Hellman密钥交换

Diffie-Hellman 密钥交换&ElGamal协议的安全密钥交换

Diffie-Hellman秘钥交换算法

TLS

Diffie-Hellman密钥交换

DH 密钥交换算法