分享

人狠话不多,这份IPSec的体系结构详解请拿走~

 网络工程师老杨 2021-08-05

前两天有同学说想看IPSec,

所以今天就来聊聊IPSec的体系结构。

话不多说,开始。

IP安全 (IP Security)体系结构,简称 IPSec,是 IETF IPSec 工作组于1998年制定的一组基于密码学的安全的开放网络安全协议。IPSec工作在 IP 层,为 IP 层及其上层协议提供保护。

IPSec提供访问控制、无连接的完整性、数据来源验证、防重放保护、保密性、自动密钥管理等安全服务。IPSec独立于算法,并允许用户( 或系统管理员 ) 控制所提供的安全服务粒度。比如可以在两台安全网关之间创建一条承载所有流量的加密隧道,也可以在穿越这些安全网关的每对主机之间的每条TCP连接间建立独立的加密隧道。

IPSec在传输层之下,对应用程序和终端用户来说是透明的。当在路由器或防火墙上安装 IPSec时,无需更改用户或服务器系统中的软件设置即使在终端系统中执行 IPSec,应用程序之类的上层软件也不会受到影响。 

1

IPSec的组成

IPSec是因特网工程任务组(IETF)定义的一种协议套件,由一系列协议组成,验证头(AH)、封装安全载荷(ESP)、 Internet安全关联和密钥管理协议 ISAKMP的 Internet IP 安全解释域 (DOI)、ISAKMP、Internet密钥交换( IKE)、 IP 安全文档指南、 OAKLE密Y 钥确定协议等,它们分别发布在RFC2401~RFC2412 的相关文档中。图2.3 显示了 IPSec的体系结构、组件及各组件间的相互关系。

AH(认证头)和 ESP(封装安全载荷):是IPSec体系中的主体,其中定义了 协议的载荷头格式以及它们所能提供的服务,另外还定义了数据报的处理规则, 正是这两个安全协议为数据报提供了网络层的安全服务。两个协议在处理数据报 文时都需要根据确定的数据变换算法来对数据进行转换,以确保数据的安全,其中包括算法、密钥大小、算法程序以及算法专用的任何信息。

IKE(Internet密钥交换):IKE利用 ISAKMP语言来定义密钥交换,是对安 全服务进行协商的手段。IKE交换的最终结果是一个通过验证的密钥以及建立在 通信双方同意基础上的安全服务——亦即所谓的“IPSec安全关联”。

SA(安全关联):一套专门将安全服务/ 密钥和需要保护的通信数据联系起 来的方案。它保证了IPSec数据报封装及提取的正确性,同时将远程通信实体和 要求交换密钥的IPSec数据传输联系起来。即SA解决的是如何保护通信数据、保 护什么样的通信数据以及由谁来实行保护的问题。

策略:策略是一个非常重要的但又尚未成为标准的组件,它决定两个实体之 间是否能够通信; 如果允许通信,又采用什么样的数据处理算法。如果策略定义不当, 可能导致双方不能正常通信。与策略有关的问题分别是表示与实施。“表 示”负责策略的定义、存储和获取, “实施”强调的则是策略在实际通信中的应用。

2

IPSec 的工作原理

设计IPSec是为了给 IPv4 和IPv6 数据提供高质量的、可互操作的、基于密码学的安全性。IPSec通过使用两种通信安全协议来达到这些目标:认证头(AH) 和封装安全载荷(ESP),以及像 Internet密钥交换(IKE)协议这样的密钥管理 过程和协议来达到这些目标。

IP AH协议提供数据源认证,无连接的完整性, 以及一个可选的抗重放服务。ESP协议提供数据保密性,有限的数据流保密性,数据源认证,无连接的完整性 以及抗重放服务。对于AH和ESP都有两种操作模式:传输模式和隧道模式。IKE 协议用于协商 AH和ESP所使用的密码算法,并将算法所需要的密钥放在合适的位置。

IPSec所使用的协议被设计成与算法无关的。算法的选择在安全策略数据库(SPD)中指定。IPSec允许系统或网络的用户和管理员控制安全服务提供的粒度。通过使用安全关联(SA), IPSec能够区分对不同数据流提供的安全服务。

IPSec本身是一个开放的体系,随着网络技术的进步和新的加密、验证算法 的出现,通过不断加入新的安全服务和特性,IPSec就可以满足未来对于信息安 全的需要。随着互联网络技术的不断进步,IPSec作为网络层安全协议,也是在 不断地改进和增加新的功能。其实在 IPSec的框架设计时就考虑过系统扩展问题。例如在 ESP和 AH的文档中定义有协议、报头的格式以及它们提供的服务,还定义有数据报的处理规则,但是没有指定用来实现这些能力的具体数据处理算法。AH默认的、强制实施的加密MAC是HMA-CMD5和HMA-CSHA,在实施方案中其它的加密算法 DES- CBC、CAST- CBC以及 3DES-CBC等都可以作为加密器使用。

