官术网_书友最值得收藏!

3.2 IPSec框架

一些傳統(tǒng)的安全技術(shù)(如HTTPS)以及無線安全技術(shù)(如WEP/WPA),往往會采用某種固定的加密和散列函數(shù)。這種做法帶有明顯的賭博性質(zhì),因?yàn)槿绻程爝@個(gè)加密算法曝出嚴(yán)重漏洞,那么使用這個(gè)加密算法或者散列函數(shù)的安全技術(shù)也就難免要遭到淘汰。為了避免這種在一棵樹上吊死的悲慘事件發(fā)生,IPSec并沒有定義具體的加密和散列函數(shù)。IPSec的做法是提供一個(gè)框架性的結(jié)構(gòu),但每一次IPSec會話所使用的具體算法,都是通過協(xié)商來決定的。也就是說如果我們覺得 3DES 這個(gè)算法所提供的 168 位的加密強(qiáng)度能夠滿足當(dāng)前的需要,那么就不妨?xí)呵沂褂眠@個(gè)協(xié)議來加密數(shù)據(jù)。但是只要有一天 3DES 出現(xiàn)了嚴(yán)重漏洞,或者出現(xiàn)了一個(gè)更好的加密協(xié)議,那么我們也可以馬上更換加密協(xié)議,使 IPSec VPN 總是使用最新最好的協(xié)議來進(jìn)行加密。圖3-2所示為IPSec框架示意圖,這張圖旨在說明,不僅僅是散列函數(shù)、加密算法,還包括封裝協(xié)議和模式、密鑰有效期等內(nèi)容都可以通過協(xié)商決定,在兩個(gè)IPSec對等體之間協(xié)商的協(xié)議叫做IKE,這個(gè)協(xié)議會在本章的后續(xù)部分詳細(xì)進(jìn)行介紹,我們現(xiàn)在就以 IPSec 框架涉及的技術(shù)為主線,詳細(xì)介紹這些技術(shù)的特點(diǎn)和工作原理。

3.2.1 散列函數(shù)

散列函數(shù)也叫做HASH函數(shù),主流的散列算法有MD5與SHA-1。散列函數(shù)的主要任務(wù)是驗(yàn)證數(shù)據(jù)的完整性。通過散列函數(shù)計(jì)算得到的結(jié)果叫做散列值,這個(gè)散列值也常常被稱為數(shù)據(jù)的指紋(Fingerprint)。為什么散列函數(shù)會被稱為數(shù)據(jù)的指紋呢?這是因?yàn)樯⒘泻瘮?shù)的工作原理和日常我們對指紋采集和使用的原理幾乎一樣。在說明散列函數(shù)工作原理之前,我們不妨先來回想一下日常生活中我們是如何對指紋進(jìn)行采集和使用的。

圖3-3所示為日常生活中的指紋采集和使用示意圖。

圖3-2 IPSec框架示意圖

圖3-3 日常生活中指紋的采集和使用示意圖

步驟1:公安機(jī)關(guān)預(yù)先記錄“用戶X”的指紋“指紋一”。

步驟2:在某一犯罪現(xiàn)場,公安機(jī)關(guān)獲取到了“嫌疑犯”的指紋“指紋二”。

步驟3:通過查詢指紋數(shù)據(jù)庫發(fā)現(xiàn)“指紋一”等于“指紋二”。

步驟4:由于指紋的唯一性(沖突避免),可以確定犯罪“嫌疑犯”就是“用戶X”。

以上就是日常生活中指紋的采集和使用方法。接下來我們通過圖3-4來了解一下散列函數(shù)的工作原理,看看它是如何驗(yàn)證數(shù)據(jù)完整性的。

步驟1:對“重要文件”執(zhí)行散列函數(shù)計(jì)算,得到散列值“散列值一”。

步驟2:現(xiàn)在我們收到另外一個(gè)文件“文件?”,對“文件?”進(jìn)行散列函數(shù)計(jì)算得到散列值“散列值二”。

步驟 3:將“散列值一”和“散列值二”進(jìn)行對比,發(fā)現(xiàn)“散列值一”等于“散列值二”。

步驟4:由于散列值的唯一性(沖突避免),因此可以確定“文件?”就是“重要文件”。這兩份文件的每一個(gè)比特(bit)都完全相同。

圖3-4 散列函數(shù)的工作原理

散列函數(shù)具有下面4個(gè)特點(diǎn)。

1.固定大小

散列函數(shù)可以接收任意大小的數(shù)據(jù),并輸出固定大小的散列值。以 MD5 這個(gè)散列算法為例,不管原始數(shù)據(jù)有多大,通過 MD5計(jì)算得到的散列值總是 128比特,而SHA-1的輸出長度則為160比特。

2.雪崩效應(yīng)

原始數(shù)據(jù)就算修改哪怕一個(gè)比特,計(jì)算得到的散列值也會發(fā)生巨大的變化。

3.單向

只可能從原始數(shù)據(jù)計(jì)算得到散列值,不可能從散列值恢復(fù)哪怕一個(gè)比特的原始數(shù)據(jù)。

4.沖突避免

幾乎不能夠找到另外一個(gè)數(shù)據(jù)和當(dāng)前數(shù)據(jù)計(jì)算的散列值相同,因此散列函數(shù)能夠確保數(shù)據(jù)的唯一性。

現(xiàn)在我們來看一下散列算法如何驗(yàn)證數(shù)據(jù)的完整性。

圖3-5所示為散列函數(shù)驗(yàn)證數(shù)據(jù)完整性的方式。

圖3-5 散列函數(shù)如何驗(yàn)證數(shù)據(jù)完整性

步驟 1:使用散列函數(shù),計(jì)算需要發(fā)送的“重要文件”的散列值,得到“散列值一”。

步驟2:對需要發(fā)送的“重要文件”和步驟1計(jì)算得到的“散列值一”進(jìn)行打包,然后一起發(fā)送給接收方。

步驟3:接收方對收到的“重要文件”進(jìn)行散列函數(shù)計(jì)算,得到“散列值二”。

