1.IPSec安全协议
IPSec时IETE制定的为保证数据传输安全保密性能的三层隧道加密协议,包括报文首部认证协议AH,封装安全载荷协议ESP、互联网间密钥交换协议IKE和一些用于网络认证及加密算法等。
IPSec有两种工作模式
-
传输模式
在此种工作模式下,在IP报头和高层协议报头之间插入一个IPSec包头。不修改IP报头中的目的地址,源IP地址也保持明文状态。对于该工作模式来说,只能够为IP层以上的协议提供安全性保障,因此这种模式适用于主机之间建立IPSec安全传输。 -
隧道模式
在此种工作模式下,报文的源IP地址以及数据被封装成一个新的IP报文,并在内外部报头之间插入了一个IPSec报头,原来的IP地址作为需要进行安全业务处理的一部分来提供安全保护,而且该模式还可以对整个IP报文进行加密操作,进一步增强了传输过程的安全性。该模式更适合网关之间的通信,常用来实现虚拟专用网VPN。
1.1 相关概念
1.1.1 数据流
数据流是一组具有某些共同特征的数据的集合,由源地址/掩码、目的地址/掩码、IP报文中封装上层协议的协议号、源端口号、目的端口号等来规定。一条数据流可以是两台主机之间单一的TCP连接,也可以是两个子网之间所有的数据流量。IPSec能够对不同的数据流施加不同的安全保护,例如对不同的数据流使用不同的安全协议、算法或密钥。
1.1.2 安全联盟SA
IPSec对数据流提供的安全服务通过SA实现,它包括协议、算法、密钥等内容,具体确定了如何对IP报文进行处理。一个SA就是两个IPSec系统之间从源点到终点的单项逻辑连接,如果需要进行双向的安全通信,则需要建立两个方向的安全关联。
1.1.3 安全参数索引SPI
SPI是一个32比特的数值,在每个IPSec报文中都携带该值。在手工配置SA时需要手工指定SPI的取值。不同的SPI能保证SA的唯一性。使用IKE协商生成SA时,SPI随机生成。
1.1.4 安全策略
主机发送的数据并非都需要加密,很多信息使用明文发送即可。这就需要SPD(安全策略数据库)。SPD规定对什么样的数据采用什么样的安全措施。
1.2 报文首部认证协议AH
AH可对整个数据包提供身份验证、完整性与抗重播保护。但是它不对数据进行加密,无法提供保密性,且数据可读不可改。
- 完整性:使用MD等哈希函数产生的验证码实现
- 身份认证:加入通信双方共同约定的会话密钥
- 防重放攻击:在AH报头中加入序列号
AH协议是被IP协议封装的协议之一,如果IP协议头部的“下一个头”字段是51,则IP包的载荷就是AH协议
AH报头格式如下:
0-7 | 8-15 | 16-31 |
下一个头 | 有效载荷长度 | 保留字段 |
安全参数索引(SPI) | ||
序列号 | ||
验证数据(可变长度) |
- 下一个头:表示紧跟AH头部后面的协议类型。在传输模式下该字段是处于保护中的传输层协议的值,如6(TCP),17(UDP),50(ESP)。隧道模式下,AH保护整个IP包,该值是4,表示IP-in-IP协议。
- 有效载荷长度:AH协议头的有效长度
- 保留字段:准备将来对AH协议扩展时使用,目前协议规定这个字段应该被置为零。
- 安全参数索引SPI:用来标识发送方在处理IP数据包时使用的安全策略,接收方根据这个字段来决定如何处理收到的IPSec包。
- 序列号:一个单调递增的计数器,为每个AH包赋予一个序号。
- 验证数据:可变长度,取决于采用何种消息验证短发,包含完整性验证码,称为ICV。
传输模式:
IP报头 | AH报头 | IP数据 |
---|
隧道模式
新IP报头 | AH报头 | 原IP报头 | IP数据 |
---|
1.3 封装安全载荷协议ESP
ESP和AH的完整性验证和数据源身份认证原理一样,只是验证范围小一些。ESP的加密算法使用的是对称加密算法DES和NULL(指实际上不进行加密或验证)。
ESP协议是被IP协议封装的协议之一。
传输模式:
IP报头 | ESP头部 | IP数据 | ESP尾部 | ESP验证 |
---|
隧道模式:
新IP报头 | ESP头部 | 原IP报头 | IP数据 | ESP尾部 | ESP验证 |
---|
1.4 互联网间密钥交换协议IKE
IKE是IPSec的信令协议,为IPSec提供了自动协商交换密钥、建立安全联盟的服务,能够简化IPSec的使用和管理,大大简化IPSec的配置和维护工作。IKE并不直接在网上传播密码,二十通过一些列的数据交换,最终计算出双方共享的密钥。
IKE定义了四种模式:主模式、积极模式、快速模式、新组模式。前三个用于协商SA,最后一个用于协商新的Diffie-Hellman组,分别应用于第一、一、二、三阶段。
2.TLS安全协议
TLS是安全传输增协议,用在两个通信应用程序之间提供保密性和数据完整性,应用层可以利用TLS传输各种数据。TLS简单地说就是在TCP层之上再封装了SSL层,将双方通信的内容进行加密,防止偷听者截获通信内容。SSL之后的TLS是较为成熟的通信加密协议,TLS主要由握手协议和记录协议组成。
2.1 handshake协议
用于协商安全参数。整体流程如下:
- Client端发起握手请求hello,包含版本、加密算法列表、sessionID、随机数等
- Server受到hello后,向Client发送hello,包含版本、sessionID、选好的加密算法、随机数
- 确定好加密算法和版本之后,S发送证书,包含公钥、签名、证书机构
- S发送算法相关参数
- S发送hello done,表示握手消息已经完成
- C收到证书并验证,成功后发送Client Key Exchange,包含算法相关参数等
- 双方计算密钥,C发送消息表示开始使用算法传输数据
- C发送一条消息Finish查看通道是否可用、S校验信息
- S发送消息表示开始使用算法传输
- S发送一条消息Finish查看通道是否可用、C校验信息
2.2 Record协议
一种对称加密传输的分层协议,位于TCP协议之上,每一层的信息可能包含长度、描述、内容等字段。
该协议从高层接收任意大小不间断的连续数据,密钥计算:该协议通过算法从握手协议提供的安全参数中产生密钥,IV和MAC密钥。TLS握手协议由三个子协议组成,允许对等双方在记录曾的安全参数上达成一致、自我认证、协商安全参数、互相报告出错条件。
2.3 TLS相关子协议
Alert协议是TLS提供警报内容类型以指示关闭信息和错误的协议。分为关闭警报和错误警报。
3.HTTPS安全协议
安全产文本传输协议HTTPS是超文本传输协议HTTP的扩展,使用SSL或TLS进行加密。
3.1 HTTP报文类型
分为HTTP请求报文和HTTP响应报文
3.1.1 请求报文
客户端发送一个HTTP请求到服务器,这个HTTP请求由请求行、请求头、空行和请求数据组成。
3.1.2 响应报文
服务器接收并处理客户端发过来的请求后会返回一个HTTP的响应消息。由状态行、响应头、空行和相应正文组成。
3.2 HTTP/2.0的帧格式
由9个固定的字节和payload组成
3.3 HTTP/2.0和HTTP/1.1的区别
- 二进制分帧,2.0解析起来更搞笑,没有冗余字段、占用带宽少。
- 多路复用
4.QUIC安全协议
QUIC是谷歌指定的一种基于UDP的低时延的互联网传输协议。QUIC很好地解决了当今传输层和应用层的各种需求,包括处理更多的连接、安全性和低时延。
4.1 特点
在功能上QUIC等价于TCP+TLS+HTTP/2.0,但基于UDP实现。相对更加灵活。
4.1.1 连接建立时延
QUIC将加密和传输握手结合在一起,减少了建立一条安全连接所需的往返。通常是0RTT建立连接,意味着数据可以被立即发送无需等待。
4.1.2 灵活的拥塞控制
具有可插入的拥塞控制,且有着比TCP更加丰富的信令。
4.1.3 流和连接的流量控制
实现了流级和连接级的流量控制,类似HTTP/2.0的流量控制。
4.1.4 多路复用
基于TCP的HTTP/2.0伸手TCP的对手阻塞问题困扰。由于QUIC是为多路复用操作从头设计的,携带个别流的数据的包丢失时,通常只影响该流。每个流的帧可以在到达时立即发送给该流,因此没有丢失数据的流可以继续重新汇集,并在应用程序中继续进行。
4.1.5 认证和机密的首部和载荷
QUIC的数据包总是经过认证的,而且典型情况下载荷是完全加密的。QUIC保证端到端通信免遭智能或不知情的中间设备操纵。
4.1.6 连接迁移
TCP连接由源地址、源端口、目的地址和目的端口的四元组标识。TCP一个广为人知的问题是,IP地址改变或端口号改变时连接会断掉。尽管MPTCP解决了连接迁移问题,但依然为缺少中间设备和OS部署支持所困扰。