5

不安全信道下的 Diffie-Hellman 密钥交换协议

 3 years ago
source link: https://zhiqiang.org/cs/diffie-hellman-key-exchange-protocol.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

1. 离散对数的数学概念

协议基于离散对数的概念:

如果aa是素数pp的一个原根,那么数值:

amodp,a2modp,⋯,ap−1modp(1)(1)amodp,a2modp,⋯,ap−1modp

是各不相同的整数,且以某种排列方式组成了从 1 到 p-1 的所有整数。

如果对于一个整数bb和素数pp的一个原根aa,可以找到一个唯一的指数ii,使得:

b=aimodp,0≤i≤p−1(2)(2)b=aimodp,0≤i≤p−1

那么指数ii称为bb的以aa为基数的模pp的离散对数。

Diffie-Hellman 算法的有效性依赖于计算离散对数的难度,其含义是:当已知大素数pp和它的一个原根aa后,对给定的bb,要计算 ii ,被认为是很困难的,而给定ii 计算bb 却相对容易 。

2. 具体的 Diffie-Hellman 算法

假如用户 A 和用户 B 希望交换一个密钥。取素数pp和整数aa,aa是pp 的一个原根,公开aa和pp。

  • A 选择随机数XA<pXA<p,并计算YA=aXAmodpYA=aXAmodp。
  • B 选择随机数XB<pXB<p,并计算YB=aXBmodpYB=aXBmodp。

每一方都将 X 保密而将 Y 公开让另一方得到。

  • A 计算密钥:K=YXABmodpK=YBXAmodp。
  • B 计算密钥:K=YXBAmodpK=YAXBmodp。

密钥的有效性:

KB=YXAB=aXBXA=aXAXB=YXBA=KAmodp(3)(3)KB=YBXA=aXBXA=aXAXB=YAXB=KAmodp

由于XAXA和XBXB是保密的,而第三方只有pp, aa, YBYB、YAYA可以利用,只有通过取离散对数来确定密钥,但对于大的素数pp,计算离散对数是十分困难的。

3. 优势和缺陷

DH 协议可以让通信双方平等地协商密钥,而且可以很简单地扩充到多方协商。

该协议可以防止中间人偷窥,恶意中间人对数据流的截获并不会计算出双方协商出的密钥。但该协议无法完全防止中间人攻击。如果中间人仿冒 A ,和 B 协商一份密钥KABKAB;再仿冒 B 和 A 协商一份密钥KBAKBA。然后 A 发送给 B 的信息用KABKAB加密,中间人截获解密后再用KBAKBA加密发送给 B ,此时 B 无法意识到信息被人查看。

因此,现代密码学中, DH 协议通常配合公钥体系( RSA 或者DSA)共同使用。协议双方会使用私钥签名,对方可以验证,从而防范中间人攻击。

Q. E. D.


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK