通过完全记录握手来破坏 TLS 安全性

Posted

技术标签:

【中文标题】通过完全记录握手来破坏 TLS 安全性【英文标题】:Breaking TLS security by fully recording the handshake 【发布时间】:2012-04-18 17:31:24 【问题描述】:

我最近一直在研究 TLS,我不确定它为什么如此安全,但可能是由于对它的工作原理存在误解。但是如果整个握手被记录下来,无论是使用中间人攻击还是目标计算机上的数据包嗅探器,那么任何剩余的通信都可以被解密,因为您将拥有客户端和服务器用来生成的所有信息加密密钥。

我怀疑 tls 中会有这样的漏洞,但是谁能告诉我 tls 如何防御这个漏洞?

【问题讨论】:

A) amazon.com/Applied-Cryptography-Protocols-Algorithms-Edition/dp/… 但更重要的是 B) 为什么你认为你在嗅探数据包后拥有密钥? 因为所有的密钥都是从发送的数据中生成的,至少规范是这么说的。用于生成主密钥的预主密钥是基于在握手期间客户端和服务器之间发送的所有信息,但是很好的书,绝对值得一看 啊哈 - 我理解混乱 - 马克的链接应该是一个很好的阅读。 【参考方案1】:

客户端在 TLS 握手中向服务器发送的关键数据使用服务器的 public key 进行加密。因此,即使数据包在网络上被捕获,它也需要私钥(假定只有服务器知道)来解密数据包。

【讨论】:

用公钥加密为什么还需要私钥? @cgoddard:公钥加密不是对称的。如果你用公钥加密某些东西,那么它只能用私钥解密。我包含的链接对此进行了一些讨论。 啊,刚刚在 atm 上读过,但看起来确实很有趣,谢谢家伙 @cgoddard:关于此握手需要注意的一点:公钥加密往往比对称加密在计算上更昂贵——这就是为什么首先使用公钥加密来交换对称加密的密钥密码学。 这取决于密钥交换算法。您所说的适用于 RSA 密钥交换,但不适用于 DH(E) 密钥交换(也很常见)。【参考方案2】:

握手的主要目的是确保双方共享的预主密钥的秘密交换(然后导致共同的主密钥和共享的加密密钥)。

这取决于密码套件以及使用的密钥交换算法。使用认证密钥交换,主要有两种变体:

RSA 密钥交换,客户端使用服务器的公钥(从证书中获得)加密预主密钥。 Diffie-Hellman key exchange,客户端使用服务器的公钥验证服务器签名的 DH 参数。

您可能对这些链接感兴趣:

TLS 1.1: Authentication and Key Exchange(不是匿名密钥交换) why does the first certificate have a RSA public key in x.509? How to see the encrypted key in wireshark, during ssl key exchange? Why different key exhange techniques for ssl key exchange?(参见关于短暂 Diffie-Hellman 的讨论)。

【讨论】:

以上是关于通过完全记录握手来破坏 TLS 安全性的主要内容,如果未能解决你的问题,请参考以下文章

TLS 详解

tls 1.0 RFC文档 自译

什么是ssl,tls?两者有什么区别?

什么是SSL加密,什么是TLS加密

SSL/TLS协议详解

TLS1.3 握手协议的分析