我经常看到推荐将RSA作为密钥交换方法。但是,Diffie-Hellman密钥交换方法似乎也是安全的。

是否有任何应考虑的因素导致使用一种算法而不是另一种算法?

评论

首先,它可以推广到椭圆曲线密码学。

截至今天(Logjam),有一个巨大的特殊原因。
相关:crypto.stackexchange.com/questions/2867/…

#1 楼

这种情况可能会造成混乱,所以让我们正确设置。

RSA是两种算法,一种用于非对称加密,另一种用于数字签名。这是两种截然不同的野兽。尽管它们共享键的相同核心数学运算和格式,但是它们以不同的方式执行不同的操作。 Diffie-Hellman是一种密钥交换算法,它是另一种算法。由于算法的作用不同,因此根据使用情况,您可能会更喜欢一种算法。

非对称加密和密钥交换在某种程度上是等效的:使用非对称加密,您可以执行密钥通过生成一个随机对称密钥(一堆随机字节)并使用接收者的公共密钥对该密钥进行加密来进行交换。相反,您可以使用密钥交换产生的密钥通过密钥交换进行非对称加密,以对称算法(例如AES。此外,Diffie-Hellman是一种单向密钥交换算法:收件人发送他的一半(“ DH公共密钥”),发送者计算他的一半,获取密钥,加密,将全部发送给收件人,收件人计算密钥,解密。假设预先分配了公钥,那么它与一次性通讯系统兼容,即它可以与电子邮件一起使用。

因此,对于其余的答案,我认为我们正在谈论RSA



完美的前向保密是一个很好的特征,可以概括为:实际的加密是使用我们不随身携带的密钥完成的,因此可以防止被偷窃。这仅适用于我们不希望对数据进行加密的设置,即不用于电子邮件(电子邮件应在邮箱中保持加密),但是用于SSL / TLS之类的数据传输。

在这种情况下,要获得PFS,您需要为实际的加密生成一个瞬态密钥对(非对称加密或密钥交换)。由于您通常还需要某种身份验证,因此您可能至少在一侧需要另一个非临时密钥对。这就是使用“ DHE”密码套件的SSL中发生的情况:客户端和服务器使用DH进行密钥交换,并使用了新生成的DH密钥(未存储),但是服务器还需要一个永久密钥对用于签名(RSA类型, DSA,ECDSA ...)。

没有什么本质上禁止生成临时RSA密钥对的。确实,旧版SSL支持该功能。请参阅TLS 1.0,第7.4.3节。在那种情况下,不是为PFS强制使用临时RSA密钥,而是完全相反:这样,即使服务器的永久密钥太大而无法残酷使用,也可以随后破坏未存储的加密密钥。 br />
但是,DH相对于RSA在生成临时密钥方面有一个优势:生成新的DH密钥对非常快(前提是要提供某些“ DH参数”,即计算出DH的组,据我们所知,这些资源已被重用,不会带来额外的风险)。对于大型服务器而言,这并不是一个真正的大问题,因为一个非常繁忙的SSL服务器可以每十秒钟生成一个新的“临时” RSA密钥对,而这仅占其很小一部分计算能力,并且仅将其保存在RAM中,并且仅用于十秒就足够了。

尽管如此,短暂的RSA已经过时了,更重要的是还没有标准化。在SSL的上下文中,如果需要PFS,则需要使用临时DH(又名“ DHE”),因为这是现有实现定义和支持的。


如果您不希望使用PFS,特别是如果您希望能够窃听自己的连接或病房的连接(在系统管理员通过某些过滤器或某些调试活动保护其用户的上下文中),则需要非临时密钥。同样,可以使用RSA和DH。但是,仍然在SSL上下文中,非临时DH要求服务器的X.509证书中的密钥包含DH公共密钥。

证书中的DH公共密钥由美国推送。 RSA取得专利的那一天,联邦政府就开始了。但是这些日子早已一去不复返了。而且,DH支持从未像RSA支持那样广泛。这确实是一个有趣的例子:卫生署获得政府批准,并由机构机构标准化(如ANSI X9.42);另一方面,RSA是由一家私有公司标准化的,该私有公司没有以任何方式正式授权产生标准。但是RSA标准(PKCS#1)是免费的,任何人都可以阅读,尽管有专利,但它仅在美国有效,在世界其他地区才有效。在美国,RSA(该公司)免费分发了该算法的实现(只要是用于非商业用途的免费)。业余开发人员,包括PGP的Phil Zimmerman,因此使用RSA,而不是DH。标准的价格对公司而言不算什么,但对个人而言可能意味着很多。这说明了在软件行业中源自业余爱好者的动力。

所以,这是RSA相对DH的优势之一:标准是免费提供的。



为了安全起见,RSA(或多或少)依赖于整数分解的难度,而DH(或多或少)依赖于离散对数的难度。它们是不同的问题。碰巧,最著名的折断算法之一是“通用数字字段筛”的变体,因此它们的渐进复杂度相同。从高级的角度看,1024位DH密钥与1024位RSA密钥一样,对密码分析的鲁棒性也很强。

如果您查看详细信息,则可能会注意到最后一部分在GNFS中,“线性代数”部分(对于大密钥而言是瓶颈),对于RSA而言则更为简单。那部分是关于减少一个非常大的矩阵。对于RSA,矩阵元素只是位(我们在GF(2)中工作),而对于DH,矩阵元素是对大素数p取整数的整数。这意味着DH的矩阵比RSA的矩阵大一千倍。由于矩阵大小是瓶颈,因此我们可以说DH-1024比RSA-1024更坚固。

所以这是DH的另一个优点:可以说,它比RSA密钥具有更多的鲁棒性。

为了安全起见,DH泛化了其他组,例如椭圆曲线。椭圆曲线上的离散对数与以大素数为模的离散对数不一样。 GNFS不适用。因此,没有一个Diffie-Hellman,而是几个算法。 “ Cryptodiversity”是一件好事,因为它使我们能够在某些研究人员找到轻松打破某些算法的方法时切换算法。


关于性能:


RSA加密(使用公钥)比任何DH操作(甚至具有椭圆曲线)便宜得多(因此更快)。
RSA解密(使用私钥)与具有相似抵抗力的DH密钥交换或多或少地需要相同的工作量。如果使用永久密钥对,DH会便宜一些,但是如果包含构建临时密钥对的成本,则DH会贵一些。
对于SSL和DHE_RSA,服务器必须生成DH密钥对并对其进行签名,并且签名包括客户端和服务器随机值,因此必须为每个连接完成此操作。因此,选择“ DHE_RSA”而不是“ RSA”将使服务器上用于SSL的CPU费用增加一倍-不过,实际上这并不重要。需要一个非常繁忙的服务器才能注意到差异。
如果DH密钥包含DH参数,则DH公开密钥的编码要比RSA公开密钥大。否则较小。对于SSL,使用DHE_RSA而不是RSA意味着交换额外的一千字节数据-在那里,每个客户端仅交换一次(由于SSL会话重用),因此这并不是关键点。在某些专门的协议中,ECDH(带有椭圆曲线)由于其公共元素要小得多而变得很重要。

如果您在受限的情况下设计协议(例如,涉及智能卡和I / O)摘要:基于互操作性限制,您通常会更喜欢RSA而不是DH,或者更喜欢DH而不是RSA,因为ECDH可能比RSA更具吸引力。



:取决于上下文,一个将比另一个受到更多的支持。性能很少起作用(至少不像通常那样重要)。对于SSL,您将需要DH,因为它实际上是DHE,而由于PFS,“ E”(短暂性)很不错。

评论


DH和RSA加密之间存在一个显着差异:DH隐式认证发送方和接收方,而RSA仅认证接收方。如果要以非交互方式对发送方进行身份验证,则RSA无法轻松替换DH。

– CodesInChaos
13年5月8日在13:08

在这种情况下,还可以增加另一个优势:在完全静态的DH(客户端和服务器都具有一个带有DH公钥的证书,并且两个密钥都使用相同的参数)下,它们可以摆脱较差或不存在的随机数生成,用一个计数器代替它。那是一个极端的情况。

–托马斯·波宁(Thomas Pornin)
13年5月8日在22:52

您究竟如何才能使用密钥交换协议进行非对称加密?使用RSA,每个人都可以使用公共密钥来加密只有私有密钥才能解密的内容。使用DH,每个想要向私钥发送私钥消息的人都需要创建一个新的公钥/私钥对,并随消息一起提交他的公钥,对吗?

–JSG
2013年12月4日20:02

@JSG这几乎就是您所做的。 ElGamal的工作方式相同-加密的东西具有两个组成部分,其中一个本质上是公共密钥(减去组的参数),而另一个则是实际的密文。

–cpast
2015年4月6日在21:29

@dasf实际上,DH是一个关键的交换机制。为了将其转换为加密机制,您需要将其与对称加密相结合:Alice和Bob通过DH同意共享密钥,然后将其与AES之类的东西一起使用来加密和解密数据。这就是完成工作的方式,例如在SSL / TLS中。

–托马斯·波宁(Thomas Pornin)
18年6月26日在12:59

#2 楼

DH临时密钥交换提供了完美的前向保密性,而RSA本身不能提供。这意味着即使长期密钥在以后泄露,即使捕获了完整的数据流,单个连接的会话密钥也不会受到损害。

评论


只需将“短暂”添加到RSA,您还将获得完美的前向保密性。

–JSG
13年12月4日在20:28

#3 楼

在SSL多项式的上下文中是正确的:(EC)DHE套件使用Diffie-Hellman的临时密钥交换。由于服务器在使用后很快就忘记了用于交换的私钥,因此,破坏服务器的长期密钥不会使攻击者解密过去的所有通信,即,它提供了完美的前向保密性。

我建议在SSL中使用ECDHE_RSA套件。它们提供了完美的前向机密性,较高的保密性安全级别(如果使用P256,则为128位),并允许您对旧版RSA连接和强壮的ECDHE_RSA连接使用相同的证书。


协议设计者使用DH进行临时密钥交换的原因是性能。



生成DH密钥的成本相对较低:它只是具有固定基数(或乘幂)的标量乘法。如果您使用乘法表示法)。

使用ECDH进行临时密钥交换的总成本是固定基数(密钥生成)的标量乘法和变量(实际密钥交换)的标量乘法加上RSA私钥操作使用长期密钥对临时公共密钥进行签名。


生成RSA密钥的成本要高得多,因为您需要找到两个大质数。为每个连接生成一个新的RSA密钥对非常昂贵。

RSA私钥操作也比具有相同安全级别的DH密钥交换要贵一些,但是不能阻止我们使用带有长期密钥的RSA。


使用ECC,性能差距会变得更大,尤其是在更高的安全级别上。 256位ECC很常见(128位安全性),要使用RSA获得同等安全性,您需要3000位密钥。

#4 楼

相反,RSA密钥交换涉及服务器的秘密RSA密钥,而(EC)DH则没有。

这意味着即使攻击者获得了破解RSA密钥的手段,他也将不得不花费更多的破解时间。
通过(EC)DH,使用类似logjam的攻击,大部分破解工作都用于破坏整个所谓的代数/椭圆组。在那之后,断开单个连接很便宜。

因此,虽然RSA密钥交换促使攻击者仅破解有趣服务器的密钥,但是(EC)DH密钥交换促使他攻击尽可能多的连接

如果您想知道为什么(Im)perfectForwardSecrecy的此属性鲜为人知,那可能是因为没有针对Elliptic Curve Diffie-Hellman密钥交换的类似logjam的攻击目前是已知的。

这应该是发布https://security.stackexchange.com/a/35472/185953
的后续操作/评论。