当前位置: 首页 > news >正文

IPSec之数据封装协议

专为 IP 层通信设计的安全算法称为“IPSec”。它是一个协议套件,旨在提供通过 IP 网络(例如互联网)进行安全通信。它在 IP 层提供安全服务,使其能够保护所有基于 IP 的协议,包括 TCP、UDP 和 ICMP。

图片

IPSec 组件

IPSec 由三个主要协议组成:认证头(AH:Authentication Header)、封装安全有效载荷(ESP:Encapsulating Security Payload)和互联网密钥交换(IKE:Internet Key Exchange)。AH 为 IP 数据包提供身份验证和完整性保护,而 ESP 为 IP 数据包提供保密性保护。IKE 用于在两方之间建立共享私密密钥。

从技术上讲,AH和ESP是为IPSec设计的算法,而IKE是一种密钥交换协议,用于交换将用于AH/ESP算法的密钥。因此,AH/ESP和IKE的功能略有不同。下面分别介绍这三种协议。

IPsec-AH

AH 代表“Authentication Header”。它是 IPSec 协议的一个组件,可以提供源认证和数据完整性保护。然而,AH 不进行任何数据加密。AH(Authentication Header)是 IPSec 中用于提供 IP 数据包认证和完整性保护的协议。

AH 为 IP 数据包提供了强级别的认证和完整性保护,帮助防止各种攻击,如数据包嗅探、篡改和重放攻击。然而,它不提供保密性保护,因此通常与 ESP 一起使用,后者提供加密以及认证和完整性保护。

AH的两种模式:传输模式和隧道模式

AH可以在传输模式或隧道模式下使用。

  • 在传输模式下(transport mode),AH头被插入到IP头和传输层头(例如TCP、UDP)之间,仅为传输层协议提供保护。

  • 在隧道模式下(tunnel mode),整个原始IP数据包被封装在一个新的IP数据包内,AH头插入在新IP头和原始IP头之间,为整个IP数据包提供保护。

图片

图片

以下是 AH 头中每个字段的描述:

  • Next Header:该字段标识紧随 AH 头之后的数据包协议(例如 TCP、UDP)。

  • AH Len:该字段指定 AH 头及其保护的负载的长度。

  • Reserved:该字段保留用于未来使用,必须设置为零。

  • **Security Parameters Index (SPI)**:该字段标识用于保护数据包的安全关联(SA)。

  • Sequence Number:该字段通过为每个数据包提供唯一标识符,用于防止重放攻击。

  • Authentication Data:该可变长度字段包含用于验证数据包的消息认证码(MAC:message authentication code)。该字段的长度取决于使用的认证算法。

IPSec - ESP

ESP 代表“Encapsulating Security Payload”。与 AH 一样,ESP 也是 IPSec 算法的一个组件。它提供了 AH 所有的安全功能,并且还提供数据保密性,通过执行数据加密来保护数据。在这种情况下,即使你使用嗅探器或 Wireshark 捕获了传输的数据包,你也无法确定数据包的实际内容,因为实际内容是加密的。ESP 是用于 IPSec(互联网协议安全)的一个协议,提供在 IP 网络上传输数据的保密性、完整性和认证。ESP 在 IP 层工作,通过一个新的头部封装原始 IP 数据包,从而提供安全服务。

ESP 的两种模式

如以下所示,实施 ESP 有两种不同的方式。一种是传输模式,另一种是隧道模式。在传输模式下,原始数据包只有一个 IP 头部用于 ESP 数据包,并且只有传输层头部和负载(数据)被加密。在隧道模式下,完全使用一个新的 IP 头部用于 ESP 数据包,原始 IP 头部被视为加密数据的一部分。在隧道模式下,原始数据和 ESP 数据包可以使用不同版本的 IP 头部。例如,可以对原始数据使用 IPv6,对 ESP 数据包使用 IPv4。

  • 在传输模式下(transport mode),原始 IP 头部保持不变,只有负载(IP 数据包的数据部分)被加密并由 ESP 保护。在原始 IP 头部和负载之间添加 ESP 头,包含安全参数,如安全参数索引(SPI)和序列号。ESP 尾部也添加到数据包的末尾,包含完整性检查值(ICV:Integrity Check Value),为数据包提供完整性和认证。

    传输模式通常用于在两个主机或端系统之间加密流量,其中原始 IP 头部需要保留用于路由目的。

  • 在隧道模式下(tunnel mode),一个新 IP 头部被添加到数据包中,并且新头部和原始 IP 头部都由 ESP 保护。原始 IP 数据包成为新 IP 数据包的负载,并由 ESP 加密和保护。ESP 头和尾部分别添加在新 IP 头和原始 IP 数据包之后。

    隧道模式通常用于在两个网络或主机与网络之间加密流量,其中原始 IP 头部需要为了安全或路由目的而隐藏或修改。

