上过网的朋友都知道,网络是非常不安全的 。尤其是公共场所很多免费的 WiFi,或许只是攻击者的一个诱饵 。还有大家平时喜欢用的万能钥匙,等等 。
文章插图
HTTP 存在的问题
那我们平时上网可能会存在哪些风险呢?
- 泄密,个人隐私、账户密码等信息可能会被盗取 。
- 篡改,收到的数据可能被第三方修改过,或被植入广告等 。
- 假冒,访问的站点非目标服务器站点 。如域名欺骗、域名劫持、钓鱼网站等 。
陪你一起看 91 某社区的电影还好,万一窃取了各购物网站或其他站点的登录信息就……是不是想想有些害怕呢!
文章插图
为什么别人能获取你上网的数据呢?有过一定网络基础的朋友多少都对 TCP/IP 有些了解,对各种握手挥手早已背得滚瓜烂熟,对 HTTP 协议也早了然于心 。
HTTP 是应用层的协议,位于 TCP/IP 参考模型的最上层 。用户数据经过应用层、传输层、网络层、链路层的层层封装后经过物理层发送到目标机器 。
在这几层中,数据都没有经过加密处理,所以一旦别人获取到你的数据包,就能轻易的获取到数据的信息 。
为了保护数据隐私,让数据不再“裸奔” 。对需要传输的数据进行加密处理就很有必要了 。
目前而言,加密算法可以分两大类,一类是对称加密算法,还有一类是非对称加密算法 。
对称加密
对称加密算法的加密和解密都是用同一个密钥 。在一定条件下,对称加密可以解决数据传输安全性的问题 。
比如我在登录某个网站的时候,需要填写账户名和密码进行登录,客户端把登录的表单信息进行对称加密后再传输,这时候就算小王截获数据包,他也无法获取数据的内容,因为数据已经被加密了 。
但是服务器收到数据后也是一脸懵逼,你发来的加密的数据包服务器也不知道解密的密钥!
文章插图
那是不是客户端与服务端在通信之前应该先协商密钥呢?客户端可以通知服务器需要开启数据传输了,然后服务器告诉客户端,咱们以后用 xxxx 这个密钥进行加密解密吧!
文章插图
这样内容是可以加密传输了,但是上图中第一步协商密钥的过程又同样存在安全的问题!
万一小王截获了协商密钥的数据,那后续加密传输的数据对小王来说无异于未加密!所以,对称加密存在密钥协商的问题!
非对称加密
基于对称加密存在的问题,又有了非对称加密 。非对称加密算法需要一组密钥对,分别是公钥和私钥,这两个密钥是成对出现的 。
公钥加密的内容需要用私钥解密,私钥加密的内容需要用公钥解密!私钥由服务器自己保存,公钥发送给客户端 。
客户端拿到公钥后就可以对请求进行加密后发送给服务端了,这时候就算被小王截获,小王没有私钥也无法解密发送的内容,这样确保了客户端发送到服务端数据的“安全”!
但是由于公钥也需要通过网络发送给客户端,同样能被小王截获,这样服务器私钥加密后的内容依然可以被小王截获并解密,并且非对称加密的效率很低 。
对称加密和非对称加密都存在密钥传输的问题,但是至少非对称加密可以保证客户端传输给服务端的内容无法被“破解”,而对称加密算法性能又比较好,那我们是不是可以这样子呢 。
第一次通信的时候服务端发送公钥给客户端,由客户端产生一个对称密钥,通过服务端的公钥加密后发送给服务端,后续的交互中都通过对称密钥进行加密传输 。
也就是说先通过非对称密钥加密对称密钥,通过对称密钥加密实际请求的内容 。
文章插图
上面的方案看起来天衣无缝,小王拿到数据后貌似就无从下手了,但是真的就天衣无缝了吗?
我们看看下图: