IPsec传输模式下ESP报文的装包和拆包过程
2024-10-19 20:36:05
原创文章,拒绝转载
装包过程
总体流程图
过程描述
- 在原IP报文中找到TCP报文部分,在其后添加相应的ESP trailer信息。
- ESP trailer 包含三部分:Padding,Pad length 和 Next header。Padding 即使用块加密时,最后一个数据块长度不足时所做的填充。Pad length 指填充的长度,方便拆包时找到用来填充的数据段。Next header 标明被封装的原报文的协议类型,例如 6 = TCP。
- 将原 TCP 报文和第1步得到的 ESP trailer 作为一个整体进行加密封装。具体的加密算法和密钥由SA给出。
- 为第2步得到的密文添加 ESP 头。ESP 头由 SPI (Security Parameter Index) 和 Seq # 两部分组成。密文和 ESP头合起来称为"enchilada",构成认证部分。
- 附加完整性度量结果(ICV)。对第3步生成的"enchilada"认证部分做摘要(ESP Authentication Data),得到一个32位整数倍的 ICV,附在"enchilada"之后。ICV 生成算法和验证密钥由 SA 给出。
- 将原始的 IP 报文头中的协议号改为50(代表 ESP),然后将 IP 报文头加到第4步的结果之前构成 IPsec 报文。
装包前后示意图
拆包过程
过程描述
- 接收方收到 IP 报文后,发现协议类型是50,标明这是一个 ESP 包。首先查看 ESP 头,通过安全参数索引号 SPI 决定数据报文所对应的 SA,获得对应的模式(隧道或传输模式)以及安全规范。
- 根据 SA 指定的摘要算法和验证密钥计算"enchilada"的摘要值,与附在 IP 报文最后的 ICV 进行对比,二者相同则数据完整性未被破坏。
- 检查 ESP 头中的 Seq # 里的序列号,保证数据是新的,避免重放攻击。
- 根据 SA 所指定的加密算法和密钥,解密密文段,得到原来的 TCP 报文和 ESP trailer。
- 根据 ESP trailer 的填充长度信息,找出填充字段的长度,删除填充字段得到原来的 TCP 报文。
- 根据 TCP 报文头信息将报文交付给传输层。
最新文章
- R语言基本操作函数---变量的基本操作
- Autodesk 360 Viewer 已经发布到Autodesk 360平台
- 转:45 个 LoadRunner 面试问题(附答案)_纯英文,太有逼格了
- .NET软件工程师面试总结
- [转]ionic Accordion list three levels
- codeforces round367 div2.C (DP)
- Java-->;用递归方法复制目录、子目录以及文件(文件用到IO流)
- 相对定位、绝对定位在IE6的问题
- 根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期
- CentOS7 安装Bind
- C#深复制与浅复制
- ap143 led修改
- 深入浅出Diffie–Hellman
- ASP.NET Core MVC 2.1 顶级参数验证
- document.wrtie()用法
- Spring Cloud 和 Dubbo 比较
- CCF CSP 201604-1 折点计数
- react .net core 发布 Access-Control-Allow-Origin Cors
- admin-6
- 深度学习原理与框架- tf.nn.atrous_conv2d(空洞卷积) 问题:空洞卷积增加了卷积核的维度,为什么不直接使用7*7呢
热门文章
- Python request 简单使用
- CentOS7安装Jenkins Master
- HDU 4729 An Easy Problem for Elfness(主席树)(2013 ACM/ICPC Asia Regional Chengdu Online)
- LTE QOS
- TLS协议分析
- ob_flush()和flush()的区别
- SQL Server “超过了锁请求超时时段”错误
- 【python】python 中的三元表达式(三目运算符)
- filebeat + logstash + elasticsearch + granfa
- 从Oracle到Elasticsearch