文章目录
- 前言
- Http
- 加密方法
- 对称加密
- 非对称加密
- 数据摘要(数据指纹)
- 数字签名
- 加密方案
- 只使用对称加密
- 只使用非对称加密
- 双方都使用非对称加密
- 对称+非对称
- 证书
前言
上一篇文章中,我们提到http是不安全的,尽管采用了cookie和session的方案,仍然有可能被中途拿走用户信息,针对http不安全的特性,https顺势诞生。
Http
http在传输过程中,完全是明文传送,这样信息很有可能被篡改和盗取,https在http基础上新增了一层加密层,保证数据安全可靠,不被篡改。
由于我们的数据包都会经过运营商/黑客的网络设备,运营商的网络设备就可以解析出我们传输的任何数据,并直接进行篡改。
加密方法
在互联网上明文传输是非常危险的,因此我们最好对数据进行加密。常见的加密方法有以下几种
对称加密
- 采用
单密钥
系统的加密,同一个密钥既可以加密和解密 - 算法公开,计算量小,效率较高
非对称加密
- 需要两个密钥来进行加密,分别是公钥和私钥
- 算法强度很高,加密速度非常慢。
公钥对数据加密后,形成密文
私钥对密文解密后,形成明文
私钥对明文加密后,形成密文
公钥对密文解密后,形成明文
数据摘要(数据指纹)
数据指纹(数据摘要):如图字面意思,就是利用单向的哈希函数对信息运算,生成一串固定长度的数字摘要,这个过程是不可逆的。
数据指纹不是一种加密机制,但可以判断数据有没有被篡改,因为任何一点修改都会让数据指纹大幅度变化。
数字签名
将数字摘要进行加密后,就形成了数字签名。
数字摘要也必须要加密,不然中间人完全可以把哈希值重新计算骗过我们。
加密方案
只使用对称加密
只使用方案一是不安全的,因为在交换密钥的时候我们仍然要明文传输,中间人完全有能力拿到这个密钥。同时,服务器需要维护每个客户端对应的密钥关系,也非常麻烦。
只使用非对称加密
服务器依然要向客户端明文发送自己的公钥,这让中间人有机可乘,偷偷替换为自己的公钥B。
双方都使用非对称加密
这种方式依然会被中间人劫持,同时还衍生出了效率问题。
对称+非对称
方案4在3的基础上提高了效率,但依然无法避免安全问题。中间人仍然可以替换公钥A。
证书
综合上述方案,我们发现,即使后续中间人无法干涉,但我们无法确保客户端收到的公钥一定是客户端发送的!
服务端在使用HTTPS前需要向CA机构申领数字整数,服务器将证书给浏览器,浏览器直接在证书获取公钥,证书必须具有权威性。
CA认证流程:
签名和验证:
那CA机构的公钥就不怕被中间人截取了吗?因为CA机构是权威机构,为了保证合法性,一般在浏览器和操作系统内部,出厂下载的时候就内置了CA的公钥。
- 改变数据会让hash值改变,与正确的散列值不同
- 改变签名,无法被正确的CA公钥正确解密
- 无法自己替换证书,因为只有CA具有私钥
综上,对称+非对称+CA认证的证书共同保证了https是一个安全的协议!
公钥私钥生成
其他问题:
-
为什么哈希值要加密?要防止中间人重新计算哈希值
-
为什么要哈希,直接对签名加密就好了?为了节省时间。