AES加密機(jī)制在IPSec協(xié)議中的應(yīng)用

目前,IPSec是VPN構(gòu)建中使用最為廣泛的一種協(xié)議,將來(lái)可能成為IP-VPN的標(biāo)準(zhǔn)。在基于IPSec的VPN實(shí)現(xiàn)中,加密算法的選擇是核心問(wèn)題,它直接影響到系統(tǒng)的安全性。正是如此,由于AES加密算法具有卓越的性能,使用AES加密機(jī)制能夠充分保證IPSec VPN系統(tǒng)的安全和效率。

一、IPSec體系結(jié)構(gòu)

IPSec是IP Security(IP安全)的縮寫,是由IETF IPSec工作組提出的將安全機(jī)制引入TCP/IP網(wǎng)絡(luò)的一系列標(biāo)準(zhǔn)。設(shè)計(jì)IPSec的目的足為IPv4和IPv6提供可互操作的、高性能的、基于加密技術(shù)的通信安全。IPSec協(xié)議主要由IP驗(yàn)證頭(IPAuthentication Header, AH)、封裝安全載荷(EncapsulatingSecurity Payload,ESP)以及Internet密鑰交換(Internet KeyExchange,IKE)3個(gè)子協(xié)議組成,同時(shí)還涉及認(rèn)證、加密算法和安全關(guān)聯(lián)(Security Association,SA)等方面。它們之間的關(guān)系如圖1所示。

AES加密機(jī)制在IPSec協(xié)議中的應(yīng)用

封裝安全載荷(ESP)可確保IP數(shù)據(jù)包的機(jī)密性、數(shù)據(jù)的完整性以及對(duì)數(shù)據(jù)源認(rèn)證。此外,它也能負(fù)責(zé)對(duì)重放攻擊的抵抗。IP驗(yàn)證頭(AH)與ESP類似,也提供了數(shù)據(jù)完整性、數(shù)據(jù)源認(rèn)證以及抗重放攻擊的能力。但它不能用來(lái)保證數(shù)據(jù)的機(jī)密性。Internet密鑰交換(IKE)協(xié)議足由“Internet安全關(guān)聯(lián)和密鑰管理”(ISAKMP)協(xié)議、Oaklay協(xié)議和SKEME協(xié)議組成的一種“混合型”協(xié)議,并在ISAKMP規(guī)定的框架內(nèi)運(yùn)作。IKE協(xié)議定義了通信實(shí)體間進(jìn)行身份認(rèn)證、SA創(chuàng)建、加密算法協(xié)商以及共享會(huì)話密鑰生成的方法。

二、AES加密機(jī)制在IPSec協(xié)議中的應(yīng)用

Rijndael加密算法是一個(gè)分組迭代加密算法,采用可變的密鑰長(zhǎng)度和分組長(zhǎng)度,能夠有效地抵抗差分和線性分析的攻擊,確保了算法的安全性。但為了滿足AES的要求,Rijndael加密算法固定分組長(zhǎng)度為128位,密鑰長(zhǎng)度和輪數(shù)可變。NIST為AES加密算法和其它一些聯(lián)邦信息處理標(biāo)準(zhǔn)(FIPS)已經(jīng)認(rèn)可的密碼算法定義了5種操作模式,密碼分組鏈接(Cipher Block Chaining,CBC)模式,電子密碼本(ElectronicCodeBook,ECB)模式,密碼反饋(Cipher FeedBack,CFB)模式,輸出反饋(Output FeedBack,OFB)模式和計(jì)數(shù)(Counter, CTR)模式。IETF IPSec工作組下一步正試圖使AES成為IPSec ESP中的默認(rèn)加密算法,要求所有IPSec實(shí)現(xiàn)必須兼容AES加密算法。

下面主要分析在IPSec ESP中應(yīng)用AES密碼分組鏈接模式(AES-CBC)和AES計(jì)數(shù)模式(AES-CTR)的加密機(jī)制。

