« 2006年100款最佳安全工具谱Internet Key Exchange »

IPSec简介

更新日期: 2005 年 9 月 5 日
作者: 赖荣枢
 

近年来,信息发展的当红炸子鸡当然是非网络莫属。随着因特网与企业网络的主流化,网络安全性的课题也益形重要,相关的解决方案也成为热门话题,例如,PGP、Kerberos与SSL等等。不过,这些解决方案主要都是在应用层或传输层中加入安全机制,至于网络层的安全性则付之阙如。而IP Security(简称 IPSec)便是针对位于网络层的Internet Protocol所提出的安全性协议。
IP中加入安全性协议的最大好处在于确保所有网络通讯的安全。也就是说,即使位于IP层上层的应用程序或传输层没有提供任何安全性的机制,由于IP层加入了安全机制,因此可保护整个网络通讯的内容。
IPSec主要可提供两种功能:认证功能(Authentication)与保密功能(Confidentiality)。所谓认证,是指确认通讯双方的身份,以及确保双方之间传输的数据未受他人破坏或窜改。保密则是将通讯内容予以加密,防止网络上的第三者读取通讯内容。认证与保密的核心都是加密法(或是哈希函数),提到加密法当然就会牵涉到密钥管理(Key Management)。因此,IPSec也规定了如何交换密钥,以便建立与管理加密时所需的各类密钥。
根据1997年CERT(一个专门研究网络安全的机构)的报告指出,最常见的网络攻击主要有两种类型:

  • 修改IP封包,以假造的IP地址来扮演其他用户。
  • 从网络上窃取IP封包,读取通讯内容。

有鉴于此,IAB(Internet Architecture Board)决定在下一代的IP协议中(也就是IPv6),加入认证与保密的功能,这些相关功能即统称为IPSec。IPSec在设计时即考虑到必须与现有IPv4兼容。因此相关的开发厂商也可将IPSec移植到现有的IPv4,例如Windows 2000、Windows XP、Windows Server 2003等操作系统便都支持IPSec。

本页内容 

  • IPSec的应用
  • IPSec的优点
  • IPSec的架构
  • 密钥交换协议
  • 认证表头
  • 资料封装加密
  • 设定IPSec的选项
  • 结语

IPSec的应用

IPSec的主要用途即是建立安全的通讯管道。IPSec的应用可分为两类:

  • 建立局域网络内部的安全通讯:在这种模式下,双方的个人计算机都必须具备IPSec的能力。这类应用主要是为了防范局域网络内的黑客。例如,将总经理与财务经理之间的全部传输内容予以加密,避免员工看到机密的财务信息。

图1:在局域网络内使用IPSec
图1:在局域网络内使用IPSec 

  • 局域网络之间透过因特网安全地传输数据:在这种模式下,局域网络对外的路由器或防火墙必须要具备IPSec的能力,至于局域网络内的个人计算机使用一般的IP即可。此种模式可建立虚拟专用网(Virutal Private Network),让局域网络不必再架设昂贵的专线,而是透过因特网来建立虚拟专线,以便在局域网络之间安全地传输信息。例如,位于外地的分公司,可透过因特网与总公司建立安全的通讯管道。

图2:利用IPSec,经由因特网建立局域网络之间的安全信道
图2:利用IPSec,经由因特网建立局域网络之间的安全信道
 

IPSec的优点

与目前TCP层或应用层的安全性解决方案相比,IPSec大致有以下的优势:

  • 由于IPSec位于较低的网络层,所以不会牵动上层的TCP层或应用层。因此,不仅使用者完全不受影响,甚至连程序设计师或开发厂商,都不用针对IPSec作任何特殊的变更。
  • 当IPSec应用在路由器或防火墙时,可确保所有的局域网络对外的通讯安全,但局域网络内仍可使用传输效率较佳的IP协议。
  • IPSec可套用在个别的用户或计算机上,提供较大的管理弹性。
  • 目前因特网的路由协议,主要是藉由路由器之间彼此交换路由信息而建立整个路由架构。因此之故,网络黑客可藉由不实的路由信息来破坏路由的路径,将他人的机密信息导入所要的位置。由于IPSec可确保路由器之间的通讯安全,也因此可加强路由架构的安全性。

IPSec的架构

