对称加密
定义
对称加密是指加密和解密的密匙为同一个,用来加密数据的密匙也可以用来解密
特点
- 加密速度快,使用简单
- 对称加密的破解难度是随着钥匙的大小增加而增加的,钥匙越大就越难破解,但是钥匙越大相应的解密的时间也会越长
对称加密的问题
- 双方都必须先约定好加密规则
- 秘钥数目难于管理。因为对于每一个合作者都需要使用不同的秘钥,很难适应开放互联网中的大量的合作者交流。
- 无法适用于陌生的网络的环境,双方都必须是可信任的才可进行。
非对称加密
定义
非对称加密的秘钥是成对的(公钥和私钥)。私钥由自己安全保管不外泄,而公钥则可以发给网络中的任何人。
非对称加密适用这对秘钥中的一个进行加密,而解密则需要另一个秘钥。根据公钥是无法推导出私钥的。
特点
- 比对称加密安全:使用不同的钥匙,非对称加密的私钥是由自己保管,不会外泄的。
- 更方便,可扩展:公钥可以在公布在网络中,任何人都可以拿着公钥和你进行通信,而对称加密密钥是不可能公布在网络中的,只能通过私下约定密钥规则。
非对称加密的问题
虽然非对称加密很安全,但是和对称加密比起来,它的解密速度非常慢,所以通常会用混合加密的方式进行通信,混合加密是用非对称加密的方式交换双方的对称加密密钥,交换对称加密密钥之后再用对称加密的方式进行通信。
数字签名
信息被篡改的风险
对称加密和非对称加密已经解决了信息传输中的安全问题了,进过加密的数据黑客截取了也无法解密。但是还有一个问题,虽然黑客无法解密通信的内容,但是黑客可以篡改数据双方的通信数据,那么这种情况下我们如何识别数据经过网络传输之后是否被别人篡改过呢?数字签名
- 首先把需要发送的信息进行哈希得到信息摘要
- 然后对信息内容和摘要进行签名得到数字签名
- 然后用对称加密密钥把信息内容和数字签名进行对称加密
- 最后再把对称加密的秘钥进行加密
数字证书
身份确认证的问题
数字签名解决了信息可能会被篡改的问题,但是还有另外一个问题就是如何确定当前给我发信息的人就是A呢?黑客也可以伪装成A的身份然后把A的公钥替换成自己的公钥,这样B就无法分辨出来了。
这样就衍生了一个身份认证的问题,显然这个身份证明不能由当事人自己发出来,只能由一个大家都信任的公开机构(CA)来发行证书,大家先要到CA去申请一个数字证书(证书信息包括发布机构,所属人,公钥,过期时间等信息)
通信流程如下:
- A首先去CA申请一个数字证书
- A把信息加密后+加上签名的数字证书发送给B
- B收到A的信息后,拿着A传过来的数字证书到CA去验证
- 如果查询到对应的数字证书里的所属人的确为A,那么身份真实,可以通讯
- 然后B根据数字证书信息生成一个专属于A和B的加密方式(这里为对称加密),两个人通过此加密方式进行通讯
HTTPS
不足
- 不能验证身份,可能被伪装
- 明文通信,数据可能被窃取
- 无法验证报文的完整性,内容可能被篡改
SSL/TSL协议的解决方案
通常的https是http+ssl或者http+tsl,ssl主要针对http存在的三个问题逐一实现了对应的解决方案
通信加密(解决数据被窃取问题)
ssl采用了混合加密(同时使用非对称加密和对称加密)的方式建立起安全的http通信,经过加密后的内容即是被窃听了,窃听的人也无法解密对应的数据。
数字证书(解决身份伪装问题)
数字签名(解决数据篡改问题)
数字签名主要有两个作用,一是验证数据是否为意料中的对象所发出的,二是对数据的完整性进行验证,验证数据是否被篡改过。
https通信流程
https通信主要包括几个节点,发起请求,验证身份,协商秘钥,加密会话,具体流程如下(此例子只有客户端对服务端的单向验证):
- 客户端向服务端发起,建立https请求。
- 服务器向客户端发送数字证书。
- 客户端验证数字证书,证书验证通过后客户端生成会话密钥(双向验证则此处客户端也会向服务器发送证书)。
- 服务器生成会话密钥(双向验证此处服务端也会对客户端的证书验证)。
- 客户端与服务端开始进行加密会话。
- 客户端向服务器发起请求
- 客户端生成随机r1发送给服务端
- 告诉服务端自己支持哪些加密算法
- 服务器向客户端发送数字证书
- 服务端生成随机数r2
- 从客户端支持的加密算法中选择一种双方都支持的加密算法(此算法用于后面的会话密钥生成)
- 服务端生成把证书,随机数r2,会话密钥生成算法,一同发给客户端
- 客户端验证数字证书
- 验证证书的可靠性
- 验证证书合法性,包括证书是否吊销,是否到期,域名是否匹配等等
- 获得证书的公钥,会话密钥生成算法,随机数r2
- 生成一个随机数r3
- 根据会话密钥算法使用r1,r2,r3生成会话密钥
- 用服务端证书的公钥加密随机数r3并发送给服务端
- 服务器得到会话密钥
- 服务器用私钥解密客户端发过来的r3
- 根据会话密钥算法使用r1,r2,r3生成会话密钥
- 客户端与服务器进行加密会话