文档库 最新最全的文档下载
当前位置:文档库 › 09IPv6身份验证和安全性

09IPv6身份验证和安全性

09IPv6身份验证和安全性
09IPv6身份验证和安全性

第9章IPv6身份验证和安全性

很多年来,人们一直在争论I P层是否需要身份验证和安全性及相关的用法问题。本章将讨论如何在I P v6中通过身份验证头( A H)和封装安全性净荷( E S P)头来实现身份验证和安全性,包括安全密码传输、加密和数据包的数字签名。但在探讨I P v6的安全性头之前,本章将首先介绍I P安全性体系结构以及在I P v6中该体系结构可能实现的部分。该体系结构在RFC 1825(IP 的安全性体系结构)中首次进行了描述。

9.1 为IP增加安全性

I P v4的目的只是作为简单的网络互通协议,因而其中没有包含安全特性。如果I P v4仅作为研究工具,或者在包括研究、军事、教育和政府网络的相对严格的辖区中作为产品型网络协议而使用,缺乏安全性并不是一个严重的缺陷。但是,随着I P网络在商用和消费网络中的重要性与日俱增,攻击所导致的潜在危害将具有空前的破坏性。

本节主要内容包括:

? 人们已经为I P定义的安全性目标。

? 这些目标如何满足。

? 这些目标和相关论题如何在I P中定义。

下一节将介绍I P的安全性体系结构(又称为I P s e c)本身的细节以及为完成上述目标而安装的一些工具。

应注意,RFC 1825以及后续文档中所定义的I P s e c提供的是I P的安全性体系结构,而不是I n t e r n e t的安全性体系结构。两者的区别很重要:I P s e c定义了在I P层使用的安全性服务,对I P v4和I P v6都可用。如果在适当的I P v4选项格式中实现A H和E S P头,I P v4也可以使用这种安全性功能,只是在I P v6中更容易实现。

9.1.1 安全性目标

对于安全性,可以定义如下三个公认的目标:

? 身份验证:能够可靠地确定接收到的数据与发送的数据一致,并且确保发送该数据的实体与其所宣称的身份一致。

? 完整性:能够可靠地确定数据在从源到目的地传送的过程中没有被修改。

? 机密性:确保数据只能为预期的接收者使用或读出,而不能为其他任何实体使用或读出。

完整性和身份验证经常密切相关,而机密性有时使用公共密钥加密来实现,这样也有助于对源端进行身份验证。

A H和E S P头有助于在I P上实现上述目标。很简单,A H为源节点提供了在包上进行数字签名的机制。A H之后的数据都是纯文本格式,可能被攻击者截取。但是,在目的节点接收之后,可以使用A H中包含的数据来进行身份验证。

另一方面,可以使用E S P头对数据内容进行加密。E S P头之后的所有数据都进行了加密,E S P头为接收者提供了足够的数据以对包的其余部分进行解密。

I n t e r n e t安全性(实际上任何一种安全性)的问题在于很难创建安全性,尤其是在开放的网络中,包可能经过任意数量的未知网络,任一个网络中都可能有包嗅探器在工作,而任何网络都无法察觉。在这样的开放环境中,即使使用了加密和数字签名,安全性也将受到严重的威胁。对I P业务流的攻击也包括诸如侦听之类,致使从一个实体发往另一个实体的数据被未经授权的第三个实体所窃取。此外,I P安全性还应该解决下列安全性威胁:

? 否认服务攻击:即实体使用网络传送数据,致使某个授权用户无法访问网络资源。例如,攻击者可能使某主机淹没于大量请求中,从而致使系统崩溃;或者重复传送很长的 e -m a i l报文,企图以恶意业务流塞满用户或站点带宽。

? 愚弄攻击:即实体传送虚报来源的包。例如,有一种愚弄攻击是由攻击者发送 e -m a i l报文,报头的“F r o m:”指明该报文的发信人是美国总统。那些在在包头携带错误源地址的攻击则更加阴险。

