IPsec VPN协议框架

IPsec是IETF(Internet Engineering Task Force)制定的一组开放的网络安全协议。它并不是一个单独的协议,而是一系列为IP网络提供安全性的协议和服务的集合,包括认证头AH(Authentication Header)和封装安全载荷ESP(Encapsulating Security Payload)两个安全协议、密钥交换和用于验证及加密的一些算法等。

IPsec框架如下所示:

通过这些协议,在两个设备之间建立一条IPSec隧道。数据通过IPSec隧道进行转发,实现保护数据的安全性。从以下几个方面保障了用户业务数据在Internet中的安全传输:

数据真实性:接收方验证发送方身份是否合法。

数据机密性:发送方对数据进行加密,以密文的形式在Internet上传送,接收方对接收的加密数据进行解密后处理或直接转发。

数据完整性:接收方对接收的数据进行验证,以判定报文是否被篡改。

防重放:接收方拒绝旧的或重复的数据包,防止恶意用户通过重复发送捕获到的数据包所进行的攻击。

一、安全协议

IPSec使用认证头AH和封装安全载荷ESP两种安全协议来传输和封装数据,提供认证或加密等安全服务。

AH是报文头验证协议,主要提供的功能有数据源验证、数据完整性校验和防报文重放功能;然而,AH并不加密所保护的数据报文。AH协议对数据包以及认证密钥进行HASH计算,接收方接收带有计算结果的数据包后采用同样的HASH对原有数据进行计算,比较前后HASH结果,若一致则保证了数据来源认证和完整性校验,AH协议的数据完整性校验范围为整个IP报文。

ESP协议是封装安全载荷协议,主要提供的功能有加密、数据源验证、数据完整性校验和防报文重放功能。与AH不同的是,ESP协议将数据中有效载荷进行加密后再封装到数据包中,以保证数据机密性,但ESP没有对IP报文头内容进行保护,除非采用了隧道模式。

安全特性

AHESP

协议号

51

50

数据完整性校验

支持(验证整个IP报文)

支持(传输模式不验证IP头,隧道模式验证整个IP报文)

数据源验证

支持

支持

数据加密

不支持

支持

防报文重放攻击

支持

支持

IPSec NAT-T(NAT穿越)

不支持

支持

二、封装模式

1、传输模式

在传输模式下,AH头或ESP头被插入到IP头与传输层协议头之间,保护TCP/UDP/ICMP负载。由于传输模式未添加额外的IP头,所以原始报文中的IP地址在加密后报文的IP头中可见。

传输模式不改变报文头,故隧道的源和目的地址必须与IP报文头中的源和目的地址一致,所以只适合两台主机或一台主机和一台VPN网关之间通信。

2、隧道模式

隧道模式下,AH头或ESP头被插到原始IP头之前,另外生成一个新的报文头放到AH头或ESP头之前,保护IP头和负载。

隧道模式隐藏了原始IP报文头,采用了新的报文头,新报文头中的源地址、目的地址为隧道两端的公网IP地址,所以适用于两台VPN网关之间或一台主机与一台VPN网关之间的通信。

在隧道模式下,AH协议的完整性验证范围为包括新增IP头在内的整个IP报文。ESP协议验证报文的完整性检查部分包括ESP头、原IP头、传输层协议头、数据和ESP报尾但不包括新IP头,因此ESP协议无法保证新IP头的安全。ESP的加密部分包括原IP头传输层协议头、数据和ESP报尾。

3、传输模式和隧道模式比较

在安全性方面,隧道模式优于传输模式,隧道模式可以完全对原始IP数据包进行验证和加密,隧道模式可以隐藏内部IP地址以及协议类型端口等;

在性能方面,隧道模式由于有一个额外的报文头部,因此比传输模式要占用更多带宽;

在应用场景方面,传输模式主要用于两台主机或一台主机和一台VPN网关之间通信,隧道模式主要用于两台VPN网关之间或一台主机与一台VPN网关之间的通信。

三、加密和验证算法

IPsec为了保证数据传输的安全性,对数据进行了加密以及验证,加密可以保证数据的机密性,防止被窃取,验证可以保证数据的真实性,防止数据被篡改或仿冒。

1、加密

发送方采用加密算法和加密密钥对原始数据进行加密封装,接收方收到报文,使用相同的加密算法和加密密钥将报文逆向恢复,即解密。

对称密钥可以手工配置或者通过DH密钥交换算法生成,并在两端设备共享。

IPsec使用ESP协议对IP报文内容进行加密,主要包括DES、3DES、AES、SM4,其中DES、3DES安全性低,存在安全风险,不推荐使用。

对比项DES3DESAESSM4
密钥长度56位168位128、192、256位128位
安全级别

2、验证

IPsec通过HMAC功能,通过比较ICV验证数据包完整性和真实性。加密与验证通常是配合使用。

发送方将加密后的报文通过验证算法和对称密钥生成ICV,IP报文和ICV一起发给接收方,接收方将两者分离,通过一样的验证算法和对称密钥对加密报文进行处理,同样得到ICV,对比两个ICV是否相符,若相符则验证通过,否则丢弃。