我们可以从运作方式、封包结构、使用模式以及使用的协议这四方面来了解IPSec的架构。

IPSec的运作方式

IPSec的运作需先经过以下的1、2步骤:

  • 在初始化时,双方必须建立安全联结(Security Associations)。这个步骤的主要目的是让双方对于如何使用IPSec的方式达成共识,例如,选择何种安全功能;决定加密的算法;使用密钥的原则等等。
  • 密钥交换。这个步骤主要是利用非对称加密法,让双方各自拥有相同的密钥(Secret Key,专指对称式加密法所用的密钥)。
  • 开始以安全的管道来传输信息。

IPSec的封包结构

IPSec到底是以何种方法来提供上述的安全功能呢?除了对封包执行加密或认证演算外,IPSec还会在传统的IP封包中加入额外的IPSec表头,用来记录加密或认证的相关信息。下图的封包字段配置会因使用的模式而有所不同,稍后我会再详细说明这些字段。

图3:IPSec表头的位置
图3:IPSec表头的位置 
 

IPSec的使用模式

IPSec提供了两种使用模式:

  • 传输模式(Transport mode):仅加密或认证上层协议的数据。例如,在局域网络中有两台计算机A与B,A与B可直接建立联机(不必经由路由器或防火墙),且A与B具有处理IPSec封包的能力时,则可使用IPSec的传输模式。
  • 信道模式(Tunnel mode):IPSec会加密或认证整个封包,然后在最外面再加上一个新的IP表头。当IPSec联机两端的计算机有一端或两端不具处理IPSec封包能力,而必须透过具有IPSec能力的路由器或防火墙来代为处理IPSec封包时,即必须使用信道模式。

稍后我会再进一步说明传输模式与信道模式。

IPSec的协定

若从功能面来看,IPSec包含了三种协议,分别提供不同的功能。

  • 密钥交换协议:负责建立安全联结与交换密钥。
  • 认证表头 (Authentication Header,AH):主要提供认证的功能。
  • 数据封装加密 (Encapsulating Security Payload,ESP):主要提供加密的功能,也可选择性地再加上认证的功能。

建立IPSec联机使一定会使用密钥交换协议。至于AH与ESP则是二选一,或是两者合并使用。

密钥交换协议

密钥交换协议主要负责这两项工作:

  • 建立安全联结。
  • 建立共同的秘钥。

IPSec目前预设的密钥交换协议为ISAKMP(Internet Security Association and Key Management Protocol)与Oakley。Oakley仅规定密钥交换的方法,至于各种讯息详细的格式则是由ISAKMP所定义。ISAKMP同时也规定了安全联结的建立步骤。ISAKMP/Oakley协议相当复杂,因此本文仅大略介绍其原理与功能。读者若有兴趣研究详细的规格,可自行参考RFC文件。

安全联结(Security Associations)

IPSec在制订时,即考虑到兼容性与弹性的问题。例如,IPSec必须能跨越各种平台;IPSec必须能在Ipv4或Ipv6上使用;开发厂商能够按照需求来移植各种等级的加密算法。也就是说,IPSec的协议只提供一个基本的架构,在这个架构之下,各软硬件厂商再加入适合的算法或标准等等。

因此之故,IPSec协议中包含了许多参数。当网络上两个主体(计算机或是路由器)要使用IPSec来传输数据时,双方势必要先相互沟通,对相关参数达成一致的共识,之后才能建立安全的传输管道。所谓安全联结,就是这样的一组参数。换言之,安全联结是由许多参数所组成。在此请读者注意,安全联结只是一个抽象性的观念,组成安全联结的参数并非全部都是封包中实际的的字段。

安全联结具有单向的特质,也就是说当A传送数据给B时需要定义一项安全联结,而B传送数据给A时需要另外一组安全联结。

安全联结中有三个最重要的参数,三者合起来可共同定义(或识别)安全联结:

  • Security Parameters Index(SPI,安全系数索引):SPI是由IPSec接收端在自行定义的数值,长度为32位,会记载于每个IPSec封包中。例如,A、B、C同时要以IPSec传送数据给X,则X会定义三个SPI值,之后便可利用IPSec封包中的SPI字段,辨识该封包隶属哪个安全联结。
  • Security Protocol ID(安全协定ID):指定要使用AH或是ESP表头。每项安全联结仅能在AH或ESP中择其一,不能同时指定这两者。因此,若要同时使用AH与ESP来传输数据时,则必须用到两项安全联结;若要同时使用AH与ESP建立双向传输关系,则需要四项安全联结。
  • IP destination address(IP目的地址):安全联结的单方关系是以接收端的IP地址来定义。

