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 ...
随机推荐
- Python Ethical Hacking - WEB PENETRATION TESTING(3)
CRAWLING SUMMARY Our crawler so far can guess: Subdomains. Directories. Files. Advantages: ->Disc ...
- C++ 线性筛素数
今天要写一篇亲民的博客了,尽力帮助一下那些不会线性筛素数或者突然忘记线性筛素数的大佬. 众所周知,一个素数的倍数肯定不是素数(废话).所以我们可以找到一个方法,普通的筛法(其实不算筛,普通的是判断一个 ...
- 计算思维(Computational Thinking)在少儿编程中的体现
本文主要针对少儿编程从业人员及正在学习编程的学生家长 大家好,我是C大叔,国内早期的少儿编程从业人员.一直以来都是在做scratch,JavaScript,python以及信息学奥赛C++的讲师,教研 ...
- python怎么自学?今日头条技术大佬的真实经历分享
大家好,我是武州,27岁,目前在字节跳动担任Python后端工程师一职. (摆拍一下,假装是保安) 在开始今天的文章之前,不知道你们有没有遇到过这样的问题: 大学没学到什么实质技术,毕业后找不到高薪的 ...
- JAVA集合二:HashMap和Hashtable
参考链接: HOW2J.CN HashMap HashMap实现了JAVA的Map接口,类似于C++的STL框架的Map,是存储键值对的数据结构.键(key)是唯一的,但值(value)可以重复,如果 ...
- Module not found: Error: Can't resolve './style':配置 extensions 的坑
ERROR in ./src/index.js Module not found: Error: Can't resolve './style' in 'D:\gitcode\github\learn ...
- vue+springboot文件下载
//vue element-ui <el-button size="medium" type="primary" @click="downloa ...
- vue学习(十三) 删除对象数组中的某个元素
//html <div id="app"> //v-for循环就不写了 每一条数据最后都有一个删除的超链 .prevent阻止默认的跳转行为 只执行点击事件 <a ...
- java 控制语句、数组、方法
一.控制语句 1.if 语句 if语句是指如果满足某种条件,就进行某种处理. 流程图: 2. if…else语句 语法格式: if (判断条件){ 执行语句1 …… }else{ 执行语句2 …… } ...
- ionic 侧边栏实例
侧边栏的使用范例: <body > <ion-side-menus> <!-- 中间内容 --> <ion-side-menu-content ng-cont ...