步驟4:接收方將收到文件中的“散列值一”和步驟3計(jì)算得到的“散列值二”進(jìn)行對比,如果兩個(gè)散列值相同,那么根據(jù)散列函數(shù)雪崩效應(yīng)和沖突避免的特點(diǎn),就可以確定“重要文件”的完整性,也就是這份“重要文件”在整個(gè)傳輸過程中沒有遭到過別人的篡改。

散列函數(shù)雖然能夠很好地確認(rèn)數(shù)據(jù)的完整性,但是卻容易遭受中間人攻擊,我們來看看中間人攻擊是如何進(jìn)行的,如圖3-6所示。

從圖3-6中可以發(fā)現(xiàn),合法與非法用戶都可以對他們發(fā)送的信息進(jìn)行散列函數(shù)計(jì)算,并得到散列值。因此他們也都能像圖3-5一樣把明文信息和散列值一起打包發(fā)送給接收方,而接收方也都能夠通過散列函數(shù)來校驗(yàn)數(shù)據(jù)的完整性。因此,散列函數(shù)雖然能夠確認(rèn)數(shù)據(jù)的完整性,卻不能確保這個(gè)數(shù)據(jù)來自于可信的源(不提供源認(rèn)證),所以散列函數(shù)存在中間人攻擊的問題。

為了彌補(bǔ)這個(gè)漏洞,我們可以使用一個(gè)叫做密鑰化散列信息認(rèn)證代碼(HMAC, Keyed-hash Message Authentication Code)的技術(shù),這項(xiàng)技術(shù)不僅僅能夠?qū)崿F(xiàn)完整性校驗(yàn),還能完成源認(rèn)證的任務(wù),圖3-7介紹了HMAC技術(shù)如何幫助OSPF動(dòng)態(tài)路由協(xié)議實(shí)現(xiàn)對路由更新包的驗(yàn)證。

圖3-6 散列函數(shù)的中間人攻擊問題

圖3-7 HMAC技術(shù)如何驗(yàn)證OSPF路由更新包(發(fā)送方)

步驟1:首先,網(wǎng)絡(luò)管理員需要預(yù)先在要建立OSPF鄰居關(guān)系的兩臺路由器上,通過ipospf message-digest-key 1 md5 cisco命令,配臵預(yù)共享秘密“cisco”。

步驟 2:發(fā)送方把要發(fā)送的路由更新信息加上預(yù)共享秘密一起進(jìn)行散列計(jì)算,得到“散列值一”,這種聯(lián)合共享秘密一起計(jì)算散列值的技術(shù)就叫做HMAC。

步驟3:發(fā)送方路由器把步驟2通過HMAC技術(shù)得到的“散列值一”和明文的路由更新信息進(jìn)行封裝,一起發(fā)送給接收方(注意路由更新信息是明文發(fā)送的,絕對沒有進(jìn)行任何加密處理)。

接下來的圖3-8介紹了接收方一側(cè)所執(zhí)行的對HMAC驗(yàn)證的步驟。

圖3-8 HMAC技術(shù)如何驗(yàn)證OSPF路由更新包(接收方)

步驟1:從收到的信息中提取明文的路由更新信息。

步驟2:把步驟1提取出來的明文路由更新信息加上接收方路由器預(yù)先配臵的共享密鑰“cisco”一起進(jìn)行散列計(jì)算,得到“散列值二”。

步驟3:提取出收到信息中的“散列值一”,用它和步驟2計(jì)算得到的“散列值二”進(jìn)行比較,如果相同,表示路由更新信息是沒有被篡改過的,也就是完整的。同時(shí),還可以確定這是預(yù)先配臵共享秘密的那臺比鄰路由器所發(fā)送的路由更新,因?yàn)橹挥羞@臺路由器才知道共享秘密的內(nèi)容,因此也只有它才能夠通過HMAC技術(shù)制造出能夠校驗(yàn)成功的散列值。

上述對OSPF路由更新的介紹,可以體現(xiàn)出HMAC的兩大安全特性,完整性校驗(yàn)和源認(rèn)證。應(yīng)該說在實(shí)際運(yùn)用中,基本不會單純地使用散列函數(shù),絕大多數(shù)情況都會使用HMAC技術(shù)。例如,IPSec和HTTPS技術(shù)都采用了HMAC技術(shù)來對每一個(gè)傳輸?shù)臄?shù)據(jù)包做完整性校驗(yàn)和源認(rèn)證。

3.2.2 加密算法

說完了散列函數(shù),接下來我們花一點(diǎn)時(shí)間來介紹加密算法。加密,顧名思義就是把明文數(shù)據(jù)轉(zhuǎn)換為密文數(shù)據(jù)。這樣一來,即使第三方截獲到了密文數(shù)據(jù),也無法將其恢復(fù)為明文。而解密過程則正好相反,合法的接收者通過正確的解密算法和密鑰恢復(fù)密文到明文。加密算法可以分為如下兩大類:

對稱密鑰算法;

非對稱密鑰算法。

1.對稱密鑰算法

圖3-9所示為對稱密鑰算法的工作示意圖,從圖中可以看到一個(gè)很明顯的特點(diǎn),加解密雙方使用相同的密鑰與算法進(jìn)行加解密。因此,使用相同密鑰與算法進(jìn)行加解密運(yùn)算的算法就叫做對稱密鑰算法,對稱密鑰算法有如下特點(diǎn)。

圖3-9 對稱密鑰算法的工作示意圖

優(yōu)點(diǎn):

速度快;

安全;

緊湊。

缺點(diǎn):

明文傳輸共享密鑰,容易出現(xiàn)中途劫持和竊聽的問題;

隨著參與者數(shù)量的增加,密鑰數(shù)量急劇膨脹((n×(n-1))/2);

因?yàn)槊荑€數(shù)量過多,對密鑰的管理和存儲是一個(gè)很大的問題;

不支持?jǐn)?shù)字簽名和不可否認(rèn)性。

對稱密鑰算法的主流協(xié)議:

