IPsec传输模式下ESP报文的装包和拆包过程
原创文章,拒绝转载
装包过程
总体流程图

过程描述
- 在原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 报文头信息将报文交付给传输层。
IPsec传输模式下ESP报文的装包和拆包过程的更多相关文章
- IPSec 传输模式下ESP报文的装包与拆包过程 - 择日而终的博客
一.IPsec简介 IPSec ( IP Security )是IETF(Internet Engineering Task Force,Internet工程任务组)的IPSec小组建立的一组IP安全 ...
- IPSec传输模式/隧道模式下ESP报文的装包与拆包过程
IPSec协议:IPsec将IP数据包的内容先加密再传输,即便中途被截获,由于缺乏解密数据包所必要的密钥,攻击者也无法获取里面的内容. 传输模式和隧道模式:IPsec对数据进行加密的方式有两种:传输模 ...
- IPSec传输模式下的ESP报文的装包和拆包过程
IPSec协议定义 IPsec将IP数据包的内容在装包过程在网络层先加密再传输,即便中途被截获,由于缺乏解密数据包所必要的密钥,攻击者也无法获取里面的内容. IPsec 对数据进行加密的方式 加密模式 ...
- 【Xamarin挖墙脚系列:时刻下载最新的Mac环境下的Xamarin安装包】
原文:[Xamarin挖墙脚系列:时刻下载最新的Mac环境下的Xamarin安装包] 打开这两个地址,就能看到最新的安装包了.... http://www.jianshu.com/p/c67c14b3 ...
- Mac OS平台下应用程序安装包制作工具Packages的使用介绍(补充)
上一篇:Mac OS平台下应用程序安装包制作工具Packages的使用介绍 补充说明 上一篇文章中介绍了如何使用Packages如何创建mac下的安装包.但是这样制作出来的安装包只能安装到系统的文件路 ...
- Linux下Tomcat,mysql安装包及教程整合,
前段时间孔老师给了一个虚拟机,自己瞎捣鼓,装了Tomcat和mysql,捣鼓了好几天,把一些安装包和试过还不错的博客整理出来: 老师给的已经装好了Linux系统和JDK. Tomcat9安装包 ...
- 绝对干货:自定义msi安装包的执行过程
有时候我们需要在程序中执行另一个程序的安装,这就需要我们去自定义msi安装包的执行过程. 比如我要做一个安装管理程序,可以根据用户的选择安装不同的子产品.当用户选择了三个产品时,如果分别显示这三个产品 ...
- 自定义msi安装包的执行过程
有时候我们需要在程序中执行另一个程序的安装,这就需要我们去自定义msi安装包的执行过程. 比如我要做一个安装管理程序,可以根据用户的选择安装不同的子产品.当用户选择了三个产品时,如果分别显示这三个产品 ...
- python中的装包与拆包
python中的装包与拆包 *args和 **kwargs是在python的代码中经常用到的两个参数,初学者对这两个参数的理解可能仅仅限于*args是用于接收多余的未命名参数,**kwargs用于接收 ...
随机推荐
- 使用fiddler和jmeter进行简单的接口测试。
初学接口测试,以下内容是记录首次使用fiddler和jmeter进行接口测试的步骤,可能步骤有点繁琐,如果有不对的地方,欢迎大家指正. 准备活动: 1.打开fiddler,打开fiddler以后会自动 ...
- golang交叉编译笔记
GOOS:目标平台的操作系统(darwin.freebsd.linux.windows) GOARCH:目标平台的体系架构(386.amd64.arm) Mac 下编译 Linux 和 Windows ...
- tensorflow学习笔记(2)-反向传播
tensorflow学习笔记(2)-反向传播 反向传播是为了训练模型参数,在所有参数上使用梯度下降,让NN模型在的损失函数最小 损失函数:学过机器学习logistic回归都知道损失函数-就是预测值和真 ...
- BZOJ 4011 HNOI2015 落忆枫音 DAG上的dp(实际上重点在于分析)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=4011 题意概述:给出一张N点的DAG(从1可以到达所有的点),点1的入度为0.现在加一条原 ...
- ajax 异步刷新,需要填写的参数
参数 options 类型:Object 可选.AJAX 请求设置.所有选项都是可选的. ******* async 类型:Boolean 默认值: true.默认设置下,所有请求均为异步请求.如果需 ...
- 第十四次ScrumMeeting会议
第十三次Scrum Meeting 时间:2017/12/2 地点:咖啡馆 人员:策划组美工组 目前工作情况 名字 完成的工作 计划工作 蔡帜 科技树策划设计,科技图鉴蓝图设计 员工方面细节设定 游心 ...
- 物联网PPT智能家居王思齐和陈由钧第10组
ppt做完了但是不知道怎么用博客园发ppt!只能发几个图片了
- ps aux 和ps -aux和 ps -ef的选择
转载自:足至迹留 Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想 ...
- regex & form validation & phone
regex & form validation https://regexper.com/ https://gitlab.com/javallone/regexper-static https ...
- 批处理之FOR命令