目前,IPSec是VPN构建中使用最为广泛的一种协议,将来可能成为IP-VPN的标准。在基于IPSec的VPN实现中,加密算法的选择是核心问题,它直接影响到系统的安全性。正是如此,由于AES加密算法具有卓越的性能,使用AES加密机制能够充分保证IPSec VPN系统的安全和效率。
一、IPSec体系结构
IPSec是IP Security(IP安全)的缩写,是由IETF IPSec工作组提出的将安全机制引入TCP/IP网络的一系列标准。设计IPSec的目的足为IPv4和IPv6提供可互操作的、高性能的、基于加密技术的通信安全。IPSec协议主要由IP验证头(IPAuthentication Header, AH)、封装安全载荷(EncapsulatingSecurity Payload,ESP)以及Internet密钥交换(Internet KeyExchange,IKE)3个子协议组成,同时还涉及认证、加密算法和安全关联(Security Association,SA)等方面。它们之间的关系如图1所示。
封装安全载荷(ESP)可确保IP数据包的机密性、数据的完整性以及对数据源认证。此外,它也能负责对重放攻击的抵抗。IP验证头(AH)与ESP类似,也提供了数据完整性、数据源认证以及抗重放攻击的能力。但它不能用来保证数据的机密性。Internet密钥交换(IKE)协议足由“Internet安全关联和密钥管理”(ISAKMP)协议、Oaklay协议和SKEME协议组成的一种“混合型”协议,并在ISAKMP规定的框架内运作。IKE协议定义了通信实体间进行身份认证、SA创建、加密算法协商以及共享会话密钥生成的方法。
二、AES加密机制在IPSec协议中的应用
Rijndael加密算法是一个分组迭代加密算法,采用可变的密钥长度和分组长度,能够有效地抵抗差分和线性分析的攻击,确保了算法的安全性。但为了满足AES的要求,Rijndael加密算法固定分组长度为128位,密钥长度和轮数可变。NIST为AES加密算法和其它一些联邦信息处理标准(FIPS)已经认可的密码算法定义了5种操作模式,密码分组链接(Cipher Block Chaining,CBC)模式,电子密码本(ElectronicCodeBook,ECB)模式,密码反馈(Cipher FeedBack,CFB)模式,输出反馈(Output FeedBack,OFB)模式和计数(Counter, CTR)模式。IETF IPSec工作组下一步正试图使AES成为IPSec ESP中的默认加密算法,要求所有IPSec实现必须兼容AES加密算法。
下面主要分析在IPSec ESP中应用AES密码分组链接模式(AES-CBC)和AES计数模式(AES-CTR)的加密机制。
1、ESPAES-CBC加密机制
对称分组加密算法的CBC模式是一种非常理想的操作模式,也是ESP加密机制中的需求模式。在AES-CBC加密过程中,明文被加密之前要与前面的密文进行异或运算。
ESP AES-CBC需要一个显示的初始化向量(IV),用于与第一个明文分组在加密之前进行异或运算。设加密密钥为K,明文P以128位大小分组为P1P2…Pj…,图2展示了AES-CBC是如何工作的。
下面就IPSec ESP中应用AES-CBC加密机制值得注意的一些事项进行分析。
(1)初始化向量(IV)
IV不需要保密,它可以以明文形式与密文一起传送。Ⅳ值必须选取事先无法预测的随机数值,大小和AES分组大小相同。IVs的选取不可以使用计数器方式或者低汉明距的数据源,以防止AES-CBC加密多个数据包中存在的非常相似的明文。
(2)密钥长度和加密轮数
AES支持3种密钥长度:128位,192位和256位。所有的实现必须支持默认的密钥长度128位,同时可以支持192位和256位。对于不同的密钥长度必须使用相应的加密轮数,具体情况见表1。
(3)分组大小和明文填充
AES使用128位分组大小。填充要求使得最后一个明文短分组在加密之前进行适当的填充处理,使其为128位分组大小。这里需要填充的明文还包括ESP中定义的ESP填充长度域和其它一些域的数据。
(4)IKE协商和密钥材料
对于IKE阶段l协商,IANA给AES-CBC加密算法分配了ID为7的标识符。在阶段2协商中,IANA为ESP_ AES分配了ESP变换标识符12。由于AES允许使用可变的密钥
长度,因此密钥长度的属性须在阶段1、2协商中具体指定。
IKE使用一个伪随机函数(Pseudo-random Function,PRF)生成密钥材料。PRF反复使用可以生成任意长度的密钥材料(KEYMAT)。在IPSec中使用AES时,密钥材料长度由协商的Diffie-Hellam(DH)群和协商的密钥长度确定。在IKE中,AES使用密钥长度为128位、192位和256位时,分别需要大约3 200位、8 000位和15 400位强度的DH群。密钥选取KEYMAT的开始位,长度为密钥长度。
(5)HASH算法
作为SHA-1的后继算法,SHA-256,SHA-384和SHA-512输出分别为3种不同的长度(256位,384位和512位),对于AES的3种不同密钥长度(128位,192位和256位)在IKE的生成和ESP的认证是足够的。AES密钥长度为128位时,目前HMAC-SHA-I[9J和HMAC-MD5cloJ仍然拥有足够的强度用于IKE中生成AES的128位密钥和ESP中认证AES使用128位密钥的加密。
2、 ESPAES-CTR加密机制
计数(CTR)模式是NIST为对称分组加密算法新开发的一种操作模式。AES-CTR加密机制对于高速网络,具有许多引人的特性。首先,AES-CTR使用AES分组密码加密连续的计数分组(CTRBLK:Counter Block)生成密钥流。数据文件加密、解密时,明、密文与密钥流进行异或运算。AES-CTR易于实现,可以进行流水线和并行处理。多个独立的AES加密实现可以用于提高效率。例如,AES-CTR加密处理可以进行双机并行实现,从而达到双倍效率的吞吐量。AES-CTR支持密钥流的预计算。预计算处理能够减少数据包的延迟性。无论对于加密还是解密,AES-CTR仅使用AES的加密操作。这使得AES-CTR相较于AES其它模式实现更为精简。如果AES-CTR得到正确使用,能够提供很强的保密性。Bellare,Desai,Jokipii,Rogaway证明了同一个分组加密算法的CTR模式拥有不低于CBC模式的安全强度。
为了使用AES-CTR加密一个数据包,加密者需要分割明文P为128位的分组,P= P1P2......Pn。最后的分组Pn不需要是128位,即可以少于128位。AES对每个计数分组
(CTRBLK)加密后生成128位密钥流。每个明文分组与密钥流分组进行异或运算生成密文C= C1C2 ......Cn。
CTRBLK的前96位由一个32位的nonce值和64位的IV值组成,其余32位是一个初始化为1的分组计数器(Block_Counter)值。表2是一个计数分组的格式。
其中,分组计数器按分组次序进行递增加l运算,从而生成连续的CTRBLK,AES再加密这些CTRBLK生成用于文件加密、解密的密钥流。图3为加密、解密n个明、密文分组情况。
在图3中,AESk()函数为使用密钥K执行AES加密操作。
TRUNC()函数用于截短最后一个AES加密输出的密钥流分组,使其长度与明、密文分组的长度相同,并输出截取的位。
在ESP中使用AES-CTR除了与AES-CBC相类似的情形外,还需要注意以下几个方面。
(1)初始化向量(IV)
AES-CTR需要一个显示的IV,大小为64位。IV必须由加密者以某种方法选取,并确保对给定的密钥该Ⅳ值仅使用1次。加密者可以使用任何确保IV值唯一性的方法。通常的方法有使用按数据包次序进行递增加l运算的计数器或者一个线性反馈移位寄存器(LFSRs)。
(2)分组大小和明文填充
AES使用128位分组大小。所以,每个AES加密操作生成128位的密钥流。AES-CTR加密时密钥流与明文进行异或运算,解密时密钥流与密文进行异或运算。如果密钥流的长度比明文或密文更长,那么简单地丢弃超出的密钥流位即可。因此,AES-CTR不要求填充明文长度到分组大小的倍式。
(3)IKE协商、密钥材料以及nonce值
对于IKE阶段1协商,目前IANA还未给使用显示IV的AES-CTR分配ID标识符。阶段2协商中,IANA为AES—CTR分配了ESP变换标识符13。
AES-CTR实现须使用新的密钥。IKE能够建立如此的密钥。KEYMAT大小必须是所需AES密钥长度再加上32位。
nonce值通常选取KEYMAT的后32位。nonce值无须保密,但它在指派之前必须无法预测。
(4) ESP鉴别
由于AES-CTR本身的特性,攻击者得到了正确密文就可以轻易地伪造有效的密文。
假设加密者使用密钥流分组K1,K2,K3加密明文分组P1,P2,P3,生成密文分组C1,C2,C3。如果攻击者能够得到这些密文分组,就可使用自己的明文分组Q1,Q2,Q3来伪造出新的明文分组,从而达到攻击的目的。具体情形如下:
这样,解密者得到就是攻击者生成的伪造明文Qi+Pi{i=1,2,3),而非最初的明文。因此,AES-CTR必须联合使用一个非空的ESP鉴别方法,否则就可能存在灾难性的后果。使用HMAC-SHA-1-96是一个可靠的选择。
(5)计数分组(CTRBLK)
如果加密者能够正确使用AES-CTR,就能获得很强的数据保密性。然而不幸的是,AES-CTR非常容易错误使用。对于同一个密钥,如果加密者使用相同的CTRBLK加密了多个数据包,那么相同的密钥流也就用于加密了多个明文,从而极大地削弱数据的保密性。
下面就是密钥流分组K1,K2,K3同时加密两个明文分组P1,P2,P3和Q1,Q2,Q3的情形。此时,可以得到两个密文分组P1+K1+Q1。Ki(i =1,2,3)。如果攻击者能够获得这两个密文分组,并进行如下的计算:
那么,攻击者就得到了两个明文之间的异或关系,并可以相对容易地分离它们。因此,对于同一个密钥来说,加密者必须使用任何能够保证CTRBLK的唯一性方法,以免出现以上灾难性的后果。
小知识之IPSec协议
“Internet 协议安全性 (IPSec)”是一种开放标准的框架结构,通过使用加密的安全服务以确保在 Internet 协议 (IP) 网络上进行保密而安全的通讯。Microsoft_ Windows_ 2000、Windows XP 和 Windows Server 2003 家族实施 IPSec 是基于“Internet 工程任务组 (IETF)”IPSec_工作组开发的标准。