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地址进行转发或者传入上一层
IPSec传输模式下的ESP报文的装包和拆包过程的更多相关文章
- IPSec 传输模式下ESP报文的装包与拆包过程 - 择日而终的博客
一.IPsec简介 IPSec ( IP Security )是IETF(Internet Engineering Task Force,Internet工程任务组)的IPSec小组建立的一组IP安全 ...
- IPSec传输模式/隧道模式下ESP报文的装包与拆包过程
IPSec协议:IPsec将IP数据包的内容先加密再传输,即便中途被截获,由于缺乏解密数据包所必要的密钥,攻击者也无法获取里面的内容. 传输模式和隧道模式:IPsec对数据进行加密的方式有两种:传输模 ...
- IPsec传输模式下ESP报文的装包和拆包过程
原创文章,拒绝转载 装包过程 总体流程图 过程描述 在原IP报文中找到TCP报文部分,在其后添加相应的ESP trailer信息. ESP trailer 包含三部分:Padding,Pad leng ...
- Windows下安装mysql(非安装包)
Windows下安装mysql(非安装包) 参考:https://www.cnblogs.com/yunlongaimeng/p/12558638.html 1.下载MYSQL(慢的话可以用迅雷,或其 ...
- 绝对干货:自定义msi安装包的执行过程
有时候我们需要在程序中执行另一个程序的安装,这就需要我们去自定义msi安装包的执行过程. 比如我要做一个安装管理程序,可以根据用户的选择安装不同的子产品.当用户选择了三个产品时,如果分别显示这三个产品 ...
- 自定义msi安装包的执行过程
有时候我们需要在程序中执行另一个程序的安装,这就需要我们去自定义msi安装包的执行过程. 比如我要做一个安装管理程序,可以根据用户的选择安装不同的子产品.当用户选择了三个产品时,如果分别显示这三个产品 ...
- Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程
Ubuntu 14.04 LTS 下 android 2.3.5 源码编译过程 在新的Ubuntu 64位系统下去编译早期的安卓源码是会出现很多问题的,因为64位系统在安装完成后,很多32位的兼容 ...
- 在linux下用tomcat部署java web项目的过程与注意事项
在linux下用tomcat部署java web项目的过程与注意事项 一.安装JDK 到http://www.oracle.com/technetwork/java/javase/downloads/ ...
- 详解Linux下swig 3.0.12的手动安装过程
详解Linux下swig 3.0.12的手动安装过程 首先 从http://www.linuxfromscratch.org/blfs/view/cvs/general/swig.html上下载swi ...
随机推荐
- P1469 找筷子
摘要:有n根(n为奇数)长短不一的筷子,里面可以凑成(n-1)/2双筷子,只剩下一根不能凑对,问那根不能凑对的筷子有多长. 乍听起来好像不难,桶是一个好东西,可是一看数据:对于100%的数据,N< ...
- vue 表格使用el-select
<el-table-column label="示例" width="210" align="center"> <temp ...
- 程序员为什么要使用Markdown
为什么要学习markdown? 一个让你难以拒绝的理由:markdown可以让你养成了记录的习惯. 我自从使用了markdown之后,就喜欢了写文档,记录工作日志,记录周会,记录季度计划,记录学习目标 ...
- css : 使用浮动实现左右各放一个元素时很容易犯的错误
比如说,有一个div,我想在左侧和右侧各方一个元素. 如果不想用flex,那就只能用浮动了. ... <div class="up clearfix"> <h6& ...
- Shell基本语法---处理海量数据的sed命令
sed命令 shell脚本三剑客之一 处理时,把当前处理的行存储在临时缓冲区中,称为模式空间,接着用sed命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕.接着处理下一行,这样不断重复,直到 ...
- odoo12数据库自动化备份
数据库自动备份模块地址 https://github.com/Yenthe666/auto_backup#8.0 目前支持8以上的版本 odoo12的配置步骤 1.下载模块到自己的模块目录 2.登录o ...
- 阿里云的maven仓库
自从开源中国的maven仓库挂了之后就一直在用国外的仓库,慢得想要砸电脑的心都有了.如果你和我一样受够了国外maven仓库的龟速下载?快试试阿里云提供的maven仓库,从此不在浪费生命…… 仓库地址: ...
- Linux内存参数
用free -m查看的结果:# free -m total used free shared buffers cachedMem: 50 ...
- Cobbler 部署
环境介绍 Cobbler 操作系统: Centos-7.2-x86_64 Cobbler服务器地址: 10.90.0.10 部署 Cobbler 安装 Centos epel 原 [root@node ...
- 02_HTML02
学于黑马和传智播客联合做的教学项目 感谢 黑马官网 传智播客官网 微信搜索"艺术行者",关注并回复关键词"软件测试"获取视频和教程资料! b站在线视频 HTML ...