1、ESPAES-CBC加密機(jī)制

對(duì)稱分組加密算法的CBC模式是一種非常理想的操作模式,也是ESP加密機(jī)制中的需求模式。在AES-CBC加密過(guò)程中,明文被加密之前要與前面的密文進(jìn)行異或運(yùn)算。
ESP AES-CBC需要一個(gè)顯示的初始化向量(IV),用于與第一個(gè)明文分組在加密之前進(jìn)行異或運(yùn)算。設(shè)加密密鑰為K,明文P以128位大小分組為P1P2…Pj…,圖2展示了AES-CBC是如何工作的。

AES加密機(jī)制在IPSec協(xié)議中的應(yīng)用

下面就IPSec ESP中應(yīng)用AES-CBC加密機(jī)制值得注意的一些事項(xiàng)進(jìn)行分析。

(1)初始化向量(IV)

IV不需要保密,它可以以明文形式與密文一起傳送。Ⅳ值必須選取事先無(wú)法預(yù)測(cè)的隨機(jī)數(shù)值,大小和AES分組大小相同。IVs的選取不可以使用計(jì)數(shù)器方式或者低漢明距的數(shù)據(jù)源,以防止AES-CBC加密多個(gè)數(shù)據(jù)包中存在的非常相似的明文。

(2)密鑰長(zhǎng)度和加密輪數(shù)

AES支持3種密鑰長(zhǎng)度:128位,192位和256位。所有的實(shí)現(xiàn)必須支持默認(rèn)的密鑰長(zhǎng)度128位,同時(shí)可以支持192位和256位。對(duì)于不同的密鑰長(zhǎng)度必須使用相應(yīng)的加密輪數(shù),具體情況見表1。

AES加密機(jī)制在IPSec協(xié)議中的應(yīng)用

(3)分組大小和明文填充

AES使用128位分組大小。填充要求使得最后一個(gè)明文短分組在加密之前進(jìn)行適當(dāng)?shù)奶畛涮幚?,使其?28位分組大小。這里需要填充的明文還包括ESP中定義的ESP填充長(zhǎng)度域和其它一些域的數(shù)據(jù)。

(4)IKE協(xié)商和密鑰材料

對(duì)于IKE階段l協(xié)商,IANA給AES-CBC加密算法分配了ID為7的標(biāo)識(shí)符。在階段2協(xié)商中,IANA為ESP_ AES分配了ESP變換標(biāo)識(shí)符12。由于AES允許使用可變的密鑰
長(zhǎng)度,因此密鑰長(zhǎng)度的屬性須在階段1、2協(xié)商中具體指定。

IKE使用一個(gè)偽隨機(jī)函數(shù)(Pseudo-random Function,PRF)生成密鑰材料。PRF反復(fù)使用可以生成任意長(zhǎng)度的密鑰材料(KEYMAT)。在IPSec中使用AES時(shí),密鑰材料長(zhǎng)度由協(xié)商的Diffie-Hellam(DH)群和協(xié)商的密鑰長(zhǎng)度確定。在IKE中,AES使用密鑰長(zhǎng)度為128位、192位和256位時(shí),分別需要大約3 200位、8 000位和15 400位強(qiáng)度的DH群。密鑰選取KEYMAT的開始位,長(zhǎng)度為密鑰長(zhǎng)度。

(5)HASH算法