3

IPSec的模式

IPSec协议(包括 AH和ESP)既可以用来保护一个完整的IP 载荷, 也可以用来 保护某个 IP 载荷的上层协议。这两个方面的保护分别由IPSec两种不同的“模式” 来提供:传输模式和隧道模式。

传输模式:在传输模式中,IP头与上层协议头之间需插入一个特殊的IPSec 头。传输模式保护的是IP包的有效载荷或者说保护的是上层协议(如TCP、UDP 和 ICMP),如图 2.4所示。在通常情况下,传输模式只用于两台主机之间的安全通信。

隧道模式:隧道模式为整个IP 包提供保护。如图2.5 所示,要保护的整个IP 包都需封装到另一个IP 数据报中,同时在外部与内部IP头之间插入一个IPSec头。所有原始的或内部包通过这个隧道从IP 网的一端传递到另一端,沿途的路由器只 检查最外面的IP报头,不检查内部原来的IP报头。由于增加了一个新的IP报头,因此,新 IP 报文的目的地址可能与原来的不一致。

在千兆网络加密工程实现上,我们需要的是根据IPSec协议,实现一个安全 网关设备, 为了保证数据的机密性,考虑采用隧道模式的ESP封装。 由于 IKE协议 是通过软件实现的, 而本文着重讨论 IPSec的硬件实现部分, 故本文不再介绍 IKE 协议。

4

IPSec的实现方式

IPSec可以在主机、路由器或防火墙(创建一个安全网关)中同时实施和部 署。用户可以根据对安全服务的需要决定究竟在什么地方实施,IPSec的实现方 式可分为集成方式、BITS方式、 BITW方式三种。

集成方式:把 IPSec集成到 IP协议的原始实现中,这需要处理IP源代码,适用于在主机和安全网关中实现。

“堆栈中的块( BITS)”方式:把 IPSec作为一个“锲子”插在原来的 IP 协议栈和链路层之间。这不需要处理IP 源代码,适用于对原有系统的升级改造。这种方法通常用在主机方式中。

“线缆中的块( BITW)”方式:这是本文采用实现IPSec的方式,它将 IPSec的实现在一个设备中进行,该设备直接接入路由器或主机设备。当用于支持一台主机时,与BITS实现非常相似,但在支持路由器或防火墙时,它必须起到一台安全网关的作用。

5

IPSec协议的处理

IPSec处理分两类:外出处理和进入处理。

5.1   外出处理

在外出处理的过程中,数据包从传输层流进IP层。IP层首先取出 IP头的有关参数, 检索SPDB数据库,判断应为这个包提供那些安全服务。输入SPDB的是传送 报头中的源地址和目的地址的“选择符”。SPDB输出的是根据“选择符”查询的 策略结果,有可能出现以下几种情况:

丢弃这个包。此时包不会得以处理,只是简单地丢掉。绕过安全服务。在这种情况下,这个IP包不作任何处理,按照一个普通的IP包发送出去。应用安全服务。在这种情况下,需要继续进行下面的处理。

如果 SPDB的策略输出中指明该数据包需要安全保护,那么接着就是查询SADB 来验证与该连接相关联的SA是否已经建立,查询的结果可能是下面的两种情况之 一:如果相应的SA已存在,对SADB的查询就会返回指向该SA的指针; 如果查询不到相应的SA,说明该数据包所属的安全通信连接尚未建立,就会调用IKE进行协商,将所需要的 SA建立起来。 如果所需要的SA已经存在,那么 SPDB结构中包含指向 SA或SA集束的一个指针(具体由策略决定)。如果SPDB的查询输出规定必须将 IPSec应用于数据包,那么在SA成功创建完成之前,数据包是不被允许传送出去的。

对于从 SADB中查询得到的 SA还必须进行处理,处理过程如下: 

1.如果 SA的软生存期已满,就调用IKE建立一个新的SA。

2.如果 SA的硬生存期已满,就将这个SA删除。

3.如果序列号溢出,就调用IKE来协商一个新的SA。

SA处理完成后,IPSec的下一步处理是添加适当的AH或 ESP报头,开始对数据包进行处理。其中涉及到对负载数据的加密、计算校验等在下面的内容中会给予详细的介绍。SA中包含所有必要的信息,并已排好顺序,使IPSec报头能够按正确的顺序加以构建。在完成IPSec的报头构建后,将生成的数据报传送给原始IP 层进行处理,然后进行数据报的发送。

5.2进入处理

进入处理中,在收到IP包后,假如包内根本没有包含IPSec报头, 那么IPSec就会查阅SPDB,并根据为之提供的安全服务判断该如何对这个包进行处理。因为如果特定通信要求IPSec安全保护,任何不能与 IPSec保护的那个通信的SPDB定义相匹配的进入包就应该被丢弃。它会用“选择符” 字段来检索 SPDB数据库。策略 的输出可能是以下三种情况:丢弃、绕过或应用。如果策略的输出是丢弃,那么数据包就会被放弃; 如果是应用,但相应的SA没有建立,包同样会被丢弃;否则就将包传递给下一层作进一步的处理。

