一、 ESP简介
ESP,封装安全载荷协议(Encapsulating SecurityPayloads),是一种Ipsec协议,用于对IP协议在传输过程中进行数据完整性度量、来源认证、加密以及防回放攻击。可以单独使用,也可以和AH一起使用。在ESP头部之前的IPV4、IPV6或者拓展头部,应该在Protocol(IPV4)或者Next Header(IPV6、拓展头部)部分中包含50,表示引入了ESP协议。
二、 ESP传输模式数据包结构
ESP的数据包结构如下:
ESP头部:
(1) 安全参数索引SPI(32位):用来确定唯一的安全联盟
(2) 序列号SequenceNumber(32位):用于保护接收端免受重复操作攻击
ESP尾部:
(1) 填充Padding:字段长范围为0-255,用于将明文扩充到需要加密的长度,同时隐藏载荷数据的真实长度。
(2) 填充长度PadLength(8位):表示填充的字节数
(3) 下一头部NextHeader (8位):标志下一头部的类型(被加密的数据类型)。
ESP验证尾部:
(1) 鉴别数据Integrity Check Value-ICV(变长):在ESP数据包其他字段基础上计算出的完整性校验值。
对数据的完整性验证需要计算SPI、序列号、载荷数据以及ESP尾部。
对数据的保密性验证需要计算载荷数据以及ESP尾部。
三、 ESP传输模式装拆包流程
ESP有两种模式:隧道模式和传输模式。隧道模式将发送的整个数据报文作为一个数据整体来处理,在整段数据前加上新的IP进行传输,不修改原报文。
对于传输模式而言,需要拆解报文,对原报文的数据部分进行处理,加上ESP头部后,再装上原报文的IP部分。
对IPV4报文的处理过程示意图如下:
对IPV6报文的处理过程示意图如下:
装包过程(以IPV4协议为例):
1、 将原IP报文的IP头和数据报文部分分离,在数据报文部分的尾部添加ESP尾部。ESP尾部包含:选择的加密算法需要对明文进行填充的数据Padding、填充长度Padding Length、下一头部Next Header标注被加密的数据报文类型。
2、 对第一步得到的整体信息(原数据报文和ESP尾部)进行加密。具体的加密算法以及密钥由SA给出。
3、对第二步得到的已经加密的信息添加ESP头部(SPI和序列号),组装成Enchilada。
4、对第三步得到的Enchilada做摘要,得到完整性度量结果(ICV),附加在Enchilada尾部
5、在第四步得到的数据前加上原IP头,将原IP头中的Protocol中的值改成50,代表ESP
更清晰的转换对比图如下(以IPV4\TCP为例):
拆包过程:
1、数据接收方收到数据后,看到协议类型为50,知道这是一个ESP协议,查看ESP头,通过SPI决定数据对应的SA.
2、计算Enchilada部分的ICV,与数据包尾部的ESP ICV进行比较,确定数据的完整性。
3、检查Seq序列号,决定是否需要该数据信息。
4、根据SA提供的加密算法和密钥,解密被加密的Enchilada数据,得到原数据报文和ESP尾部
5、根据ESP尾部的填充长度信息,找出填充字段的长度,删去后得到原数据报文。
6、根据原IP头的目的地址进行转发。