作為SHA-1的后繼算法,SHA-256,SHA-384和SHA-512輸出分別為3種不同的長(zhǎng)度(256位,384位和512位),對(duì)于AES的3種不同密鑰長(zhǎng)度(128位,192位和256位)在IKE的生成和ESP的認(rèn)證是足夠的。AES密鑰長(zhǎng)度為128位時(shí),目前HMAC-SHA-I[9J和HMAC-MD5cloJ仍然擁有足夠的強(qiáng)度用于IKE中生成AES的128位密鑰和ESP中認(rèn)證AES使用128位密鑰的加密。

2、 ESPAES-CTR加密機(jī)制

計(jì)數(shù)(CTR)模式是NIST為對(duì)稱分組加密算法新開發(fā)的一種操作模式。AES-CTR加密機(jī)制對(duì)于高速網(wǎng)絡(luò),具有許多引人的特性。首先,AES-CTR使用AES分組密碼加密連續(xù)的計(jì)數(shù)分組(CTRBLK:Counter Block)生成密鑰流。數(shù)據(jù)文件加密、解密時(shí),明、密文與密鑰流進(jìn)行異或運(yùn)算。AES-CTR易于實(shí)現(xiàn),可以進(jìn)行流水線和并行處理。多個(gè)獨(dú)立的AES加密實(shí)現(xiàn)可以用于提高效率。例如,AES-CTR加密處理可以進(jìn)行雙機(jī)并行實(shí)現(xiàn),從而達(dá)到雙倍效率的吞吐量。AES-CTR支持密鑰流的預(yù)計(jì)算。預(yù)計(jì)算處理能夠減少數(shù)據(jù)包的延遲性。無(wú)論對(duì)于加密還是解密,AES-CTR僅使用AES的加密操作。這使得AES-CTR相較于AES其它模式實(shí)現(xiàn)更為精簡(jiǎn)。如果AES-CTR得到正確使用,能夠提供很強(qiáng)的保密性。Bellare,Desai,Jokipii,Rogaway證明了同一個(gè)分組加密算法的CTR模式擁有不低于CBC模式的安全強(qiáng)度。

為了使用AES-CTR加密一個(gè)數(shù)據(jù)包,加密者需要分割明文P為128位的分組,P= P1P2......Pn。最后的分組Pn不需要是128位,即可以少于128位。AES對(duì)每個(gè)計(jì)數(shù)分組
(CTRBLK)加密后生成128位密鑰流。每個(gè)明文分組與密鑰流分組進(jìn)行異或運(yùn)算生成密文C= C1C2 ......Cn。

CTRBLK的前96位由一個(gè)32位的nonce值和64位的IV值組成,其余32位是一個(gè)初始化為1的分組計(jì)數(shù)器(Block_Counter)值。表2是一個(gè)計(jì)數(shù)分組的格式。

AES加密機(jī)制在IPSec協(xié)議中的應(yīng)用

其中,分組計(jì)數(shù)器按分組次序進(jìn)行遞增加l運(yùn)算,從而生成連續(xù)的CTRBLK,AES再加密這些CTRBLK生成用于文件加密、解密的密鑰流。圖3為加密、解密n個(gè)明、密文分組情況。

AES加密機(jī)制在IPSec協(xié)議中的應(yīng)用

在圖3中,AESk()函數(shù)為使用密鑰K執(zhí)行AES加密操作。

TRUNC()函數(shù)用于截短最后一個(gè)AES加密輸出的密鑰流分組,使其長(zhǎng)度與明、密文分組的長(zhǎng)度相同,并輸出截取的位。

在ESP中使用AES-CTR除了與AES-CBC相類似的情形外,還需要注意以下幾個(gè)方面。

(1)初始化向量(IV)

AES-CTR需要一個(gè)顯示的IV,大小為64位。IV必須由加密者以某種方法選取,并確保對(duì)給定的密鑰該Ⅳ值僅使用1次。加密者可以使用任何確保IV值唯一性的方法。通常的方法有使用按數(shù)據(jù)包次序進(jìn)行遞增加l運(yùn)算的計(jì)數(shù)器或者一個(gè)線性反饋移位寄存器(LFSRs)。

(2)分組大小和明文填充

AES使用128位分組大小。所以,每個(gè)AES加密操作生成128位的密鑰流。AES-CTR加密時(shí)密鑰流與明文進(jìn)行異或運(yùn)算,解密時(shí)密鑰流與密文進(jìn)行異或運(yùn)算。如果密鑰流的長(zhǎng)度比明文或密文更長(zhǎng),那么簡(jiǎn)單地丟棄超出的密鑰流位即可。因此,AES-CTR不要求填充明文長(zhǎng)度到分組大小的倍式。

(3)IKE協(xié)商、密鑰材料以及nonce值

對(duì)于IKE階段1協(xié)商,目前IANA還未給使用顯示IV的AES-CTR分配ID標(biāo)識(shí)符。階段2協(xié)商中,IANA為AES—CTR分配了ESP變換標(biāo)識(shí)符13。

AES-CTR實(shí)現(xiàn)須使用新的密鑰。IKE能夠建立如此的密鑰。KEYMAT大小必須是所需AES密鑰長(zhǎng)度再加上32位。

nonce值通常選取KEYMAT的后32位。nonce值無(wú)須保密,但它在指派之前必須無(wú)法預(yù)測(cè)。

(4) ESP鑒別

由于AES-CTR本身的特性,攻擊者得到了正確密文就可以輕易地偽造有效的密文。

假設(shè)加密者使用密鑰流分組K1,K2,K3加密明文分組P1,P2,P3,生成密文分組C1,C2,C3。如果攻擊者能夠得到這些密文分組,就可使用自己的明文分組Q1,Q2,Q3來(lái)偽造出新的明文分組,從而達(dá)到攻擊的目的。具體情形如下:

AES加密機(jī)制在IPSec協(xié)議中的應(yīng)用

這樣,解密者得到就是攻擊者生成的偽造明文Qi+Pi{i=1,2,3),而非最初的明文。因此,AES-CTR必須聯(lián)合使用一個(gè)非空的ESP鑒別方法,否則就可能存在災(zāi)難性的后果。使用HMAC-SHA-1-96是一個(gè)可靠的選擇。

(5)計(jì)數(shù)分組(CTRBLK)

如果加密者能夠正確使用AES-CTR,就能獲得很強(qiáng)的數(shù)據(jù)保密性。然而不幸的是,AES-CTR非常容易錯(cuò)誤使用。對(duì)于同一個(gè)密鑰,如果加密者使用相同的CTRBLK加密了多個(gè)數(shù)據(jù)包,那么相同的密鑰流也就用于加密了多個(gè)明文,從而極大地削弱數(shù)據(jù)的保密性。

下面就是密鑰流分組K1,K2,K3同時(shí)加密兩個(gè)明文分組P1,P2,P3和Q1,Q2,Q3的情形。此時(shí),可以得到兩個(gè)密文分組P1+K1+Q1。Ki(i =1,2,3)。如果攻擊者能夠獲得這兩個(gè)密文分組,并進(jìn)行如下的計(jì)算:

AES加密機(jī)制在IPSec協(xié)議中的應(yīng)用

那么,攻擊者就得到了兩個(gè)明文之間的異或關(guān)系,并可以相對(duì)容易地分離它們。因此,對(duì)于同一個(gè)密鑰來(lái)說(shuō),加密者必須使用任何能夠保證CTRBLK的唯一性方法,以免出現(xiàn)以上災(zāi)難性的后果。

小知識(shí)之IPSec協(xié)議

“Internet 協(xié)議安全性 (IPSec)”是一種開放標(biāo)準(zhǔn)的框架結(jié)構(gòu),通過(guò)使用加密的安全服務(wù)以確保在 Internet 協(xié)議 (IP) 網(wǎng)絡(luò)上進(jìn)行保密而安全的通訊。Microsoft_ Windows_ 2000、Windows XP 和 Windows Server 2003 家族實(shí)施 IPSec 是基于“Internet 工程任務(wù)組 (IETF)”IPSec_工作組開發(fā)的標(biāo)準(zhǔn)。