密钥处理问题则更加复杂。为使身份验证和加密更可靠,I P安全性体系结构要求使用密钥。如何安全地管理和分配密钥,同时又能正确地将密钥与实体结合以避免中间者的攻击,这是I n t e r n e t业界所面临的最棘手的问题之一。这种中间者的攻击是指,攻击者(假设为C )将自己置于两个通信实体(假设为A和B )之间,拦截A和B之间传送的所有数据,冒充A把数据重新发送给B,也冒充B把数据重新发送给A。如果C能够以类似B的公共密钥进行身份验证,从而让A确认它就是B,同样也让B误以为它就是A,那么A和B就会误认为他们之间的传送是安全的。

I P s e c本身不能使I n t e r n e t更加安全。本章只提出与I n t e r n e t安全性相关的几个最迫切的问题。对I n t e r n e t安全性的细节感兴趣的读者,请参考本书作者的另一本书《Personal Encryption Clearly Explained》(AP Professional,1998),书中讨论了加密、数字签名和I n t e r n e t安全性问题。

9.1.2 RFC 1825及建议的更新

RFC 1825于1 995年8月发布,共有2 2页;其第5版修改草案完成于1 998年5月,已经达到6 6页。安全性的正确实现要求认真考虑细节问题,这是对原R F C进行扩充的主要原因。更新后的文档在最终发布时,在关于如何实现所有的I P协议(包括I C M P和组播)方面将提供更多的细节,同时将更详细讨论密钥管理相关问题和安全性关联问题。

9.2 IPsec

I P s e c的目标是提供既可用于I P v4也可用于I P v6的安全性机制,该服务由I P层提供。一个系统可以使用I P s e c来要求与其他系统的交互以安全的方式进行—通过使用特定的安全性算法和协议。I P s e c提供了必要的工具,用于一个系统与其他系统之间对彼此可接受的安全性进行协商。这意味着,一个系统可能有多个可接受的加密算法,这些算法允许该系统使用它所倾向的算法和其他系统协商,但如果其他系统不支持它的第一选择,则它也可以接受某些替代算法。

I P s e c中可能考虑如下安全性服务:

? 访问控制。如果没有正确的密码就不能访问一个服务或系统。可以调用安全性协议来控制密钥的安全交换,用户身份验证可以用于访问控制。

? 无连接的完整性。使用I P s e c,有可能在不参照其他包的情况下,对任一单独的I P包进行完整性校验。此时每个包都是独立的,可以通过自身来确认。此功能可以通过使用安全散列技术来完成,它与使用检查数字类似,但可靠性更高,并且更不容易被未授权实体所篡改。

? 数据源身份验证。I P s e c提供的又一项安全性服务是对I P包内包含的数据的来源进行标识。

此功能通过使用数字签名算法来完成。

? 对包重放攻击的防御。作为无连接协议,I P很容易受到重放攻击的威胁。重放攻击是指攻击者发送一个目的主机已接收过的包,通过占用接收系统的资源,这种攻击使系统的可用性受到损害。为对付这种花招,I P s e c提供了包计数器机制。

? 加密。数据机密性是指只允许身份验证正确者访问数据,对其他任何人一律不准。它是通过使用加密来提供的。

? 有限的业务流机密性。有时候只使用加密数据不足以保护系统。只要知道一次加密交换的末端点、交互的频度或有关数据传送的其他信息,坚决的攻击者就有足够的信息来使系统混乱或毁灭系统。通过使用I P隧道方法,尤其是与安全性网关共同使用,I P s e c提供了有限的业务流机密性。

通过正确使用E S P头和A H,上述所有功能都有可能得以实现。目前,人们使用了很多密码功能,在下一节中将对此予以简要描述。后续节将扼要描述密钥管理基础设施。

9.2.1 加密和身份验证算法

由于对安全性的攻击方法多种多样,设计者很难预计到所有的攻击方法,因此设计安全性算法和协议非常困难。普遍为人接受的关于安全性方法的观点是,一个好的加密算法或身份验证算法即使被攻击者了解,该算法也是安全的。这一点对于I n t e r n e t安全性尤其重要。在I n t e r n e t中,使用嗅探器的攻击者通过侦听系统与其连接协商,经常能够确切了解系统使用的是哪一种算法。

