IPSec 传输模式下ESP报文的装包与拆包过程 - 择日而终的博客
一、IPsec简介
IPSec ( IP Security )是IETF(Internet Engineering Task Force,Internet工程任务组)的IPSec小组建立的一组IP安全协议集。IPSec定义了在网络层使用的安全服务,其功能包括数据加密、对网络单元的访问控制、数据源地址验证、数据完整性检查和防止重放攻击。
IPSec是安全联网的长期方向。它通过端对端的安全性来提供主动的保护以防止专用网络与 Internet 的攻击。在通信中,只有发送方和接收方才是唯一必须了解 IPSec 保护的计算机。在 Windows XP 和 Windows Server 2003 家族中,IPSec 提供了一种能力,以保护工作组、局域网计算机、域客户端和服务器、分支机构(物理上为远程机构)、Extranet 以及漫游客户端之间的通信。
二、ESP简介
IPsec 封装安全负载(IPsec ESP)是 IPsec 体系结构中的一种主要协议,其主要设计来在 IPv4 和 IPv6 中提供安全服务的混合应用。IPsec ESP 通过加密需要保护的数据以及在 IPsec ESP 的数据部分放置这些加密的数据来提供机密性和完整性。且ESP加密采用的是对称密钥加密算法,能够提供无连接的数据完整性验证、数据来源验证和抗重放攻击服务。根据用户安全要求,这个机制既可以用于加密一个传输层的段(如:TCP、UDP、ICMP、IGMP),也可以用于加密一整个的 IP 数据报。封装受保护数据是非常必要的,这样就可以为整个原始数据报提供机密性。ESP提供机密性、数据起源验证、无连接的完整性、抗重播服务和有限业务流机密性。该协议能够在数据的传输过程中对数据进行完整性度量,来源认证以及加密,也可以防止回放攻击。
传输模式是IPSec工作的两种方式之一。与隧道模式不同的是,保护的仅仅是真正传输的数据,而不是整个IP报文。在处理的方法上,原来的IP报文会先被解开,再在数据前加上新的ESP或AH协议头,最后再装回原来的IP头中,即原来的IP包被修改过再传输了。
三、传输模式下ESP报文的装包与拆包过程
在传输模式下的IPSec ESP报文的结构图如下:
大专栏 IPSec 传输模式下ESP报文的装包与拆包过程 - 择日而终的博客/cloudgoinout/ipsec1.png" alt="这里写图片描述"/>
装包过程:
1.在原IP报文末尾添加尾部(ESP trailer)。尾部信息如图所示,包含三部分。由于所选加密算法可能是块加密,当最后一块长度不够时,需要进行补充(padding)。且需要附上填充长度(Pad length)来方便解包时顺利找出用来填充的那一段数据。而Next header则用来表明被加密的数据报文的类型。
2.将原数据报文和刚添加的ESP尾部信息作为一个整体进行加密,具体的加密算法由密钥和SA给出。
3.在第2步得到的加密数据前添加ESP Header。ESP Header由SPI和序号(Sequence number)两部分组成。加密数据与ESP头合称为”enchilada”。
4.附加完整性度量结果(ICV, Integrity check value)。对第三步得到的”enchilada”做摘要,得到一个完整性度量值,并附在ESP报文的尾部。
5.将原IP头放回到第4步后形成的报文的头部前,组织成一个新的IP报文。
拆包过程:
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报文的装包和拆包过程
原创文章,拒绝转载 装包过程 总体流程图 过程描述 在原IP报文中找到TCP报文部分,在其后添加相应的ESP trailer信息. ESP trailer 包含三部分:Padding,Pad leng ...
- IPSec传输模式/隧道模式下ESP报文的装包与拆包过程
IPSec协议:IPsec将IP数据包的内容先加密再传输,即便中途被截获,由于缺乏解密数据包所必要的密钥,攻击者也无法获取里面的内容. 传输模式和隧道模式:IPsec对数据进行加密的方式有两种:传输模 ...
- IPSec传输模式下的ESP报文的装包和拆包过程
IPSec协议定义 IPsec将IP数据包的内容在装包过程在网络层先加密再传输,即便中途被截获,由于缺乏解密数据包所必要的密钥,攻击者也无法获取里面的内容. IPsec 对数据进行加密的方式 加密模式 ...
- python 下划线的使用(转载:安生犹梦 新浪博客)
Python 用下划线作为变量前缀和后缀指定特殊变量. _xxx 不能用'from module import *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核 ...
- PHP----------linux下如何安装redis扩展。安装redis可以在我的博客redis里面寻找。
1.扩展下载地址:wget https://github.com/phpredis/phpredis/archive/develop.zip 2.下载完了以后解压压缩包 解压以后切换到 cd phpr ...
- Mac OS平台下应用程序安装包制作工具Packages的使用介绍
一.介绍 Windows下面开发好的应用程序要进行分发时有很多打包工具可供选择,如Inno Setup, InstallShield, NSIS, Advanced Installer, Qt Ins ...
- 【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安装包 ...
随机推荐
- python机器学习(1:K_means聚类算法)
一.算法介绍 K-means算法是最简单的也是最著名的划分聚类算法,由于简洁和效率使得他成为所有聚类算法中最广泛使用的.算法的目的是使各个样本与所在均值的误差平方和达到最小(这也是评价K-means算 ...
- linux(centos 7)安装及使用yum
yum介绍: Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器.基于RPM包管理,能够从指定的 ...
- 3)PHP基本语法和变量基础,区分大小写
(1)语法环境: PHP嵌入到html到代码中: . <?php 这里是PHP代码 ?> 标准形式: <script language='php'> 这里是PHP代码 < ...
- 函数(Python)
函数是什么? 计算机的函数,是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能的同时,还带有一个入口和一个出口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数 ...
- lambda concurrent List<Map> to Map
Object c = Stream.of( CompletableFuture.supplyAsync(() -> { Map m = new HashMap(); try { Thread.s ...
- http跳转http
server {listen 80;server_name 123.com;root /var/www/web/123;index index.html index.htm index.php;rew ...
- 替换String中的\r\n\t
String json = "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n " ...
- listening-conversation|信息简写|Generally|回答|矛盾
听力可以刷分,但是要求高.听力流程是听.笔记.读题和确定答案,不能回看.Conversation快速且不完整.素材内容主要是生命科学,社科(人类学:考古学),艺术,自然科学(地质). 难点分析: 词汇 ...
- vue实现动态绑定class--多个按钮点击一个有一个
<template> //v-for循环出来多个按钮,便于获取index <span v-for="(item,index) in list" : ...
- js使用心得——避免全局变量冲突的小技巧
在写js代码的时候,经常会因为这样或者那样的原因用到全局变量,如果全局变量只在一个js里使用,那就没问题,但如果变量在不同的js文件里出现,这时隐藏的问题就会开始暴露,也许你能很快修复出现的BUG,又 ...