1.DES;

2.3DES;

3.AES;

4.RC4。

我們先來討論對稱密鑰算法的優(yōu)點(diǎn)。它的首要優(yōu)點(diǎn)就是速度快。作一個(gè)比較直觀的比較,想必大多數(shù)讀者都有使用壓縮軟件的經(jīng)歷,而對稱密鑰算法加密的速度應(yīng)該比壓縮的速度稍快(不同的算法有差異)。另外,現(xiàn)在無線網(wǎng)絡(luò)的使用也很普及,絕大部分用戶所使用的都是最新的無線安全技術(shù)WPA2,而WPA2就是使用AES來加密的。無線用戶在上網(wǎng)沖浪時(shí),似乎并不會感覺到由于加密造成的網(wǎng)絡(luò)延時(shí)。而且只要他們的路由器或者交換機(jī)配上硬件加速模塊,那就基本上能夠?qū)崿F(xiàn)線速加密,因此速度是對稱密鑰算法的一大優(yōu)勢。

現(xiàn)在我們來介紹對稱密鑰算法緊湊性的特點(diǎn),DES是一個(gè)典型的塊加密算法。所謂塊加密,顧名思義就是把需要加密的數(shù)據(jù)包預(yù)先切分成為很多個(gè)相同大小的塊(DES的塊大小為64比特),然后使用DES算法逐塊進(jìn)行加密。如果不夠塊邊界,就添加數(shù)據(jù)補(bǔ)齊塊邊界,這些添加的數(shù)據(jù)就會造成加密后的數(shù)據(jù)比原始數(shù)據(jù)略大。以一個(gè)1500個(gè)字節(jié)大小的數(shù)據(jù)包為例,通過DES塊加密后,最多(極限值)會增加8個(gè)字節(jié)(64個(gè)比特)的大小。所以可以認(rèn)為對稱密鑰算法加密后的數(shù)據(jù)是緊湊的。

圖3-10所示為DES的兩種塊加密方式。

圖3-10 DES的兩種塊加密方式

接下來我們再來說說DES 的兩種塊加密方式:電子代碼本(Electronic Code Book, ECB)和密碼塊鏈接(Cipher Block Chaining,CBC)。對于ECB 這種加密方式來說,所有的塊都是使用相同的DES密鑰進(jìn)行加密的。這種加密方式有一個(gè)問題,那就是相同的明文塊加密后的結(jié)果也肯定相同。雖然中間截獲數(shù)據(jù)的攻擊者并不能解密數(shù)據(jù),但是他們至少知道通信的雙方正在反復(fù)加密相同的數(shù)據(jù)包。為了解決這個(gè)問題,CBC技術(shù)孕育而生,使用CBC技術(shù)加密的數(shù)據(jù)包,會隨機(jī)產(chǎn)生一個(gè)明文的初始化向量(IV)字段,這個(gè)IV字段會和第一個(gè)明文塊進(jìn)行異或操作,然后使用DES算法對異或后的結(jié)果進(jìn)行加密,所得到的密文塊又會和下一個(gè)明文塊進(jìn)行異或操作,然后再加密。這個(gè)操作過程就叫做CBC。由于每一個(gè)數(shù)據(jù)包都使用隨機(jī)產(chǎn)生的IV字段進(jìn)行了擾亂,因此就算傳輸?shù)拿魑膬?nèi)容一樣,加密后的結(jié)果也會出現(xiàn)本質(zhì)差異,并且整個(gè)加密的塊是鏈接在一起的,任何一個(gè)塊解密失敗,剩余部分都無法進(jìn)行解密了,這就增加了中途劫持者解密數(shù)據(jù)的難度。

說完了對稱密鑰算法的優(yōu)勢,我們再來討論一下它的缺點(diǎn)。對稱密鑰算法的首要問題是,如何把相同的密鑰發(fā)送給通信的雙方。在這里,采用明文的方式傳輸密鑰顯然是非常不明智的,因?yàn)槿绻魑膫鬏數(shù)拿荑€被中間人獲取,那么中間人就能夠解密使用這個(gè)密鑰所加密的數(shù)據(jù),這也就與直接采用明文傳送數(shù)據(jù)沒有什么區(qū)別了。第二個(gè)問題是,使用相同的一個(gè)密鑰來加密去往所有用戶的數(shù)據(jù)顯然是非常不安全的。因此,我們希望兩兩用戶之間共享一個(gè)唯一的密鑰,并且在一次加密任務(wù)完成以后更新這個(gè)密鑰。我們可以試想一下,假如只有4個(gè)用戶要傳送信息,且兩兩之間共享一個(gè)密鑰的話,這個(gè)環(huán)境中就一共需要使用6個(gè)密鑰((n×(n-1))/2);依此類推,5個(gè)用戶需要10個(gè)密鑰,那么100個(gè)用戶?1000個(gè)用戶呢?密鑰數(shù)量將是一個(gè)不折不扣的天文數(shù)字。問題是,我們所討論的都是互聯(lián)網(wǎng)的加密解決方案。說得夸張一些,用戶數(shù)上萬也很正常。因此,對稱密鑰算法需要使用的密鑰數(shù)量過多,不好管理與存儲是一個(gè)比較嚴(yán)重的問題。另外,對稱密鑰算法也不支持?jǐn)?shù)字簽名技術(shù)(該技術(shù)我們將在后文中進(jìn)行詳細(xì)地介紹)。由于這一系列的缺點(diǎn),我們一般不會在一套加密解決方案中單純地使用對稱密鑰算法。

2.非對稱密鑰算法

圖3-11所示為非對稱密鑰的產(chǎn)生和維護(hù)。

如圖3-11所示,在使用非對稱密鑰技術(shù)之前,所有參與者,不管是用戶還是路由器等網(wǎng)絡(luò)設(shè)備,都需要預(yù)先使用非對稱密鑰算法(例如RSA)產(chǎn)生一對密鑰,其中包括一個(gè)公鑰和一個(gè)私鑰。公鑰可以放在服務(wù)器上共享給屬于這個(gè)密鑰系統(tǒng)的所有用戶與設(shè)備,而私鑰需要由持有者嚴(yán)格保護(hù),確保只有持有者才能唯一擁有。