与I n t e r n e t安全性相关的重要的密码功能大致有5类,包括对称加密、公共密钥加密、密钥交换、安全散列和数字签名。

1. 对称加密

大多数人都熟知对称加密这一加密方法。在这种方法中,每一方都使用相同的密钥来加密或解密。只要掌握了密钥,就可以破解使用此法加密的所有数据。这种方法有时也称作秘密密钥加密。通常对称加密效率很高,它是网络传送大量数据中最常用的一类加密方法。

常用的对称加密算法包括:

? 数据加密标准( D E S)。D E S首先由I B M公司在7 0年代提出,已成为国际标准。它有5 6位密钥。三重D E S算法对D E S略作变化,它使用D E S算法三次加密数据,从而改进了安全性。

? R C2、R C4和R C5。这些密码算法提供了可变长度密钥加密方法,由一家安全性动态公司,R S A数据安全公司授权使用。目前网景公司的N a v i g a t o r浏览器及其他很多I n t e r n e t 客户端和服务器端产品使用了这些密码。

? 其他算法。包括在加拿大开发的用于N o r t e l公司E n t r u s t产品的C A S T、国际数据加密算法( I D E A)、传闻由前苏联安全局开发的G O S T算法、由Bruce Schneier开发并在公共域发表的B l o w f i s h算法及由美国国家安全局开发并用于C l i p p e r芯片的契约密钥系统的S k i p j a c k 算法。

安全加密方法要求使用足够长的密钥。短密钥很容易为穷举攻击所破解。在穷举攻击中,攻击者使用计算机来对所有可能的密钥组合进行测试,很容易找到密钥。例如,长度为 4 0位的密钥就不够安全,因为使用相对而言并不算昂贵的计算机来进行穷举攻击,在很短的时间内就可以破获密钥。同样,单D E S算法已经被破解。一般而言,对于穷举攻击,在可预测的将来,1 28位还可能是安全的。

对于其他类型的攻击,对称加密算法也比较脆弱。大多数使用对称加密算法的应用往往使用会话密钥,即一个密钥只用于一个会话的数据传送,或在一次会话中使用几个密钥。这样,如果会话密钥丢失,则只有在此会话中传送的数据受损,不会影响到较长时期内交换的大量数据。

2. 公共密钥加密

公共密钥加密算法使用一对密钥。公共密钥与秘密密钥相关联,公共密钥是公开的。以公共密钥加密的数据只能以秘密密钥来解密,同样可以用公共密钥来解密以秘密密钥加密的数据。这样只要实体的秘密密钥不泄露,其他实体就可以确信以公共密钥加密的数据只能由相应秘密密钥的持有者来解密。尽管公共密钥加密算法的效率不高,但它和数字签名(参见后续讨论)均是最常用的对网络传送的会话密钥进行加密的算法。

最常用的一类公共密钥加密算法是R S A算法,该算法由Ron Rivest、Adi Shamir和L e n A d l e m a n开发,由R S A数据安全公司授权使用。R S A定义了用于选择和生成公共/秘密密钥对的机制,以及目前用于加密的数学函数。

3. 密钥交换

开放信道这种通信媒体上传送的数据可能被第三者窃听。在I n t e r n e t这样的开放信道上要实现秘密共享难度很大。但是很有必要实现对共享秘密的处理,因为两个实体之间需要共享用于加密的密钥。关于如何在公共信道上安全地处理共享密钥这一问题,有一些重要的加密算法,是以对除预定接受者之外的任何人都保密的方式来实现的。

D i f f i e-H e l l m a n密钥交换算法允许实体间交换足够的信息以产生会话加密密钥。按照惯例,假设一个密码协议的两个参与者实体分别是A l i c e和B o b,A l i c e使用B o b的公开值和自己的秘密值来计算出一个值;B o b也计算出自己的值并发给A l i c e,然后双方使用自己的秘密值来计算他们的共享密钥。其中的数学计算相对比较简单,而且不属于本书讨论的范围。算法的概要是B o b和A l i c e能够互相发送足够的信息给对方以计算出他们的共享密钥,但是这些信息却不足以让攻击者计算出密钥。

