kk Blog —— 通用基础


date [-d @int|str] [+%s|"+%F %T"]
netstat -ltunp
sar -n DEV 1

IPSec传输模式下ESP报文装包和拆包过程

https://blog.csdn.net/tl437002770/article/details/51107399

IPSec是一种端到端的确保IP层通信安全的体制,IPSec不是一个单独的协议,而是一组协议,如图1所示,IPSec安全体系主要包含了3种协议ESP、AH、IKE,1个安全联盟SA和一些加密和认证的算法。

图1

AH(Authentication Header):提供数据完整性验证,通过Hash实现;数据源身份认证,在计算验证码时加入共享密钥;防止重放攻击,AH包头的序列号可防止重放攻击。

ESP(Encapsulating Security Payload):ESP的协议号是50,提供AH的三种服务,此外,数据包加密,可加密整个IP报文,也可只加密IP的数据部分;数据流加密,用于支持IPSec路由器。

IKE(Internet Key Exchange):IKE负责密钥管理,用于实体之间的身份认证,加密算法的协商,以及会话密钥的生成,IKE的结果会保留在安全联盟(SA)中,供AH和ESP通信使用。

SA(Security Association):SA是两个IPSec实体之间经过协商建立起来的一种安全协定,包括采用何种IPSec协议、运行模式是隧道模式还是传输模式,以及使用的验证算法和加密算法等一系列内容。

AH和ESP使用SA来保护通信,两者可单独使用,也可嵌套使用,IKE主要功能就是在实体之间协商SA。

IPSec主要有两种工作方式,隧道模式和传输模式,隧道模式保护的是整个IP数据包,而传输模式保护的是IP的载荷,即真正传输的数据。如图2所示,是ESP头的格式,由ESP头部、载荷数据、ESP尾部和验证数据组成,其中,32位的SPI与目的地址和协议组成的三元组可以为IP包确定唯一的SA,序列号可用于抗重放攻击,载荷数据为明文或者加密后的密文,本字段的长度必须是8位的整数倍,填充长度指明填充字段的长度,下一个头指明载荷的数据类型,比如TCP等,验证数据可选,储存验证的结果。

图2

如图3,为传输模式下ESP装包过程:首先,给原IP报文添加ESP尾部;然后,将尾部和原IP报文的载荷一起进行加密;第三,将机密数据加入ESP头部;第四,对加密区域和ESP头部进行验证,得到完整性度量值,附在ESP报文最后;最后,将IP头部附在ESP报文前,构成新的IP报文。

图3

拆包时,首先,检查协议类型,确定为IPSec包;然后,通过ESP头部SPI确认SA内容,以及通过序列号确认不是重放攻击;第三,计算验证区域的摘要,与ESP验证数据做比较,相同则数据完整;第四,根据SA提供的算法和密钥,解密加密区域,得原IP数据包和ESP尾部;第五,根据尾部填充长度学习删除填充字段,即可得原IP数据包;最后,根据IP的目的地址进行转发。

kernel, ipsec

« Linux2.6下ESP包解析流程 ipsec 的SPD和SAP详解 »