Processing math: 90%
2025年6月8日 星期日 乙巳(蛇)年 三月十二 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 加密解密

密码学考古之迪菲-赫尔曼密钥交换(Diffie–Hellman Key Exchange)

时间:02-14来源:作者:点击数:33

写在前面

Diffie和Hellman在1970年代建立了公钥密码学[1]的概念以及基于公钥密码的Diffie-Hellman密钥交换协议,这是密码学界的划时代事件,两人凭借该成就在2015年获得计算机科学最高奖-图灵奖[2]

Diffie-Hellman密钥交换协议建立在计算性Diffie-Hellman假设[3](Computational Diffie-Hellman Assumption, CDH)之上,直觉上可以表述为:

compute gab from (ga,gb)

这里 a$Zq,b$Zq

如果我们可以解决离散对数问题[4](Discrete Log Problem, DLP),那么自然可以解决CDH;反过来,如果可以求解CDH, 人们不清楚是否能利用这个结果解决DLP。一个意义深远的结论是如果我们可以证明解决CDH(或者解决DLP)是困难的(不存在多项式时间算法), 那么 PNP

Diffie-Hellman假设另外一种常用形式,称之为判定性Diffie-Hellman假设(Decisional Diffie-Hellman Assumption, DDH)[5],直觉上可以表述成:

(ga,gb,gab)c(ga,gb,gc)

这里 a$Zq,b$Zq,c$Zq。需要注意的是DDH成立的条件是苛刻的,需要挑选合适的群。这里的乘法群 Zq 实际上是不合适的,不安全的。这是因为可以通过计算 ga,gb 的勒让德符号[6]判断 a,b 的奇偶性,进而判断 ab 的奇偶性。实践中常用的群是二次剩余[7]构成的乘法群,带限制条件的椭圆曲线的点构成的加法群等。

双方密钥交换

双方密钥交换是最简单的密钥交换形式,也是Diffie-Hellman在论文[8]中具体讨论的问题。仅需一轮的数据交互,计算双方Alice和Bob就可以获得共享的密钥并保证该密钥不会被第三方获取。它的算法如下图所示:

算法正确性 容易看出yBA=yAB=gab

算法安全性 yA,yB 服从均匀分布,且从 yA,yB 反推 a,b 需要解DLP; 从 yA,yB推出 yAB 需要解CDH,这都是不可能的。

Diffie-Hellman不能抵御中间人攻击(Man-in-the-Middle Attack, MITM Attack)[9], 这是因为计算双方Alice和Bob在相互传递公钥 yA,yB 的过程中无法认证(authenticate)对方的身份。假定中间人是Carol,那么具体的攻击方法[10]如下:

  1. Carol假扮Bob和Alice进行一次DH key exchange, 双方协商得到共享密钥 K0=gac
  2. Carol假扮Alice和Bob进行一次DH key exchange, 双方协商得到共享密钥 K1=gbc
  3. Alice 使用 K0 加密自己的信息并发送给Bob, Carol截获该密文后使用 K0 进行解密得到Alice的信息,再使用 K1 对其进行加密并发送给Bob
  4. Bob 使用 K1 加密自己的信息并发送给Alice, Carol 使用步骤3类似地进行操作

多方密钥交换

现在考虑最一般的情况,即 N(N3) 方密钥交换。这个问题是笔者近期在做一些多方安全计算协议需要解决的。当 N=3 ,可以使用双线性对[11]构造三方密钥交换协议,但这只是多方密钥交换的一种特例,这里不展开讨论。笔者想讨论的是更一般的情况。

事实上,可以在上文提到的经典的双方密钥交换进一步构造多方密钥交换。为了表述方便,这里以 N=3 为例进行描述[12],最后将该方法推广到更一般的情形。

三方密钥(假定计算方分别为Alice, Bob, Charlie)需要进行两轮的数据通讯交互完成。在第一轮交互中,Alice发送数据 yA 给Bob, Bob发送数据 yB 给Charlie,最后Charlie发送数据 yC 给Alice,如下图所示:

依据离散对数问题假设,容易看出 yA=ga,yB=gb,yC=gc 是对私密的 a,b,c 的加密。

在第二轮交互中, Alice发送数据 yCA 给Bob, Bob发送数据 yAB 给Charlie,最后Charlie发送数据 yBC 给Alice,并最终算出共享私钥 yABC, 如下图所示:

算法正确性 容易看出 yCA=gca,yAB=gab,yBC=gbc,进而有 yBCA=gbca,yCAB=gcba,yABC=gabc, 最终获得共享私钥匙 yBCA=yCAB=yABC

算法安全性 算法的安全性关键在于证明它是零知识(zero knowledge[13])的。不失一般性地,现在构造Alice的模拟器 SAlice 在给定输入 (a,gabc)的前提下模拟Alice的视角。 在第一轮数据交互中,Alice看到的是 yC=gc, 因此 SAlice随机生成 r$Fq 满足 ycsr;在第二轮数据交互中,Alice看到的是 yBC=gbc, 并计算 yBCA(yBC)a 最终得到共享私钥。因此 SAlice计算 yBC(yBCA)a, 并用 yBC 模拟 yBC, 显然有 yBC=yBC,得证。


最后,考虑 P0,P1,,PN1(N>3) 之间的密钥交换协议。假定 Pi 拥有随机私密的 ai, 那么经过 N1 轮的数据交互(每一轮的数据传输方向均为 PiPi+1modP_i 传输的是 g^{\prod_{k=0}^{j-1} a_{(i-k)\bmod N}} for all i=0,\cdots,N-1), P_i 最终算得共享私钥 g^{\prod_{i=0}^{N-1} a_i}

参考

  1. ^https://en.wikipedia.org/wiki/Public-key_cryptography
  2. ^https://amturing.acm.org/award_winners/diffie_8371646.cfm
  3. ^https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_problem
  4. ^https://en.wikipedia.org/wiki/Discrete_logarithm
  5. ^https://en.wikipedia.org/wiki/Decisional_Diffie%E2%80%93Hellman_assumption
  6. ^https://en.wikipedia.org/wiki/Legendre_symbol
  7. ^https://en.wikipedia.org/wiki/Quadratic_residue
  8. ^Diffie, Whitfield, and Martin E. Hellman. "New directions in cryptography." Democratizing Cryptography: The Work of Whitfield Diffie and Martin Hellman. 2022. 365-390.
  9. ^https://en.wikipedia.org/wiki/Man-in-the-middle_attack
  10. ^https://stackoverflow.com/questions/10471009/how-does-the-man-in-the-middle-attack-work-in-diffie-hellman
  11. ^https://en.wikipedia.org/wiki/Pairing-based_cryptography
  12. ^https://crypto.stackexchange.com/questions/1025/can-one-generalize-the-diffie-hellman-key-exchange-to-three-or-more-parties
  13. ^https://zhuanlan.zhihu.com/p/588114150
方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
上一篇:对称加密和非对称加密的讲解 下一篇:很抱歉没有了
推荐内容
相关内容
栏目更新
栏目热门
本栏推荐