如何建立安全联结

ISAKMP详细定义了如何建立、协调、修改,以及删除安全联结。具有IPSec能力的系统,通常会保有一份安全性列表,详列系统所支持的安全联结(例如,支持何种算法等等),以及使用的优先级。IPSec联机的两端在建立安全联结时,会依据ISAKMP的格式,从各自最高优先级的安全联结开始协调,直到建立双方皆支持的安全联结。

如前文所述,利用IPSec来互传数据时,通常需要建立多项安全联结。此外,安全联结建好后,也不是就此一路到底使用同样的安全联结。由于密钥安全的机制(后文会说明),每隔一段时间即必须重新建立安全联结。所有这些工作都由ISAKMP所定义。

密钥交换的原理

密钥交换协议向来是加密法中最复杂的部份。IPSec密钥交换协议首先利用非对称式加密法来建立安全联机,然后再利用对称式加密法来加密(或认证)传输的资料,以下简单地说明非对称式加密法的架构。

假设使用者A希望利用非对称式加密法,让别人能够以安全的方式传送数据给他。使用者A首先必须建立一对密钥,也就是一把公钥(Publick Key)与一把私钥(Private Key)。公钥只能拿来作加密的用途,因此可随意散发,不会有安全的顾虑。私钥可拿来解密,因此由使用者A自行保留,不可给其他人。其他人若要以安全的方式传送数据给用户A,只要取得使用者A的公钥,将数据加密后再送回给使用者A。由于只有使用者A拥有私钥,因此只有使用者A才能解密。请读者注意,上述的关系基本上是单方的性质,因此若双方要互传数据,双方必须各自拥有对的公钥。


图4:非对称式加密法的架构 
 


图5:非对称式加密法的另一种架构
图5:非对称式加密法的另一种架构 
 

在实作上,有些非对称式加密法也具有下列功能:

顺带一提,上述方式其实就是数字签名的原理。不过在IPSec中,不会用到这样子的架构。

与对称式加密法相比,非对称式加密法最大的优点在于双方毋须先共享密钥即可建立安全联机,因此非常适合应用在因特网。不过,非对称式加密法有一个最大的缺点,就是其算法极为繁复,因此会耗费大量的计算机资源。为了解决这个问题,非对称式加密法通常会结合对称式加密法(运算较快、较不耗费资源)一起使用。在实作上,目前有许多种模式,以下说明IPSec所使用的Diffie-Hellman密钥交换法(Diffie与Hellman这两位也是最早提出非对称式加密法的前辈):

  • 双方先以非对称式加密法来交换彼此的公钥(Ka-pub与Kb-pub)。
  • 再以对方的公钥与自己的私钥,运算求得一把共同的秘钥(Ka-b)。很多读者可能会对这个步骤半信半疑。不用怀疑,就是有些聪明人会想出这种绝招。
  • 利用秘钥以对称式加密法,来进行加密或认证的动作。

图6:Diffie-Hellman密钥交换法
图6:Diffie-Hellman密钥交换法 
 

在后续的加密过程中,若反复使用同一把秘钥,比较容易被人破解。为了提高加密安全性,秘钥每隔一段时间便会重新建立,这种秘钥就称为阶段密钥或工作密钥(Session Key)。这也是为什么安全联结必须定期重新协调的主要原因。

IPSec预设使用的密钥交换协议为OakleyOakley可视为是Diffie-Hellman密钥交换法的加强版,原理相同但提供较高的安全性。

IP加入安全协定的最大好处在于确保所有网路通讯的安全。因为即使位于IP层上层的应用程序或传输层没有提供任何安全机制,但由于IP层加入了安全机制,因此也可保护整个网络通讯的内容。

在前面已经简介过IPSec的应用、优点、架构,以及IPSec的运作方式、封包结构、使用模式、通讯协定,并且详述IPSec三大协定的密钥交换协定,我们将在下面继续讨论IPSec的另两种协定:认证表头,以及资料封装加密。 
 

