ESP和传输模式简介
ESP(Encapsulating Security Payloads),封装安全载荷协议,IPsec 所支持的两类协议中的一种。该协议能够在数据的传输过程中对数据进行完整性度量,来源认证以及加密,也可防止回放攻击。
ESP在传输模式时,不会生成新的IP头,而是采用原来的IP头,保护的也仅仅是真正传输的数据部分,而不是整个IP报文。处理的时候,原来的IP报文会先被拆开,在数据部分部分前后分别加上新的ESP头和ESP尾,再在末尾加上对组装过的数据部分的完整性认证信息,最后再装回原来的IP头,即原来的IP包被修改过再传输。
原IP包vs传输模式下的ESP包
装包前后图形化对比:
装包前后数据结构对比:
传输模式下的ESP装包和拆包过程
装包过程
注意分清加密(红色)和认证(黄色)的数据区域
在原 IP报文末尾添加ESP尾部信息。
ESP trailer包含三部分:
Padding(所选加密算法可能是块加密,因此当最后一块长度不够时就需要进行填充)
Pad length(说明填充的长度,方便解包时删除用来填充的那一段数据)
Next header(用来标明被加密的原部分的协议类型,例如TCP)将原 IP 报文的数据部分与第1步得到的ESP尾部作为整体(上面流程图的红框)进⾏加密,加密算法与密钥由SA给出。
为第2步得到的加密数据添加ESP头部信息,对这两者组合体做一个摘要,得到一个完整性度量值(ESPMessage Authentication Data),并添加到该组合体尾部。
ESP头包含两部分:
SPI (Security Parameter Index安全参数索引,用于将收到的 IPsec 数据包与其对应的SA进行关联,从SAD中获得关于该IPsec包一些信息如协议所有的算法和密钥)
顺序号(Sequence number占32比特,SA 初次建立时置0,每发送一个数据包加1,用于抵抗重放攻击)把原IP头加到ESP头前面,这样基于ESP协议的传输模式下装包便完成了。
拆包过程
除开IP头以及末尾的Authentication Data部分,对中间部分计算摘要,与附在末尾的Authentication Data做对比,如果一样的话说明数据是完整的,否则可以断定所收到的报文已经不是原来的报文了。
查看ESP头,通过⾥面的 SPI 得到数据报⽂所对应的SA,以便在SAD获取加密所有算法和密钥;检查顺序号,保证数据是“新鲜的”而不是回放攻击。
根据SA所提供的加密算法和密钥,解密被加密过的数据,得到原IP报文的数据部分与ESP尾。
根据ESP尾里的Padding填充长度信息,我们可以找出填充字段,删去后就得到原IP报文的数据部分。
将 IP头和IP数据部分组合即得到完整的原IP报文。