利用私钥,可以解密SSL/TLS吗?

场景是这样的,如果能够拿到目标网站的私钥,同时旁路监听该站点的数据包,是否可以实现加密数据还原?

正文

如果了解通信双方SSL/TLS是如何协商出用户加密/解密密钥(Session Key),可能就不会有类似的问题。那么SSL/TLS是如何协商Session Key的?

TLS1.2 及更古老版本

有两种方法:

RSA Key Exchange

客户端单向认证了服务器的真实身份,并进而信任服务器的RSA证书的公钥(Public Key)。

客户端使用伪随机函数,随机生成不小于40字节的字符串,简称Pre-Master Key。

客户端使用服务器的公钥Public Key,加密 Pre-Master Key,并发给服务器。

服务器使用与Public Key一一对应的私钥(Private Key)解密并得到明文的 Pre-Master Key。

自此,通信双方公共拥有相同的 Pre-Master Key。

再结合双方在通信过程中,互相交换的明Nonce, 双方共同拥有三个值:

Pre-Master Key

客户端的Nonce

服务器的Nonce

双方使用协商出的、相同的Hash算法,共同计算出相同的Master Key。

然后以Master Key做为素材,共同推导出和安全有关的Key:

Session Key

HMAC Key


前者用于双方加密/解密使用,后者用于数据校验使用。

很显然,这里的关键要素就是服务器的私钥(Private Key),一旦泄露,所有该网站使用该方法的加密历史数据、现在的数据、将来的数据,将面临被破解的风险。


DHE Key Exchange

DHE:Diffie-Hellman Ephemeral的缩写,一次性DH密钥交换算法。

客户端单向认证了服务器的真实身份,基于数字证书的认证。

双方交换各自的DH一次性公钥(动态计算,只用于该通信过程,并不保存),还有各自的随机码Nonce。

双方拿着对方的一次性DH公钥、自己的一次性DH私钥,计算出Pre-Master Key

然后拿自己的Nonce、对方的Nonce,和上个方法一样,计算出Master Key。

其它过程雷同,略。

在这个方法里,服务器的私钥只用于签名双方DH消息交互过程,即保证对方发送过来的DH公钥在传输过程中,没有被第三方篡改,仅此而已。

第三方即使有了服务器的私钥,也无法得到Pre-Master Key,无法得到Session Key,更无法解密用户的加密数据。

第三方如果要破解,需要拥有任何一方的DH私钥。而DH私钥是临时的、一次性的,一旦双方得到Pre-Master Key,就会将其删除,更不会在网络上传输,所以即使截获了所有报文,也无法得到DH私钥。

综上,如果获得了服务器的私钥,方法一可以破解,方法二无法破解

TLS1.3版本

上述的方法一,其实有很大的安全风险,风险系数取决于服务器私钥的安全程度。这种千钧集于一发的风险,让TLS协议的制定者决定在最新的1.3版本中不再使用。

1.3版本,只留下方法二,即DHE方法。

你可能感兴趣的:(利用私钥,可以解密SSL/TLS吗?)