认证表头

认证表头(Authentication Header,AH)可提供封包认证的功能。封包认证有两层涵意:

  • 确保IP封包的完整性(确认IP封包在传送途中未曾遭篡改)。
  • 确认IP封包发送者的身份。

请注意,封包认证并无法防止网络上的第三者窥伺封包内容。若不想让其他人读取封包内容,必须使用ESP封包加密的机制。

算法

AH支持HMAC-MD5-96与HMAC-SHA-1-9这两种HMAC算法。

HMAC可视为哈希函数与对称式加密法的结合。哈希函数与对称式加密法都可用来认证资料。哈希函数指令周期较快,但较不安全;对称式加密法运算较速度较慢(相对于哈希函数),但较为安全。HMAC则兼具了哈希函数与对称式加密法的优点,不仅指令周期较快,且安全性也很高。此外,HMAC不受美国输出法令的限制,因此可以广泛地在全球使用。

HMAC实际上的运作原理如下:

图7:HMAC的架构
图7:HMAC的架构 
 

HMAC所产生的值叫做MAC(Message Authentication Code)或ICV(Integrity Check Value),其实与哈希函数所产生的哈希值意义相近,只是HMAC的算法更加安全。

认证步骤

使用AH认证功能的步骤大致如下:

  1. 传送端与接收端首先经由密钥交换协议,让双方各自有一把相同的工作密钥(Ks)。
  2. 传送端利用Ks计算封包数据的ICV,然后将ICV附在封包内的AH表头中,一起送给接收端。
  3. 接收端利用Ks计算封包数据的ICV,然后与传送端附在封包内的ICV相互比对。若两者不同,代表这个封包有问题。若两者相同,即完成封包确认的动作。

传输模式与信道模式

AH协议支持传输模式和信道模式。传输模式又称为点对点(End-to-end)模式。使用此模式时,传送端与接收端都必须移植IPSec功能。若要建立局域网络内两台计算机的IPSec联机,即可使用传输模式。

使用传输模式时,原来的IP封包的格式大致不变,仅在原有的IP表头与TCP表头之间加上AH表头。然后针对整个封包计算ICV,再将ICV记录到AH表头中。

图8:AH传输模式的封包
图8:AH传输模式的封包
 

请注意,上图只是一个简单的示意图,HMAC在计算时并非包含封包中的每个字段。实际上,IP封包内有些字段在封包传送过程中会不断改变,例如,IP封包每经过一台路由器,TTL域值即会减少1。因此,HMAC在计算时,会排除这些变动字段。同理,使用ESP协议加密封包时,也会排除这些变动字段。

信道模式又称为中介(End-to-intermediate)模式。使用此模式时,传送端与接收端有一方未移植IPSec功能,而必须透过其他装置来处理。例如,传送端具有IPSec功能,接收端本身没有IPSec功能,但接收端所在的局域网络路由器有IPSec功能,如此即适合使用信道模式。

使用信道模式时,会在原来的IP表头前加上新的IP表头与AH表头。然后针对整个封包计算ICV,再将ICV记录到AH表头中。

图9:AH信道模式的封包
图9:AH信道模式的封包
 

防止重送攻击

不论AH或ESP都提供防止重送攻击的功能,运作的方式与原理皆同。

所谓重送攻击(Replayed Attack)是指第三者从网络中截取认证讯息,并再稍后原封不动地将讯息送出,以假扮该讯息的原始送出者。重送攻击并非属于密码学/密码破解的范畴,因此认证协议必须使用额外的信息来加以防范。

相对于连接导向传输(connection-oriented)的TCP协议,IP属于非连接导向传输(connectionless)的协议,在封包传送过程中,不会确认每一个封包是否完整送达目的地,即使接收一方没收到某个IP封包,也不会要求传送一方重送封包。因此,传统的IP封包特别容易遭受重送攻击。有鉴于此,IPSec利用序号(Sequence Number)字段,将每个封包加以编号,以防止重送攻击。

假设现在A要使用IPSec认证表头来传送数据给B。当A、B之间的安全联结决定后,以该安全联结所送出的封包会从0开始逐一按顺序编号,这些编号会记录在序号字段中。序号字段的长度为32个位,因此,当编号超过232-1时,A、B之间必须重新协调新的安全联结,使序号字段再从0开始编起。

