为什么要停止使用RSA密钥交换?

简介: 今天我们将讨论为什么你应该停止使用RSA密钥交换。SSL/TLS生态系统的最大弱点之一是其向后兼容性。

今天我们将讨论为什么你应该停止使用RSA密钥交换。SSL/TLS生态系统的最大弱点之一是其向后兼容性。上周,有六位研究人员发表了一篇论文,详细介绍了一种名为Bleichenbacher CAT的旧漏洞的新变种,该漏洞强调了这种弱点。 那么,让我们花一点时间来解读论文及其含义,然后我们将讨论为什么你绝对不应该使用RSA密钥交换。

Bleichenbacher的CAT与SSL / TLS

让我们来看看Bleichenbacher的CAT吧。在进行安全连接之前,客户端和服务器必须执行TLS握手。这是一组步骤,其中客户端验证服务器证书,协商要在连接中使用的密码套件,然后交换将在连接本身期间使用的对称会话密钥。

同样,在规模上,同时执行有时成千上万次握手所需的处理能力可能需要完全卸载这些功能。但是,为了帮助缓解一些垃圾请求,Oracle会确定是否需要解密消息。

这种利用发生在密钥交换期间。预主密钥用于计算将在连接期间使用的会话密钥。正如我们所讨论的那样,使用PKCS1 v1.5定义的RSA,当较小的预主密钥(可能是128或256位)放入大公钥时,它会被填充以弥补大小的差异。

问题在于填充,有一个“不可忽略的”概率,即用随机的字节序列轰炸Oracle,最终你会发送一个看起来正确填充的消息。

大多数情况下,服务器将返回一条消息,告诉客户端它无法解密消息,因为它没有正确的填充。“ 但是,当猜到正确的序列时,服务器将发送不同的消息。如果一切顺利,Oracle允许服务器解密预主密钥,服务器推断出对称密钥,然后发回完成的消息。

但在这种情况下,由于攻击者能够猜测填充但未发送正确的预主密钥,因此不会正确加密完成的消息。 这是攻击者想要的,因为它开始缩小预主密钥的可能值。如果你能猜到这个值,你可以猜出钥匙。

最初,通过向RSA添加额外的安全措施来对此漏洞进行分类,例如限制允许的请求数或在消息失败时不发送响应。但是这个漏洞在2003年得到了改进,然后再次在2012年,2014年,它是DROWN攻击的一个关键组成部分,2017年是机器人攻击 - 此时它是SSL / TLS和PKI最常见的威胁之一。

Bleichenbacher的CAT已经找到了一种通过向使用相同公钥的多个服务器发送查询来放大攻击的方法。这不是通配符SSL证书的常见用例。实际上,这是部署通配符的最大缺点之一,即使用相同密钥的多个站点增加了泄密的可能性。

停止使用RSA密钥交换

当给定密码系统的创建者告诉你停止使用它时,它通常是有充分理由的。这就是本报告发生的情况: 支持这一小部分[RSA]用户会使每个人面临风险,因为它允许攻击者通过将RSA指定为服务器支持的唯一公钥算法来执行降级攻击。 这就是为什么向后兼容性如此危险的原因。

绝大多数企业和组织都尽最大努力使SSL / TLS实施至少保持最新状态。花了一点时间才能告别TLS 1.0而不是它应该拥有的东西,但整体事情正朝着正确的方向发展。

TLS 1.3通过弃用对RSA密钥交换的支持完全解决了这个问题(它还改进了我们之前讨论过的握手)。不幸的是,只要我们仍然需要支持仍然使用RSA的一小部分客户端和服务器,所有这些都没有实际意义。如果您属于该类别,建议您弃用对RSA的支持并切换Elliptic Curve Diffie-Helman进行密钥交换。

现在,请快速提醒。这是一个可行的利用,但不容易实现。因此,不要期望很快就会听到一连串的Oracle填充攻击。

为了解决Bleichenbacher的CAT攻击(真的不能很好地推翻舌头),你需要从另一台运行在同一系统上的虚拟机中定位服务器。你不能使用一些远程shell。您还需要一定的权限级别来执行攻击,这需要自己的妥协才能实现。哦,是的,你还需要避免被发现。

所以,这可能不是我们很快就会在野外看到的东西。

但是,就像最初的Bleichenbacher攻击一样,这种攻击可能会继续得到改进,直到有一天,这将是一个真正的威胁。
原文链接:https://www.wosign.com/faq/faq_2018120501.htm

相关文章
|
存储 编解码 算法
RSA加密/解密
RSA加密算法是一种可逆的非对称加密算法,即RSA加密时候用的密钥(公钥)和RSA解密时用的密钥(私钥)不是同一把。基本原理是将两个很大的质数相乘很容易得到乘积,但是该乘积分解质因数却很困难。RSA算法被广泛的用于加密解密和RSA签名/验证等领域。
485 0
|
数据安全/隐私保护
|
算法 安全 Java
java实现ecc加密:通过AES获取公钥和私钥进行ECC加密
java实现ecc加密:通过AES获取公钥和私钥进行ECC加密
603 0
java实现ecc加密:通过AES获取公钥和私钥进行ECC加密
|
安全 关系型数据库 数据安全/隐私保护
迪菲赫尔曼密钥交换的理解
迪菲赫尔曼密钥交换的理解
迪菲赫尔曼密钥交换的理解
|
算法 数据安全/隐私保护
RSA公钥密码算法和Diffie-Hellman密钥交换
RSA公钥密码算法和Diffie-Hellman密钥交换
288 0
RSA公钥密码算法和Diffie-Hellman密钥交换
|
安全 数据安全/隐私保护 C++
加密/解密 公钥/私钥
加密/解密 公钥/私钥
442 0
加密/解密 公钥/私钥
|
算法 网络安全 数据安全/隐私保护
【计算机网络】网络安全 : 公钥密码体质 ( 公钥 - 加密密钥 | 私钥 - 解密密钥 | 与对称密钥体质对比 | 特点 | 数字签名引入 )
【计算机网络】网络安全 : 公钥密码体质 ( 公钥 - 加密密钥 | 私钥 - 解密密钥 | 与对称密钥体质对比 | 特点 | 数字签名引入 )
234 0
|
安全 Java 数据安全/隐私保护
Android网络数据传输安全——实现RSA公钥加密私钥解密
Android网络数据传输安全——实现RSA公钥加密私钥解密
534 0
Android网络数据传输安全——实现RSA公钥加密私钥解密
|
安全 算法 数据安全/隐私保护
RSA 1024位私有密钥加密技术遭破解
美国密歇根大学的三位科学家称,他们发现了一个利用RSA安全技术中的一个安全漏洞的方法,RSA安全技术用于保护从媒体播放器到智能手机和电子商务服务器等各种设备。 他们说,RSA身份验证对于私有密钥载体的电压变化是很敏感的。
2667 0
|
移动开发 Java 数据安全/隐私保护
小程序RSA非对称加密/解密
小程序RSA非对称加密/解密 官方文档参考:官方文档参考 1.my.rsa 支持的密钥1024或者2048都可以进行加密解密(密钥的生成可以用代码(如java)自行实现或者使用工具生成(可参考:支付宝提供一键生成密钥工具)); 2.
1704 0