一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第6天,点击查看活动详情。
前言
昨天通过https了解了一下到底什么是对称加密和非对称加密,其实这两个概念在大学的时候就学过,只是现在都忘记了,当时也没有学的很好吧可能,有兴趣的可以看看
非对称加密优化
如果用非对称加密来做为https的加密方式也是可以的,非对称加密的问题是第一次传入公钥的时候会被劫持,可以通过两套非对称密钥来解决。也就是说A、B两人通信的时候,A先把公钥给B,B把B的公钥传递A,这时候A、B就有了自己的私钥和对方的公钥,B通过A的公钥加密信息给A,这时候只有A有私钥,那么信息就是安全的,同理,A通过B的公钥加密信息传递给B,这时只有B有私钥,所以信息也是安全的。这里解决了信息安全的问题,但是由于使用了两次非对称加密导致非常的消耗性能。
流程图如下:
https最终采取的是非对称加密和对称加密的结合
也就是同时使用了非对称加密和对称加密,过程大致如下:
- 首先A(服务端)、B(浏览器)两个端,A首先通过非对称加密把公钥传递给B
- B生成一个将来用于对称加密的秘钥S,然后通过A的公钥进行加密传输给A
- A通过私钥解密后拿到对称秘钥S,接下来就可以通过对称加密的方式进行通信了
这就是https最终所采取的加密方式,如下图:
但上述的内容其实还有一个漏洞,那就是再第一次A给B传输公钥的时候也可能被中间人劫持,从而进行中间人攻击。这其中的过程如下:
- A的公钥在传输过程中被中间人劫持
- 中间人把自己的公钥给B,这时候B以为拿到的是A的公钥
- B通过中间人的公钥加密数据后给了A,这时候其实又被中间人劫持了,中间人会用自己的私钥解密拿到对称秘钥,再用A的公钥加密将对称秘钥给A
- 通过上述的三步A、B、C都拿到了对称秘钥,并且A、B还不知道中间人拿到了对称秘钥,那接下来的数据通信中间人就都可以拿到了