非對稱密鑰算法的特點(diǎn)是一個(gè)密鑰加密的信息,必須使用另一個(gè)密鑰來解密。也就是說公鑰加密私鑰解密,私鑰加密公鑰解密。公鑰加密的數(shù)據(jù),無法再使用公鑰解密,私鑰加密的數(shù)據(jù),也無法再使用私鑰解密。我們可以使用非對稱密鑰算法來加密數(shù)據(jù)和對數(shù)據(jù)進(jìn)行數(shù)字簽名。

圖3-11 非對稱密鑰的產(chǎn)生和維護(hù)

圖3-12所示為使用非對稱密鑰算法實(shí)現(xiàn)數(shù)據(jù)加密。

圖3-12 使用非對稱密鑰算法實(shí)現(xiàn)數(shù)據(jù)加密

首先我們通過圖3-12,來介紹如何使用非對稱密鑰算法來完成加密數(shù)據(jù)。

步驟1:“用戶一”(發(fā)起方)需要預(yù)先獲取“用戶二”(接收方)的公鑰。

步驟2:“用戶一”使用“用戶二”的公鑰對重要的信息進(jìn)行加密。

步驟 3:中途截獲數(shù)據(jù)的攻擊者由于沒有“用戶二”的私鑰而無法對數(shù)據(jù)進(jìn)行解密。

步驟4:用戶二使用自己的私鑰對加密后的數(shù)據(jù)(由用戶二公鑰加密)進(jìn)行解密,使用公鑰加密私鑰解密的方法實(shí)現(xiàn)了數(shù)據(jù)的私密性。

但是由于非對稱密鑰算法運(yùn)算速度極慢(和對稱密鑰算法相比有上千倍的差距),因此基本不可能使用非對稱密鑰算法對實(shí)際數(shù)據(jù)進(jìn)行加密。在實(shí)際運(yùn)用中,我們主要使用非對稱密鑰算法的這個(gè)特點(diǎn)來對密鑰進(jìn)行加密,以進(jìn)行密鑰交換。具體操作方式將在本章的后續(xù)部分進(jìn)行詳細(xì)介紹。

非對稱密鑰算法的第二個(gè)用途就是實(shí)現(xiàn)數(shù)字簽名,在介紹數(shù)字簽名前,我們不妨先來討論一下實(shí)際生活中的簽名。為什么要簽名呢?簽名的目的無非是對某一份文件進(jìn)行確認(rèn)。例如,欠條。張三欠李四10000元錢,欠款人張三在欠條上簽名確認(rèn)。簽名的主要作用就是張三對這張欠條進(jìn)行確認(rèn),事后不能抵賴(不可否認(rèn)性)。到底最后誰會看這個(gè)簽名呢?李四很明顯沒有必要反復(fù)去確認(rèn)簽名。一般都是在出現(xiàn)糾紛后,例如,張三抵賴不還的時(shí)候,李四就可以把欠條拿出來,給村長或者法官這些有權(quán)威的第三方來進(jìn)行驗(yàn)證,如果他們確認(rèn)此欠條上的簽名確實(shí)來自張三無疑,張三就不能再否認(rèn)欠李四錢這一既定事實(shí)了。

圖3-13所示為使用非對稱密鑰算法實(shí)現(xiàn)數(shù)字簽名。

了解了實(shí)際生活中簽名的工作原理后,我們可以通過圖3-13來看看數(shù)字簽名是如何工作的。

步驟1:重要明文信息通過散列函數(shù)計(jì)算得到散列值。

步驟2:“用戶一”(發(fā)起者)使用自己的私鑰對步驟1計(jì)算的散列值進(jìn)行加密,加密后的散列就叫做數(shù)字簽名。

步驟3:把重要明文信息和數(shù)字簽名一起打包發(fā)送給“用戶二”(接收方)。

步驟4:“用戶二”從打包文件中提取出重要明文信息。

步驟5:“用戶二”使用和“用戶一”相同的散列函數(shù)對步驟4提取出來的重要明文信息計(jì)算散列值,得到的結(jié)果簡稱“散列值1”。

步驟6:“用戶二”從打包文件中提取出數(shù)字簽名。

步驟7:“用戶二”使用預(yù)先獲取的“用戶一”的公鑰,對步驟6提取出的數(shù)字簽名進(jìn)行解密,得到明文的“散列值2”。

步驟8:比較“散列值1”和“散列值2”是否相等。如果相等,數(shù)字簽名校驗(yàn)成功。

圖3-13 使用非對稱密鑰算法實(shí)現(xiàn)數(shù)字簽名

數(shù)字簽名校驗(yàn)成功能夠說明哪些問題呢?第一,保障了傳輸?shù)闹匾魑男畔⒌耐暾浴R驗(yàn)樯⒘泻瘮?shù)擁有沖突避免和雪崩效應(yīng)兩大特點(diǎn)。第二,可以確定對重要明文信息進(jìn)行數(shù)字簽名的用戶為“用戶一”,因?yàn)槲覀兪褂谩坝脩粢弧钡墓€成功解密了數(shù)字簽名,只有“用戶一”才能使用他的私鑰加密散列產(chǎn)生數(shù)字簽名,才能夠使用“用戶一”的公鑰進(jìn)行解密。通過數(shù)字簽名的實(shí)例說明,數(shù)字簽名和前面已經(jīng)講過的HMAC技術(shù)一樣,可以提供如下兩大安全特性:

完整性校驗(yàn);

源認(rèn)證。

下面我們對非對稱密鑰算法的特點(diǎn)進(jìn)行總結(jié)。

工作特點(diǎn):

用一個(gè)密鑰加密的數(shù)據(jù)只能用另一個(gè)密鑰來解密;

僅用于密鑰交換(加密密鑰)和數(shù)字簽名(加密散列)。