至于在B端则必须设有封包接受范围(window size)的机制。封包接受范围是一个固定的常数,默认值为64。这个机制的主要原理就是接收一方必须记录所收到IPSec封包的编号,并据以检查封包是否有问题。封包接受范围会随着新收到的封包而往前移。例如,B目前所收到封包的最大编号为N,则B会记录编号N至编号N-63封包的接收状态:

图10:接收方所收到封包最大编号为N时的情形
图10:接收方所收到封包最大编号为N时的情形
 

如果收到的封包位于接受范围内(例如,编号为N-2的封包),经过认证无误后则加以记录。

图11:收到N-2封包后的情形
图11:收到N-2封包后的情形
 

如果收到的封包位于接受范围的左侧,或是在接受范围内但与先前已收到的封包编号重复,则丢弃该封包,并记录此事件。

图12:重复收到编号为N-1的封包,则丢弃该封包并记录此事件
图12:重复收到编号为N-1的封包,则丢弃该封包并记录此事件
 

如果收到的封包位于接受范围的右侧,经过认证无误后,将接受范围的右端往右移至新收到封包的位置,并记录该封包。

图13:收到编号为N+3的封包,则封包接受范围往右移三个单位
图13:收到编号为N+3的封包,则封包接受范围往右移三个单位
 

藉由上述机制,接收端可控管所有收到的IPSec封包,有效防止重送攻击。

AH表头字段

AH表头实际上包含了以下几个字段:

  • Next Header(8个位):记载后续表头的类型。
  • Payload Length(8个位):记载Authentication Data字段的长度,单位为32位Word),再减去2。
  • Reserved(16个位):保留将来之用。
  • Security Parameters Index(32个位):用来识别安全联结。
  • Sequence Number(32个位):IP封包序号,可用来防止重送攻击。
  • Authentication Data(长度不定):储存IP封包的ICV或MAC。

图14:AH表头的字段
图14:AH表头的字段 

数据封装加密

数据封装加密(Encapsulating Security Payload,ESP)可提供封包加密的功能,也可选择性地再加上认证的功能。

算法

ESP支持CBC(Cipher Block Chaining)模式的DES加密算法。

DES(Data Encryption Standard)是由IBM研发的加密方法,在1977年经美国官方采用而成为加密标准。标准版的DES使用64位的区块加密(Block Cipher)与56位的秘钥,在当时可说是相当安全的加密法。不过,近年来随着计算机硬件运算能力的快速进步,加上破解密码的技术也日新月异,DES已经称不上是很安全的算法了。

DES日后衍生出许多版本,后来的版本加密能力都远胜过DES。以下列举几种ESP所支持的加密法:

  • Three-key triple DES
  • RC5
  • IDEA
  • Three-key triple IDEA
  • CAST
  • Blowfish

ESP使用的加密步骤倒是没有什么特别之处,就是在传送端进行加密,在接收端进行解密。

传输模式与信道模式

ESP与AH相同,支持传输与信道两种使用模式,使用的时机也类似。

  • 传输模式

图15:ESP传输模式的封包
图15:ESP传输模式的封包 

  • 信道模式

图16:ESP信道模式的封包
图16:ESP信道模式的封包
 

除此之外,ESP防止重送攻击的功能与AH完全相同,不再赘述。

ESP的认证功能

ESP可选择性地加上认证功能。使用时,ESP会先加密封包,再计算封包的ICV,然后在封包最后面加上一个认证字段,用来储存ICV。也就是说,ICV不在加密范围内。接收端收到封包后,先进行比对ICV值,确认无误后再将封包解密。

ESP表头字段

ESP表头中主要包含下列字段:

  • Security Parameters Index:用来识别安全联结。
  • Sequence Number(32个位):IP封包序号,可用来防止重送攻击。
  • Payload Data(长度不定):指封包所负载的数据,内容包括上层协议的表头,以及实际要传送的数据。
  • Padding(0至255个字节):这个字段必须特殊,目的是为了将Payload Data补足一定的长度,以符合加密法对区块的要求。
  • Pad Length(8个位):用来记载padding的长度。
  • Next Header(8个位):记载后续表头的类型。
  • Authentication Data(长度不定):用来记载ICV。

图17:ESP表头的字段
图17:ESP表头的字段
 

