目录
加密方式
对称加密
非对称加密
非对称加密 + 非对称加密
非对称加密 + 对称加密
AC证书
AC证书内容
数据摘要
数据签名
在我们前面学习的http协议里面,我们发送的内容都是明文传输的,所以在安全上并不安全,但是在现在信息发达的时代里,如果还是使用 http 协议,那么就是很危险的,所以目前我们接触到的基本上都是 https 协议。
而https协议上也就是在 http 协议里面加了 TLS/SSL 协议,而这两个协议就是用来加密的。
http协议是明文传输的,所以当有中间人修改数据后,我们也是不能被发现的,或者是明文传输的话,被黑客看到我们的信息,那么也是很不隐私的。
那么解决方案是什么呢?加密!
但是我们下面并不是要谈加密,而是谈如何加密!
那么加密有哪些方式呢?
对称加密
非对称加密
非对称 + 对称加密
加密的方式就是这三种,那么这些加密有什么特点呢?
对称加密:对称加密相对于非对称加密比较简单,举一个简单的例子,对称加密有,假设现在发送的是数据 那么对这个数据异或另一个数字,然后得到带了一个数据,那么这个数据就是经过加密的数据,当这个数据到达对端主机后,那么将这个数据在异或这个密钥,那么就可以得到原始的数据。
这就是使用对称加密,但是对称加密是有问题的。
如果使用对称加密,那么第一次的密钥怎么让对方主机知道呢?
如果服务器将通信使用的密钥明文发送的话,那么就会被黑客看到,那么第一次的密钥协商就是有问题的?那么此就需要一个密钥的密钥来解决问题,这就是鸡生蛋,蛋生鸡的问题了。
非对称加密就是首先,服务器有公钥和私钥,当客户端第一次给服务器发送的时候,服务器就会将自己的公钥交给客户端,那么客户端就可以拿公钥加密,然后发送给服务器,此时就只有拿私钥的服务器能解密的,后面服务器也就可以拿私钥加密,然后客户端手里有公钥,那么客户端也就可以看到服务器发送的数据了。
非对称加密就是这样,但是非对称加密也是有问题的,因为不仅仅是客户端给服务发送数据,服务器也需要给客户端响应,那么当服务器给客户端响应的时候,黑客也是可以看到服务器的公钥的,那么此时黑客就可以看到服务器到客户端的数据,此时也是不安全的。
那么需要怎么办呢?
由于只有一个非对称加密是不够的,那么就需要采用双放都是非对称加密。
第一次,客户端访问服务器,然后服务器给客户端返回自己的公钥,此时公钥是可以被其他人拿到的,然后客户端拿到服务器公钥后,拿服务器公钥对自己的公钥加密,然后发送给服务器,此时黑客是不能拿到的,因为此时被服务器公钥加密的数据,只能由服务器的私钥解密,然后服务器拿到了客户端的数据后,使用自己的私钥解密,然后拿到客户端的公钥,此时服务器就可以给客户端发送数据的时候,就可以拿客户端发送的公钥加密了,此时发送到网络中的数据,只有客户端可以解密。
但是非对称加密是比较复杂的,而且在解密的时候也是比较浪费世间的,所以非对称加密+非对称加密是不好的,其实不光是这样,而且其实也是可以被中间人拿到数据的!
那么中间人要怎么拿到数据呢?我们下面先看一下如何解决非对称加密的速度慢的问题。
上面由于双方都是非对称,所以比较慢,下面使用非对称和对称一起用,前面使用非对称密钥协商对称密钥,后面就使用对称密钥来通信。
首先客户端访问服务器,服务器将公钥发送给客户端,客户端使用服务器公钥对一格对称密钥加密,然后对称密钥此时是不能被黑客看到的,所以此时数据是安全的,当服务器拿到数据后解密,拿到对称密钥,然后后面就是使用对称密钥加密解密。
这里我们就来说一下前面说的中间人问题,那么中间人怎么攻击呢?
假设现在有一个中间人,mid。
当客户端服务器第一次通信的时候,也就是当服务器给客户端返回公钥M的时候,此时中间人将M替换成自己的公钥H,但是把M保存起来,此时在将数据发送给客户端,此时客户端拿到的公钥就是H,然后客户端会使用H来加密一个对称密钥S,然后发送给服务器,此时中间人拿到该数据,然后使用中间人的私钥H‘来解密,拿到对称的密钥,然后中间人对对称密钥S使用M加密,然后发送给服务器,此时服务器也就拿到了对称密钥S,在此过程中,客户端和服务器都不知道中间人的存在,也并不知道中间人修改过数据,在客户端和服务器协商好密钥S后就使用密钥S通信,但是中间人也是知道S密钥的,所以此时中间人是可以知道客户端和服务器的数据的。
我们发现上面的加密都是有问题的,那么我们需要怎么做呢?
AC证书,AC证书是什么呢?AC证书就是一个可以信任的机构,该机构为特定的网站颁发证书,然后每一次通信的时候,网站就将该证书进行hash映射形成摘要,然后通过加密后,形成签名,然后就将该证书与签名一起发送过去,如果中间被修改,那么对签名进行解密后,然后再对证书进行相同的hash映射后,如果形成的摘要和签名解密后的摘要不同,那么说明数据被中间人修改过,所以就是不可以的。
上面就是如何通过AC证书来检测数据是否被修改过,如果修改过,那么该数据就是不可信任的。
下面我们介绍一下什么是AC证书:
AC证书里面包含了一些内容,其中该内容就包含了对应网站的信息,例如:网站的网址、以及该网站的公钥等...
重要的就是该网站的公钥,主要是为了让客户端看到该公钥。
数据摘要就是对AC证书进行hash有映射,对证书进行hash隐私后,就形成了摘要,然后对摘要再进行AC机构的私钥加密后,然后形成数据签名。
数据签名就是再通过数据摘要,然后使用AC机构的私钥加密,只能由AC机构的公钥解密,但是私钥只有AC机构拥有,所以想要形成签名,只能由AC机构来形成。
所以对数据摘要进行加密后就形成了签名。
有了数据签名后,此时网站和客户端通信的时候,就可以将网站的信息和数据签名放在一起了,然后发送给客户端。
那么有了数据签名和证书后,看一下如何加密。
此时当客户端第一次给服务器发送数据的时候,服务器给客户端返回了自己的证书和数据签名放到一起。
如果此时中间人想攻击的时候,那么中间人将AC证书里面的公钥切换为自己的公钥。
那么当该数据到达客户端的时候,客户端就会验证AC证书的真假,客户端就会对AC证书进行相同的hash映射,然后,形成数据摘要,然后在对数据签名进行解密,也形成一个数据摘要,如果AC证书美哟被修改,那么这两个摘要就是相同的,如果被修改了,那么形成的数据摘要就会差别很大,此时客户端就会意识到数据被修改。