D i f f i e-H e l l m a n算法通常称为公共密钥算法,但它并不是一种公共密钥加密算法。该算法可用于计算密钥,但密钥必须和某种其他加密算法一起使用。但是, D i f f i e-H e l l m a n算法可用于身份验证。Network Associates公司的P G P公共密钥软件中就使用了此算法。

密钥交换是构成任何完整的I n t e r n e t安全性体系都必备的。此外,I P s e c安全性体系结构还包括I n t e r n e t密钥交换( I K E)及I n t e r n e t安全性关联和密钥管理协议( I S A K M P)。在后续章节中将讨论这些标准和其他相关标准。

4. 安全散列

散列是一定量数据的数据摘要的一种排序。检查数字是简单的散列类型,而安全散列则产生较长的结果,经常是1 28位。对于良好的安全散列,攻击者很难颠倒设计或以其他方式毁灭。安全散列可以与密钥一起使用,也可以单独使用。其目的是提供报文的数字摘要,用来验证已经收到的数据是否与发送者所发送的相同。发送者计算散列并将其值包含在数据中,接收者对收到的数据进行散列计算,如果结果值与数据中所携带的散列值匹配,接收者就可以确认数据的完整性。

常用的散列方法由R S A数据安全公司提出,包括M D2、M D4和M D5报文摘要函数。安全散列算法( S H A)是由美国国家标准和技术协会( N I S T)所开发的标准摘要函数。散列可以单独使用,也可以和数字签名一起使用。

5. 数字签名

前面提到的公共密钥加密依赖于密钥对,而数字签名则依靠公共密钥加密的特性,即允许数据以实体密钥对中的秘密密钥来加密,以公共密钥来解密。发送者首先对于要签名的数据进行安全散列计算,然后对结果使用秘密密钥加密。而接收者首先进行相同的散列计算,然后对发送者所附加的加密值进行解密。如果两次计算的值能够匹配,接收者就可以确信公共密钥的主人就是对报文签名的实体,且报文在传送中并没有被修改。

R S A公共密钥加密算法可以用于数字签名。签名实体为待签名的数据建立散列,然后以自己的密钥对散列加密;证实实体则对接收到的数据进行相同的散列计算,使用签名实体的公共密钥对签名解密,并且比较所得的两个值。如果散列与解密的签名相同,则数据就得到证实。

数字签名有如下几种含义:

? 如果签名得到证实,说明所接收到的报文在从签名到接收的一段时间内未经任何改动。

? 如果不能证实签名,则说明或者是报文在传送过程中受到了破坏或篡改,或者是签名计算错误,又或者是签名在传送过程中被破坏或篡改。在上述任何情况下,未得到证实的签名并不一定是坏事,但是要求对报文重新签名并重传,以便最终能为接收者所接受。

? 如果签名得到证实,意味着与公共密钥相关联的实体是对报文签名的唯一实体。换言之,与公共密钥关联的实体不能否认自己的签名,这是数据签名的重要特性,称为不可抵赖。

还有其他机制可以实现数据签名,而R S A是其中应用最广泛的,并且已在大多数I n t e r n e t 产品中实现。

9.2.2 安全性关联

安全性关联是( S A)I P s e c的基本概念。安全性关联包含能够唯一标识一个安全性连接的数据组合。连接是单方向的,每个S A由目的地址和安全性参数索引( S P I)来定义。其中S P I是对RFC 1825修改后的I n t e r n e t草案中所要求的标识符,它说明使用S A的I P头类型,如A H或E S P。S P I为3 2位,用于对S A进行标识及区分同一个目的地址所链接的多个S A。进行安全通信的两个系统有两个不同的S A,每个目的地址对应一个。