優(yōu)點(diǎn):

安全;

由于不必?fù)?dān)心交換的公鑰被劫持,所以非對稱密鑰的分發(fā)更安全;

密鑰數(shù)目和參與者數(shù)目相同;

在交換公鑰之前不需要預(yù)先建立某種信任關(guān)系;

支持?jǐn)?shù)字簽名和不可否認(rèn)性。

缺點(diǎn):

加密速度很慢;

密文會變長。

非對稱密鑰算法的主流協(xié)議:

1.RSA(數(shù)字簽名和數(shù)字證書的主流協(xié)議);

2.DH(IPSec產(chǎn)生密鑰資源的主要協(xié)議);

3.ECC(橢圓曲線算法)。

介紹完非對稱密鑰算法如何工作以后,我們再來談?wù)勊膬?yōu)缺點(diǎn)。非對稱密鑰算法的優(yōu)點(diǎn)是很突出的:由于非對稱密鑰算法的特點(diǎn),公鑰是共享的,不用保障公鑰的安全性,所以密鑰交換比較簡單,并且不必?fù)?dān)心中途被截獲。此外,在使用非對稱密鑰算法的環(huán)境中,每增加一個(gè)用戶,只需要增加一個(gè)公鑰,密鑰的數(shù)量與參與者數(shù)量相同,也就是說一萬個(gè)用戶只需要管理和存儲一萬個(gè)公鑰,相對于對稱密鑰算法,密鑰的數(shù)量可以減少很多。另外,非對稱密鑰算法還可以支持?jǐn)?shù)字簽名和不可否認(rèn)性,而不可否認(rèn)性的依據(jù)就是,只有私鑰的持有者才能唯一擁有這個(gè)私鑰。

說完非對稱密鑰算法的優(yōu)點(diǎn),我們也來看看它的嚴(yán)重缺陷。非對稱密鑰算法的主要問題就是它的加密速度奇慢。如果拿RSA這個(gè)非對稱密鑰算法和DES這個(gè)對稱密鑰算法相比,加密相同大小的數(shù)據(jù),DES大概要比RSA快幾百倍。所以想要如圖3-12所示那樣,使用非對稱密鑰算法來加密實(shí)際的數(shù)據(jù)幾乎是不可能的。另外,使用非對稱加密算法加密后的密文會變得很長。舉一個(gè)夸張點(diǎn)的例子,用RSA來加密1GB的數(shù)據(jù)(當(dāng)然RSA肯定沒法加密1GB的數(shù)據(jù)),加密后的密文可能變成2GB,與對稱密鑰算法相比這就太不緊湊了。由于這些缺點(diǎn),與對稱密鑰算法一樣,我們在一套安全解決方案中不可能單獨(dú)使用非對稱密鑰算法。那么我們應(yīng)該如何利用對稱和非對稱密鑰算法的優(yōu)勢來加密實(shí)際的數(shù)據(jù)呢?我們緊接著來看一個(gè)“巧妙的加密解決方案”。

3.巧妙的加密解決方案

我們已經(jīng)學(xué)習(xí)過了對稱密鑰算法和非對稱密鑰算法,你會發(fā)現(xiàn)兩種算法都各有其優(yōu)缺點(diǎn)。對稱密鑰算法加密速度快,但是密鑰數(shù)量過多不好管理,并且密鑰分發(fā)不安全。非對稱密鑰算法密鑰數(shù)量少,密鑰分發(fā)方便并且不存在安全隱患,但是加密速度奇慢,不可能用于大流量數(shù)據(jù)的加密。所以在實(shí)際使用加密算法的時(shí)候,一般會讓兩種算法共同工作,發(fā)揮各自優(yōu)點(diǎn)。下面是一個(gè)非常巧妙的聯(lián)合對稱和非對稱算法的解決方案,這種解決問題的思路被大量運(yùn)用到實(shí)際加密技術(shù)中。

圖3-14所示為聯(lián)合使用兩種密鑰算法的巧妙加密解決方案(發(fā)起方處理過程)。

圖3-14 巧妙的加密解決方案(發(fā)起方處理過程)

步驟1:“用戶一”(發(fā)起方)使用本地隨機(jī)數(shù)產(chǎn)生器,產(chǎn)生用于對稱密鑰算法的隨機(jī)密鑰。如果使用的對稱密鑰算法是DES,DES的密鑰長度為56比特,也就是說隨機(jī)數(shù)產(chǎn)生器需要產(chǎn)生56個(gè)隨機(jī)的“00011101001000110000111…”用于加密數(shù)據(jù)。

步驟 2:使用步驟1 產(chǎn)生的隨機(jī)密鑰,對重要的明文信息通過對稱密鑰算法進(jìn)行加密,并得到密文(很好地利用了對稱密鑰算法速度快和結(jié)果緊湊的特點(diǎn))。

步驟3:“用戶一”(發(fā)送方)需要預(yù)先獲取“用戶二”(接收方)的公鑰,并且使用“用戶二”的公鑰對步驟1產(chǎn)生的隨機(jī)密鑰進(jìn)行加密,得到加密的密鑰包。

步驟4:對步驟2和步驟3產(chǎn)生的密文和密鑰包進(jìn)行打包,一起發(fā)送給“用戶二”(接收方)。

圖3-15所示為接收方處理過程。

步驟1:“用戶二”首先提取出密鑰包,并且使用自己的私鑰對它進(jìn)行解密,并得到明文的隨機(jī)密鑰(使用非對稱密鑰算法進(jìn)行密鑰交換,有效防止密鑰被中途劫持)。

步驟2:“用戶二”提取出密文,并且使用步驟1解密得到的隨機(jī)密鑰進(jìn)行解密,得到明文的重要信息。

圖3-15 巧妙的加密解決方案(接收方處理過程)