如果 IP 包中包含了 IPSec报头,就会由 IPSec层对这个包进行处理。IPSec从 数据包中提取出SPI、源地址和目的地址组织成<SPI, 目的地址,协议>三元组对 SADB数据库进行检索(另外还可以加上源地址,具体由实施方案决定)。协议值要么是AH,要么是 ESP。根据这个协议值,这个包的处理要么由AH协议来处理, 要么由 ESP来处理。在协议处理前,先对重放攻击和SA的生存期进行检查,把重放的报文或SA生存期已到的包简单丢弃而不作任何处理。协议载荷处理完成之后,需要查询 SPDB对载荷进行校验, “选择符” 用来作为获取策略的依据。验证过程 包括:检查 SA中的源和目的地址是否与策略相对应, 以及SA保护的传输层协议是否和要求的相符合。

IPSec完成了对策略的校验后,会将 IPSec报头剥离下来, 并将包传递到下一层。下一层要么是一个传输层,要么是网络层。 假如说数据包是 IP【ES【PTCP】】,下一层就是传输层;假如这个包是 IP【AH【 ESP【TCP】】】,下一层仍然是 IPSec层。

6

认证头( AH)协议

6.1AH 的目标

IP 协议中,用来提供 IP 数据包完整性的认证机制是非常简单的。IP 头通过头 部的校验和域来保证IP 数据包的完整性。 而校验和只是对IP 头的每 16位计算累加 和的反码。这样并没有提供多少安全性,因为 IP 头很容易修改, 可以对修改过的 IP 头重新计算校验和并用它代替以前的校验和。这样接受端的主机就无法知道数 据包己经被修改。

设计认证头 (AH)协议的目的是用于增加IP 数据包的安全性。AH协议提供无连 接的完整性 (connectionless integrity)、数据源认证 (dataoriginauthentication)和反重播 (anti-replay)攻击服务。 然而,AH不提供任何 保密性服务, 也就是说它不加密所保护的数据包。AH的作用是为 IP数据流提供高 强度的密码认证,以确保被修改过的数据包可以被检查出来。AH使用消息认证码 (MAC)对IP 进行认证。MAC不同于杂凑函数,因为它需要密钥来产生消息摘要,而 杂凑函数不需要密钥。常用的MAC是 HMAC,它与任何迭代密码杂凑函数( 如MD5, SHA-l, Tiger等 ) 结合使用,而不用对杂凑函数进行修改。由于生成IP 数据包的 消息摘要需要密钥,所以IPSec的通信双方需要共享一个同样的认证密钥。这个密钥就是由双方的SA信息来提供的。

6.2AH 协议包格式

AH只用于保证收到的数据包在传输过程中不被修改,保证由要求发送它的当 事人将它发送出去, 以及保证它是一个新的非重播的数据包。AH用于传送模式时, 保护的是端到端的通信。通信的终点必须是IPSec终点,所以在我们所研究的VPN 的隧道方式中不预考虑。AH协议隧道模式的包格式如图2.6 所示:

下一个头 (8bit):指示下一个负载的协议类型。 

载荷长度 (8bit): AH的负载长度。

保留 (8bit):供将来使用。

安全参数索引SPI (32bit):它是一个 32位长的整数。它与源地址或目的 地址以及工PSEC协议 (AH或 ESP)来共同唯一标识一个数据包所属的数据流的安全联合 (SA) 。SPI的值 1~255被 IANA留作将来使用; 0被保留,用32于本地和具体实现。所以目前有效的SPI值从 256~2³²-1。

序列号 (32bit):这里包含了一个作为单调增加计数器的32位无符号整数,用于防止对数据包的重演。所谓重演指的是数据包被攻击者截取并 重新发送。如果接收端启动了反重演攻击功能,它将使用滑动接收窗口 检测重演数据包。具体的滑动窗口因不同的工PSEC实现而不同,一般具有一下功能。窗口长度最小32比特,窗口的右边界代表一特定SA所接收 倒的验证有效的最大序列号,序列号小于窗口左边界的数据包将被丢弃。将序列号值位于串口之内的数据包与位于窗口内的接收到的数据包清 单进行比照,如果接收到的数据包的序列号位于窗口内并且是新的,或 者序列号大于窗口右边界且有效,那么接收主机继续处理认证数据的计算。

认证数据:这是一个变长域(必须是32bit字的整数倍)。它包含数据包的认证数据,该认证数据被称为这个数据包的完整性校验值(ICV) 。用于计算 ICV的可用的算法因IPSEC的实现不同而不同;然而,为了保证互操作性,AH强制所有的IPSec必须包含两个 MAC: HMAC-MD5和HMAC-SHA-I。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多