分类: 系统运维
2013-08-02 10:01:14
1 引言
问题始终是与Internet相关的一个重要话题,由于在协议设计之初没有充分考虑其性,因而在早期Internet上时常发生诸如某些企 业、机构的网络遭到攻击、机密被窃取等不幸的事件。为了加强Internet的安全性,从1995年开始,IETF着手研究制订了一套用于保护通 信的安全(IP Security)协议。提供了基于IP的网络层安全,它服务所有基于IP的网络通讯,对于上层协议应用来说是完全透明的。
2 IPSec体系结构
图1 IPSec 体系结构图
IPSec是一系列规范的集合,由安全联盟(Security association,
SA)[1],安全协议(包括认证头(Authentication Header,AH)[2]、封将安全载荷ESP(Encapsulating
Security Payload , ESP) [3]、密钥管理(Internet Key Management ,
IKE)[4]及认证和加密算法构成一个完整的安全体系。结构如图1所示。
2.1 安全联盟(SA)
安全联盟是IPSec的基础,决定通信中采用的IPSec安全协议、散列方式、加密算法和密钥等安全参数,通常用一个三元组〈安全参数索引、目的IP地址、安全协议〉唯一表示。SA总是成对出现的,对等存在于通信实体的两端,是通信双方协商的结果。
SA存放在安全联盟数据库(Security AssociationDatabase
,SAD)[1]中,另外IPSec环境中还维护一个安全策略数据库(Security Policy Database
,SPD)[1]。每个应用IPSec的网络接口都有SAD
和SPD各一对,协同处理进、出的IP包。一条SAD数据库记录对应一个SA。每条SPD记录描述了一种安全策略,指定了数据包处理动作(丢弃、旁路、应
用)。发送数据时根据目的IP地址等参数先从SPD中得相应的策略记录,当记录的动作为“应用”时,根据记录中的SA指针从SAD中取得对应的SA(若不
存在,需要调用IKE创建一个新的SA,并插入到SAD中),再利用SA指定的安全协议和认证加密算法对包进行安全处理后发送目的IP。接收端收到数据后
通过报文中的SPI等参数找到SA
,检查是否是重传数据,如果不是则应用SA中指定的协议和算法对数据进行解密和验证。SPD对于同一IP地址可能有多条记录,这几条记录可能是相互冲突
的,因此它必须是排序的,查找时也必须是顺序查询,实际只应用找到的第一条策略记录。
2.2 认证头(AH)
AH支持数据的完整性和IP包的验证,数据的完整性的特征可以保证在传输中不可能发生未检测的修改,身份验证功能使末端系统或网络设备可以验证用户或应用
程序,并根据需要过滤通讯量,它还可以防止在Internet上的地址欺骗攻击,此外,AH还能阻止在该区域的重复攻击。AH插入在IP包头和传输层包头
之间,格式如表1所示。
表1 AH格式
其中,下一个报头字段(8位)标识紧跟的报头类型。有效载荷属性(8位)指明整个AH的长度。SPI(32位)是一个随机值,与外部目的IP地址一起,用
于指定SA。系列号(32位)标明当前IP包在整个数据包系列中的位置,这个字段是强制的,提供了抗重播功能,在SA创建时初始化为0,然后依次递增,达
到232时则重新创建SA。即使某个特定的SA不要求抗重播功能,在发送端仍必须填写,只在接收端不进行重播检查。AH的最后的一个字段认证数据是可变长
的,但必须双字对齐,其缺省长度为96位,为包的完整性验证值(Integrality Check Value
,ICV),它是SA指定的单向散列算法(One2Way Hash Alogrithm)、对称加密算法和密钥计算出来的身份验证码的删节。
2.3 封装安全载荷(ESP)
AH不提供任何保密**,它不加密所保护的数据包。保密**由ESP提供:包括消息内容的保密性和有限的通信量的保密性,作为可选的功能,ESP也可
以提供AH的验证服务。保密服务通过使用密码算法加密IP数据报的相关部分来实现,密码算法使用对称密码体制,如三重DES,RC5,IDEA,CAST
等。ESP的基本思路是对整个IP包或者运输层数据进行封装,并对ESP数据的绝大部分进行加密。其包头格式如表2所示。
表2 ESP包头格式
在ESP中,有的加密算法要求明文是某些字节的整数倍,所以ESP比AH多了一个长度为0~255字节的填充字段,这个字段也用于保证密文的双字对齐,同时它还隐藏了有效载荷的真正长度,从而为传输流量提供了一定的机密保护,但这个字段也增加了传输带宽。
2.4 密钥分配(IKE)
进行IPSec通讯前必须先在通信双方建立SA,IKE用于动态建立SA(IPSec要求实现必须提供手工创建SA,目的是保证协议的互操作性)。IKE
是一种混合型协议,它沿用了ISAKMP (Internet Security Association and Key Management
Protocol)的框架、Oakley的模式以及SKEME (Secure Key Exchange
Mechanism)的共享和密钥更新技术,组合成自己的验证加密材料生成技术和协商共享策略。
IKE使用了ISAKMP两阶段协商机制。在第一阶段,通信各方彼此间建立了一个已通过身份验证和安全保护的通道,即建立ISAKMP
SA。在第二阶段,利用第一阶段创建的SA,为IPSec协商具体的安全联盟。第一阶段IKE采用“主模式”(Main
Mode)交换提供身份保护。而“野蛮模式”(Aggressive
Mode)下应答次数相对较少,而且如果采用公开密钥加密算法,“野蛮模式”也可以提供身份保护;第二阶段,IKE定义了一种快速模式交换,协商创建一个
用于通讯的SA,并完成密钥交换。一个第一阶段可以创建多个第二阶段,一个第二阶段可以创建多个SA,应用这种优化机制,至少每个SA建立过程减少一次交
换和一次Diffie Hell- man (DH)求幂。ISAKMP是框架性的,IPSec解释域(Domain of
Interpretation,DOI)对它进行了实例化处理,定义了标志的命名、载荷的解释等,IKE也是目前ISAKMP的唯一实例。
2.5 加密和认证算法
高强度的加密和认证算法是IPSec达到安全性能的基础。
IPSec规定可以使用各种加密算法,由通信双方事前协商,但所有IPSec实现都必须支持DES。由于DES强度不够,而不对称算法效率往往又较
低,3DES和AES(高级加密标准)等低开销高强度算法将成为IPSec实现的趋势。
IPSec用HMAC作为认证散列算法,用于计算AH和ESP的ICV。在通信双方运用相同的算法和密钥对数据内容进行散列,结果一致则认为数据包是可信
的。只要双方协商好,散列算法也可以是任意的,IPSec中定义了HMAC-SHA-1(Secure Hash Alogrithm Version
1)和MHAC-MD5 (Message Digest Version 5)作为缺省算法。
3 IPSec 服务内容
IPSec通过AH和ESP机制为基于IP的网络通讯提供了内容机密性、源地址验证、数据完整性验证和抗重播保护等服务。
3.1 机密**
IPSec提供了数据机密**,保证了数据在传输不被非法用户窃听,它由ESP提供,算法采用加密块链接(Cipher Block Chaining ,CBC)[5]方式,这样确保了即使是信息在传输中被窃听,非法用户也无法得知信息的真实内容。
3.2 源地址验证和完整**
AH和ESP的认证数据均由单向散列函数对包中源IP地址、数据内容等传输过程中不变的字段计算出来的HMAC(Hash-Based
Message Authentication
Code)。HMAC具有唯一性,改动数据的内容将使其无法在接收端通过验证,从而保证了数据的源IP地址和信息内容不会在转发过程中被篡改。
3.3 抗重播服务
IPSec AH和ESP头中都定义了一个系列号字段,它在一个SA生命周期内是唯一的,在接收端则采用滑动窗口技术,丢弃所有重播的包,从而进一步提供了IPSec的抗重播服务。
4 IPSec工作方式
IPSec有两种工作方式:传输方式(Transport Mode)和隧道模式(Tunnel
Mode),AH和ESP均可应用于这两种方式。传输方式通常应用于主机之间端对端通信,该方式要求主机支持IPSec。隧道方式应用于网关模式中,即在
主机的网关(防火墙、路由器)上加载IPSec,,这个网关就同时升级为安全网关(Security Gateway ,SG) [1]。
4.1 传输方式
传输模式主要为上层协议提供保护,AH和/或ESP包头插入在IP包头和运输层协议包头之间。其包结构如图2所示,显然传输模式下ESP并没有对IP包头加密处理,源、目的IP地址内容是可见的,而AH认证的是整个IP头,完整性保护强于ESP。
图2 传输方式包结构图
4.2 隧道方式
在隧道方式下,整个IP包都封装在一个新的IP包中,并在新的IP包头和原来的IP包头之间插入IPSec头(AH/ ESP)。其结构如图3所示。
图3 隧道方式包头结构
从图3可以看出,在隧道模式下,如果应用了ESP,原始IP包头是加密的,真正的源、目的IP地址是隐藏的,新IP头中指定的源、目的IP地址一般是源、目的安全网关的地址。
5 IPSec实现
IPSec协议文档中提供了三种具体的实现方案,将IPSec在主机、路由器/防火墙(创建一个安全网关)或两者中同时实施和部署,不管用何种方式实现,它对于上层协议和应用都是透明的。
①与操作系统(OS)集成实施。把IPSec当作网络层的一部分来实现,这种方式需要访问IP源码,利用IP层的服务来构建IP头。
②BITS方式。堆栈中的块”(Bump-in-the-stack ,BITS) [1]实现,修改通讯协议栈,把IPSec插入IP协议栈和链路层之间。这不需要处理IP源代码,适用于对原有系统的升级改造,通常用在主机方式中。
③BITW方式。线缆中的块(Bump-in-the-wire ,BITW)
[1]实现,把IPSec作为一个插件,在一个直接接入路由器或主机的设备中实现。当用于支持一台主机时,与BITS实现非常相似,但在支持路由器或防火
墙时,它必须起到一台安全网关的作用。
6 结论
IPSec定义了一套用于认证、保护机密性和完整性的标准协议。它为上层协议提供了一个透明的端到端安全通道,实现与应用不需要修改应用程序或者上层协
议。它支持一系列加密和散列算法,具有较好地扩展性和互操作性。但IPSec也存在一些缺点,如客户机/服务器模式下实现需要公钥来完成。IPSec需要
已知范围的IP地址或固定范围的IP地址,因此在动态分配IP地址时不太适合于IPSec。