每个S A还包括与连接协商的安全性类型相关的多个信息。这意味着系统必须了解其S A、与S A目的主机所协商的加密或身份验证算法的类型、密钥长度和密钥生存期。

9.2.3 密钥管理

如何管理密钥是I n t e r n e t安全性专业人士面临的最复杂的问题之一。密钥管理不仅包括使用密钥协议来分发密钥,还包括在通信系统之间对密钥的长度、生存期和密钥算法进行协商。

I n t e r n e t工作组和研究团体对此已进行了大量工作,但是由于尚未达成一致,目前还没有发表任何R F C。

I n t e r n e t安全性关联密钥管理协议( I S A K M P)为密钥的安全交换定义了整个基本构架。

I S A K M P实际上是一个应用协议,协议中定义了用于系统之间协商密钥交换的不同类型报文,它在传输层使用U D P。

但是I S A K M P只是特定机制所使用的框架,而没有定义实际完成交换的机制和算法。这些年来在不同的建议中定义了大量的交换机制,通常以D i f f i e-H e l l m a n密钥交换为基础。主要的提案包括:

? P h o t u r i s。此提案基于D i f fie-Hellman 算法,但增加了要求,即要求节点首先发送一个

c o o k i e(一个随机数),然后服务器给予应答,这样减少了否认服务攻击的威胁(否认服务

攻击是由攻击者伪造源地址而导致的)。P h o t u r i s也要求通信各方都必须对协商好的密钥签名,以减少中间者攻击的危害(所谓中间者攻击,是指某个攻击者对系统的A l i c e冒充自己是B o b,又对另一个系统的B o b冒充自己是A l i c e)。

? S u n公司的I n t e r n e t协议的简单密钥管理( S K I P)。S K I P也是以D i f f i e-H e l l m a n密钥交换为基础,但是它并不要求通信各方使用随机数来计算其密钥,而是要求使用静态的密码表。

各方查找密码表中的秘密值,然后基于查到的秘密值来计算,并传送所算出的值。

? O A K L E Y。此机制与P h o t u r i s有某些相似特性,但在不考虑否认服务攻击的情形下,它提供不同的密钥交换模式。

1 998年秋,基于O A K L E Y和S K E M E(I n t e r n e t的安全密钥交换机制),I n t e r n e t密钥交换最终在I n t e r n e t密钥交换规范中得以定义。

读者应该注意到,人工密钥管理也是一个重要选项,而且在很多情况下是唯一的选项。人工方法要求个人单独交付密钥,并使用密钥来配置网络设备。即使在开放标准已经充分确定并且实现之后,人工密钥管理仍将继续是一个重要选择,对于商业产品尤其如此。

9.2.4 实现IPsec

I P层安全性用于保护I P数据报。它不一定要涉及用户或应用。这意味着用户可以愉快地使用应用程序,而无需注意所有的数据报在发送到I n t e r n e t之前,需要进行加密或身份验证,当然在这种情形下所有的加密数据报都要由另一端的主机正确地解密。

这样就引入了如何实现I P s e c的问题,有如下三种可能方法:

? 将I P s e c作为I P v4栈或I P v6栈的一部分来实现。这种方法将I P安全性支持引入I P网络栈,并且作为任何I P实现的一个必备部分。但是,这种方法也要求对整个实体栈进行更新以反映上述改变。

? 将I P s e c作为“栈中的一块”( B I T S)来实现。这种方法将特殊的I P s e c代码插入到网络栈中,在现有I P网络软件之下、本地链路软件之上。换言之,这种方法通过一段软件来实现安全性,该软件截获从现有I P栈向本地链路层接口传送的数据报,对这些数据报进行必要的安全性处理,然后再交给链路层。这种方法可用于将现有系统升级为支持I P s e c

的系统,且不要求重写原有的I P 栈软件。? 将I P s e c 作为“线路的一块”( B I T W )来实现。这种方法使用外部加密硬件来执行安全性处理功能。该硬件设备通常是作为一种路由器使用的I P 设备,或者更确切一些,是安全性网关,此网关为位于它后面的所有系统发送的I P 数据报服务。如果这样的设备只用于一个主机,其工作情况与B I T S 方法类似,但如果一个B I T W 设备为多个系统服务,实现相对要复杂得多。

