如何破解Https非对称加密?

作为一个不知天高地厚的骇客,我想要获取某个网站和用户之间交流的所有数据。
恰好,我能完全控制他们交换数据所用的路由器,来看看我怎么拿到我想要的东西…
YqHn.webp

https是什么?

一般我们访问内网设备的时候,都是使用http://192.168.X.X 进行访问,不同设备之间交换数据全部使用明文。但当我们需要将设备暴露给外网进行访问的时候,就需要给http后面加上一个s,这个s代表TLS/SSL协议。
当我们使用Https时,客户端通过TCP三次握手与服务端建立连接之后,还会有一个额外的加密阶段。
在加密完成后,客户端与服务端会分别得到一个相同的会话秘钥,以此来加密解密之后传输的数据。
YT0S.webp
也就是说,就算使用了https协议,最后还是使用公钥进行对称加密
那么只要我们拿到这个公钥,不就可以破解获取客户端与服务端之间交换的数据了吗?

TLS四次握手

这个加密的过程,叫做TLS四次握手,只要从中作梗,或许就能达成我们想要的目的。

第一次握手

在第一次握手时,客户端会告诉服务端它支持什么加密协议(TLS 1.2),使用怎样的加密套件(RSA),以及一个客户端随机数client_random
看起来重点是这个client_random,不过由于我们劫持了中间路由器,这些东西我们可以轻易拿到。
YZyz.webp

第二次握手

在第二次握手的过程中,服务端会返回确定使用的加密协议和加密套件,并返回一个服务端随机数server_random和服务器证书。
这个我们也可以拿到。
YdL6.webp

第三次握手

客户端拿到证书后,从证书中取出服务器公钥,生成一个随机数pre_master_key,并用服务器公钥加密后发送给服务器。
然后用已有的3个随机数进行计算(比如RSA),得到一个会话秘钥。并将目前为止的通信内容生成一个摘要(finished报文),用会话秘钥加密后发送给服务器校验。
YCBE.webp

第四次握手

服务端使用服务端私钥解密,得到客户端的pre_master_key,集齐这三个随机数后,使用同样的算法(比如约好的RSA),得到会话秘钥。同样将迄今为止的通信数据生成一个摘要(finished报文),发送给客户端做校验。
YcHl.webp
四次握手之后,客户端与服务器都拥有了会话秘钥,之后就使用这个会话秘钥进行对称加密通信了。

如何破解?

看图可得,破解的关键在于pre_master_random,只要我们可以解密,就可以用三个随机数和RSA计算出会话秘钥
可以做到吗?

非对称加密

Https的非对称加密,就体现在客户端用公钥加密pre_master_random,服务端用私钥解密。

为什么能用公钥加密不能用公钥解密?
比如说模运算,计算5^2 mod 7,很容易得出4。
但是通过5^X mod 7 = 4,来计算X则很难,如果不是7而是一个更大的数字如2162163849,以当今的算力,需要计算很多年。
这也是为什么不干脆使用非对称加密来加密内容

那为什么会有私钥?
比如说,上面的模运算,通过欧拉定理且在特定情况下是会变得有些“可逆”的。
但凭我的数学是理解不了的,就不解释了。

所以想通过破解加密后的pre_master_random来计算得到会话秘钥是几乎不可能的。

CA证书机构

那如果我们从证书下手呢?仿造一个证书,这样,客户端用我们仿制的公钥进行加密,这样我们就可以用自己解密出pre_master_random
也不可行。
证书是由服务器公钥经过CA颁发的CA私钥加密得来的。
而客户端拿到证书后,是需要向CA请求对应服务器域名的CA公钥来解密得到服务器公钥的。
因此,伪造证书也是不可行的。

CA公钥不多,因此一般会内置到浏览器或操作系统中,不一定真的需要请求。

结论

破解Https非对称加密是不可能的,使用Https是安全的