原创文章,拒绝转载

装包过程

总体流程图

过程描述

  1. 在原IP报文中找到TCP报文部分,在其后添加相应的ESP trailer信息。
  • ESP trailer 包含三部分:Padding,Pad length 和 Next header。Padding 即使用块加密时,最后一个数据块长度不足时所做的填充。Pad length 指填充的长度,方便拆包时找到用来填充的数据段。Next header 标明被封装的原报文的协议类型,例如 6 = TCP。
  1. 将原 TCP 报文和第1步得到的 ESP trailer 作为一个整体进行加密封装。具体的加密算法和密钥由SA给出。
  2. 为第2步得到的密文添加 ESP 头。ESP 头由 SPI (Security Parameter Index) 和 Seq # 两部分组成。密文和 ESP头合起来称为"enchilada",构成认证部分。
  3. 附加完整性度量结果(ICV)。对第3步生成的"enchilada"认证部分做摘要(ESP Authentication Data),得到一个32位整数倍的 ICV,附在"enchilada"之后。ICV 生成算法和验证密钥由 SA 给出。
  4. 将原始的 IP 报文头中的协议号改为50(代表 ESP),然后将 IP 报文头加到第4步的结果之前构成 IPsec 报文。

装包前后示意图

拆包过程

过程描述

  1. 接收方收到 IP 报文后,发现协议类型是50,标明这是一个 ESP 包。首先查看 ESP 头,通过安全参数索引号 SPI 决定数据报文所对应的 SA,获得对应的模式(隧道或传输模式)以及安全规范。
  2. 根据 SA 指定的摘要算法和验证密钥计算"enchilada"的摘要值,与附在 IP 报文最后的 ICV 进行对比,二者相同则数据完整性未被破坏。
  3. 检查 ESP 头中的 Seq # 里的序列号,保证数据是新的,避免重放攻击。
  4. 根据 SA 所指定的加密算法和密钥,解密密文段,得到原来的 TCP 报文和 ESP trailer。
  5. 根据 ESP trailer 的填充长度信息,找出填充字段的长度,删除填充字段得到原来的 TCP 报文。
  6. 根据 TCP 报文头信息将报文交付给传输层。

最新文章

  1. R语言基本操作函数---变量的基本操作
  2. Autodesk 360 Viewer 已经发布到Autodesk 360平台
  3. 转:45 个 LoadRunner 面试问题(附答案)_纯英文,太有逼格了
  4. .NET软件工程师面试总结
  5. [转]ionic Accordion list three levels
  6. codeforces round367 div2.C (DP)
  7. Java-->用递归方法复制目录、子目录以及文件(文件用到IO流)
  8. 相对定位、绝对定位在IE6的问题
  9. 根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期
  10. CentOS7 安装Bind
  11. C#深复制与浅复制
  12. ap143 led修改
  13. 深入浅出Diffie–Hellman
  14. ASP.NET Core MVC 2.1 顶级参数验证
  15. document.wrtie()用法
  16. Spring Cloud 和 Dubbo 比较
  17. CCF CSP 201604-1 折点计数
  18. react .net core 发布 Access-Control-Allow-Origin Cors
  19. admin-6
  20. 深度学习原理与框架- tf.nn.atrous_conv2d(空洞卷积) 问题:空洞卷积增加了卷积核的维度,为什么不直接使用7*7呢

热门文章

  1. Python request 简单使用
  2. CentOS7安装Jenkins Master
  3. HDU 4729 An Easy Problem for Elfness(主席树)(2013 ACM/ICPC Asia Regional Chengdu Online)
  4. LTE QOS
  5. TLS协议分析
  6. ob_flush()和flush()的区别
  7. SQL Server “超过了锁请求超时时段”错误
  8. 【python】python 中的三元表达式(三目运算符)
  9. filebeat + logstash + elasticsearch + granfa
  10. 从Oracle到Elasticsearch