在這個(gè)巧妙的加密解決方案中,我們使用了對稱密鑰算法對大量的實(shí)際數(shù)據(jù)(重要信息)進(jìn)行加密,因而很好地利用了對稱密鑰算法加密速度快、密文緊湊的優(yōu)勢。同時(shí)我們又使用非對稱密鑰算法,對對稱密鑰算法使用的隨機(jī)密鑰進(jìn)行加密,因而實(shí)現(xiàn)了安全的密鑰交換,很好地利用了非對稱密鑰不怕中途劫持的特點(diǎn)。這個(gè)巧妙的解決方案大量地運(yùn)用在實(shí)際加密技術(shù)中,我們后面要介紹的IPSecVPN 也是先使用非對稱密鑰算法DH來產(chǎn)生密鑰資源,然后再使用對稱密鑰算法(DES、3DES……)來加密實(shí)際數(shù)據(jù)的。

3.2.3 封裝協(xié)議

IPSec有ESP和AH兩種封裝協(xié)議。

1.ESP協(xié)議

ESP(Encapsulation Security Payload)的IP 協(xié)議號為50,ESP 能夠?yàn)閿?shù)據(jù)提供私密性(加密)、完整性和源認(rèn)證3大方面的保護(hù),并且能夠抵御重放攻擊(反復(fù)發(fā)送相同的包,接收方由于不斷地解密消耗系統(tǒng)資源,實(shí)現(xiàn)拒絕服務(wù)攻擊(DOS))。ESP只能保護(hù)IP負(fù)載數(shù)據(jù),不對原始IP頭部進(jìn)行任何安全防護(hù)。

圖3-16所示為ESP數(shù)據(jù)包的結(jié)構(gòu)示意圖,下面我們分別對ESP包的各個(gè)字段逐一進(jìn)行介紹。

(1)安全參數(shù)索引(SPI)

一個(gè)32 比特的字段,用來標(biāo)識處理數(shù)據(jù)包的安全關(guān)聯(lián)(Security Association),關(guān)于安全關(guān)聯(lián)相關(guān)的內(nèi)容我們會在本章的后續(xù)部分進(jìn)行介紹。

圖3-16 ESP包結(jié)構(gòu)示意圖

(2)序列號(SN)

一個(gè)單調(diào)增長的序號,用來標(biāo)識一個(gè)ESP數(shù)據(jù)包。例如,當(dāng)前發(fā)送的ESP包序列號是X,下一個(gè)傳輸?shù)腅SP包序列號就是X+1,再下一個(gè)就是X+2。接收方通過序列號來防止重放攻擊,原理也很簡單,當(dāng)接收方收到序列號X的ESP包后,如果再次收到序列號為X的ESP包就被視為重放攻擊,采取丟棄處理。

(3)初始化向量(Initialization Vector)

我們在前面介紹過CBC這種塊加密方式,每一個(gè)需要使用CBC來加密的數(shù)據(jù)包都會產(chǎn)生一個(gè)隨機(jī)數(shù),用于加密時(shí)對數(shù)據(jù)進(jìn)行擾亂,這個(gè)隨機(jī)產(chǎn)生的數(shù)就叫做初始化向量(IV)。當(dāng)然 IPSec VPN 也可以選擇不加密(加密不是必須的,雖然我們一般都會采用),如果不加密就不存在IV字段。所以在圖3-16中有兩個(gè)ESP包結(jié)構(gòu)示意圖,左邊白底的ESP包沒有IV字段表示不加密,右邊深色底的存在IV字段則表示要加密。

(4)負(fù)載數(shù)據(jù)(Payload Data)

負(fù)載數(shù)據(jù)就是IPSec加密所保護(hù)的數(shù)據(jù),它很有可能就是TCP頭部加相應(yīng)的應(yīng)用層數(shù)據(jù)。當(dāng)然我們后面還會介紹兩種封裝模式,封裝模式的不同也會影響負(fù)載數(shù)據(jù)的內(nèi)容。

(5)墊片(Padding)

Cisco 的IPSecVPN 都采用了CBC 的塊加密方式,既然采用塊加密,就需要把數(shù)據(jù)補(bǔ)齊塊邊界。以DES為例,就需要補(bǔ)齊64比特的塊邊界,追加的補(bǔ)齊塊邊界的數(shù)據(jù)就叫做墊片。如果不加密就不存在墊片字段。

(6)墊片長度(Pad Length)

墊片長度顧名思義就是告訴接收方,墊片數(shù)據(jù)有多長,接收方解密后就可以清除這部分多余數(shù)據(jù)。如果不加密就不存在墊片長度字段。

(7)下一個(gè)頭部(Next Header)

下一個(gè)頭部標(biāo)識IPSec封裝負(fù)載數(shù)據(jù)里邊的下一個(gè)頭部,根據(jù)封裝模式的不同下一個(gè)頭部也會發(fā)生變化,如果是傳輸模式,下一個(gè)頭部一般都是傳輸層頭部(TCP/UDP);如果是隧道模式,下一個(gè)頭部肯定是IP。關(guān)于傳輸和隧道模式我們會在本章后續(xù)部分進(jìn)行介紹。這里順便提一下,從“下一個(gè)頭部”這個(gè)字段中,我們可以看到 IPv6 的影子。IPv6 的頭部就是使用很多個(gè)“下一個(gè)頭部”串接在一起的,這也說明IPSec最初是為IPv6而設(shè)計(jì)的。

(8)認(rèn)證數(shù)據(jù)(Authentication Data)

ESP會對從ESP頭部到ESP尾部的所有數(shù)據(jù)進(jìn)行驗(yàn)證,也就是做HMAC的散列計(jì)算,得到的散列值就會被放到認(rèn)證數(shù)據(jù)部分,接收方可以通過這個(gè)認(rèn)證數(shù)據(jù)部分對ESP數(shù)據(jù)包進(jìn)行完整性和源認(rèn)證的校驗(yàn)。

2.AH協(xié)議