验证的对称加密密钥可以手动配置,也可以通过DH算法生成并在两端设备共享。

常用的验证算法有MD5、SHA、SM3,其中MD5、SHA1安全性低,存在安全风险,不推荐使用。

对比项MD5SHA1SHA2SM3
签名长度128位160位

SHA2-256:256位

SHA2-384:384位

SHA2-512:512位

256位
安全级别

四、密钥交换

1、密钥交换方式

1.1、带外共享密钥

在IPsec两方手工配置静态的加密和验证密钥,双方通过带外共享方式(例如电话邮件方式)保证密钥的一致性,缺点是安全性低、可扩展性差,在点到多点组网中工作量大,为了提升网络安全性,还需周期更换密钥,工作量更复杂。

1.2、使用一个安全的连接分发密钥

通过IKE协议自动协商密钥。IKE采用DH算法在不安全的网络上安全地分发密钥。这种方式配置简单,可扩展性好,特别是在大型动态的网络环境下此优点更加突出。同时,通信双方通过交换密钥交换材料来计算共享的密钥,即使第三方截获了双方用于计算密钥的所有交换数据,也无法计算出真正的密钥。

2、IKE协议

IKE协议建立在ISAKMP(Internet Security Association and Key Management Protocol)定义框架上,是基于UDP的应用层协议。它为IPSec提供了自动协商密钥、建立IPSec安全联盟的服务,能够简化IPSec的使用和管理,大大简化IPSec的配置和维护工作。

IKE协议最厉害的地方莫过于其永远不会在不安全的网络上传送密钥,而是通过交换数据,双方再计算出共享密钥,核心计算是DH交换技术,即使被截获了交换数据也无法计算出来真正的密钥。

3、DH密钥交换

DH算法用于产生密钥材料,通信双方交换密钥材料,各自计算出完全相同的对称密钥,用于加密和验证,任何时候,不交换真正的密钥。

DH算法是用于密钥交换,而不是对IP报文加密解密。


参考资料:防火墙和VPN技术与实践——李学昭

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/434241.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode刷题---填充每个节点的下一个右侧节点指针

官方题解:LeetCode官方题解 解题思想: 因为是一棵满二叉树,所以除了叶子节点外的其他节点都有两个子节点。 可以根据每一层来依次遍历 从根节点开始,根节点的左子节点的next节点就指向根节点的右子节点 因为根节点的next节点为NULL,开始从根…

C语言结构体的大小,结构体内存对齐

1. 结构体的大小 在自己正真了解过之前&#xff0c;一直认为结构体的大小就是结构体内部成员大小的总和。 但当你去尝试打印结构体的大小时&#xff0c;会发现事实并非如此&#xff0c;也不会像你想的那样简单。 #include <stdio.h>struct S1 {char c1;char c2;int i;…

腾讯云服务器99元一年购买入口链接

腾讯云服务器99元一年购买入口链接如下&#xff0c;现在已经降价到61元一年&#xff0c;官方活动链接如下&#xff1a; 腾讯云99元服务器一年购买页面腾讯云活动汇聚了腾讯云最新的促销打折、优惠折扣等信息&#xff0c;你在这里可以找到云服务器、域名、数据库、小程序等等多种…

springcloud:3.5测试慢调用熔断降级

服务提供者【test-provider8001】 Openfeign远程调用服务提供者搭建 文章地址http://t.csdnimg.cn/06iz8 相关接口 测试远程调用&#xff1a;http://localhost:8001/payment/index 服务消费者【test-consumer-resilience4j8004】 Openfeign远程调用消费者搭建 文章地址http://t…

Python 系统学习总结(基础语法+函数+数据容器+文件+异常+包+面向对象)

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 数字图像处理 力扣每日一题_ 六天时间系统学习Python基础总结&#xff0c;目前不包括可视化部分&#xff0c;其他部分基本齐全&#xff0c;总结记录&#xff0…

使用数据库实现增删改查

#include<myhead.h>//定义添加数据函数int do_add(sqlite3 *ppDb) {//1.准备sql语句,输入要添加的信息int add_numb; //工号char add_name[20]; //姓名char add_sex[10]; //性别double add_score; //工资printf("请输入要添加的工号:")…

Android开发经典实战,Android面试题目

关于Android的近况 大家都知道&#xff0c;今年移动开发不那么火热了&#xff0c;完全没有了前两年Android开发那种火热的势头&#xff0c;如此同时&#xff0c;AI热火朝天&#xff0c;很多言论都说Android不行了。其实不光是Android&#xff0c;iOS也有类似的言论。 那么到底…

[项目设计] 从零实现的高并发内存池(四)

&#x1f308; 博客个人主页&#xff1a;Chris在Coding &#x1f3a5; 本文所属专栏&#xff1a;[高并发内存池] ❤️ 前置学习专栏&#xff1a;[Linux学习] ⏰ 我们仍在旅途 ​ 目录 6.内存回收 6.1 ThreadCache回收内存 6.2 CentralCache回收内存 Rele…

