目录
1.预备知识
1.1.加密和解密
1.2.常见加密方式
1.2.1.对称加密
1.2.2.非对称加密
编辑
1.3.数据摘要(数据指纹)和数据签名
1.4.证书
1.4.1.CA认证
1.4.2.证书和数字签名
2.HTTPS协议
2.1.自行设计HTTPS加密方案
2.1.1.只使用对称加密
2.1.2.只使用非对称加密
2.1.3.双方都使用非对称加密
编辑
2.1.4.双方使用非对称和对称加密
2.1.5.上述4种方案的漏洞
2.2.合适的HTTPS方案
1.预备知识
1.1.加密和解密
- 加密就是把明文(带传输的信息)通过密钥生成密文(只有通过密钥才能解析)
- 解密就是将明文通过密钥解析成明文
- 而密钥是加密、解密过程中的中间数据,用来将明文变为密文,密文恢复为明文
1.2.常见加密方式
1.2.1.对称加密
1.2.2.非对称加密
1.3.数据摘要(数据指纹)和数据签名
数据摘要是一种映射机制,并不是一种加密方式,我们知道一段数据可以通过hash函数映射为一个值,当这个值改变时所对应的hash映射值会产生改变。并且即使是一篇文章中,我们只修改了一个单词,最终hash映射值也会产生不同。
通过这个原理数据指纹的应用如下:
1.4.证书
1.4.1.CA认证
如图:
- 当某一个公司搭建自己的网站时,需要将自己的公司信息、网络域名……给CA机构进行备案、审核获得一个CA的证书
- 这时CA机构会形成CA机构的公钥和私钥并将公钥写进证书中,发送给服务器,作为服务器的通信证书。
- 接着服务器、客户端进行通信时需要基于这个证书进行通信
CA是一个权威机构,规定了所有服务器如果要上线,一定需要CA证书。
为什么需要证书? 这需要结合2.1.这个模块进行学习,所以看到这里大家先跳过,等到结束2.1.模块化再来体会一下证书的作用。
1.4.2.证书和数字签名
我们在2.1.学习结束后发现,单纯通过加密解密的过程中,无法避免中间人篡改、访问数据。这时我就需要结合证书中的信息和数字签名(加密后的数据指纹)来解决“公钥合法性的问题”!!!
目前我们需要解决的问题是:如何确定公钥的合法性(可能被中间人篡改),所以我们接着数字指纹,并加密成数字签名,将其和服务器提供给CA认证的明文信息结合为证书。
我们在数字指纹的学习中,知道完全相同的数据通过相同的哈希算法获得的散列值一定是不变的,在明白了这一点后,我们发现:只要我们判断数字指纹的值和明文信息映射后的散列值是一致的即可保证公钥的合法性
- 当客户端获取到证书时,将这个结构化数据分成“数字签名”和“明文信息”
- 因为CA的公钥是全球统一的,也就是我们可以通过数字签名读取到里面的散列值内容,但是我们无法修改(需要有CA的私钥才能够修改)
- 接着我们对明文信息通过开放的哈希算法进行计算出散列值,最终比较这两个散列值
- 如果这两个散列值不同表示明文信息已经被修改,公钥可能有问题!!!
那么回到中间人的角色:
- 中间人修改明文信息时一定会导致散列值不同,这时浏览器能够识别到!
- 中间人无法修改数字签名中的散列值为自己修改明文信息后的散列值
- 中间人可以自己获得证书,替换数字签名和明文信息,这里会出现两个问题:第一中间人的信息就被获取了,另外因为服务器对应网络域名是固定的,也就是中间人的网址一定和目标服务器的网站不同,这时用户可以发现目标收到了篡改!!!
讲到了这里:我们发现了通过证书的引入,中间人无论做出什么行为都无法再次在客户端、服务端未知的状态下,修改公钥,并且读取信息!!!也就是公钥的合法性得到了保证!!!
总结证书能够解决公钥合法性的原因:
- 明文信息的散列值加密是通过CA认证的私钥,全球只有CA机构可以修改这个数字签名
- 数字指纹实现了只有完全相同的一份数据通过哈希映射的散列值才相同
- 证书中的网址是独有的
- 所有的浏览器都能够通过内置的CA公钥读取到数字签名中的散列值
那么讲到这里我们就知道如何自定合适的HTTPS方案了!!!
2.HTTPS协议
首先HTTPS协议也是应用层协议,他是在HTTPS协议的基础上添加了一个加密层,防止HTTP协议中明文传输内容收到修改和盗取。
这里需要注意的是:HTTP协议和HTTPS协议需要配对使用!!!
2.1.自行设计HTTPS加密方案
2.1.1.只使用对称加密
2.1.2.只使用非对称加密
2.1.3.双方都使用非对称加密
2.1.4.双方使用非对称和对称加密
2.1.5.上述4种方案的漏洞
我们综合以上4种加密方式,发现2.1.3.和2.1.4.可行,但是会出现安全问题,本质上还是不可行的,但是理论上并没有错误,这是因为我们默认中间人只对密文进行访问,也就是在传输秘钥结束后才开始对传输数据进行读取。而实际上,中间人可能在传输秘钥的过程中就对传输数据进行读取、修改,也就是对秘钥进行了修改……
最终我们发现,因为有中间人的存在,他可以把自己的秘钥传给服务器、客户端,而服务器客户端并不知道这个传来的密钥究竟是对方的还是中间人的,所以以上我们设计的4中方案都不可信!!
那么我们如果设计一个合适的HTTPS方案就需要确定公钥的合法性!!!
2.2.合适的HTTPS方案
证书验证+非对称加密+对称加密