AH(Authentication Header)IP 協(xié)議號為 51,AH 只能夠?yàn)閿?shù)據(jù)提供完整性和源認(rèn)證兩方面的安全服務(wù),并且抵御重放攻擊。AH 并不能為數(shù)據(jù)提供私密性服務(wù),也就是說不加密,所以在實(shí)際部署IPSecVPN 的時(shí)候很少使用AH,絕大部分IPSecVPN都會使用ESP進(jìn)行封裝。當(dāng)然AH不提供私密性服務(wù),只是它不被廣泛采用的其中一個(gè)原因,后面部分我們還會介紹AH沒有得到廣泛使用的另外一個(gè)原因。

圖3-17 AH包結(jié)構(gòu)示意圖

圖 3-17 所示為AH 包結(jié)構(gòu)示意圖,從圖中我們可以看到AH 與ESP 的關(guān)鍵性區(qū)別,即AH對數(shù)據(jù)驗(yàn)證的范圍更廣,不僅包含原始數(shù)據(jù),還包含了原始IP頭部,AH認(rèn)證頭部的名稱就由此而得名。

圖3-18所示為AH驗(yàn)證的IP頭部字段。

圖3-18 AH驗(yàn)證IP頭部字段

雖然AH要驗(yàn)證原始IP頭部,但并不是IP頭部的每一個(gè)字段都要進(jìn)行完整性驗(yàn)證。在圖3-18中,灰色部分字段就是AH不進(jìn)行驗(yàn)證的范圍。也就是說,AH只會對剩余的白色部分字段進(jìn)行完整性校驗(yàn)。可以看到IP地址字段是需要驗(yàn)證的,因而不能被修改。AH這么選擇也有它自身的原因。IPSec的AH封裝最初是為IPv6設(shè)計(jì)的。而在IPv6的網(wǎng)絡(luò)中,地址不改變非常正常,但是我們現(xiàn)在使用的主要是IPv4的網(wǎng)絡(luò),網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)技術(shù)經(jīng)常被采用。一旦AH封裝的IPSec數(shù)據(jù)包穿越NAT,地址就會改變,抵達(dá)目的地之后就不能通過驗(yàn)證,所以AH協(xié)議封裝的IPSec數(shù)據(jù)包不能穿越NAT,這就是AH現(xiàn)在沒有得到大量部署的第二大原因。

3.2.4封裝模式

IPSec有如下兩種數(shù)據(jù)封裝模式:

傳輸模式(Transport mode);

隧道模式(Tunnel mode)。

圖3-19所示為傳輸模式的封裝示意圖。

我們先通過圖3-19來看傳輸模式是如何對數(shù)據(jù)進(jìn)行封裝的,因?yàn)锳H很少使用,所以封裝模式示意圖中我們都以ESP封裝協(xié)議為例來進(jìn)行介紹。

傳輸模式實(shí)現(xiàn)起來很簡單,主要就是在原始IP頭部和IP負(fù)載(TCP頭部和應(yīng)用層數(shù)據(jù))之間插入一個(gè)ESP頭部。當(dāng)然ESP還會在最后追加上ESP尾部和ESP驗(yàn)證數(shù)據(jù)部分,并且對IP負(fù)載和ESP尾部進(jìn)行加密和驗(yàn)證處理,但原始IP頭部被完整地保留了下來。

圖3-19 傳輸模式封裝示意圖

圖3-20 所示為傳輸模式IPSec VPN 實(shí)例分析。

我們現(xiàn)在通過部署在Yeslab安全實(shí)驗(yàn)室內(nèi)部的一個(gè)IPSec VPN來說明傳輸模式是如何工作的,圖3-20 是這個(gè)IPSec VPN 的示意圖。

圖3-20 傳輸模式IPSec VPN實(shí)例分析

設(shè)計(jì)這個(gè)IPSec VPN 的主要目的是,對我的電腦訪問內(nèi)部重要文件服務(wù)器的流量進(jìn)行安全保護(hù)。我電腦的IP地址為10.1.1.5,服務(wù)器的IP地址為10.1.19.5。這兩個(gè)地址是實(shí)驗(yàn)室網(wǎng)絡(luò)的內(nèi)部地址,至少在Yeslab實(shí)驗(yàn)室內(nèi)部是全局可路由的。傳輸模式只是在原始IP頭部和IP負(fù)載中間插入了一個(gè)ESP頭部(圖例中省略了ESP尾部和ESP驗(yàn)證數(shù)據(jù)部分),并且對IP負(fù)載進(jìn)行加密和驗(yàn)證操作。我們把實(shí)際通信的設(shè)備叫做通信點(diǎn),加密數(shù)據(jù)的設(shè)備叫做加密點(diǎn),在這幅傳輸模式IPSec示意圖中,實(shí)際通信和加密設(shè)備都是我的電腦(10.1.1.5)和服務(wù)器(10.1.19.5),所以加密點(diǎn)等于通信點(diǎn)。只要能夠滿足加密點(diǎn)等于通信點(diǎn)的條件就可以進(jìn)行傳輸模式封裝。其實(shí)根據(jù)個(gè)人的經(jīng)驗(yàn),要使用傳輸模式進(jìn)行封裝,通信設(shè)備(接收方和發(fā)起方)的IP地址,必須在位于其間的網(wǎng)絡(luò)可路由,否則就必須使用隧道模式。通信點(diǎn)和加密點(diǎn)是很重要的一個(gè)概念,因?yàn)樗苯佑绊懼鳬PSec VPN 關(guān)于路由的配臵。在下一章我們還會進(jìn)一步討論加密點(diǎn)和通信點(diǎn)如何影響IPSec VPN 的路由。

講完了傳輸模式,我們緊接著來看一下隧道模式是如何對數(shù)據(jù)進(jìn)行封裝的。

圖3-21所示為隧道模式的封裝示意圖。隧道模式把原始IP數(shù)據(jù)包整個(gè)封裝到了一個(gè)新的IP數(shù)據(jù)包中,并且在新IP頭部和原始IP頭部中間插入了ESP頭部,以此對整個(gè)原始IP數(shù)據(jù)包進(jìn)行了加密和驗(yàn)證處理。那么,什么樣的網(wǎng)絡(luò)拓?fù)溥m合使用隧道模式來封裝IP 數(shù)據(jù)包呢?站點(diǎn)到站點(diǎn)的IPSec VPN 就是一個(gè)經(jīng)典的實(shí)例,我們可以分析一下站點(diǎn)到站點(diǎn)的IPSec VPN 是如何使用隧道模式來封裝數(shù)據(jù)包的。