图片

由于我们在隧道模式下使用两个不同的 IP 头部,我们经常为原始 IP 和 ESP 数据包 IP 使用不同的名称,如下所示。

图片

以下是 ESP 数据包的整体结构。

图片

< 基于 RFC 4303 图 1. ESP 数据包的顶层格式 >

图片

< 基于 RFC 4303 图 2. 负载数据的子结构 >

以下显示了传输模式和隧道模式对比,ESP 数据包结构的更多详细信息。

以下是 ESP 数据包各字段的描述:

  • Security Parameters Index(SPI): 用于标识用于保护数据包的安全关联 (SA)。

  • Sequence Number: 提供反重放保护,确保数据包按正确顺序接收,并且没有被重复或重放。

  • Payload Data: 原始 IP 数据包的加密负载。

  • Padding: 可选的填充,添加到数据包中以满足加密要求。

  • Next Header: 一个 1 字节的字段,指定 ESP 数据包后面下一个报头的协议。

  • ICV(认证数据): 消息认证码 (MAC:message authentication code),用于提供数据包的完整性和认证。

  • Padding: 可选的填充,添加到数据包中以满足加密要求。

传输模式示例

以下是传输模式 ESP 的一个示例,展示了 Wireshark 日志与 ESP 数据包之间的关联。如您所见,Wireshark 中显示的一些参数与 ESP 数据包结构并不完全一致。例如,一些字段(例如认证数据)位于数据包的末尾,但在解码时却显示在前面部分。(我知道……这确实是一个非常令人困惑和混乱的图示,但我认为至少用手指或铅笔逐一追踪一下还是值得的)。

隧道模式示例

以下是隧道模式 ESP 的一个示例,展示了 Wireshark 日志与 ESP 数据包之间的关联。如您所见,Wireshark 中显示的一些参数与 ESP 数据包结构并不完全一致。例如,一些字段(例如认证数据)位于数据包的末尾,但在解码时却显示在前面部分。(我知道……这确实是一个非常令人困惑和混乱的图示,但我认为至少用手指或铅笔逐一追踪一下还是值得的)。

ESP 是否加密 TCP/UDP 端口号?

是的,TCP 和 UDP 端口号与 IP 数据包的其余负载一起被加密。这意味着,即使攻击者截获了一个 ESP 加密的数据包,他们也无法确定正在使用的 TCP 或 UDP 端口号。

这是因为 ESP 加密了整个 IP 数据包负载,包括传输层协议头(如 TCP 或 UDP),以及任何正在传输的应用层数据。数据包中唯一未被加密的部分是 IP 头字段,例如源 IP 地址和目标 IP 地址。

虽然 ESP 提供了 IP 数据包负载的机密性,但它可能使某些网络功能(如流量过滤)变得困难,因为这些功能通常依赖于 TCP 和 UDP 端口号。为了解决这个问题,一些网络安全设备可以被配置为检查 ESP 加密的数据包,并提取端口号用于过滤。然而,这需要额外的处理,并且可能会消耗大量资源。

注意:一些网络安全设备如何检查 ESP 加密的数据包并提取端口号?

这些安全设备可以使用一种称为解密卸载(decryption offloading)的技术。

在解密卸载中,加密的数据包首先由能够解密 ESP 加密数据包的设备(如防火墙或入侵防御系统(IPS))拦截。然后,该设备解密数据包并检查传输层头部,传输层头部包含 TCP 或 UDP 端口号,以及用于过滤或分析的其他信息。

一旦设备检查了数据包,它可以根据配置的安全策略决定是允许数据包继续传输到目的地,还是将其阻止。

实现解密卸载的一种常见方法是使用专用设备或硬件模块,这些设备专门设计用于高性能的数据包处理和解密。该设备通常使用专用的硬件和软件,快速有效地解密数据包,而不会引入显著的延迟或性能下降。

另一种实现解密卸载的方法是使用运行在服务器或虚拟机上的软件解决方案。在这种情况下,服务器或虚拟机必须具有足够的处理能力和内存,以处理解密和数据包处理所需的额外开销。

注意:我们是否需要提供 IPsec 密钥给这样的设备以解码加密的数据包?

是的,要解密 Encapsulating Security Payload (ESP) 加密的数据包,网络安全设备需要访问用于加密数据包的 IPsec 密钥。这个密钥在 IPsec 隧道的端点之间共享,用于加密和解密数据包。

