ESP 协议有隧道模式和传输模式,隧道模式会加密所有的IP packet并添加新的header;
传输模式则仅加密传输的数据,不加密IP Header;
(1) 在原 IP 报文末尾添加 ESP trailer 信息,其中ESP trailer 包含三部分:Padding ,Pad length, Next header。Padding 和 Pad length用于块加密,Next header 用来标明被封装的原报文的协议类型,如:Next header = 4,则为IP类型
(2) 将步骤(1)得到的报文整体进行加密,得到密文M0,加密算法由SA给出
(3) 在M0 前面添加 ESP header得到M1 构成认证部分,其中ESP header由 SPI 和Seq# 两部分组成。
(4) 对M1 进行完整性认证,得到一个32bit的完整性度量值(MAC),将MAC附在ESP报文的尾部
(5)构造新的IP Header附在ESP报文前面组成新的IP报文。个新的 IP header 的 IP 地址由路由器和安全网关解释,可以和原报文不同。
下图中,左,右分别为原IP报文和IPSec报文,新IP header 的 proto = 50,即为ESP 报文
传输模式加密除IP Header的所有内容且不添加新的IP Header,其他过程与隧道模式一致
(1) 将除IP header 外的所有数据进行加密,得到密文 M0
(2) 将ESP Header 附加到 M0 头部,得到 M1
(3)对M1 进行完整性认证,得到一个32bit的完整性度量值(MAC),将MAC附在ESP报文的尾部,得到 M2
(4) 修改IP header 的proto 值 为 50,附加到 M2 头部,生成IPSec 包进行传输
(1) 接收方收到 IP 报文后,发现协议类型是50,表明这是一个 ESP包。首先查看 ESP header,通过 SPI 决定数据报文所对应的 SA,获得对应的模式 (tunnel/transport mode) 以及安全规范。
(2) 计算M1 部分,与末尾的MAC比较以验证数据完整性
(3) 检查 Seq# 里的顺序号,保证数据是最新的,防止重放攻击
(4)根据 SA 所提供的加密算法和密钥,解密被加密过的数据,得到 原 IP 报文与 ESP trailer。
- 根据 ESP trailer 的填充长度信息,找出填充字段的长度,删去 后得到原来的 IP 报文。
(6) 根据得到的原 IP 报文的目的地址进行转发。
(1) 接收方收到 IP 报文后,发现协议类型是50,表明这是一个 ESP包。查看 ESP header,通过 SPI 决定数据报文所对应的 SA,获得对应的模式 (tunnel/transport mode) 以及安全规范。
(2) 计算M1 部分,与末尾的MAC比较以验证数据完整性
(3) 检查 Seq# 里的顺序号,保证数据是最新的,防止重放攻击
(4)根据 SA 所提供的加密算法和密钥,解密被加密过的数据,得到 原 IP 数据报文与 ESP trailer。
- 根据 ESP trailer 的填充长度信息,找出填充字段的长度,删去 后得到原来的 IP数据 报文。
(6) 根据IP 报文的目的地址进行转发。
ps: 图片上带有水印,是由于截图经过个人博客,由链接生成的。