玩转HTTPS与非对称加密

我们模拟一个服务端和客户端通过网络发消息的演化过程

 

第0次 明文传输

服务端正常通过明文发送消息給客户端,通过网络链路转发,很容易中途被人截获,解析,甚至篡改,导致很多问题。

可以说明文传输是没有安全可言的,为此发明了加密的密文传输。

 

第一次 简单加密传输

 

服务端传给客户端一个key,之后传的消息都是通过key进行加密后的密文,持有key才能解密看到明文。

如果没有key则无法解析消息,防止了传输中途被什么人都能解析篡改。

问题:传输的key也有可能被人截获,截获后这个加密就变成了玩具。只要持有key就可以轻松破解明文,篡改后再通过key加密传给客户端。

 

第二次  非对称加密

服务端保存一个key1,只有自己知道不对外暴露

服务端传给客户端一个key2,

服务端发消息通过key1加密,只有key2才能解密,这样即使中途被人截获了key2也只能看 不能篡改,保证了消息的真实性。

问题: 截获了key2虽然不能篡改但是还是能解析。

 

第三次  四把钥匙两个锁

服务端自己持有key1(私钥)  发一把key2(公钥)给客户端 

客户端自己持有key3(私钥)  发一把key4(公钥)给服务端

服务端给客户端发的消息,使用公钥key4加密,只有key3才能解密,而key3只有客户端自己有

客户端给服务端发的消息,使用公钥key2加密,只有key1才能解密,而key1只有服务端自己有

通过公钥加密,私钥解密,保证了来回消息都不会被中途解析和篡改

问题:四把钥匙来回加密解密效率低,能不能就通过一把钥匙就完成加密解密的动作呢?

 

第四次  单双钥匙

客户端有两把钥匙,私钥key3和公钥key4

服务端有一把钥匙,私钥key1

客户端先公钥key4传给服务端,服务端通过key4加密,把加密后的key1传给客户端。key1是什么只有key3才能解开,所以只有客户端才能知道

这样下来服务端与客户端都在中途不泄露的情况下有同一把钥匙key1,通过key1即可完成之后消息的加密解密

问题:

中间人越来越聪明,自己搞了两把钥匙key6(公钥), key5(私钥)

在客户端传key4给服务端的途中,把key4截获,篡改成自己的key6传给服务端

服务端用key6把自己key1传过去也被中间人截获,中间人随随便便通过自己的key5解析出key1,然后将自己的key5伪装成key1传给客户端。

这样下来以后服务端通过key1加密的消息,中间人持有key1解析篡改,再通过自己的key5加密发给客户端。

客户端通过key5加密的消息,中间人持有key5解密篡改,在通过key1加密后发给服务端。在两边浑然不知的情况下形成了完美闭环 夺笋啊!

 

第五次  找CA做公证

仔细想上面的问题在于第一次客户端传给服务端的key4被人篡改了,如果这个key4能安全送到服务端,就能破解中间人问题

此时有一个地方叫CA,就是专门派来保护key4的

CA有两把钥匙 私钥key7,公钥key8  

客户端会将key4直接发到CA,让CA的key7进行加密后转发,转发给服务端

那么服务端通过key8一解析就能完好无损的拿到key4了。

 

这样即使中间人截获后通过key8解密出key4也没办法篡改,因为中间人没有key7加密,篡改后的钥匙服务端key8解不开。

保证了key4的安全就保证了key1传输的安全,就保证了服务端客户端各持有key1加解密消息的安全 

 

finally

公钥加密 私钥解密,这个叫 "加密",就是客户端的key3 key4玩法

私钥加密 公钥解密,这个叫 "签名",就是CA机构的key7 key8玩法

 

HTTPS 的原理就是用非对称加密的方式来交换秘钥,用对称加密的方式来通信,然后里面夹杂着哈希算法用于验证签名

over

 

posted @ 2021-12-07 20:57  六小扛把子  阅读(184)  评论(0编辑  收藏  举报