场景是这样的,如果能够拿到目标网站的私钥,同时旁路监听该站点的数据包,是否可以实现加密数据还原?
正文
如果了解通信双方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方法。
网友评论