上述各种方法的差别不在于字面上,而在于它们的适用情况不同。要求高级别安全性的应用最好使用硬件方法实现;而如果系统不具备与新的I P s e c 兼容的网络栈,应用最好选择

B I T S 方法。

9.2.5 隧道模式与透明模式

本书在后续章节中讨论移植策略时,还将涉及协议隧道概念。而对于I P 安全性,隧道同样重要。见图9 -1,两个系统建立了S A ,以便在I n t e r n e t 上安全地通信。其中一个系统产生网络业务流,经过加密或者签名,然后发送给目的系统。而在接收方,首先对收到的数据报进行解密或者身份验证,把净荷向上传送给接收系统的网络栈,由使用数据的应用进行最后的处理。两个主机之间的通信如同没有安全性头一样简单,而且数据报实际的I P 头必须要暴露出来以便在I n t e r n e t 选路,因此这种方法称为使用S A 的透明模式。

图9-1 一对主机使用IPsec 进行透明通信

S A 也可以用来将安全I P 以隧道方式通过互联网络。见图9 -2,来自系统A 的所有I P 包首先转发到安全性网关X ,由X 建立一条跨越I n t e r n e t 、目的地为安全性网关Y 的隧道,由Y 对经隧道方式传来的数据拆包并转发。安全性网关Y 可能将包转发给本地互联网络内的任一主机B 、C 或D ,也可能转发给外部主机,如M 。这取决于源主机如何为这些包定向。如果S A 目的节点是安全性网关,则称为隧道关联。即,隧道传送既可以在两个安全性网关之间进行(见图9 -2),也可以在正规节点和安全性网关之间进行。因此,图9 -2中的主机M 可以与安全性网关X 或Y 建立隧道连接,M 所发送的数据报首先传送给安全性网关,然后经过网关解密或身份验证之后,再进行正确地转发,由此可见这是一种隧道方式。

9-2 IP 安全性隧道

9.3 IPv6安全性头

如前所述,I P s e c 安全性服务完全通过A H 和封装安全性净荷( E S P )头相结合的机制来提供,当然还要有正确的相关密钥管理协议。RFC 1826(IP 身份验证头)中对A H 进行了描述,而E S P 头在RFC 1827(IP 封装安全性净荷( E S P ))中描述。上述R F C 及I P 安全性体系结构R F C 仅仅是解决安全性问题的第一步。I P s e c 工作组各成员正继续对这些扩展头的规范进行改进,这些文档的当前草案的篇幅几乎是原R F C 的两倍。这些草案保留了原R F C 的语言和意图,并进行了扩充,对包头及其功能的描述更加完整,综合性更强。

各安全性头可以单独使用,也可以一起使用。如果一起使用多个扩展头, A H 应置于E S P 头之前,这样,首先进行身份验证,然后再对E S P 头净荷解密。使用I P s e c 隧道时,这些扩展头也可以嵌套。即,源节点对I P 包进行加密和数字签名,然后发送给本地安全性网关,该网关则再次进行加密和数字签名,然后发送给另一个安全性网关。

A H 和E S P 头既可以用于I P v 4,也可以用于I P v 6,这一点很重要。本节将讨论这些安全性扩展头在I P v 6中如何使用,对于I P v 4,这些扩展头作为选项加在正常的I P v 4头中。

9.3.1 身份验证头

A H 的作用如下:

? 为I P 数据报提供强大的完整性服务,这意味着A H 可用于为I P 数据报承载内容验证数据。? 为I P 数据报提供强大的身份验证,这意味着A H 可用于将实体与数据报内容相链接。? 如果在完整性服务中使用了公共密钥数字签名算法, A H 可以为I P 数据报提供不可抵赖服务。

? 通过使用顺序号字段来防止重放攻击。

