椭圆曲线迪菲-赫尔曼金钥交换(Diffie–Hellman key exchange)是一种通过公共信道安全地交换密码密钥的方法,并且是最初由Ralph Merkle概念化并以Whitfield Diffie和Martin Hellman命名的公钥协议之一。 1] [2] DH是在密码学领域内实施的最早的公钥交换的实例之一。
介绍传统上,双方之间的安全加密通信要求它们首先通过某些安全的物理信道交换密钥,例如由可信赖的快递员传送的纸质密钥列表。 Diffie-Hellman密钥交换方法允许彼此不具有先验知识的两方在不安全信道上共同建立共享密钥。然后,该密钥可用于使用对称密钥密码加密后续通信。
Diffie-Hellman用于保护各种Internet服务。然而,2015年10月发布的研究表明,当时许多DH互联网应用程序使用的参数不足以防止资金充足的攻击者(例如大型政府的安全服务机构)妥协。
该计划最初由Whitfield Diffie和Martin Hellman于1976年出版,但在1997年,据透露,James H. Ellis, Clifford Cocks和英国信号情报机构GCHQ的Malcolm J. Williamson ,在1969年,显示了如何实现公钥加密。
尽管Diffie-Hellman密钥协议本身是一种非认证的密钥协商协议,但它为各种经过身份验证的协议提供了基础,并用于在传输层安全性的短暂模式中提供前向保密(称为EDH或DHE,具体取决于密码套件)。
不久之后,RSA采用了该方法,这是一种使用非对称算法的公钥加密技术。1977年的美国专利4,200,770现已过期,并描述了公共域算法。它将Hellman,Diffie和Merkle视为发明者。
名称2002年,Hellman建议将该算法称为Diffie-Hellman-Merkle密钥交换,以表彰Ralph Merkle对公钥密码学发明的贡献(Hellman,2002)。
该系统后来被称为Diffie-Hellman密钥交换。 虽然该系统最初是由Diffie和我在一篇论文中描述的,但它是一个公钥分配系统,由Merkle开发的概念,因此如果要与名称相关联,则称为“Diffie-Hellman-Merkle密钥交换”。
安全如果正确选择G和g,则认为该协议对于窃听者是安全的。特别是,组G的顺序必须很大,特别是如果相同的组用于大量的流量。窃听者(“夏娃”)必须解决Diffie-Hellman问题以获得瞎扯。对于订单足够大的组,认为这很困难。解决离散对数问题的有效算法可以很容易地计算a或b并解决Diffie-Hellman问题,使得这个和许多其他公钥密码系统不安全。小特征的领域可能不太安全。
G的顺序应该具有大的素因子以防止使用Pohlig-Hellman算法来获得a或b。由于这个原因,索菲日耳曼素数q有时被用来计算p = 2q + 1,称为安全素数,因为G的阶数只能被2和q整除。然后有时选择g来生成G的阶q子群而不是G,以便ga的勒让德符号从不显示a的低阶位。使用这种选择的协议例如是IKEv2。
g通常是小整数,例如2.由于离散对数问题的随机自还原性,小g与同一组的任何其他发生器同样安全。
如果Alice和Bob使用随机数生成器,其输出不是完全随机的并且可以在某种程度上预测,那么Eve的任务就容易多了。
在最初的描述中,Diffie-Hellman交换本身不提供通信方的认证,因此容易受到中间人攻击。 Mallory(执行中间人攻击的主动攻击者)可以建立两个不同的密钥交换,一个与Alice,另一个与Bob,有效地伪装成Alice到Bob,反之亦然,允许她解密,然后重新-encrypt,它们之间传递的消息。请注意,Mallory必须继续处于中间位置,每次Alice和Bob通信时都会传输消息。如果她一直缺席,那么她以前的存在就会透露给Alice和Bob。他们会知道他们所有的私人谈话都被频道中的某人拦截和解码。
通常需要一种对彼此通信方进行认证的方法来防止这种类型的攻击。可以使用诸如STS协议的Diffie-Hellman的变体来避免这些类型的攻击。
其他用途加密已经提出了基于Diffie-Hellman密钥交换的公钥加密方案。第一个这样的方案是ElGamal加密。更现代的变体是集成加密方案。
前卫保密实现前向保密的协议会为每个会话生成新的密钥对,并在会话结束时将其丢弃。 Diffie-Hellman密钥交换是这种协议的常用选择,因为它可以快速生成密钥。
密码验证密钥协议当Alice和Bob共享密码时,他们可以使用Diffie-Hellman的密码验证密钥协议(PK)形式来防止中间人攻击。一个简单的方案是将串联的散列值与在通道两端独立计算的密码进行比较。这些方案的一个特点是攻击者只能在每次迭代时与另一方测试一个特定密码,因此系统通过相对较弱的密码提供良好的安全性。这种方法在ITU-T X.1035建议书中描述,该建议由G.hn家庭网络标准使用。这种协议的一个例子是安全远程密码协议。
公钥也可以使用Diffie-Hellman作为公钥基础结构的一部分,允许Bob对消息进行加密,以便只有Alice能够对其进行解密,除了拥有Alice的公钥的Bob之外,Bob之间没有先前的通信。Alice的公钥是( mod
)。为了向她发送消息,Bob选择随机b,然后将Alice
mod
(未加密)与用对称密钥(
)
mod
加密的消息一起发送。只有Alice可以确定对称密钥并因此解密消息,因为只有她有(私钥)1。预共享公钥还可以防止中间人攻击。
在实践中,Diffie-Hellman不是以这种方式使用的,RSA是主要的公钥算法。这主要是出于历史和商业原因,即RSA Security创建了一个成为Verisign的密钥签名的证书颁发机构。Diffie-Hellman不能用于签署证书。然而, ElGamal和DSA签名算法在数学上与其相关,以及用于保护因特网协议通信的IPsec协议套件的MQV,STS和IKE组件。
本词条内容贡献者为:
李嘉骞 - 博士 - 同济大学