zoukankan      html  css  js  c++  java
  • IPSec传输模式下的ESP报文的装包和拆包过程

    IPSec协议定义

    IPsec将IP数据包的内容在装包过程在网络层先加密再传输,即便中途被截获,由于缺乏解密数据包所必要的密钥,攻击者也无法获取里面的内容

    IPsec 对数据进行加密的方式

    加密模式 加密特点
    传输模式 只是对 IP 协议的数据部分 (payload) 进行了加密
    隧道模式 对整个 IP 分组进行加密

    ESP协议定义(封装安全载荷)

    Encapsulating Security Payloads (ESP) 协议能够在数据的传输过程
    中对数据进行完整性度量来源认证以及密,也可以防止回放攻击。

    SA 安全联(SecurityAssociation)

    安全联盟(Security Association)是IPSec对等体之间对某些要素的约定。例如,使用哪种协议(AH、ESP还是两者结合使用)、协议的封装模式(传输模式和隧道模式)、密码算法(DES和3DES)、特定数据流中保护数据的共享密钥以及密钥的生存周期等。

    ESP报文装包过程

    1. 在原 IP 报文末尾添加 ESP trailer (尾部/挂载) 信息

    ESP trailer 包含三部分。由于所选加密算法可能是块加密,当最后一块长度不足时就需要填充 (padding),附上填充长度 (Padlength) 方便解包时顺利找出用来填充的那一段数据。Next header用来标明被封装的原报文的协议类型
    在这里插入图片描述

    2.将原 IP 数据报文以及第1步得到的 ESP trailer 作为一个整体进行加密封装。

    具体的加密算法与密钥由 SA 给出, 注意这里是数据报文 所以图片有一些问题, 只要包括ip数据 也就是original IP datagram payload 而不要报文头一起加密

    在这里插入图片描述

    3.为第2步得到的加密数据添加 ESP header。ESP header由 SPI 和Seq 两部分组成

    加密数据与 ESP header 合称为 “enchilada”,构成认证部分。注意到被封装的原报文的协议类型受到保护,没有在 ESP header 给出,而由加密的 ESP trailer 的 Next header声明

    在这里插入图片描述

    4. 附加完整性度量结果 (ICV,Integrity check value)

    对第3步得到的 “enchilada” 认证部分做摘要,得到一个32位整数倍的完整性度量值,并附在 ESP 报文的尾部。完整性度量算法包括验证密钥由 SA 给出。

    在这里插入图片描述

    5.加上新的 IP header 构成 IPsec 报文

    新构造的 IP header 附在ESP 报文的前面组成一个新的 IP 报文。注意这个新的 IP header的 IP 地址由路由器和安全网关解释,可以和原报文 (由主机创建的 IP 地址) 不同。协议类型为50,说明它封装的是一个 ESP报文。

    在这里插入图片描述

    ESP报文拆包过程

    1. 收到报文后查看协议类型, 发现是ESP报文

    2. 查看ESPheader 获取对应的加密模式和安全规范

    3. 计算enchilada 与ICV对比,验证数据完整性

    4. 检测Seq顺序号, 不能是回放攻击

    5.根据SA提供的加密算法和密钥,解密数据,得到原IP数据和 ESP trailer

    6.根据 ESP trailer的填充长度, 删去填充部分

    7. 根据IP地址进行转发或者传入上一层

  • 相关阅读:
    了解一些分词工具
    Maven 依赖的作用域
    aop 的一些表达式
    Mybatis 高级查询的小整理
    namespace" 或The content of element type "mapper" must match "EMPTY"
    Spring事务管理
    Java异常详解
    初识事务
    数据库共享锁与排它锁
    StringUtils.isEmpty和StringUtils.isBlank的区别
  • 原文地址:https://www.cnblogs.com/qq874455953/p/10264424.html
Copyright © 2011-2022 走看看