以下内容摘自业界唯一一本真正从全局视角介绍网络安全系统设计的图书——《网络工程师必读——网络安全系统设计》一书。目前该书在卓越网上仅需要70折:http://www.amazon.cn/mn/detailApp?ref=DT_BG&uid=479-8465001-9671654&prodid=bkbk975360
8.5.1 IPSec逻辑体系架构
有多个RFC定义了IPSec组件和体系架构。这些组件和它们之间的关系构成了IPSec体系架构。本部分主要讨论IPSec逻辑体系架色的基本组成,以及这些组件在Windows Server 2003中是如何协同工作的。
遵照IETF对IPSec协议的定义,在Windows Server 2003系统中,IPSec体系架构主要包括以下几个部分:
n 安全关联(SA)
n SA和密钥管理支持
n IPSec协议
n 算法和方法
1. 安全关联(SA)
安全关联(Security Associations,SA)是由互认策略、定义安全服务密钥机制和在IPSec通信双方保护安全通信的密钥组成。每个SA是为所负责的通信提供单方向,或者单一连接的安全保护。
因为SA仅是单方向的定义,所以每个IPSec会话需要两个SA。例如,如果IPSec协议的AH和ESP封装方式同时在通信双方的IPSec会话中应用,则需要4个SA。
IPSec安全通信的SA需要2个数据库:1个安全策略数据库(Security Policy Database,SPD),一个安全关联数据库(Security Association Database,SAD)。SPD保存SA建立所需的安全需求和策略需求。它被应用于出/入两个方向的数据包处理期间。IPSec检查出/入方向的数据包,以确保是符合安全策略需求。
SAD包括每个活动SA的参数。IKE协议是在SAD中自动封装的。SA建立后,SA信息将被存储在SAD中。图8-12显示了SA、SPD以及SAD之间的关系。对数据包进行IPsec处理时,要查询SPD和SAD。为了提高速度,SPD的每一条记录都应有指向SAD中相应记录的指针,反之亦然。对于外出处理,先查询SPD,获得指向SA的指针,再在SAD查询进行处理所需参数。如SA未建立,则应使用IKE协商,并建立SPD和SAD间的指针。对于进入处理,先查询SAD,对IPsec包进行还原,取出指向SPD的指针,然后验证该包应用的策略与SPD中规定的是否相符。
图8-12 SA、SAD、SPD之间的逻辑关系
一个IPsec系统中SPD分为进入SPD和外出SPD,均处于内核中。系统初始化时,将策略库中的每一条记录分别装入进入SPD和外出SPD中。为了确保SPD的有效性和安全性,应定期进行更新和刷新。SAD的每一条记录对应一个SA。SA经IKE协商得到,并以有序散列链表的形式组织。而且,SAD也分为进入SAD和外出SAD,分别与进入散列链表和外出散列链表相对应。进入散列链表用SA中的IPsec源地址计算散列值,外出散列链表用SA中的IPsec目的地址计算散列值。
SA的维护视SA的建立方式而定。如采用自动方式协商SA,则根据SA生存期的状态和序号计数器的溢出标志来决定SA的有效性。生存期分为软生存期和硬生存期。软生存期状态决定发送方是否可用SA发送数据包,硬生存期状态决定接收方是否可用SA来处理收到的数据包。当一个SA的软生存期期满时,发送方不能继续用其来发送数据包,此时,可以启动或触发IKE再协商一个。使用软、硬生存机制可保证通信的持续性。如采用手工方式建立SA,则不存在生存期,仅根据序号计数器的溢出标志来决定SA的有效性。如SPD或SAD过于庞大,则可将一部分置于用户空间。
2. SA和密钥管理
IPSec需要SA和密钥管理支持。ISAKMP(Internet Security Association and Key Management Protocol,互联网安全关联和密钥管理协议)通过协商、建立、修改和删除SA过程定义了身份认证和密钥交换框架。但它不定义实际的密钥交换,只提供框架。
IPSec需要支持手动和自动两种方式的SA和密钥管理。IKE是IPSec默认的自动密钥管理协议的。IKE是一种混合协议,合并了Oakley密钥交换协议的一部分和SKEME密钥技术协议。图8-13显示了ISAKMP、Oakley和SKEME协议之间的关系。
Oakley协议使用Diffie-Hellman密钥交换或者密钥许可算法来创建一个唯一、共享的的加密密钥,这个密钥是作为产生身份认证和加密所需的密钥材料。例如,一个共享加密密钥可以当作DES加密算法所需的密钥材料。Diffie-Hellman交换可以使用一个用来定义为在密钥交换过程中使用而创建的基础主号码长度的组号。号码越长,加密能力越强。典型的Diffie-Hellman组包括组1(密钥长度为768位)、组2(密钥长度为1024位)和组14(密钥长度为2048位)。图8-14显示了Oakley协议、Diffie-Hellman算法和有名的Diffie-Hellman密钥交换组之间的关系。
图8-13 ISAKMP与IKE,以及IKE与Oakley和SKEME协议之间的关系 图8-14 Oakley与Diffie-Hellman算法和Diffie-Hellman组之间的关系
Oakley协议定义了多种密钥交换过程模式。这些模式符合在ISAKMP协议中定义的两个协商步骤。步骤1,Oakley协议定义两种法则模式:主模式(Main mode)和***性模式(Aggressive mode)。Windows IPSec不采用***性模式。步骤2:Oakley协议只定义一个模式,即:快速模式(Quick mode)快速模式。
3. IPSec协议
为IP层(也即网络层)提供安全保护,IPSec定义了两个协议:身份认证头(Authentication Header,AH)和封装安全载荷(Encapsulating Security Payload,ESP)。这两个协议为SA提供安全服务。每个SA是由SPI(Security Parameters Index,安全参数索引)、目的IP地址和安全协议(AH或者ESP)头进行标识的。
在SA中,SPI是唯一的,用来在区别同一个接收请求计算机上的多个SA。例如,IPSec与两台计算机进行通信,则在每台计算机上就需要两个SA。一个SA服务于入方向的通信,一个SA服务于出方向的通信。因为对于这两个SA来说,IPSec通信端的IP地址是一样的,SPI就可以用于区别入方向和出方向SA。因为每个SA的加密密钥不同,所以每个SA必须被唯一标识。
图8-15显示了SA、SPI、目标IP地址和安全协议(AH或者ESP)之间的关系,其实也是IPSec协议组成和SA体系架构。从图中可以看出,在SA中包括了IP头和AH或者ESP头两个大部分。而在IP头中包括了IP地址,而AH或者ESP头中包括了SPI。具体这两个协议的包格式将在本章后面介绍。
图8-15 IPSec协议和SA体系架构
4. 算法和方法
IPSec协议使用身份认证、加密和密钥交换算法。在AH和ESP协议中,有两种身份认证或者加密哈希算法:HMAC-MD5 (Hash Message Authentication Code with MD5,哈段消息认证代码-消息摘要5) 和HMAC-SHA-1(Hashed Message Authentication code with Secure Hash Algoritm-1,带有安全哈然算法1的哈希消息身份认证代码)。在ESP中还可以使用DES和3DES(Triple DES)加密算法。图8-16显示了身份认证和加密算法,以及安全协议之间(AH或者ESP)的关系。
IPSec的身份认证方法是由IKE协议定义的,被分为三类:数字签名、公钥证书和预共享密钥。图8-17显示了IKE协议和这三种身份认证方法之间的关系。
图8-16 IPSec协议及与身份认证、加密算法和安全协议之间的关系 图8-17 IKE与身份认证方法之间的关系