A H 可以在隧道模式或透明模式下使用,这意味着它既可用于为两个节点间的简单直接的数据报传送提供身份验证和保护,也可用于对发给安全性网关或由安全性网关发出的整个数据报流进行封装。

1. 语义

内联网

Internet

内联网

I P v 6中的A H 与其他扩展头一起使用时,必须置于那些将由中间路由器处理的扩展头之后,及那些只能由数据报目的地处理的扩展头之前。这意味着A H 应置于逐跳扩展头、选路扩展头或分段扩展头之后。根据不同情况,A H 可在目的地选项扩展头之前,也可在其后。

在透明模式中,A H 保护初始I P 数据报的净荷,也保护在逐跳转发中不变化的部分I P 头,如跳极限字段或选路扩展头。图9 -3中显示了在透明模式中,当计算和增加A H 时,I P 数据报的变化情况。图中的目的地选项头也可以置于A H 之前。对于目的I P 地址和扩展头,仅在逐跳转发它们不发生变化的情况下,才能得到保护。

图9-3 在透明模式中为IP 数据报增加AH

当A H 用于隧道模式中时,使用方法与上不同。图9 -4表明了其中的区别。初始的目的I P 地址与整个初始I P 数据报一起,封装在全新的I P 数据报中,该数据报再发送到安全性网关。因此,整个初始I P 数据报以及传送中不变的封装I P 头部分都得以保护。

图9-4 在隧道模式中为IP 数据报增加AH

2. AH 字段

图9 -5表示了A H 的格式和各字段。与所有的I P v 6扩展头一样,第一个字段是8位的下一个头字段,它表示后续的扩展头协议。其他字段包括:

(1) 净荷长度。此8位字段指明A H 的整个长度,其值以3 2位字为单位,并减去2 。正如初始的定义,A H 包含6 4位,其余部分为身份验证数据(参见后续内容)。因此净荷长度字段只指出身份验证数据以32 位字为单位的长度。加入序列号字段(参见后续内容)后,此值等于身份验证数据加上序列号字段的长度。

(2) 保留。净荷长度字段之后的1 6位为将来使用而保留。目前,此1 6位必须全部置为0。

(3) 安全性参数索引( S P I )。此3 2位字段是一个任意数。与目的I P 地址和安全性协议一起使用,S P I 是A H 使用的S A 的唯一标识。若S P I 值为0,则表示只用于本地而不予传送;值1 ~255被I n t e r n e t 分配号码授权机构( I A N A )保留作将来使用。

(4) 序列号。此3 2位字段是一个必备的计数器,由发送者插入I P 头,但不一定由接收者使计算AH 之前的数据报

目的IP 头扩展头TCP 数据

插入AH 之后的数据报

目的IP 头扩展头AH 目的地选项TCP 数据

验证除了改变的字段以外的部分

GW IP 头扩展头AH 原始IP 头TCP 数据

扩展头原始IP 头扩展头TCP 数据

原始IP 数据报

使用隧道方式向安全性网关发送的IP 数据报(GW)

用。从0开始,每发送一个数据报,该计数器增1,这可用于预防重放攻击。若接收者使用此字段来对抗重放攻击,对于序列号与已收到的数据报相同的数据报,接收者将予以丢弃。这意味着若计数器重新开始循环,即已经接收到23 2个数据报,则必须协商新的S A 。否则,一旦计数器重新置位,接收系统将丢弃所有的数据报。

(5) 身份验证数据。此字段包含完整性检查值( I C V ),这是A H 的核心。其内容的长度必须是3 2位的整数倍,为满足这个条件,其中可能包含填充字段。下节将讨论该值的计算。

图9-5 AH 格式和字段

3. 计算完整性检查值

对于如何计算I C V 以及使用什么机制来计算,RFC 1826的描述比较模糊。实际上,术语“完整性检查值”在该文档中并没有出现,而是出现在将要代替RFC 1826的后续草案中。预期适当的身份验证算法将导致I C V 的产生。建议的算法包括:

