很多年來(lái),人們一直在爭(zhēng)論IP層是否需要身份驗(yàn)證和安全性及相關(guān)的用法問題。本文將討論如何在IPv6中通過身份驗(yàn)證頭( AH )和封裝安全性凈荷( ESP )頭來(lái)實(shí)現(xiàn)身份驗(yàn)證和安全性,包括安全密碼傳輸、加密和數(shù)據(jù)包的數(shù)字簽名。但在探討IPv6的安全性頭之前,本章將首先介紹IP安全性體系結(jié)構(gòu)以及在IPv6中該體系結(jié)構(gòu)可能實(shí)現(xiàn)的部分。該體系結(jié)構(gòu)在RFC 1825(IP的安全性體系結(jié)構(gòu))中首次進(jìn)行了描述。
1.1 為IP增加安全性
IPv4的目的只是作為簡(jiǎn)單的網(wǎng)絡(luò)互通協(xié)議,因而其中沒有包含安全特性。如果IPv4僅作為研究工具,或者在包括研究、軍事、教育和政府網(wǎng)絡(luò)的相對(duì)嚴(yán)格的轄區(qū)中作為產(chǎn)品型網(wǎng)絡(luò)協(xié)議而使用,缺乏安全性并不是一個(gè)嚴(yán)重的缺陷。但是,隨著IP網(wǎng)絡(luò)在商用和消費(fèi)網(wǎng)絡(luò)中的重要性與日俱增,攻擊所導(dǎo)致的潛在危害將具有空前的破壞性。
1.1.1 安全性目標(biāo)
對(duì)于安全性,可以定義如下三個(gè)公認(rèn)的目標(biāo):
身份驗(yàn)證:能夠可靠地確定接收到的數(shù)據(jù)與發(fā)送的數(shù)據(jù)一致,并且確保發(fā)送該數(shù)據(jù)的實(shí)體與其所宣稱的身份一致。
完整性:能夠可靠地確定數(shù)據(jù)在從源到目的地傳送的過程中沒有被修改。
機(jī)密性:確保數(shù)據(jù)只能為預(yù)期的接收者使用或讀出,而不能為其他任何實(shí)體使用或讀出。
完整性和身份驗(yàn)證經(jīng)常密切相關(guān),而機(jī)密性有時(shí)使用公共密鑰加密來(lái)實(shí)現(xiàn),這樣也有助于對(duì)源端進(jìn)行身份驗(yàn)證。
AH和ESP頭有助于在IP上實(shí)現(xiàn)上述目標(biāo)。很簡(jiǎn)單, AH為源節(jié)點(diǎn)提供了在包上進(jìn)行數(shù)字簽名的機(jī)制。AH之后的數(shù)據(jù)都是純文本格式,可能被攻擊者截取。但是,在目的節(jié)點(diǎn)接收之后,可以使用AH中包含的數(shù)據(jù)來(lái)進(jìn)行身份驗(yàn)證。
另一方面,可以使用ESP頭對(duì)數(shù)據(jù)內(nèi)容進(jìn)行加密。ESP頭之后的所有數(shù)據(jù)都進(jìn)行了加密,ESP頭為接收者提供了足夠的數(shù)據(jù)以對(duì)包的其余部分進(jìn)行解密。
Internet安全性(實(shí)際上任何一種安全性)的問題在于很難創(chuàng)建安全性,尤其是在開放的網(wǎng)絡(luò)中,包可能經(jīng)過任意數(shù)量的未知網(wǎng)絡(luò),任一個(gè)網(wǎng)絡(luò)中都可能有包嗅探器在工作,而任何網(wǎng)絡(luò)都無(wú)法察覺。在這樣的開放環(huán)境中,即使使用了加密和數(shù)字簽名,安全性也將受到嚴(yán)重的威脅。對(duì)IP業(yè)務(wù)流的攻擊也包括諸如偵聽之類,致使從一個(gè)實(shí)體發(fā)往另一個(gè)實(shí)體的數(shù)據(jù)被未經(jīng)授權(quán)的第三個(gè)實(shí)體所竊取。此外, IP安全性還應(yīng)該解決下列安全性威脅:
否認(rèn)服務(wù)攻擊:即實(shí)體使用網(wǎng)絡(luò)傳送數(shù)據(jù),致使某個(gè)授權(quán)用戶無(wú)法訪問網(wǎng)絡(luò)資源。例如,攻擊者可能使某主機(jī)淹沒于大量請(qǐng)求中,從而致使系統(tǒng)崩潰;或者重復(fù)傳送很長(zhǎng)的e - m a i l報(bào)文,企圖以惡意業(yè)務(wù)流塞滿用戶或站點(diǎn)帶寬。
愚弄攻擊:即實(shí)體傳送虛報(bào)來(lái)源的包。例如,有一種愚弄攻擊是由攻擊者發(fā)送e - m a i l報(bào)文,報(bào)頭的“ F r o m :”指明該報(bào)文的發(fā)信人是美國(guó)總統(tǒng)。那些在在包頭攜帶錯(cuò)誤源地址的攻擊則更加陰險(xiǎn)。
密鑰處理問題則更加復(fù)雜。為使身份驗(yàn)證和加密更可靠, IP安全性體系結(jié)構(gòu)要求使用密鑰。如何安全地管理和分配密鑰,同時(shí)又能正確地將密鑰與實(shí)體結(jié)合以避免中間者的攻擊,這是Internet業(yè)界所面臨的最棘手的問題之一。這種中間者的攻擊是指,攻擊者(假設(shè)為C )將自己置于兩個(gè)通信實(shí)體(假設(shè)為A和B )之間,攔截A和B之間傳送的所有數(shù)據(jù),冒充A把數(shù)據(jù)重新發(fā)送給B,也冒充B把數(shù)據(jù)重新發(fā)送給A。如果C能夠以類似B的公共密鑰進(jìn)行身份驗(yàn)證,從而讓A確認(rèn)它就是B,同樣也讓B誤以為它就是A,那么A和B就會(huì)誤認(rèn)為他們之間的傳送是安全的。
IPsec本身不能使Internet更加安全。本章只提出與Internet安全性相關(guān)的幾個(gè)最迫切的問題。對(duì)Internet安全性的細(xì)節(jié)感興趣的讀者,請(qǐng)參考本書作者的另一本書《Personal Encryption Clearly Explained》(AP Professional,1998),書中討論了加密、數(shù)字簽名和Internet安全性問題。
1.1.2 RFC 1825及建議的更新
RFC 1825于1995年8月發(fā)布,共有2 2頁(yè);其第5版修改草案完成于1998年5月,已經(jīng)達(dá)到6 6頁(yè)。安全性的正確實(shí)現(xiàn)要求認(rèn)真考慮細(xì)節(jié)問題,這是對(duì)原RFC進(jìn)行擴(kuò)充的主要原因。更新后的文檔在最終發(fā)布時(shí),在關(guān)于如何實(shí)現(xiàn)所有的IP協(xié)議(包括I C M P和組播)方面將提供更多的細(xì)節(jié),同時(shí)將更詳細(xì)討論密鑰管理相關(guān)問題和安全性關(guān)聯(lián)問題。
1.2 IPsec
IPsec的目標(biāo)是提供既可用于IPv4也可用于IPv6的安全性機(jī)制,該服務(wù)由IP層提供。一個(gè)系統(tǒng)可以使用IPsec來(lái)要求與其他系統(tǒng)的交互以安全的方式進(jìn)行—通過使用特定的安全性算法和協(xié)議。IPsec提供了必要的工具,用于一個(gè)系統(tǒng)與其他系統(tǒng)之間對(duì)彼此可接受的安全性進(jìn)行協(xié)商。這意味著,一個(gè)系統(tǒng)可能有多個(gè)可接受的加密算法,這些算法允許該系統(tǒng)使用它所傾向的算法和其他系統(tǒng)協(xié)商,但如果其他系統(tǒng)不支持它的第一選擇,則它也可以接受某些替代算法。
IPsec中可能考慮如下安全性服務(wù):
訪問控制。如果沒有正確的密碼就不能訪問一個(gè)服務(wù)或系統(tǒng)。可以調(diào)用安全性協(xié)議來(lái)控制密鑰的安全交換,用戶身份驗(yàn)證可以用于訪問控制。
無(wú)連接的完整性。使用IPsec,有可能在不參照其他包的情況下,對(duì)任一單獨(dú)的IP包進(jìn)行完整性校驗(yàn)。此時(shí)每個(gè)包都是獨(dú)立的,可以通過自身來(lái)確認(rèn)。此功能可以通過使用安全散列技術(shù)來(lái)完成,它與使用檢查數(shù)字類似,但可靠性更高,并且更不容易被未授權(quán)實(shí)體所篡改。
數(shù)據(jù)源身份驗(yàn)證。IPsec提供的又一項(xiàng)安全性服務(wù)是對(duì)IP包內(nèi)包含的數(shù)據(jù)的來(lái)源進(jìn)行標(biāo)識(shí)。此功能通過使用數(shù)字簽名算法來(lái)完成。
對(duì)包重放攻擊的防御。作為無(wú)連接協(xié)議, IP很容易受到重放攻擊的威脅。重放攻擊是指攻擊者發(fā)送一個(gè)目的主機(jī)已接收過的包,通過占用接收系統(tǒng)的資源,這種攻擊使系統(tǒng)的可用性受到損害。為對(duì)付這種花招, IPsec提供了包計(jì)數(shù)器機(jī)制。
加密。數(shù)據(jù)機(jī)密性是指只允許身份驗(yàn)證正確者訪問數(shù)據(jù),對(duì)其他任何人一律不準(zhǔn)。它是通過使用加密來(lái)提供的。
有限的業(yè)務(wù)流機(jī)密性。有時(shí)候只使用加密數(shù)據(jù)不足以保護(hù)系統(tǒng)。只要知道一次加密交換的末端點(diǎn)、交互的頻度或有關(guān)數(shù)據(jù)傳送的其他信息,堅(jiān)決的攻擊者就有足夠的信息來(lái)使系統(tǒng)混亂或毀滅系統(tǒng)。通過使用IP隧道方法,尤其是與安全性網(wǎng)關(guān)共同使用, IPsec提供了有限的業(yè)務(wù)流機(jī)密性。
通過正確使用ESP頭和AH,上述所有功能都有可能得以實(shí)現(xiàn)。目前,人們使用了很多密碼功能,在下一節(jié)中將對(duì)此予以簡(jiǎn)要描述。后續(xù)節(jié)將扼要描述密鑰管理基礎(chǔ)設(shè)施。
1.2.1 加密和身份驗(yàn)證算法
由于對(duì)安全性的攻擊方法多種多樣,設(shè)計(jì)者很難預(yù)計(jì)到所有的攻擊方法,因此設(shè)計(jì)安全性算法和協(xié)議非常困難。普遍為人接受的關(guān)于安全性方法的觀點(diǎn)是,一個(gè)好的加密算法或身份驗(yàn)證算法即使被攻擊者了解,該算法也是安全的。這一點(diǎn)對(duì)于Internet安全性尤其重要。在Internet中,使用嗅探器的攻擊者通過偵聽系統(tǒng)與其連接協(xié)商,經(jīng)常能夠確切了解系統(tǒng)使用的是哪一種算法。
與Internet安全性相關(guān)的重要的密碼功能大致有5類,包括對(duì)稱加密、公共密鑰加密、密鑰交換、安全散列和數(shù)字簽名。
1. 對(duì)稱加密
大多數(shù)人都熟知對(duì)稱加密這一加密方法。在這種方法中,每一方都使用相同的密鑰來(lái)加密或解密。只要掌握了密鑰,就可以破解使用此法加密的所有數(shù)據(jù)。這種方法有時(shí)也稱作秘密密鑰加密。通常對(duì)稱加密效率很高,它是網(wǎng)絡(luò)傳送大量數(shù)據(jù)中最常用的一類加密方法。
常用的對(duì)稱加密算法包括:
數(shù)據(jù)加密標(biāo)準(zhǔn)( D E S )。D E S首先由I B M公司在7 0年代提出,已成為國(guó)際標(biāo)準(zhǔn)。它有5 6位密鑰。三重D E S算法對(duì)D E S略作變化,它使用D E S算法三次加密數(shù)據(jù),從而改進(jìn)了安全性。
R C 2、R C 4和R C 5。這些密碼算法提供了可變長(zhǎng)度密鑰加密方法,由一家安全性動(dòng)態(tài)公司,R SA數(shù)據(jù)安全公司授權(quán)使用。目前網(wǎng)景公司的N a v i g a t o r瀏覽器及其他很多Internet 客戶端和服務(wù)器端產(chǎn)品使用了這些密碼。
其他算法。包括在加拿大開發(fā)的用于N o r t e l公司E n t r u s t產(chǎn)品的C A S T、國(guó)際數(shù)據(jù)加密算法( I D E A )、傳聞?dòng)汕疤K聯(lián)安全局開發(fā)的G O S T算法、由Bruce Schneier開發(fā)并在公共域發(fā)表的B l o w f i s h算法及由美國(guó)國(guó)家安全局開發(fā)并用于C l i p p e r芯片的契約密鑰系統(tǒng)的S k i p j a c k算法。
安全加密方法要求使用足夠長(zhǎng)的密鑰。短密鑰很容易為窮舉攻擊所破解。在窮舉攻擊中,攻擊者使用計(jì)算機(jī)來(lái)對(duì)所有可能的密鑰組合進(jìn)行測(cè)試,很容易找到密鑰。例如,長(zhǎng)度為4 0位的密鑰就不夠安全,因?yàn)槭褂孟鄬?duì)而言并不算昂貴的計(jì)算機(jī)來(lái)進(jìn)行窮舉攻擊,在很短的時(shí)間內(nèi)就可以破獲密鑰。同樣,單D E S算法已經(jīng)被破解。一般而言,對(duì)于窮舉攻擊,在可預(yù)測(cè)的將來(lái),1 2 8位還可能是安全的。
對(duì)于其他類型的攻擊,對(duì)稱加密算法也比較脆弱。大多數(shù)使用對(duì)稱加密算法的應(yīng)用往往使用會(huì)話密鑰,即一個(gè)密鑰只用于一個(gè)會(huì)話的數(shù)據(jù)傳送,或在一次會(huì)話中使用幾個(gè)密鑰。這樣,如果會(huì)話密鑰丟失,則只有在此會(huì)話中傳送的數(shù)據(jù)受損,不會(huì)影響到較長(zhǎng)時(shí)期內(nèi)交換的大量數(shù)據(jù)。
2. 公共密鑰加密
公共密鑰加密算法使用一對(duì)密鑰。公共密鑰與秘密密鑰相關(guān)聯(lián),公共密鑰是公開的。以公共密鑰加密的數(shù)據(jù)只能以秘密密鑰來(lái)解密,同樣可以用公共密鑰來(lái)解密以秘密密鑰加密的數(shù)據(jù)。這樣只要實(shí)體的秘密密鑰不泄露,其他實(shí)體就可以確信以公共密鑰加密的數(shù)據(jù)只能由
相應(yīng)秘密密鑰的持有者來(lái)解密。盡管公共密鑰加密算法的效率不高,但它和數(shù)字簽名(參見后續(xù)討論)均是最常用的對(duì)網(wǎng)絡(luò)傳送的會(huì)話密鑰進(jìn)行加密的算法。
最常用的一類公共密鑰加密算法是R SA算法,該算法由Ron Rivest、Adi Shamir 和L e n A d l e m a n開發(fā),由R SA數(shù)據(jù)安全公司授權(quán)使用。R SA定義了用于選擇和生成公共/秘密密鑰對(duì)的機(jī)制,以及目前用于加密的數(shù)學(xué)函數(shù)。
3. 密鑰交換
開放信道這種通信媒體上傳送的數(shù)據(jù)可能被第三者竊聽。在Internet這樣的開放信道上要實(shí)現(xiàn)秘密共享難度很大。但是很有必要實(shí)現(xiàn)對(duì)共享秘密的處理,因?yàn)閮蓚€(gè)實(shí)體之間需要共享用于加密的密鑰。關(guān)于如何在公共信道上安全地處理共享密鑰這一問題,有一些重要的加密算法,是以對(duì)除預(yù)定接受者之外的任何人都保密的方式來(lái)實(shí)現(xiàn)的。
D i ff i e - H e l l m a n密鑰交換算法允許實(shí)體間交換足夠的信息以產(chǎn)生會(huì)話加密密鑰。按照慣例,假設(shè)一個(gè)密碼協(xié)議的兩個(gè)參與者實(shí)體分別是A l i c e和B o b,A l i c e使用B o b的公開值和自己的秘密值來(lái)計(jì)算出一個(gè)值; B o b也計(jì)算出自己的值并發(fā)給A l i c e,然后雙方使用自己的秘密值來(lái)計(jì)算他們的共享密鑰。其中的數(shù)學(xué)計(jì)算相對(duì)比較簡(jiǎn)單,而且不屬于本書討論的范圍。算法的概要是B o b和A l i c e能夠互相發(fā)送足夠的信息給對(duì)方以計(jì)算出他們的共享密鑰,但是這些信息卻不足以讓攻擊者計(jì)算出密鑰。
D i ff i e - H e l l m a n算法通常稱為公共密鑰算法,但它并不是一種公共密鑰加密算法。該算法可用于計(jì)算密鑰,但密鑰必須和某種其他加密算法一起使用。但是, D i ff i e - H e l l m a n算法可用于身份驗(yàn)證。Network Associates公司的P G P公共密鑰軟件中就使用了此算法。
密鑰交換是構(gòu)成任何完整的Internet安全性體系都必備的。此外, IPsec安全性體系結(jié)構(gòu)還包括Internet密鑰交換( I K E )及Internet安全性關(guān)聯(lián)和密鑰管理協(xié)議( I SA K M P )。在后續(xù)章節(jié)中將討論這些標(biāo)準(zhǔn)和其他相關(guān)標(biāo)準(zhǔn)。
4. 安全散列
散列是一定量數(shù)據(jù)的數(shù)據(jù)摘要的一種排序。檢查數(shù)字是簡(jiǎn)單的散列類型,而安全散列則產(chǎn)生較長(zhǎng)的結(jié)果,經(jīng)常是1 2 8位。對(duì)于良好的安全散列,攻擊者很難顛倒設(shè)計(jì)或以其他方式毀滅。安全散列可以與密鑰一起使用,也可以單獨(dú)使用。其目的是提供報(bào)文的數(shù)字摘要,用來(lái)驗(yàn)證已經(jīng)收到的數(shù)據(jù)是否與發(fā)送者所發(fā)送的相同。發(fā)送者計(jì)算散列并將其值包含在數(shù)據(jù)中,接收者對(duì)收到的數(shù)據(jù)進(jìn)行散列計(jì)算,如果結(jié)果值與數(shù)據(jù)中所攜帶的散列值匹配,接收者就可以確認(rèn)數(shù)據(jù)的完整性。
常用的散列方法由R SA數(shù)據(jù)安全公司提出,包括M D 2、M D 4和M D 5報(bào)文摘要函數(shù)。安全散列算法( SHA )是由美國(guó)國(guó)家標(biāo)準(zhǔn)和技術(shù)協(xié)會(huì)( N I S T )所開發(fā)的標(biāo)準(zhǔn)摘要函數(shù)。散列可以單獨(dú)使用,也可以和數(shù)字簽名一起使用。
5. 數(shù)字簽名
前面提到的公共密鑰加密依賴于密鑰對(duì),而數(shù)字簽名則依靠公共密鑰加密的特性,即允許數(shù)據(jù)以實(shí)體密鑰對(duì)中的秘密密鑰來(lái)加密,以公共密鑰來(lái)解密。發(fā)送者首先對(duì)于要簽名的數(shù)據(jù)進(jìn)行安全散列計(jì)算,然后對(duì)結(jié)果使用秘密密鑰加密。而接收者首先進(jìn)行相同的散列計(jì)算,
然后對(duì)發(fā)送者所附加的加密值進(jìn)行解密。如果兩次計(jì)算的值能夠匹配,接收者就可以確信公共密鑰的主人就是對(duì)報(bào)文簽名的實(shí)體,且報(bào)文在傳送中并沒有被修改。
R SA公共密鑰加密算法可以用于數(shù)字簽名。簽名實(shí)體為待簽名的數(shù)據(jù)建立散列,然后以自己的密鑰對(duì)散列加密;證實(shí)實(shí)體則對(duì)接收到的數(shù)據(jù)進(jìn)行相同的散列計(jì)算,使用簽名實(shí)體的公共密鑰對(duì)簽名解密,并且比較所得的兩個(gè)值。如果散列與解密的簽名相同,則數(shù)據(jù)就得到證實(shí)。