目录
一、https协议的概念
https协议在整体上其实和http协议没什么差别。但是在上一篇文章http协议中说过,http协议中传输的所有数据信息都是以明文的形式传输的,这一点我们用自己打印请求内容和用fiddler抓取请求都验证过了,无论是采用GET还是POST传输方式,都是以明文的形式传递的。而我们的请求在网络传输的过程中,也是可能被其他人抓取的,这就势必存在严重的数据安全问题。基于http的网络完全问题,便有了https协议。
https也是一个应用层协议,只是在http协议的基础上引入了一个加密层。大家要注意,有了https之后,并不代表就不使用http了,https的本质仅仅是在http上多加了一个软件层用于加密解密。
区别可以看成上图所示。当采用http协议时,就是直接从应用层向下走通过网络传输到另一台主机的应用层。当采用https协议时,就是从http中再走一层加密层加密,就是上图中的ssl/tls,向下走通过网络传输到另一台主机的应用层中,在传输进去的时候,要再走一次加密层解密,然后再到http中解析。
此时有人就可能会奇怪,既然http和https的区别是是否要经过加密层,那接收数据的另一台主机如何区分传过来的数据是否需要解密呢?其实很简单,http和https所采用的端口号是不同的。http在网络中采用的port默认是80,而https在网络中采用的port默认是443。通过端口号的不同,就可以进行不同的处理。
对于https大家如果不是学习网络安全或做网络加密算法的,大致了解这么多就可以了,不必过多深入。
二、加密的概念
加密就是把明文(要传输的数据)进行一系列变换,生成密文。
解密则是把密文经过一系列变换,还原成明文。
在这个加密和解密的过程中,往往需要一个或者多个中间的数据来辅助加密解密过程,这样的数据称谓“密钥”。
举一个例子,假设现在有数据a = 1。我们要将这个数据传输给另一台主机,但是我们不想以明文的方式传输,因此我们用一个数据key = 2,将这两个值进行异或得到数据b为a ^ key = 3。于是我们将数据b传输给另一台主机,而另一台主机中也有一个key = 2,于是它就拿着这个key和b异或,得到数据c为b ^ key = 1。通过这种方式,数据在传输的过程中就不是以明文方式传输,而是以密文方式传输了。
在上面的例子中,a就是要传输的原始数据,key就是密钥,b则是加密后的密文,c则是经过解密后的数据。
虽然加密解密从很早开始就已经存在了,例如古代的密折,其实就是一种加密解密的方法。但是加密解密真正形成密码学这一学科,是在20世纪才形成的。奠基人是英国的艾伦·麦席森·图灵。
对于这个名字大家可能不熟,但它名字中的图灵想必大家都有所耳闻,现在ai测试中的图灵实验,其实就是他提出的。
加密解密作为一门密码学这一复杂困难的学科中的核心,里面涉及到非常多的数学计算,大家如果不是未来想向这方面发展,就不比过多深究,了解一下其原理即可。
三、为什么需要加密
加密其实就是为了保护数据的安全。例如臭名昭著的“运营商劫持”。
运营商劫持分为DNS劫持、http劫持和https劫持。这里简单介绍一下http劫持。
由于我们的数据都是通过网络传输的,这就意味着所有数据包都需要经过运营商的网络设备(路由器、交换机等),此时运营商的网络设备机就可以解析出你传输的数据内容,并对里面的内容进行篡改。
例如我们要下载软件a,在下载时明明下载链接都是正确的,但是当点击下载后却是下载软件b,这可能就是发生了运营商劫持。因为你浏览器中在下载软件时,其实就是向服务器发送一个http请求,而服务器的响应中就包含了软件a的下载链接。运营商劫持之后,就会解析这个响应,发现里面的内容是下载软件a,此时它就可能会将软件a的下载链接替换为软件b。通过这种方式,用户就会下载到错误的软件。
而通过加密,就可以让中间人难以破解其中的内容进行替换,以保护数据安全。
大家要知道,如果大家想上网,无论你是个人、学校还是企业,只要是想与外部网络进行连接,就必须要进入运营商的网络中,因为所有的网络相关基础设施都是由运营商搭建维护的。因此,运营商劫持其实是一种非常恶劣的事件。也因此,运营商并不能由私企充当,而必须是国企,受到国家和政府的监管。
运营商劫持只是原因之一。另一个原因就是,运营商在网络方面其实可以看成是垄断的。而网络又是当代的必需品,如果运营商由私企充当,就会导致企业为了牟取暴利而提高人们使用网络的成本,例如提高流量价格。正因当前的三大运营商是由国家监管的,所以其流量价格也是在随着国家控制和网络的发展与完善而逐年降低,让大众能够随意使用网络而无需担心流量价格问题。
当然,数据在网络传输中会经过许多的节点,例如路由器、wifi热点、代理服务器等等。这些节点有些属于运营商,有些则属于其他人或团体。如果信息在通过这些中间节点的时候被劫持,那么传输的内容就完全暴露了。劫持者可以在通信双方没有察觉的情况下篡改数据。这就是“中间人攻击”。因此,除了运营商外,其他的黑客也是可以通过类似的手段进行劫持,获取乃至篡改用户数据。为了防范这类攻击,才需要对数据进行加密。
因此,大家在户外的时候也最好不要随意连接一些免费且没有密码的wifi,这些wifi很可能就是他人的钓鱼wifi,你连接后你在手机上通过网络传输数据时就需要经过这个wifi,此时他人就可以劫持你的数据,向你的手机中发送一些不好的东西。
四、常见的加密方式
1. 对称加密
对称加密采用单钥密码系统的加密方法,即同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称单密钥加密。
特征:加密和解密所用的密钥是相同的。
常见的对称加密算法:DES、3DES、AES、Blowfish、RC2等。
特点:算法公开、计算量小、加密速度快、加密效率高。
简单来讲,对称加密其实就是使用同一个密钥,将明文加密成密文,然后再将密文解密成明文。
2. 非对称加密
非对称加密需要