为了使网络安全设备能够解密 ESP 加密的数据包,必须将 IPsec 密钥共享给该设备。根据 IPsec 隧道的具体实现和安全策略,这可以通过以下几种方式完成:

  • 预共享密钥(PSK:Pre-shared key ):在 PSK 配置中,IPsec 隧道的两个端点使用相同的共享秘密密钥来加密和解密数据包。这个密钥可以在两个端点和网络安全设备上手动配置,以允许数据包的解密。

  • 公钥基础设施(PKI:Public key infrastructure):在 PKI 配置中,IPsec 隧道的每个端点都有自己的公钥和私钥对。公钥由可信的第三方(如证书颁发机构(CA))进行交换和信任。网络安全设备可以被配置为使用这些可信的公钥来解密数据包。

  • 密钥管理协议(Key management protocol):一些 IPsec 实现使用密钥管理协议,如互联网密钥交换(IKE:Internet Key Exchange),在端点之间自动交换和管理 IPsec 密钥。在这种情况下,网络安全设备可以被配置为参与密钥交换,并获得解密所需的密钥。

ESP 与 AH 对比

ESP(Encapsulating Security Payload,封装安全负载)和 AH(Authentication Header,认证头)是用于 IPSec(互联网协议安全)的两种协议,用于为 IP 数据包提供安全服务。虽然这两种协议都提供了对 IP 数据包的机密性(注,AH不提供机密性)、完整性和认证,但它们在实现这些目标的方式和提供的保护级别上有所不同。

ESP 和 AH 之间的主要区别如下:

  • 机密性:ESP 通过加密 IP 数据包的有效负载来提供机密性,而 AH 不提供加密,因此不提供机密性。

  • 认证:ESP 和 AH 都提供认证,但使用的方法不同。ESP 使用数字签名来认证数据包,而 AH 使用消息认证码(MAC:message authentication code )。

  • 完整性:ESP 和 AH 都通过确保数据包在传输过程中未被修改来提供完整性保护。然而,ESP 提供对 IP 头部和有效负载的完整性保护,而 AH 仅对 IP 头部提供完整性保护。

  • 协议兼容性:AH 与 NAT(网络地址转换,Network Address Translation)不兼容,而 ESP 兼容 NAT。

简而言之,ESP 是 IPSec 中使用更为广泛的协议,因为它为 IP 数据包提供了机密性和完整性保护,并且与 NAT 兼容。AH 主要用于那些不需要机密性,但需要认证和完整性保护的情况。

Security - IKE

后面单独介绍该部分内容。

Source

https://www.sharetechnote.com/html/IP_Network_Security_IPSec.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【practise】逆波兰表达式求值
  • 2024年大家最爱的翻译工具大盘点
  • cmake基于语法和应用
  • 【Go】 HTTP编程3-路由httprouter
  • VisionPro二次开发学习笔记12-使用CogToolGroup控件进行图像检测
  • 五. TensorRT API的基本使用-custom-trt-plugin
  • js入门经典学习小结
  • 【Python】PyWebIO 初体验:用 Python 写网页
  • 006 | 资本资产定价模型 (CAPM)
  • MySQL学习(20):InnoDB引擎逻辑架构、物理架构
  • Unity入门2——编辑器常用功能
  • 投资 - 什么叫有资金托底
  • 当node节点kubectl 命令无法连接到 Kubernetes API 服务器
  • k8s创建secret并在container中获取secret
  • Spring框架面试总结
  • Android Volley源码解析
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • Consul Config 使用Git做版本控制的实现
  • E-HPC支持多队列管理和自动伸缩
  • JDK9: 集成 Jshell 和 Maven 项目.
  • leetcode388. Longest Absolute File Path
  • mongo索引构建
  • PermissionScope Swift4 兼容问题
  • tweak 支持第三方库
  • Vue学习第二天
  • 程序员最讨厌的9句话,你可有补充?
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 手写双向链表LinkedList的几个常用功能
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • #{} 和 ${}区别
  • #14vue3生成表单并跳转到外部地址的方式
  • $var=htmlencode(“‘);alert(‘2“); 的个人理解
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (DenseNet)Densely Connected Convolutional Networks--Gao Huang
  • (html转换)StringEscapeUtils类的转义与反转义方法
  • (代码示例)使用setTimeout来延迟加载JS脚本文件
  • (二)基于wpr_simulation 的Ros机器人运动控制,gazebo仿真
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (面试必看!)锁策略
  • (太强大了) - Linux 性能监控、测试、优化工具
  • (学习日记)2024.02.29:UCOSIII第二节
  • (转载)从 Java 代码到 Java 堆
  • .Net IE10 _doPostBack 未定义
  • .NET 直连SAP HANA数据库
  • .NET正则基础之——正则委托
  • :=
  • @ResponseBody
  • @Transactional注解下,循环取序列的值,但得到的值都相同的问题
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [Android Pro] Notification的使用
  • [autojs]autojs开关按钮的简单使用