IPSec传输模式/隧道模式下ESP报文的装包与拆包过程
IPSec协议:IPsec将IP数据包的内容先加密再传输,即便中途被截获,由于缺乏解密数据包所必要的密钥,攻击者也无法获取里面的内容。
传输模式和隧道模式:IPsec对数据进行加密的方式有两种:传输模式和隧道模式。传输模式只是对IP协议的数据部分(payload)进行了加密,而隧道模式则是对整个IP数据包进行加密,就好像整个IP数据包在一个安全的隧道里传输一样
ESP:Encapsulating Security Payloads,封装安全载荷协议,IPsec所支持的两类协议中的一种。该协议能够在数据的传输过程中对数据进行完整性度量,来源认证以及加密,也可以防止回放攻击。另一种协议是AH(Authentication Headers)认证头协议
SA:SecurityAssociations,安全关联。SA是IPsec的重要概念,可以理解为被IPsec保护的某个连接的唯一标示。SA是单向的,即在一次安全的通信中,通信的两个方向(发送和接收)各需要创建一个SA。一个SA会包含很多的信息,而所有的SA都被存放在一个数据库中,称为SAD。
SD: Security Associations Database,安全关联数据库。每一个SA在SAD中都会有一个与之对应的条目 。一个SAD条目包含的内容有:顺序号计数器,顺序号溢出计数器,防回放窗口,SA有效期,AH协议中所使用的算法以及密钥,ESP协议用于认证以及完整性度量的算法,ESP协议用于加密数据的算法以及密钥,IPsec运行的模式以及两个通信设备间的传送数据包大小的最大上限。
通常一个SA可以由目的地址,IPsec所采用的协议(AH或ESP)和SPI来唯一确定。
SPI: Security Parameter Index,安全参数索引。用于将收到的IPsec数据包与其对应的SA 进行关联。
IPsec AH和ESP协议下报文封装后的结构:(注意:省略了mac部分)
IPsec ESP报文(传输模式)
装包过程:
1、在原IP报⽂文(包含IP、IP Datagram三部分)的末尾添加尾部(ESP Trailer)信息,
! 尾部包含三部分。由所选加密算法可能是块加密,那 么当最后⼀一块⻓长度不够时就需要进⾏行填充(padding),附上填充⻓长 度(Pad length)⽅方便解包时顺利找出⽤用来填充的那⼀一段数据。⽽而Next header则⽤用来标明被加密的数据报⽂文的类型,例如TCP
2、将IP Datagram部分以及第1步得到的ESP Trailer作为整体进⾏行加密,具体的加密算法与密钥由SA给出。
3、在第2步得到的加密数据添加ESP Header。ESP Header由两部分组成:SPI和 序号(Sequence number)。ESP Header位于IP之后。
4、将ESP Header和第2步得到的加密数据做⼀一个摘要,得到⼀一个完整性度量值(ESPMessage Authentication Code),并添加到ESP报⽂文的尾部。这样就得到了⼀一个完整的ESP数据报⽂文。
拆包过程:
1、接收⽅方收到数据报⽂文后,对除IP和ESP Message Authentication Code的部分计算摘要与ESP MAC进⾏行⽐比较,验证数据的完整性。假如⽐比对不同,可以断定所收到的报⽂文已经经过篡改了。
2、查看ESP Header,通过⾥里⾯面的SPI得到数据报⽂文所对应的SA;检查序列号,保证数据不是回放攻击。
3、根据SA所提供的加密算法与密钥,解密被加密算法加密过的部分(IP Datagram、ESPTrailer)。
4、根据ESP Trailer⾥里的填充⻓长度信息,可以找出填充字段的字段,删去后就能得到完整地IP Datagram
IPsec ESP报文(隧道模式)
装包过程:
1. 在原IP报文末尾添加尾部(ESP trailer)信息。如上图所示,尾部包含三部分。由所选加密算法可能是块加密,那么当最后一块长度不够时就需要进行填充(padding),附上填充长度(Pad length)方便解包时顺利找出用来填充的那一段数据。而Next header则用来标明被加密的数据报文的类型,例如TCP。
2. 将原IP报文以及第1步得到的ESP尾部作为一个整体进行加密。具体的加密算法与密钥由SA给出。
3. 为第2步得到的加密数据添加ESP头部。如上图所示,ESP头由两部分组成,SPI和序号(Sequence number)。加密数据与ESP头合称为“enchilada”。
4. 附加完整性度量结果(ICV,Integrity check value)。对第三步得到的“enchilada”做摘要,得到一个完整性度量值,并附在ESP报文
的尾部。
5. 加上新的IP头。新构造的IP头附在ESP报文的前面组成一个新的IP报文。注意这个新的IP头的目的地址跟源地址可以不一样。协议类型为50,说明它里面装的是一个IPsec报文。
拆包过程:
1. 接收方收到数据报文后,发现协议类型是50,故知道这是一个IPsec包。首先查看ESP头,通过里面的SPI决定数据报文所对应的SA。
2. 计算“enchilada”部分的摘要,与附在末尾的ICV做对比,如果一样的话说明数据是完整的。否则可以断定所收到的报文已经不是原来的报文了。
3.检查Seq里的顺序号,保证数据是“新鲜”的。
4.根据SA所提供的加密算法和密钥,解密被加密过的数据,即“enchilada”。得到原IP报文与ESP尾部(trailer)。
5. 根据ESP尾部里的填充长度信息,我们可以找出填充字段的长度,删去后就得到原来的IP报文。
6. 最后根据得到的原IP包的目的地址来进行转发。
IPSec传输模式/隧道模式下ESP报文的装包与拆包过程的更多相关文章
- IPSec 传输模式下ESP报文的装包与拆包过程 - 择日而终的博客
一.IPsec简介 IPSec ( IP Security )是IETF(Internet Engineering Task Force,Internet工程任务组)的IPSec小组建立的一组IP安全 ...
- IPsec传输模式下ESP报文的装包和拆包过程
原创文章,拒绝转载 装包过程 总体流程图 过程描述 在原IP报文中找到TCP报文部分,在其后添加相应的ESP trailer信息. ESP trailer 包含三部分:Padding,Pad leng ...
- IPSec传输模式下的ESP报文的装包和拆包过程
IPSec协议定义 IPsec将IP数据包的内容在装包过程在网络层先加密再传输,即便中途被截获,由于缺乏解密数据包所必要的密钥,攻击者也无法获取里面的内容. IPsec 对数据进行加密的方式 加密模式 ...
- UEFI+GPT模式下的Windows系统中分区结构和默认分区大小及硬盘整数分区研究
内容摘要:本文主要讨论和分析在UEFI+GPT模式下的Windows系统(主要是最新的Win10X64)中默认的分区结构和默认的分区大小,硬盘整数分区.4K对齐.起始扇区.恢复分区.ESP分区.MSR ...
- CORDIC算法(1):圆周旋转模式下计算三角函数和模值
CORDIC(Coordinate Rotation Digital Computer)坐标旋转数字计算机,是数学与计算机技术交叉产生的一种机器算法,用于解决计算机的数学计算问题.发展到现在,CORD ...
- Dalvik模式下基于Android运行时类加载的函数dexFindClass脱壳
本文博客地址:http://blog.csdn.net/qq1084283172/article/details/78003184 前段时间在看雪论坛发现了<发现一个安卓万能脱壳方法>这篇 ...
- C++程序在debug模式下遇到Run-Time Check Failure #0 - The value of ESP was not properly saved across a function call问题。
今天遇到一个Access Violation的crash,只看crash call stack没有找到更多的线索,于是在debug模式下又跑了一遍,遇到了如下的一个debug的错误提示框: 这个是什么 ...
- [置顶] lvs-tun隧道模式搭建
一.lvs直接路由原理 由于图片还要一张一张上传,可以到下面网站下载我的word版本: http://download.csdn.net/user/y0908105023 补充基础知识: OSI(Op ...
- LVS负载均衡IP隧道模式原理介绍以及配置实战
LVS 基本工作原理 当用户向负载均衡调度器(Director Server)发起请求,调度器将请求发往至内核空间 PREROUTING 链首先会接收到用户请求,判断目标 IP 确定是本机 IP,将数 ...
随机推荐
- 【django-simpleui】‘simpletags‘ is not a registered tag library报错的解决方法
1:创建 templatetags文件夹 2:创建simpletags.py文件将内容粘贴进去,在下面 3:setting.py添加文件指定: 1 TEMPLATES = [ 2 { 3 'BACK ...
- NB-IOT的应用场景有哪些
虽然抄表.停车.井盖监测等应用是最为常见的示范,但若低功耗广域网络仅限于这几个领域,则整个产业的规模就显得太小了.实际上,经过近两年的探索,目前示范应用的数量已有数十个,分布在各行各业,带来了大量的机 ...
- EBAZ4205学习资源整理
EBAZ4205是一块矿机的控制板,芯片是ZYNQ7010,某鱼上应该不超过30元就能买一块,垃圾佬狂喜 经过不复杂的操作就能进行正常开发,由于货量比较大现在已经有很多大佬写了很多很多好的资料,这里我 ...
- 840. Magic Squares In Grid ——weekly contest 86
题目链接:https://leetcode.com/problems/magic-squares-in-grid/description attention:注意给定的数字不一定是1-9. time: ...
- 【QT】QThread源码浅析
本章会挑出QThread源码中部分重点代码来说明QThread启动到结束的过程是怎么调度的.其次因为到了Qt4.4版本,Qt的多线程就有所变化,所以本章会以Qt4.0.1和Qt5.6.2版本的源码来进 ...
- 【Kata Daily 190912】Alphabetical Addition(字母相加)
题目: Your task is to add up letters to one letter. The function will be given a variable amount of ar ...
- 使用 c++ 模板显示实例化解决模板函数声明与实现分离的问题
问题背景 开始正文之前,做一些背景铺垫,方便读者了解我的工程需求.我的项目是一个客户端消息分发中心,在连接上消息后台后,后台会不定时的给我推送一些消息,我再将它们转发给本机的其它桌面产品去做显示.后台 ...
- element UI table show-overflow-tooltip属性更改背景色和字体颜色
.el-tooltip__popper { width: 80%;/*修改宽度*/ background: #000 !important;/*背景色 !important优先级*/ opacity ...
- Pytest学习(七) - skip、skipif的使用
前言 作为一个java党,我还是觉得pytest和testng很像,有时候真的会感觉到代码语言在某种程度上是相通的,那么今天来说说这两个知识点. skip和skipif,见名知意,就是跳过测试呗,直白 ...
- ubuntu下minicom安装和简单设置使用
minicom是一个串口通信工具. Ubuntu下的安装: 打开终端 sudo apt-get install minicom即可完成安装. 简单设置使用: 安装完成后第一次启动时运行 sudo mi ...