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 ...
随机推荐
- Git、Github、Gitkraken 学习笔记
<Git.Github.Gitkraken 学习笔记> 一.写在前面 1.参考资料 本文参考 <Pro Git> 一书. 在官网有免费在线版可供阅读:https://git-s ...
- noi-vim配置
colorscheme ron set t_Co=256 set mouse=a set ts=4 set sw=4 set nu set ru set ai set ci set cin set l ...
- 题解 洛谷 P2179 【[NOI2012]骑行川藏】
题意为在满足\(\sum\limits_{i=1}^nk_i(v_i-v_i^\prime)^2s_i\leqslant E_U\)的条件下最小化\(\sum\limits_{i=1}^n\frac{ ...
- Spring Boot使用AOP的正确姿势
一.为什么需要面向切面编程? 面向对象编程(OOP)的好处是显而易见的,缺点也同样明显.当需要为多个不具有继承关系的对象添加一个公共的方法的时候,例如日志记录.性能监控等,如果采用面向对象编程的方法, ...
- for循环实现Fibonacci数列
Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n. 输出格 ...
- Google免费新书-《构建安全&可靠的系统》
前段时间riusksk在公众号分享的Google安全团队的新书,好书,全英原版,开源免费. 免费下载地址:https://static.googleusercontent.com/media/land ...
- Java 添加、删除、替换、格式化Word中的文本(基于Spire.Cloud.SDK for Java)
Spire.Cloud.SDK for Java提供了TextRangesApi接口可通过addTextRange()添加文本.deleteTextRange()删除文本.updateTextRang ...
- vj map
/* * 换行好烦人呀! */ #include <iostream> #include <map> #include <string> using namespa ...
- Django学习路3
1.打开 Data Source alt insert 打开 Data Source 找到 db.sqlite3 确定 Download 下载后 TestConnection 测试是否成功 2.项目下 ...
- PHP tanh() 函数
实例 返回不同数的双曲正切: <?php高佣联盟 www.cgewang.comecho(tanh(M_PI_4) . "<br>");echo(tanh(0.5 ...