设定IPSec的选项

IPSec相关设定在Windows是由组策略(Group Policy)来负责,以方便管理员集中管理。换言之,管理员可从Windows域控制器(Domain Controller)上,控制所有计算机的IPSec设定。

组策略可套用在整个网络区段(Site)、网域、组织单位,也可直接套用在个别的计算机。因此,管理员可依实际须要,根据组策略的套用规则来决定如何套用IPSec。

如何规划IPSec

管理员在规划网域内的IPSec设定时,可遵循以下步骤:

  1. 评估局域网络内数据传输的安全类型,例如,完全不需要安全保护、需要中等程度的安全保护等等。
  2. 根据这些安全类型来建立安全策略。
  3. 将安全策略套用至现有的组策略上,或是直接套用在指定的计算机上。

建立IP安全策略

IP安全策略(IP Security Policy)有点类似范本。管理员归纳出所需的安全类型后,即可建立对应的IP安全策略,然后再将这些原则套用至合适的对象。IP安全策略最好不要太多,以免造成管理工作过度复杂。

在每项IP安全策略中,可包含多项的安全性规则(Security Rule)。安全性规则定义了IPSec的相关参数。以下为安全性规则的设定项目:

1.

IP筛选器清单(IP Filter Lists):筛选器清单中列出了IP安全策略中所有的筛选器。筛选器主要是用来定义IPSec的来源与目的地址,以及IPSec所要涵盖的上层通讯协议。

2.

筛选器动作(Filter Actions):筛选器动作定义封包处理的方式。

3.

安全性方法(IPSec Security Methods):安全性方法定义了IPSec的安全设定,例如,指定使用AH或ESP协议、指定算法等等。使用时,通常会定义多种安全性方法,比较容易与对方达成协议并建立IPSec联机。管理员可自定义安全性方法,也可使用内建的两种安全性方法:

  • 高(High):使用ESP协议。
  • 中(Medium):使用AH协议。
  • 中(Medium):使用AH协议。

4.

验证方法(IPSec Authentication):有三种在建立IPSec联机时确认对方身份的验证方式,使用IPSec的双方必须协议使用一致的验证方式,才能建立IPSec联机。

  • Kerberos V5 protocol。
  • 使用下列证书颁发机构单位(CA)的凭证:支援X.509规格的凭证。
  • 使用这个字符串来保护密钥间的交换(预先共享密钥):若建立IPSec联机的双方在事前已共享秘钥(密码或字符串等等),则可在此填入秘钥。

5.

联机类型(IPSec Connection Types):指定安全规则要套用至哪些联机类型。

  • 所有网络联机(All Network Connections):套用至计算机的全部网络联机。
  • 局域网络(Local Area Network):仅套用至局域网络联机。
  • 远程访问(Remote Access):仅套用至远程访问或拨号连接。

6.

通道设定(IPSec Tunneling):这就是先前提到的信道模式功能。

  • 这个规则并没有指定IPsec通道(This rule does not specify an IPSec tunnel):不使用信道模式。
  • 由这个IP地址来指定信道的结束点(The tunnel endpoint is specified by this IP Address):使用信道模式,并指定对方的IP地址。

结语

与现有的一些安全性解决方案相比,IPSec的确提供了较大的使用弹性,以及较为广泛的保护。不过,在使用IPSec来建立安全联机的同时,也要了解由于IPSec需传输要额外的数据,因此会降低整体网络传输效能。此外,加密与解密的动作也会耗费不少系统的资源。管理员必须在安全性与效能之间取得平衡点,才能有效地提升网络安全。

本文参考数据:

  • Security Architecture for the Internet Protocol / RFC 2401 Nov. 1998 / Kent & Atkinson
  • IP Authentication Header / RFC 2402 Nov. 1998 / Kent & Atkinson
  • IP Encapsulating Security Payload / RFC 2406 Nov. 1998 / Kent & Atkinson
  • Internet Cryptography / Addison Wesley 1997 / Richard Smith
  • Cryptography and Network Security / Prentice Hall 1999 / William Stallings

 

 本文转自:http://www.microsoft.com/taiwan/technet/columns/profwin/13-IPSec-1.mspx

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-Blog 1.8 Spirit Build 80722

Copyright 2007-2010 John Winning's Blog. All Rights Reserved.