毛 劍 楊 波
1IPSEC作用
1997年,CERT(Computer Emergency Response Team)在其年度報(bào)告中列舉了150 000個(gè)站點(diǎn)的2 500多個(gè)安全事故,其中最為嚴(yán)重的有兩類:第1類是IP欺騙,即入侵者以虛假IP地址建立數(shù)據(jù)包,以欺騙基于IP認(rèn)證的應(yīng)用程序;第2類是各種類型的竊聽和數(shù)據(jù)包嗅探,以獲取合法用戶的登錄信息和其他數(shù)據(jù)。因此安全的IP協(xié)議應(yīng)有必要的認(rèn)證和加密功能。
IPSec通過在IP層對(duì)所有業(yè)務(wù)流加密和認(rèn)證,保證了所有分布應(yīng)用程序(包括遠(yuǎn)程登錄、客戶機(jī)/服務(wù)器、電子郵件系統(tǒng)、文件傳輸、Web訪問等)的安全性,因此可提供網(wǎng)絡(luò)內(nèi)(包括局域網(wǎng)、廣域網(wǎng)等)或網(wǎng)際間的安全通信。例如:
(1)公司可在因特網(wǎng)或公用廣域網(wǎng)上建立自己的安全虛擬專用網(wǎng),從而可節(jié)省建立和管理自己專用網(wǎng)的支出。
(2)配備有IPSec系統(tǒng)的終端用戶,可在本地呼叫因特網(wǎng)服務(wù)提供商(ISP)以獲取對(duì)某一公司網(wǎng)絡(luò)的安全訪問。
(3)IPSec不僅能用于建立內(nèi)部網(wǎng)中的連接,而且也能用于建立與外部網(wǎng)的安全連接。
(4)某些Web應(yīng)用程序和電子商務(wù)應(yīng)用程序即使已有自己的安全協(xié)議,但使用IPSec可增加它們的安全性。
圖1是IPSec應(yīng)用示例,圖中有一個(gè)用戶系統(tǒng)和兩個(gè)LAN。LAN內(nèi)的通信未考慮安全性,然而從用戶系統(tǒng)和LAN發(fā)出通信業(yè)務(wù)流時(shí),都需在網(wǎng)際設(shè)備中使用IPSec協(xié)議。網(wǎng)際設(shè)備指路由器或防火墻等設(shè)備,用于將LAN連接到外部網(wǎng)中。網(wǎng)際設(shè)備對(duì)發(fā)往WAN的業(yè)務(wù)流進(jìn)行加密和壓縮,對(duì)來自WAN的業(yè)務(wù)流進(jìn)行解密和解壓縮。以上運(yùn)算對(duì)LAN上的工作站和服務(wù)器來說都是透明的。
IPSec的使用場(chǎng)合和作用為:
IPSec用于防火墻和路由器等網(wǎng)際設(shè)備,可為通過網(wǎng)際設(shè)備的業(yè)務(wù)流提供強(qiáng)安全業(yè)務(wù),且在LAN內(nèi)(比如一個(gè)公司的LAN)的業(yè)務(wù)無需進(jìn)行安全性處理。
IPSec用于防火墻,可防止使用IP的業(yè)務(wù)流繞過防火墻。
IPSec位于傳輸層(TCP、UDP)之下,所以它對(duì)應(yīng)用程序來說是透明的。且當(dāng)IPSec用于防火墻或路由器時(shí),無需修改用戶或服務(wù)器所使用的軟件。即使IPSec用于端系統(tǒng)時(shí),上層軟件(包括應(yīng)用程序)也不受影響。
IPSec對(duì)終端用戶來說是透明的,因此無需對(duì)用戶進(jìn)行安全培訓(xùn),同時(shí)也無需對(duì)用戶發(fā)放或撤銷密鑰材料。
IPSec除了支持終端用戶、保護(hù)系統(tǒng)和網(wǎng)絡(luò)外,還在網(wǎng)絡(luò)互聯(lián)所需的路由結(jié)構(gòu)中起著重要的作用。IPSec能保證:路由通告(新路由器用于向外界通告自己)來自一個(gè)被授權(quán)的路由器;鄰居通告(路由器用于建立或維護(hù)與其他路由域中路由器的鄰居關(guān)系)來自一個(gè)授權(quán)的路由器;重新定向的消息來自于數(shù)據(jù)包上次到達(dá)的路由器;路由的更新不被偽造。
2 IPSec的結(jié)構(gòu)
IPSec在IP層提供安全業(yè)務(wù)的方式是讓系統(tǒng)選擇所要求的安全協(xié)議、決定所需的算法和密鑰。安全協(xié)議有兩個(gè):一是由協(xié)議的報(bào)頭,即認(rèn)證報(bào)頭(AH)指定的認(rèn)證協(xié)議;二是由協(xié)議數(shù)據(jù)包格式,即封裝的安全負(fù)載(ESP)指定的將加密和認(rèn)證結(jié)合起來的協(xié)議。安全業(yè)務(wù)有訪問控制、無連接的完整性、數(shù)據(jù)源的認(rèn)證性、對(duì)重放數(shù)據(jù)包的拒絕、保密性、受限的業(yè)務(wù)流保密性。
表1顯示AH指定的協(xié)議(簡(jiǎn)稱AH協(xié)議)和ESP指定的協(xié)議(簡(jiǎn)稱ESP協(xié)議)所能提供的安全業(yè)務(wù),其中ESP又分為僅加密和加密認(rèn)證結(jié)合兩種情況。
本節(jié)介紹IPSec結(jié)構(gòu)中的兩個(gè)主要概念:安全關(guān)聯(lián)和模式。
2.1 安全關(guān)聯(lián)
安全關(guān)聯(lián)(SA)是指由IPSec提供安全服務(wù)的業(yè)務(wù)流的發(fā)方到收方的一個(gè)單向邏輯關(guān)系,用來表示IPSec為SA所承載的數(shù)據(jù)通信提供安全服務(wù)。其方式是使用AH或ESP之一,一個(gè)SA不能同時(shí)使用AH和ESP保護(hù)。因?yàn)镾A是單向的,所以兩個(gè)系統(tǒng)之間的雙向通信需要兩個(gè)SA,每個(gè)方向一個(gè)。
一個(gè)SA可由3個(gè)參數(shù)惟一地表示為:
<安全參數(shù)索引,目標(biāo)IP地址,安全協(xié)議標(biāo)識(shí)符>
3個(gè)參數(shù)的含義分別為:
安全參數(shù)索引(SPI):賦值給該SA的比特串。其位置在AH和ESP報(bào)頭中,作用是使接收系統(tǒng)對(duì)收到的數(shù)據(jù)包能夠選擇在哪個(gè)SA下進(jìn)行處理,所以SPI只有本地意義。
目標(biāo)IP地址:即SA中接收方的IP地址。該地址可以是終端用戶系統(tǒng)或防火墻、路由器等網(wǎng)際設(shè)備的地址。目前的SA管理機(jī)制只支持單目傳送地址(即只指定一個(gè)用戶或網(wǎng)際設(shè)備的地址)。
安全協(xié)議標(biāo)識(shí)符:該標(biāo)識(shí)符表示SA使用的協(xié)議是AH協(xié)議還是ESP協(xié)議。
所以對(duì)任何IP數(shù)據(jù)包,通過IPv4或IPv6報(bào)頭中的目標(biāo)地址以及封裝擴(kuò)展報(bào)頭(AH或ESP)中的SPI,對(duì)SA惟一地識(shí)別。
2.2 AH和ESP的兩種使用模式
AH和ESP的兩種使用模式分別是傳輸模式和隧道模式,這里先介紹兩種模式的一般概念,具體使用方式在下節(jié)。
(1)傳輸模式
傳輸模式主要用于對(duì)上層協(xié)議的保護(hù),即將其保護(hù)推廣到IP數(shù)據(jù)包的負(fù)載,如TCP數(shù)據(jù)段、UDP數(shù)據(jù)段或ICMP(Internet Control Message Protocol)數(shù)據(jù)包。傳輸模式典型地用于兩個(gè)主機(jī)的端—端通信。在IPv4中,負(fù)載指位于IP報(bào)頭之后的數(shù)據(jù)。在IPv6中,負(fù)載指IP報(bào)頭和擴(kuò)展報(bào)頭(除目標(biāo)地址選項(xiàng))之后的數(shù)據(jù),而目標(biāo)地址選項(xiàng)也和負(fù)載一起受到保護(hù)。
(2)隧道模式
隧道模式用于對(duì)整個(gè)IP數(shù)據(jù)包的保護(hù),它是將一個(gè)數(shù)據(jù)包用一個(gè)新的數(shù)據(jù)包包裝,即給原數(shù)據(jù)包加一個(gè)新的報(bào)頭,稱為外部報(bào)頭,這樣原數(shù)據(jù)包就成為新數(shù)據(jù)包的負(fù)載。因此原數(shù)據(jù)包在整個(gè)傳送過程中就像在隧道中一樣,傳送路徑上的路由器都無法看到原數(shù)據(jù)包的報(bào)頭。由于封裝了原數(shù)據(jù)包,新數(shù)據(jù)包的源地址和目標(biāo)地址都與原數(shù)據(jù)包不同,從而增加了安全性。
隧道模式用于SA關(guān)系中至少一方是安全的網(wǎng)關(guān),如實(shí)現(xiàn)IPSec的防火墻或路由器。通過網(wǎng)關(guān)進(jìn)入局域網(wǎng)中的通信則無需使用IPSec予以保護(hù),而從局域網(wǎng)通過網(wǎng)關(guān)發(fā)出的數(shù)據(jù)包則由網(wǎng)關(guān)中的IPSec軟件建立起隧道模式的安全關(guān)聯(lián),并以隧道模式發(fā)送。
3 認(rèn)證報(bào)頭
認(rèn)證報(bào)頭(AH)用于保證IP數(shù)據(jù)包的數(shù)據(jù)完整性、認(rèn)證性,并用于防地址欺騙攻擊、消息重放攻擊等。其認(rèn)證性由消息認(rèn)證碼(MAC)實(shí)現(xiàn),因此要求通信雙方有共享的密鑰。
認(rèn)證報(bào)頭有以下數(shù)據(jù)字段(如圖2所示):
下一報(bào)頭:字段長(zhǎng)為8bit,用來標(biāo)識(shí)下一數(shù)據(jù)包的報(bào)頭。
負(fù)載長(zhǎng)度:字段長(zhǎng)也為8bit,其值(即負(fù)載長(zhǎng)度)為以32bit字為單位的AH長(zhǎng)度減2(單位為字)。例如:“認(rèn)證數(shù)據(jù)”字段的默認(rèn)長(zhǎng)度為96bit,即3個(gè)字,此時(shí)AH總長(zhǎng)為6個(gè)字,所以負(fù)載長(zhǎng)度為4(單位為字)。
保留:字段長(zhǎng)為16bit,留待將來可能出現(xiàn)的新用途使用。
安全參數(shù)索引(SPI):字段長(zhǎng)32bit,其用途在前面已解釋過。
序列號(hào):字段長(zhǎng)32bit,為單調(diào)遞增的計(jì)數(shù)器。
認(rèn)證數(shù)據(jù):為可變長(zhǎng)字段,但長(zhǎng)必須為32bit的整數(shù)倍。字段的值為本數(shù)據(jù)包所用的完整性檢驗(yàn)值(ICV),即MAC。
所以,AH總長(zhǎng)為96bit固定部分加上認(rèn)證數(shù)據(jù)的可變長(zhǎng)部分。AH報(bào)頭中的“序列號(hào)”字段用于防止敵手截獲已經(jīng)過認(rèn)證的數(shù)據(jù)包后實(shí)施重放攻擊。認(rèn)證報(bào)頭(AH)中,字段“認(rèn)證數(shù)據(jù)”的值稱為完整性校驗(yàn)值。ICV是由MAC算法產(chǎn)生的消息認(rèn)證碼或截短的消息認(rèn)證碼。當(dāng)前規(guī)定的算法為HMAC-MD5-96或HMAC-SHA-1-96,表示MAC算法為HMAC,所用雜湊算法分別為MD5和SHA,96表示“認(rèn)證數(shù)據(jù)”的默認(rèn)字段長(zhǎng),因此由HMAC產(chǎn)生出的消息認(rèn)證碼還需被截短,截短方式為取前96bit。
AH有兩種使用模式:傳輸模式和隧道模式。
傳輸模式
前面已說過傳輸模式典型地用于兩個(gè)主機(jī)之間的端—端通信,而網(wǎng)關(guān)可以不支持傳輸模式。這種模式中,將認(rèn)證報(bào)頭(AH)插到原始IP數(shù)據(jù)包的報(bào)頭后面,其作用是對(duì)IP報(bào)文除可變字段外的其它字段提供認(rèn)證功能。傳輸模式的優(yōu)點(diǎn)是額外開銷較小,缺點(diǎn)是無法對(duì)可變字段進(jìn)行保護(hù)。
隧道模式
隧道模式下,將需保護(hù)的原數(shù)據(jù)包用一個(gè)新數(shù)據(jù)包包裝,即將原數(shù)據(jù)包作為新數(shù)據(jù)包的負(fù)載,稱新數(shù)據(jù)包為隧道數(shù)據(jù)包。然后再對(duì)隧道數(shù)據(jù)包使用傳輸模式的AH,即將AH插到隧道數(shù)據(jù)包中新IP報(bào)頭的后面。
隧道模式的主要優(yōu)點(diǎn)是可對(duì)被封裝的數(shù)據(jù)包進(jìn)行完全的保護(hù),缺點(diǎn)是有額外的處理開銷。
4 封裝安全負(fù)載
封裝安全負(fù)載(ESP)用于提供保密性業(yè)務(wù),包括對(duì)消息內(nèi)容的保密和有限的通信流量的保密。ESP也提供作為可選項(xiàng)的認(rèn)證業(yè)務(wù)。
(1)ESP數(shù)據(jù)包格式
如圖3所示,ESP數(shù)據(jù)包包括以下字段:
安全參數(shù)索引(SPI):字段長(zhǎng)32bit,用于標(biāo)識(shí)SA關(guān)聯(lián)。
序列號(hào):字段長(zhǎng)32bit,為一個(gè)單調(diào)遞增的計(jì)數(shù)器,用于防止重放攻擊。
負(fù)載數(shù)據(jù):字段長(zhǎng)可變,為經(jīng)加密保護(hù)的傳輸層數(shù)據(jù)段(傳輸模式時(shí))或IP數(shù)據(jù)包(隧道模式時(shí))。
填充:字段長(zhǎng)范圍為0到255字節(jié),其作用下面介紹。
填充長(zhǎng)度:字段長(zhǎng)8bit,表示前一字段以字節(jié)為單位長(zhǎng)度。
下一報(bào)頭:字段長(zhǎng)為8bit,通過表示負(fù)載數(shù)據(jù)的第一個(gè)報(bào)頭(如IPv6的一個(gè)擴(kuò)展報(bào)頭或TCP等上層協(xié)議),來表示負(fù)載數(shù)據(jù)的數(shù)據(jù)類型。
認(rèn)證數(shù)據(jù):字段長(zhǎng)可變(然而必須是32的整數(shù)倍),為前面各字段計(jì)算出的完整性校驗(yàn)值(ICV)。
(2)ESP所用的加密算法和認(rèn)證算法
ESP保密業(yè)務(wù)為負(fù)載數(shù)據(jù)、填充、填充長(zhǎng)度、下一報(bào)頭4個(gè)字段提供加密。如果加密算法需要初始向量,則將初始向量以明文形式放在負(fù)載數(shù)據(jù)頭部。ESP要求支持CBC模式的DES,同時(shí)支持的加密算法還有:3個(gè)密鑰的三重DES、RC5、IDEA、CAST、Blowfish等。
和AH一樣,ESP支持的消息認(rèn)證碼默認(rèn)長(zhǎng)度為96bit,支持的算法為HMAC-MD5-96和HMAC-SHA-1-96。
(3)填充
填充的作用有:
如果加密算法要求明文長(zhǎng)為某一字節(jié)的倍數(shù)(如分組加密算法明文長(zhǎng)為分組長(zhǎng)的倍數(shù)),則通過填充可將明文(包括負(fù)載數(shù)據(jù)、填充、填充長(zhǎng)度、下一報(bào)頭)擴(kuò)展為所需的長(zhǎng)度。
ESP的格式要求“填充長(zhǎng)度”字段和“下一報(bào)頭”字段在一個(gè)32bit的字中是右對(duì)齊的,填充用于保證這種對(duì)齊。
通過填充可隱藏負(fù)載數(shù)據(jù)的實(shí)際長(zhǎng)度,因此還能對(duì)業(yè)務(wù)流提供部分保密性。
(4) ESP的使用模式
與AH一樣,ESP的兩種使用模式也為傳輸模式和隧道模式。
傳輸模式
與AH一樣,傳輸模式的ESP也用于兩個(gè)主機(jī)之間的端—端通信。這種模式中將ESP報(bào)頭插入到原始IP數(shù)據(jù)包的報(bào)頭后面,而ESP報(bào)尾和認(rèn)證數(shù)據(jù)則放在原始數(shù)據(jù)包的負(fù)載之后。傳輸模式下的ESP未對(duì)原始IP報(bào)頭提供加密和認(rèn)證,這是它的一個(gè)缺點(diǎn),因?yàn)檎`傳的數(shù)據(jù)包也會(huì)交給ESP處理,且敵手有可能對(duì)所傳的數(shù)據(jù)包進(jìn)行業(yè)務(wù)流量分析。它的優(yōu)點(diǎn)是對(duì)原始IP數(shù)據(jù)包的長(zhǎng)度增加很少,因此處理開銷增加不多。
隧道模式
和AH一樣,隧道模式也用于在SA關(guān)系中至少有一方是安全的網(wǎng)關(guān)。這時(shí)將需保護(hù)的數(shù)據(jù)包用一個(gè)新數(shù)據(jù)包包裝,即將原數(shù)據(jù)包作為新數(shù)據(jù)包的負(fù)載,稱新數(shù)據(jù)包為隧道IP數(shù)據(jù)包,然后再對(duì)隧道IP 數(shù)據(jù)包實(shí)施傳輸模式的ESP。
由于原始數(shù)據(jù)包成了新數(shù)據(jù)包的負(fù)載,因此原始數(shù)據(jù)包得到了完全的安全性保護(hù)。不過新IP報(bào)頭仍是未加保護(hù)的。隧道模式下,外層報(bào)頭(即新IP報(bào)頭)中的IP地址可以和內(nèi)部報(bào)頭(即原始報(bào)頭)的IP地址不一樣。例如,兩個(gè)網(wǎng)關(guān)可以通過ESP隧道對(duì)它們之間的全部流量進(jìn)行安全保護(hù)。
5 SA的組合
一個(gè)SA能夠?qū)崿F(xiàn)AH協(xié)議或ESP協(xié)議,但卻不能同時(shí)實(shí)現(xiàn)這兩種協(xié)議。然而有些業(yè)務(wù)流可能要求同時(shí)實(shí)現(xiàn)兩種協(xié)議,即要求在主機(jī)間和網(wǎng)關(guān)間都實(shí)現(xiàn)IPSec業(yè)務(wù)。這時(shí)就要求建立起多個(gè)SA以實(shí)現(xiàn)所需的IPSec業(yè)務(wù),稱這種多個(gè)SA序列為SA束,同一束上的SA的端點(diǎn)可以相同也可不同。
創(chuàng)建SA束的方式有以下兩種:
傳輸相鄰:指對(duì)同一IP數(shù)據(jù)包多次應(yīng)用非隧道模式的AH和ESP兩種協(xié)議。在這種方式下,只允許將AH和ESP組合為一層,這是因?yàn)橹挥袛?shù)據(jù)包的目標(biāo)方才對(duì)其進(jìn)行處理,嵌套方式不會(huì)增加任何好處。
重復(fù)隧道方式:指對(duì)同一IP數(shù)據(jù)包在隧道模式下多次使用兩種協(xié)議,即每使用一次協(xié)議,都生成一個(gè)新的IP數(shù)據(jù)包,下一協(xié)議再對(duì)數(shù)據(jù)包封裝。由于各個(gè)隧道的起點(diǎn)和終點(diǎn)可以不同,所以這種方法允許使用多層嵌套。
以上兩種方式可以結(jié)合起來使用,例如兩個(gè)網(wǎng)關(guān)之間的SA使用重復(fù)隧道方式,而在網(wǎng)關(guān)之間的部分路段上的主機(jī)之間的SA使用傳輸相鄰方式。
6 密鑰管理
IPSec的密鑰管理包括密鑰的確定和密鑰的分布,分為手工密鑰管理和自動(dòng)密鑰管理:手工方式指系統(tǒng)管理員以手工方式為每一系統(tǒng)配置該系統(tǒng)自己的密鑰和其它系統(tǒng)的密鑰,該方式僅在相對(duì)穩(wěn)定的小環(huán)境中才有實(shí)際價(jià)值;自動(dòng)方式是指系統(tǒng)能夠自動(dòng)地按要求為SA產(chǎn)生密鑰,該方式對(duì)分布式、大系統(tǒng)的密鑰管理極為方便。
IPSec默認(rèn)的自動(dòng)密鑰管理協(xié)議稱為ISAKMP/Oakley。該協(xié)議包括兩部分:
Oakley密鑰確定協(xié)議:Oakley是基于Diffie-Hellman算法的密鑰交換協(xié)議,但與Diffie-Hellman算法相比,Oakley又提供了額外的安全性。
因特網(wǎng)安全關(guān)聯(lián)和密鑰管理協(xié)議(Internet Security Association and Key Management Protocol):ISAKMP提供了一個(gè)因特網(wǎng)密鑰管理框架,并為安全屬性的協(xié)商提供了特定的協(xié)議支持。
ISAKMP本身并未指定密鑰交換算法,而是由一些消息類型構(gòu)成,這些消息類型分別指定了不同的密鑰交換算法。Oakley是初版ISAKMP使用的指定密鑰交換算法。
7 IPSec的研究前景
今天,很難預(yù)料IPSec技術(shù)以什么樣的形式在網(wǎng)上得到廣泛的應(yīng)用。市場(chǎng)驅(qū)動(dòng)著技術(shù)的使用;同樣,已使用的IPSec技術(shù)又改變著市場(chǎng)在選擇下一個(gè)應(yīng)用范圍時(shí)的意向。要使IPSec更好地工作,系統(tǒng)集成或者分離的IPSec產(chǎn)品(或者兩者)的下列研究領(lǐng)域?qū)⒑苤匾?/p>
當(dāng)為網(wǎng)絡(luò)環(huán)境實(shí)現(xiàn)安全策略管理時(shí),IPSec的抽象定義;
作為網(wǎng)絡(luò)安全子系統(tǒng)的IPSec管理模型的定義;
在IPSec范圍下可以實(shí)現(xiàn)和提供的函數(shù)以及服務(wù)的凈化;
功能塊的凈化,使其可以在IPSec和通用安全框架的其他組件之間共享?!?/p>
參考文獻(xiàn)
1 RFC2401: Security Architecture for the Internet Protocol
2 RFC2402:IP Authentication Header
3 RFC2406:IP Encapsulating Security Payload (ESP)
4 RFC2408:Internet Security Association and Key Management Protocol (ISAKMP)
(收稿日期:2001-07-09)
作者簡(jiǎn)介
毛劍 ,西安電子科技大學(xué)通信工程學(xué)院在讀博士。目前主要從事電子商務(wù)、廣播加密、IP安全等方面的研究工作。
楊波,西安電子科技大學(xué)通信工程學(xué)院副教授,碩士生導(dǎo)師。主要研究方向?yàn)橥ㄐ啪W(wǎng)的安全、電子商務(wù)及無條件安全。