STM32CubeMX学习笔记11 ---RTC实时时钟

1、RTC实时时钟简介 STM32的实时时钟RTC是一个独立的定时器&#xff0c;RTC模块拥有一组连续计数的计数器&#xff0c;在相应软件配置下&#xff0c;可提供时钟日历的功能&#xff0c;修改计数器的值可以重新设置系统当前的时间和日期 RTC模块和时钟配置系统&#xff08;RCC_B…

100 spring-security 中 /oauth/token 发送请求不携带参数 报错 “401 Unauthorized“

前言 最近存在这样的一个问题, 大致的复现方式是 访问 /oauth/token 接口, 然后不携带任何参数, 结果 服务器抛出了一个 "401 Unauthorized" 针对这个 401, 这里 梳理一下这个流程, 也会衍生出一些其他的问题 测试用例 客户端这边大致的情况是 构造参数, 然后发…

Linux 之三:CentOS7 目录结构 和 日期及时区设置

Linux 目录 以下是对这些目录的解释&#xff1a; /bin&#xff1a;bin是Binary的缩写, 这个目录存放着最经常使用的命令。/boot&#xff1a; 这里存放的是启动Linux时使用的一些核心文件&#xff0c;包括一些连接文件以及镜像文件。/dev &#xff1a; dev是Device(设备)的缩写…

[Java安全入门]二.序列化与反序列化

一.概念 Serialization&#xff08;序列化&#xff09;是一种将对象以一连串的字节描述的过程&#xff1b;反序列化deserialization是一种将这些字节重建成一个对象的过程。将程序中的对象&#xff0c;放入文件中保存就是序列化&#xff0c;将文件中的字节码重新转成对象就是反…

【广度优先搜索】【堆】【C++算法】407. 接雨水 II

作者推荐 【二分查找】【C算法】378. 有序矩阵中第 K 小的元素 本文涉及知识点 广度优先搜索 堆 LeetCoce407. 接雨水 II 给你一个 m x n 的矩阵&#xff0c;其中的值均为非负整数&#xff0c;代表二维高度图每个单元的高度&#xff0c;请计算图中形状最多能接多少体积的雨…

【C语言】还有柔性数组?

前言 也许你从来没有听说过柔性数组&#xff08;flexible array&#xff09;这个概念&#xff0c;但是它确实是存在的。C99中&#xff0c;结构中的最后⼀个元素允许是未知⼤⼩的数组&#xff0c;这就叫做『柔性数组』成员。 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xf…

二级水平导航菜单栏的实现

1. 这个是本人设计的一带一路的二级水平导航栏HTML代码&#xff1b; 这里最后实现的效果是鼠标悬停在导航栏上面&#xff0c;就会显示下面的4个部分页面&#xff0c;这里只是以评论热 点作为例子&#xff0c;其他的类似&#xff1b; 2.首先要设计DIV&#xff0c;然后利用无…

GO语言环境安装---VScode.2024

目录 一、下载并安装GO 二、配置环境变量 三、VScode环境安装 由于工作原因&#xff0c;需要用到go来写web后端&#xff0c;正好从零记录下环境安装 一、下载并安装GO 首先在官网根据PC系统选择对应的包下载 源地址&#xff1a;https://go.dev/dl/ 打不开的用这个也行&a…

论文阅读:Dataset Quantization

摘要 最先进的深度神经网络使用大量&#xff08;百万甚至数十亿&#xff09;数据进行训练。昂贵的计算和内存成本使得在有限的硬件资源上训练它们变得困难&#xff0c;特别是对于最近流行的大型语言模型 (LLM) 和计算机视觉模型 (CV)。因此最近流行的数据集蒸馏方法得到发展&a…

第三天 Kubernetes进阶实践

第三天 Kubernetes进阶实践 本章介绍Kubernetes的进阶内容&#xff0c;包含Kubernetes集群调度、CNI插件、认证授权安全体系、分布式存储的对接、Helm的使用等&#xff0c;让学员可以更加深入的学习Kubernetes的核心内容。 ETCD数据的访问 kube-scheduler调度策略实践 预选与…

Python内置模块

目录 什么是模块 模块分类 通过模块创建者分类 系统内置模块 第三方模块 在线安装 离线安装 模块导入 math和random模块介绍 math模块 random模块 什么是模块 在我们编写程序时&#xff0c;需要导入包。例如随机数的产生&#xff0c;需要import random。import XXX&…

【MATLAB】兔子机器人总系统_动力学模型解读(及simulink中的simscape的各模块介绍)

1、动力学模型 Rectangular Joint 控制平面上&#xff08;x&#xff0c;y轴&#xff09;的移动&#xff0c;去掉以后&#xff0c;机器人在原地翻滚不移动 Rigid Transform 坐标转换&#xff0c;B站视频已收藏 去掉&#xff0c;机体与地面贴合 此处的作用是设定机体的初…