各安全性头可以单独使用,也可以一起使用。如果一起使用多个扩展头,AH应置于ESP 头之前,这样,首先进行身份验证,然后再对ESP头净荷解密。使用IPsec隧道时,这些扩展头也可以嵌套。即,源节点对IP包进行加密和数字签名,然后发送给本地安全性网关,该网关则再次进行加密和数字签名,然后发送给另一个安全性网关。
AH和ESP头既可以用于IPV4,也可以用于IPV6,这一点很重要。本节将讨论这些安全性扩展头在IPV6中如何使用,对于IPV4,这些扩展头作为选项加在正常的IPV4头中。
身份验证头
AH的作用如下:
• 为IP数据报提供强大的完整性服务,这意味着AH可用于为IP数据报承载内容验证数据。
• 为IP数据报提供强大的身份验证,这意味着AH可用于将实体与数据报内容相链接。
• 如果在完整性服务中使用了公共密钥数字签名算法,AH可以为IP数据报提供不可抵赖服务。
• 通过使用顺序号字段来防止重放攻击。
AH可以在隧道模式或透明模式下使用,这意味着它既可用于为两个节点间的简单直接的数据报传送提供身份验证和保护,也可用于对发给安全性网关或由安全性网关发出的整个数据报流进行封装。
1. 语义
IPV6中的AH与其他扩展头一起使用时,必须置于那些将由中间路由器处理的扩展头之后,及那些只能由数据报目的地处理的扩展头之前。这意味着AH应置于逐跳扩展头、选路扩展头或分段扩展头之后。根据不同情况,AH可在目的地选项扩展头之前,也可在其后。
在透明模式中,AH保护初始IP数据报的净荷,也保护在逐跳转发中不变化的部分IP头,如跳极限字段或选路扩展头。图9 - 3中显示了在透明模式中,当计算和增加AH时,IP数据报的变化情况。图中的目的地选项头也可以置于AH之前。对于目的IP地址和扩展头,仅在逐跳转发它们不发生变化的情况下,才能得到保护。
当AH用于隧道模式中时,使用方法与上不同。图9 - 4表明了其中的区别。初始的目的IP地址与整个初始IP数据报一起,封装在全新的IP数据报中,该数据报再发送到安全性网关。因此,整个初始IP数据报以及传送中不变的封装IP头部分都得以保护。
AH 字段
下图表示了AH的格式和各字段。与所有的IPV6扩展头一样,第一个字段是8位的下一个头字段,它表示后续的扩展头协议。其他字段包括:
(1) 净荷长度。此8位字段指明AH的整个长度,其值以3 2位字为单位,并减去2 。正如初始的定义,AH包含6 4位,其余部分为身份验证数据(参见后续内容)。因此净荷长度字段只指出身份验证数据以32 位字为单位的长度。加入序列号字段(参见后续内容)后,此值等于身份验证数据加上序列号字段的长度。
(2) 保留。净荷长度字段之后的16位为将来使用而保留。目前,此1 6位必须全部置为0。
(3) 安全性参数索引( SPI )。此32位字段是一个任意数。与目的IP地址和安全性协议一起使用,SPI是AH使用的S A的唯一标识。若SPI值为0,则表示只用于本地而不予传送;值1 ~ 255 被Internet分配号码授权机构( I ANA )保留作将来使用。
(4) 序列号。此3 2位字段是一个必备的计数器,由发送者插入IP头,但不一定由接收者使用。从0开始,每发送一个数据报,该计数器增1,这可用于预防重放攻击。若接收者使用此字段来对抗重放攻击,对于序列号与已收到的数据报相同的数据报,接收者将予以丢弃。这意味着若计数器重新开始循环,即已经接收到23 2个数据报,则必须协商新的S A。否则,一旦计数器重新置位,接收系统将丢弃所有的数据报。
5) 身份验证数据。此字段包含完整性检查值( I C V ),这是AH的核心。其内容的长度必须是3 2位的整数倍,为满足这个条件,其中可能包含填充字段。
3. 计算完整性检查值对于如何计算ICV以及使用什么机制来计算,RFC1826的描述比较模糊。实际上,术语“完整性检查值”在该文档中并没有出现,而是出现在将要代替RFC1826的后续草案中。预期适当的身份验证算法将导致I C V的产生。建议的算法包括:
• 报文身份验证代码( MAC ),然后对其结果用适当的对称加密算法(如D E S )进行加密。
• 安全散列功能,如MD5或SHA的更新版SHA-1。
按照标准的约定,预计AH的任何实现将必须支持MD5和SHA-1密钥散列。身份验证数据针对整个IP数据报净荷以及IP头的不变部分或可预测部分来计算。
封装安全性净荷头
ESP头被用于允许IP节点发送和接收净荷经过加密的数据报。更确切一点,ESP头是为了提供几种不同的服务,其中某些服务与AH有所重叠。ESP头提供的服务包括:
• 通过加密提供数据报的机密性。
• 通过使用公共密钥加密对数据来源进行身份验证。
• 通过由AH提供的序列号机制提供对抗重放服务。
• 通过使用安全性网关来提供有限的业务流机密性。
ESP头可以和AH结合使用。实际上,如果ESP头不使用身份验证的机制,建议将AH和ESP头一起使用。
1. 语义ESP头必须跟随在去往目的节点所途经的中间节点需要处理的扩展头之后,ESP头之后的数据都可能被加密。实际上,加密的净荷是作为ESP头的最后一个字段。
与AH类似,ESP既可用于隧道模式,也可用于透明模式。在透明模式中,如果有AH,IP 头以及逐跳扩展头、选路扩展头或分段扩展头都在AH之前,其后跟随ESP头。任何目的地选项头可以在ESP头之前,也可以在ESP头之后,或者ESP头前后都有,而ESP头之后的扩展头将被加密。
在很多方面,仅仅是常规数据报带着加密净荷从源端传送到目的端。某些情况下,适合在透明模式中使用ESP。但是,这种模式使攻击者有可能研究两个节点之间的业务流,留意正在通信的节点、节点之间交换的数据量、交换的时间等。所有这些信息都可能为攻击者提供有助于对通信双方进行攻击的信息。
类似前面描述的AH的情形,使用安全性网关是一种替代方法。安全性网关可以直接与节点连接,也可以链接到另一个安全性网关。单个节点可以在隧道模式中使用ESP,即加密所有出境包,并封装到单独的IP数据报流中,再发送给安全性网关。然后网关解密业务流,并重新将原始IP数据报发往目的地。
使用隧道模式时,ESP头对整个IP数据报进行封装,并作为IP头的扩展将数据报定向到安全性网关。ESP头与AH的结合也有几种不同方式,例如以隧道方法传送的数据报可能有透明模式的AH。
2. 字段
ESP头与其他扩展头不同。其一,下一个头字段的位置接近ESP头的末端。其二,ESP头之前的扩展头将其下一个头字段值置为50,以指明随后是ESP头。ESP头的其余部分将可能包括如下字段:
• 安全性参数索引( SPI )。与上节提到的AH中的3 2位S P I值相同。通信节点使用该值来指出S A,S A用于确定数据应如何加密。
• 序列号。3 2位,从0开始,每发送一个数据报,该值加1。如前所述,序列号可用于防御重放攻击,在循环用完所有23 2个值之前,必须建立新的S A。
• 净荷数据。此字段长度可变,它实际上包含数据报的加密部分以及加密算法需要的补充数据,例如初始化数据。
• 填充。头的加密部分(净荷)必须在正确的边界终止,因此有时需要填充。
• 填充长度。此字段指明净荷数据所需要填充的数据量。
• 下一个头:此字段像其他IPV6扩展头中的字段一样操作,但是它不位于扩展头的开始,而是靠近扩展头末端。
• 身份验证数据。此字段是一个I C V,它对除身份验证数据本身之外的整个ESP头进行计算。这种身份验证计算是可选的。
3. 进行封装
预计一个兼容的ESP实现至少要求支持DES加密和SHA-1身份验证。它也可以支持其他算法,但支持上述两个算法是最低要求。