圖3-21 隧道模式封裝示意圖

圖3-22是一個(gè)典型的站點(diǎn)到站點(diǎn)IPSec VPN示意圖,分支站點(diǎn)身后保護(hù)網(wǎng)絡(luò)為10.1.1.0/24,中心站點(diǎn)身后保護(hù)網(wǎng)絡(luò)為 10.1.2.0/24。分支站點(diǎn)有一臺終端電腦要通過站點(diǎn)到站點(diǎn)的IPSec VPN來訪問中心站點(diǎn)的數(shù)據(jù)庫服務(wù)器。這兩臺電腦就是我們所說的通信點(diǎn)。真正對數(shù)據(jù)進(jìn)行加密的設(shè)備是兩個(gè)站點(diǎn)連接互聯(lián)網(wǎng)的路由器,假設(shè)分支站點(diǎn)路由器獲取的互聯(lián)網(wǎng)地址為202.100.1.1,中心站點(diǎn)的互聯(lián)網(wǎng)地址為61.128.1.1。那么路由器的這兩個(gè)地址就是加密點(diǎn)。很明顯加密點(diǎn)不等于通信點(diǎn),因此這個(gè)時(shí)候就應(yīng)該采用隧道模式來對數(shù)據(jù)進(jìn)行封裝。封裝后在互聯(lián)網(wǎng)上傳輸?shù)腎PSec數(shù)據(jù)包如圖3-22所示,最外層頭部為加密點(diǎn)為源和目的IP頭部,緊接著是ESP頭部,最內(nèi)層為被安全保護(hù)的原始IP數(shù)據(jù)包。

圖3-22 站點(diǎn)到站點(diǎn)隧道模式分析示意圖

圖3-23 所示為站點(diǎn)到站點(diǎn)IPSec VPN 使用傳輸模式的封裝包結(jié)構(gòu)。

圖3-23 站點(diǎn)到站點(diǎn)IPSec VPN使用傳輸模式的封裝包結(jié)構(gòu)

我們也可以假設(shè)如果在圖3-22所示的拓?fù)渲校廊贿M(jìn)行傳輸模式封裝,那么封裝后的結(jié)果如圖3-23所示。如果將這樣封裝的數(shù)據(jù)包直接發(fā)送到互聯(lián)網(wǎng),那么它一定會被互聯(lián)網(wǎng)路由器丟棄,因?yàn)?0.1.1.0/24和10.1.2.0/24都是客戶內(nèi)部網(wǎng)絡(luò),在互聯(lián)網(wǎng)上不可路由。為了讓站點(diǎn)到站點(diǎn)的流量能夠通過IPSecVPN 加密后穿越互聯(lián)網(wǎng),我們需要在兩個(gè)站點(diǎn)間制造一個(gè)“隧道”,把站點(diǎn)間的流量封裝到這個(gè)隧道內(nèi),并穿越互聯(lián)網(wǎng)。這個(gè)隧道其實(shí)就是通過插入全新的 IP 頭部和ESP頭部來實(shí)現(xiàn)的。再次重復(fù)一遍使用隧道模式的條件:只要加密點(diǎn)不等于通信點(diǎn)我們就應(yīng)該采用隧道模式封裝,或者說通信點(diǎn)的IP地址在其間的網(wǎng)絡(luò)是不可路由的,就應(yīng)該采用隧道模式封裝。

3.2.4 密鑰有效期

長期使用相同密鑰來加密數(shù)據(jù)是不明智的,我們應(yīng)該周期性地更新密鑰, Cisco的IPSec VPN 用于加密實(shí)際數(shù)據(jù)的密鑰,默認(rèn)每一個(gè)小時(shí)(3600 秒)就要更新一次。我們也可以根據(jù)自身的情況對密鑰有效期進(jìn)行調(diào)整。但是這種調(diào)整應(yīng)該遵循一個(gè)簡單的原則,那就是密鑰加密的數(shù)據(jù)越多,這個(gè)密鑰的有效期就應(yīng)該越短;加密的數(shù)據(jù)越少,它的有效期就可以越長。

Cisco 的 IPSec VPN 雖然默認(rèn)每小時(shí)更換一次密鑰,但下一個(gè)小時(shí)使用的密鑰,是由當(dāng)前這個(gè)小時(shí)使用的密鑰,通過一系列的算法衍生得出的。也就是說這些密鑰之間存在推演關(guān)系。這樣的密鑰更新就不能叫做完美向前保密 PFS(Perfect Forward Secrecy)。PFS 要求每一次密鑰更新,都需要重新產(chǎn)生全新的密鑰,和以前使用的密鑰不存在任何衍生關(guān)系。Cisco 的IPSec VPN 一旦啟用了PFS 技術(shù),就會在每一個(gè)小時(shí)結(jié)束的時(shí)候,展開一次全新的DH交換(本章后續(xù)內(nèi)容將會詳細(xì)介紹這種算法),產(chǎn)生全新的密鑰用于下一個(gè)小時(shí)加密。關(guān)于PFS的配臵我們會在后面部分介紹。

主站蜘蛛池模板: 南阳市| 西乌珠穆沁旗| 横峰县| 游戏| 河北区| 房山区| 左权县| 廉江市| 泰州市| 勐海县| 德化县| 凤山市| 舟曲县| 灵寿县| 敦化市| 昌邑市| 遵义县| 光山县| 五莲县| 平度市| 嘉定区| 涞水县| 肥乡县| 奉化市| 华宁县| 太原市| 陈巴尔虎旗| 拉萨市| 新河县| 霍州市| 龙山县| 墨脱县| 涿鹿县| 南丹县| 华亭县| 兴隆县| 靖安县| 武川县| 罗定市| 肥乡县| 丹阳市|