? 报文身份验证代码( M A C ),然后对其结果用适当的对称加密算法(如D E S )进行加密。? 安全散列功能,如M D 5或S H A 的更新版S H A -1。

按照标准的约定,预计A H 的任何实现将必须支持M D 5和S H A -1密钥散列。身份验证数据针对整个I P 数据报净荷以及I P 头的不变部分或可预测部分来计算。

9.3.2 封装安全性净荷头

E S P 头被用于允许I P 节点发送和接收净荷经过加密的数据报。更确切一点,E S P 头是为了提供几种不同的服务,其中某些服务与A H 有所重叠。E S P 头提供的服务包括:? 通过加密提供数据报的机密性。

? 通过使用公共密钥加密对数据来源进行身份验证。

? 通过由A H 提供的序列号机制提供对抗重放服务。

? 通过使用安全性网关来提供有限的业务流机密性。

E S P 头可以和A H 结合使用。实际上,如果E S P 头不使用身份验证的机制,建议将A H 和E S P 头一起使用。

1. 语义

E S P 头必须跟随在去往目的节点所途经的中间节点需要处理的扩展头之后, E S P 头之后的数据都可能被加密。实际上,加密的净荷是作为E S P 头的最后一个字段(参见后续内容)。与A H 类似,E S P 既可用于隧道模式,也可用于透明模式。在透明模式中,如果有A H ,I P 头以及逐跳扩展头、选路扩展头或分段扩展头都在A H 之前,其后跟随E S P 头。任何目的地选7 8第二部分I P v 6细节下载序列号字段安全性参数索引(SPI)

下一个头净荷长度

保留

身份验证数据(变长)

项头可以在E S P头之前,也可以在E S P头之后,或者E S P头前后都有,而E S P头之后的扩展头将被加密。

在很多方面,仅仅是常规数据报带着加密净荷从源端传送到目的端。某些情况下,适合在透明模式中使用E S P。但是,这种模式使攻击者有可能研究两个节点之间的业务流,留意正在通信的节点、节点之间交换的数据量、交换的时间等。所有这些信息都可能为攻击者提供有助于对通信双方进行攻击的信息。

类似前面描述的A H的情形,使用安全性网关是一种替代方法。安全性网关可以直接与节点连接,也可以链接到另一个安全性网关。单个节点可以在隧道模式中使用E S P,即加密所有出境包,并封装到单独的I P数据报流中,再发送给安全性网关。然后网关解密业务流,并重新将原始I P数据报发往目的地。

使用隧道模式时,E S P头对整个I P数据报进行封装,并作为I P头的扩展将数据报定向到安全性网关。E S P头与A H的结合也有几种不同方式,例如以隧道方法传送的数据报可能有透明模式的A H。

2. 字段

E S P头与其他扩展头不同。其一,下一个头字段的位置接近E S P头的末端。其二,E S P头之前的扩展头将其下一个头字段值置为5 0,以指明随后是E S P头。E S P头的其余部分将可能包括如下字段:

? 安全性参数索引( S P I)。与上节提到的A H中的3 2位S P I值相同。通信节点使用该值来指出S A,S A用于确定数据应如何加密。

? 序列号。3 2位,从0开始,每发送一个数据报,该值加1。如前所述,序列号可用于防御重放攻击,在循环用完所有23 2个值之前,必须建立新的S A。

? 净荷数据。此字段长度可变,它实际上包含数据报的加密部分以及加密算法需要的补充数据,例如初始化数据。

? 填充。头的加密部分(净荷)必须在正确的边界终止,因此有时需要填充。

? 填充长度。此字段指明净荷数据所需要填充的数据量。

? 下一个头:此字段像其他I P v6扩展头中的字段一样操作,但是它不位于扩展头的开始,而是靠近扩展头末端。

? 身份验证数据。此字段是一个I C V,它对除身份验证数据本身之外的整个E S P头进行计算。这种身份验证计算是可选的。

3. 进行封装

预计一个兼容的E S P实现至少要求支持D E S加密和S H A-1身份验证。它也可以支持其他算法,但支持上述两个算法是最低要求。

相关文档