【一】https协议是啥子?
https也是一个应用层协议,实在http协议的基础上,引入了一个加密层,http协议的内容都是按照文本的方式进行明文传输的, 这就导致了在传输的过程中出现一些被篡改的情况。
【二】啥是加密?
加密这玩意从概念上是真的不好陈述,等一会我去百度上去复制粘贴一句话哈,咳咳,加密就是把明文进行一系列变化,生成密文,解密就是把密文再进行一系列变化,还原成明文,在这个加密和解密的过程中,往往需要一个或者多个中间的数据来辅助这个进程,这个进行辅助的数据可以称为密钥。
【三】加密的发展历史
经过多年的发展,加密到如今变成一个独立的学科:密码学,而且密码学的奠基人,也是目前计算机科学的鼻祖之一,我们得图灵大佬,长这样:
对比我们另外一位祖师爷:冯诺依曼:
我们可以发现,图灵大佬不仅头发更多了,颜值也更高了,可惜这哥们是弯的啊。其实这也是一个悲伤的故事,这位大佬不仅仅年少有为光奠定了计算机, ⼈⼯智能, 密码学的基础, 并且在⼆战 中⼤破德军的 Enigma 机, 使盟军占尽情报优势, 才能扭转战局反败为胜. 但是因为⼀些原因, 图灵⼤佬 遭到英国皇室的迫害, 41岁就英年早逝了,目前计算机领域中的最高奖项,就是以他名字命名的图灵奖。
【四】为什么需要加密
臭名昭著的“运营商劫持”,互联网刚出来那段时间,不知道有没有小伙伴发现,自己通过网络下载一些东西的时候,安装的时候发现总是对不上,甚至还出现了一堆捆绑安装。让我来和你们细说原理
我们通过网络传输数据的时候都是通过运营商的网络设备进行交互的,那么网络运营商的网络设备是可以识别出你的http协议的内容并且进行更改,有的人就要说了,那我不用网络运营商的设备不就行了?问题网线就是网络运营商搭建的,不用他们的设备属实有点不现实。
我们下载软件的时候就是给服务器发送了一个http的请求,获取到的服务器的响应中其实就包含了这个app的下载链接,运营商劫持之后,就发现这是个下载请求,然后将下载地址修改为其他软件的下载地址了。
具体流程如下:
所以http是明文传输的,明文数据会经过路由器,wifi热点,通信服务运营商,代理服务器等多个物理节点,如果信息再传输的过程中被劫持,传输的内容就被完全暴漏了,劫持者还能篡改传输的信息且不被双方察觉,这就是中间人攻击,所以我们才需要对信息进行加密。
tips:你以为只有中间人只有运营商?你在一些公共场合连的免费wifi难道不符合这个中间人特征吗?
小伙伴们能想到为什么堂堂运营商会干这种事吗?原因无他:他们给的实在是太多了
所以在互联网上进行明文传输是比较危险的事,https就是在http的基础上,进行加密措施,进一步保证用户的信息安全。
【五】常见的加密方式
对称加密
1.采用单钥密码系统的加密方式,同一个密钥可以同时用作信息的加密和解密,这个加密的方式被称为对称加密,也被称为单密钥加密,特征是:加密和解密的密钥是相同的。
2.常见的对称的加密算法:DES,3DES,AES,TDEA等等
3。特点:算法公开,计算量小,加密速度快,加密效率高
对称加密其实就是通过一个密钥把明文加密成密文,并且也能将密文解密成明文
非对称加密
1.需要两个密钥来进行加密和解密,这两个密钥被称为公钥和私钥
2.常见非对称加密算法:RSA,DSA,ECDSA
3.特点:算法强度复杂,安全性依赖于算法,从而使得加密和解密没有对称解密的速度快
tips:这个私钥和公钥是相对的,并不是绝对的。私钥可以加密密文,但是就需要公钥解密,公钥加密密文,就需要私钥解密
【六】数据摘要和数据指纹
数据指纹(数据摘要),其基本原理是通过单项hash函数,对长篇信息进行运算,从而生成一串固定长度的数字摘要,数字指纹并不是一中加密机制,但是可以用来判断数据有没有被更改。
这玩意,具有不可逆推性,从哈希根本原理来说,你不可能从一个摘要得到这玩意的原文,除非你进行穷举,但是有人计算过,一篇一千字的文章,你想逆推,基本上需要一千多年,没啥意义主要是。
数据签名:将摘要进行加密之后得到的就是数字签名
【七】数据加密的几个典型方案
方案1——只使用对称加密
经过加密之后,即使数据被截获,中间人拿不到密钥,也就不知道请求内容是啥了。
这种思路的最大问题就是如果让客户端和服务器同时拿到同一份密钥,这件事十分的狗血,无外乎下面这几种情况,在程序的配置文件中包含密钥程序,或者是服务器发送密钥程序。第一种情况下,所有的客服端使用的都是一套的密钥,导致破解收益急剧增加再者中间商可以自己下载一个客户端拿到密钥啊,所以中间商开始赚差价了。第二种情况下,中间商都能拿到密钥了,你的信息不还是相当于明文发送吗?所以这种方案很早就被舍弃了。
所以这个密钥也是必须经过加密传输了,但是你没发现这就陷入了一个死胡同吗?成了一个先有鸡还是先有蛋的问题了。
方案2——只使用非对称加密
先将公钥以明文传输的方式发送给浏览器,然后浏览器将明文使用公钥加密后形成密文,只有浏览器有对应的私钥可以进行解密,这个方式看起来十分的安全,但是你只能保证客户端到服务端是安全的,但是你不能保证服务端到客户端是安全的。
所以这个方案也被舍弃了
方案3——双方都使用非对称加密
这样的话,中间商没有对应的公钥所以无法对相应的数据进行解密,所以还是比较安全这个方法的最大问题是,速度太慢了。
方案四——非对称加密+对称加密
其实这个方案还是没有觉得安全问题只是单纯的解决的效率问题,
这样中间商即使拿到S‘但是还是无法对c加密的东西进行解密
总结: 上面我们说的都是比较安全,为啥是比较安全呢?因为中间商可以将你的信息进行舍弃,使用自己的信息用s‘密钥进行加密,且你客户端根本识别不出来。
【七】证书机制
上面这些情况,最大的问题就是,不能确保你获取到的内容是你想要的,这个时候就有人站出来了,成立了一个叫做CA机构,专门给使用https的服务端做身份验证的。而证书就相当于身份证一类的东西,证明服务端的权威性。
【八】非对称加密+对称加密+证书认证
在客户端和服务器刚建立连接的时候,服务器给客户端返回一个证书,证书包含了之前服务端的公钥,也包含了网站的信息