如何破解Https非对称加密?

如何破解Https非对称加密?
吴阴天作为一个不知天高地厚的骇客,我想要获取某个网站和用户之间交流的所有数据。
恰好,我能完全控制他们交换数据所用的路由器,来看看我怎么拿到我想要的东西…
https是什么?
一般我们访问内网设备的时候,都是使用http://192.168.X.X 进行访问,不同设备之间交换数据全部使用明文。但当我们需要将设备暴露给外网进行访问的时候,就需要给http后面加上一个s,这个s代表TLS/SSL协议。
当我们使用Https时,客户端通过TCP三次握手与服务端建立连接之后,还会有一个额外的加密阶段。
在加密完成后,客户端与服务端会分别得到一个相同的会话秘钥,以此来加密解密之后传输的数据。
也就是说,就算使用了https协议,最后还是使用公钥进行对称加密。
那么只要我们拿到这个公钥,不就可以破解获取客户端与服务端之间交换的数据了吗?
TLS四次握手
这个加密的过程,叫做TLS四次握手,只要从中作梗,或许就能达成我们想要的目的。
第一次握手
在第一次握手时,客户端会告诉服务端它支持什么加密协议(TLS 1.2),使用怎样的加密套件(RSA),以及一个客户端随机数client_random。
看起来重点是这个client_random,不过由于我们劫持了中间路由器,这些东西我们可以轻易拿到。
第二次握手
在第二次握手的过程中,服务端会返回确定使用的加密协议和加密套件,并返回一个服务端随机数server_random和服务器证书。
这个我们也可以拿到。
第三次握手
客户端拿到证书后,从证书中取出服务器公钥,生成一个随机数pre_master_key,并用服务器公钥加密后发送给服务器。
然后用已有的3个随机数进行计算(比如RSA),得到一个会话秘钥。并将目前为止的通信内容生成一个摘要(finished报文),用会话秘钥加密后发送给服务器校验。
第四次握手
服务端使用服务端私钥解密,得到客户端的pre_master_key,集齐这三个随机数后,使用同样的算法(比如约好的RSA),得到会话秘钥。同样将迄今为止的通信数据生成一个摘要(finished报文),发送给客户端做校验。
四次握手之后,客户端与服务器都拥有了会话秘钥,之后就使用这个会话秘钥进行对称加密通信了。
如何破解?
看图可得,破解的关键在于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是安全的。