陳文龍,劉迪雅,張洪山
(首都師范大學(xué) 信息工程學(xué)院,北京 100048)
E-mail:gagezhs@sina.com
當(dāng)前的互聯(lián)網(wǎng)容易受到各種類型的惡意攻擊,例如拒絕服務(wù)和非法流量竊取,這是由于缺乏源地址和傳輸路徑的安全驗(yàn)證.目前關(guān)于源地址和路徑安全驗(yàn)證的研究大體可分為基于標(biāo)識(shí)驗(yàn)證、基于可信硬件和集中式控制等.其中,數(shù)據(jù)包標(biāo)記方案由于高效率與高可靠性受到廣泛關(guān)注.相對(duì)于IPv4,IPv6提供了一種更靈活和可擴(kuò)展的方式,但現(xiàn)有的方案針多數(shù)針對(duì)于IPv4數(shù)據(jù)包,關(guān)于IPv6協(xié)議的安全性研究較少.文獻(xiàn)[1]提出的OPT方案可拓展到IPv6中,但并未給出具體設(shè)計(jì)及實(shí)驗(yàn)分析.文獻(xiàn)[2]提出按流量大小進(jìn)行分類的包標(biāo)記方案,可以實(shí)現(xiàn)源和路徑驗(yàn)證,但是要求中間路由器存儲(chǔ)整條路徑信息,及上一跳路由器的共享信息,存儲(chǔ)開銷過大.
本文設(shè)計(jì)了針對(duì)IPv6報(bào)文的源地址真實(shí)性驗(yàn)證和傳輸路徑安全驗(yàn)證方案.在初始化階段,發(fā)送端在數(shù)據(jù)包頭部添加標(biāo)識(shí),隨機(jī)選擇一些中間路由器作為檢查節(jié)點(diǎn),僅由檢查節(jié)點(diǎn)對(duì)網(wǎng)絡(luò)實(shí)體中的數(shù)據(jù)包執(zhí)行標(biāo)識(shí)字段的識(shí)別和驗(yàn)證,不需要所有節(jié)點(diǎn)都具有驗(yàn)證能力,提升了安全驗(yàn)證效率.若檢查節(jié)點(diǎn)驗(yàn)證失敗,丟棄報(bào)文,并將記錄發(fā)送給源端,源端能夠通過新增的標(biāo)識(shí)字段,執(zhí)行高效可靠的故障定位.對(duì)于只需要保證某一段路徑一致性的需求,可以通過修改標(biāo)識(shí)字段的最高位,實(shí)現(xiàn)自定義的路徑驗(yàn)證.
本文提出的源和分段路徑驗(yàn)證技術(shù),能實(shí)現(xiàn)高效可靠的源身份合法性和路徑一致性驗(yàn)證.其主要特點(diǎn)包括:1)由中間路由器做路徑驗(yàn)證,如果驗(yàn)證失敗,立即丟棄報(bào)文,而非在目的端才做驗(yàn)證,減少了錯(cuò)誤報(bào)文的傳輸開銷;2)僅由源端選擇的少量的中間路由器執(zhí)行驗(yàn)證,其余實(shí)體僅對(duì)數(shù)據(jù)包進(jìn)行標(biāo)記;3)由源端進(jìn)行數(shù)據(jù)包初始化,檢查節(jié)點(diǎn)選擇和故障定位,減輕了中間路由器的計(jì)算和存儲(chǔ)開銷,負(fù)擔(dān)多在源端,這是可以接受的;4)源端通過隨機(jī)函數(shù)為每個(gè)流選出檢查節(jié)點(diǎn),每個(gè)會(huì)話周期結(jié)束后重新選擇檢查節(jié)點(diǎn),不僅可以降低被攻擊者探測到的概率,提高了方案的安全性,且將計(jì)算負(fù)載平攤到路徑上每一個(gè)實(shí)體.
本文其他部分組織如下:第2節(jié)對(duì)源和路徑驗(yàn)證的相關(guān)工作進(jìn)行介紹;第3節(jié)對(duì)SPV方案做出概述;第4節(jié)給出了方案的具體實(shí)現(xiàn)流程;第5節(jié)進(jìn)行實(shí)驗(yàn)分析.最后對(duì)全文進(jìn)行總結(jié).
包標(biāo)記法是由報(bào)文通過的路由器為報(bào)文添加一定的標(biāo)記信息,被攻擊者主機(jī)上通過提取攻擊報(bào)文中的標(biāo)記信息實(shí)現(xiàn)攻擊路徑溯源的一種攻擊溯源方案.
OPT(Origin and Path Trace)方案[1]設(shè)計(jì)了一種輕量級(jí)的源地址和路徑驗(yàn)證策略,發(fā)送端在數(shù)據(jù)包頭為源和中間每個(gè)路由器添加對(duì)應(yīng)的標(biāo)識(shí),中間節(jié)點(diǎn)及目的端依次在路徑上接收相應(yīng)標(biāo)識(shí).在OPT算法中,每個(gè)中間節(jié)點(diǎn)需要執(zhí)行兩次消息認(rèn)證碼(Message Authentication Code,MAC)操作,因此需要所有節(jié)點(diǎn)都具有驗(yàn)證能力,同時(shí)它無法解決中間節(jié)點(diǎn)受到攻擊產(chǎn)生惡意丟包的問題.文獻(xiàn)[2]也是一種基于包標(biāo)記法的源地址認(rèn)證方法.通過設(shè)計(jì)標(biāo)記概率和標(biāo)記流程,將域內(nèi)溯源與域間溯源相結(jié)合.利用被標(biāo)記的路徑信息實(shí)現(xiàn)路徑的重構(gòu).由于僅將流量通過一個(gè)確定的閾值,在實(shí)際流量中,網(wǎng)絡(luò)狀況并不總是穩(wěn)定的,因此閾值設(shè)定的合理性有待優(yōu)化.
在PPV方案中[3],中間節(jié)點(diǎn)為每個(gè)數(shù)據(jù)包執(zhí)行概率數(shù)據(jù)包標(biāo)記,并為該數(shù)據(jù)包生成密鑰哈希消息驗(yàn)證碼.為定位到故障鏈路,目的地根據(jù)數(shù)據(jù)包中接收到的標(biāo)記重建轉(zhuǎn)發(fā)路徑.Passport方案[4]將轉(zhuǎn)發(fā)路徑上一系列AS路徑的MAC填入報(bào)文頭部,作為其身份的標(biāo)識(shí).當(dāng)數(shù)據(jù)包離開其源AS時(shí),邊界路由器會(huì)將路徑上每個(gè)AS的一個(gè)MAC標(biāo)記到其passport標(biāo)頭中,MAC由源AS和AS之間共享的密鑰計(jì)算得出.當(dāng)數(shù)據(jù)包進(jìn)入路徑上的AS時(shí),邊界路由器會(huì)使用與源AS共享的密鑰來驗(yàn)證對(duì)應(yīng)的MAC值.具有無效MAC的數(shù)據(jù)包在中間AS處被降級(jí),并在目的地AS處被丟棄.邊界路由器需要對(duì)出分組進(jìn)行標(biāo)記,對(duì)入分組進(jìn)行檢查,承擔(dān)的計(jì)算開銷太大.文獻(xiàn)[5]在Pi[6]與StackPi[7]的基礎(chǔ)上做出進(jìn)一步改進(jìn),提出了主動(dòng)路徑標(biāo)識(shí)機(jī)制Active SPi.該方案在端系統(tǒng)處采取主動(dòng)探測方式來驗(yàn)證報(bào)文源地址的合法性,構(gòu)建信任表來進(jìn)行報(bào)文過濾.ShorMAC[8]利用概率包驗(yàn)證實(shí)現(xiàn)故障鏈路的定位,但是要求為每個(gè)源端存儲(chǔ)對(duì)稱密鑰,這對(duì)路由器存儲(chǔ)能力要求過高.RFL[9]中提出的一種魯棒的對(duì)稱密鑰共享方案,完成在轉(zhuǎn)發(fā)路徑中,源和實(shí)體間的對(duì)稱密鑰設(shè)置和分發(fā).通過對(duì)數(shù)據(jù)包的隨機(jī)采樣,實(shí)現(xiàn)輕量級(jí)的源地址和路徑驗(yàn)證.文獻(xiàn)[10]基于OpenFlow架構(gòu),提出一種新的路由算法,通過四元組(源地址前綴、目的地址前綴、入接口和出接口)實(shí)現(xiàn)端口粒度的源地址驗(yàn)證.
文獻(xiàn)[11,12]對(duì)源地址安全問題的已有研究進(jìn)行細(xì)致分析歸納,提出保證端設(shè)備地址和傳輸路徑的真實(shí)可信的安全體系結(jié)構(gòu).文獻(xiàn)[13]研究了域間源地址驗(yàn)證方法的可部署性問題.
本節(jié)給出了對(duì)手模型和SPV協(xié)議的概述.本文提出的源驗(yàn)證和路徑認(rèn)證是基于端到端實(shí)現(xiàn)的,即數(shù)據(jù)包通過源S,沿預(yù)期路徑Ψ=到達(dá)目標(biāo)D,其中n是路徑長度(不包括源端),并且S,D和Ri是網(wǎng)絡(luò)中的網(wǎng)絡(luò)實(shí)體.在不可靠的通信通道下,由于被攻擊或出現(xiàn)故障,中間路由器可能丟棄、修改數(shù)據(jù)包或改變其轉(zhuǎn)發(fā)路徑.
本文假設(shè)源S和目的地D是終端,定義合法路徑是Ψ=,理想情況下應(yīng)沿此路徑傳輸數(shù)據(jù)包.根據(jù)現(xiàn)有的路由協(xié)議,如BGP協(xié)議或Pathlet協(xié)議,本文假設(shè)源端可以獲知數(shù)據(jù)包預(yù)期將遍歷的路徑,并且可以設(shè)定該路徑中哪些實(shí)體希望執(zhí)行路徑驗(yàn)證.本文在終端主機(jī)使用現(xiàn)有的DRKey協(xié)議,獲得與預(yù)期路徑的中間實(shí)體共享的必要對(duì)稱密鑰.
數(shù)據(jù)包更改:更改數(shù)據(jù)包的信息,如源地址,報(bào)頭或有效載荷數(shù)據(jù).
數(shù)據(jù)包注入:惡意路由器偽造數(shù)據(jù)包并將其發(fā)送到目的端.
路徑偏差:包括路徑繞行和路由器跳過.路徑繞行是指偏離預(yù)期的轉(zhuǎn)發(fā)路徑,但隨后該數(shù)據(jù)包返回到正確的路徑上.如
亂序遍歷:未按正確的順序遍歷預(yù)期路徑上的路由器.如
本文從整條路徑中挑選一些節(jié)點(diǎn)作為檢查節(jié)點(diǎn),只有驗(yàn)證節(jié)點(diǎn)負(fù)責(zé)驗(yàn)證路徑,這些檢查節(jié)點(diǎn)組成一個(gè)檢查點(diǎn)組Checks.分段的原則是同一時(shí)刻完全覆蓋整條路徑,所以每個(gè)檢查節(jié)點(diǎn)負(fù)責(zé)檢查從上一個(gè)檢查節(jié)點(diǎn)到它自己的這一段路徑.而目的端D負(fù)責(zé)最后一個(gè)檢查點(diǎn)到自己的這段路徑.
SPV將一條完整路徑分為若干段,僅由路徑上的一些實(shí)體做路徑驗(yàn)證,他們只負(fù)責(zé)驗(yàn)證自己所在的一段路徑,而不是驗(yàn)證完整路徑.合理的檢查點(diǎn)數(shù)量和均勻分布檢查點(diǎn)可以使得分段的路徑不至于過長,在路徑驗(yàn)證失敗時(shí)可以較快的定位出故障點(diǎn).為了平均檢查點(diǎn)的負(fù)載和提高檢查節(jié)點(diǎn)的安全性,每經(jīng)過一段時(shí)間后會(huì)更新檢查點(diǎn)組.
IPv6 分組由固定首部和有效荷載組成,有效載荷部分由擴(kuò)展首部和數(shù)據(jù)部分組成.本文將標(biāo)識(shí)插入到IPv6目的選項(xiàng)頭中.IPv6協(xié)議規(guī)定了兩種目的選項(xiàng)頭,本文選擇位于路由選項(xiàng)頭之前的選項(xiàng)字段.SPV報(bào)頭包含如下字段:檢查點(diǎn)組(Checks),會(huì)話標(biāo)識(shí)(SessionID),簽名字段(Sign)和若干個(gè)標(biāo)記字段(SegInfon).所有標(biāo)記都插入到選項(xiàng)字段中.如圖1所示.
版本號(hào)通信類型流標(biāo)簽有效載荷長度下一首部跳數(shù)極限源地址目的地址拓展首部/數(shù)據(jù)下一首部拓展首部長度選項(xiàng)
PacketIdSessionIDChecksSignSegInfo1SegInfo2…SegInfon
PacketID是數(shù)據(jù)包標(biāo)識(shí).本文將報(bào)文的消息驗(yàn)證碼(MAC)作為報(bào)文的標(biāo)識(shí).使用同樣的密鑰,對(duì)于不同內(nèi)容的報(bào)文會(huì)產(chǎn)生不同的驗(yàn)證碼[2],這樣可以更好地防止重放攻擊.如果在傳輸過程中數(shù)據(jù)包的有效負(fù)載被修改,對(duì)這個(gè)包進(jìn)行源認(rèn)證和路徑驗(yàn)證將毫無意義.PacketID的計(jì)算如式(1)所示.src是源地址,dst是目的地址,data是有效載荷的前8個(gè)字節(jié).flow是IPv6固定頭部中的流標(biāo)簽.
PacketID=MACKSD(flow‖src‖dst‖data)
(1)
Checks的計(jì)算如式(2)所示.N是一串二進(jìn)制數(shù),它的長度與路徑長度相等(包含源端和目的端),它的每一位與路徑上的每一個(gè)實(shí)體相對(duì)應(yīng),當(dāng)該實(shí)體被源端設(shè)置為檢查點(diǎn)時(shí),該位置1,否則為0.Checks字段的最高位默認(rèn)為1.
在下文中,通過設(shè)置最高位來進(jìn)行自定義的路徑驗(yàn)證.
Checks=MACKSD(N)
(2)
在確定檢查點(diǎn)以后,整段路徑就以檢查點(diǎn)為界限被分為若干段.其中,第1段為S到第一個(gè)檢查點(diǎn),最后1段為最后一個(gè)檢查點(diǎn)到D.SegInfo代表由相鄰兩個(gè)檢查點(diǎn)間的路徑信息,包括這段路徑上需要遍歷的路由器,及遍歷的正確順序.S分別為每一段計(jì)算一個(gè)SegInfo,按順序填入SegInfon字段.Sign的計(jì)算如式(3)所示.PRF是以密鑰Ki加密的偽隨機(jī)函數(shù).SegInfo的計(jì)算見公式(4).其中,T為上一個(gè)檢查點(diǎn)k到下一個(gè)檢查點(diǎn)t的路徑上的所有實(shí)體的Sign值集合.
Signi=PRFKi(Signi-1‖Ri‖src‖dst)
(3)
SegInfon=MACKn(PacketId‖Checks‖T)
T=Signk‖Signk+1‖Sign…‖Signt)
(4)
以圖2為例,S在發(fā)送數(shù)據(jù)包之前選擇R3,R7作為檢查點(diǎn),按照公式(2)計(jì)算Checks的值.因?yàn)槁窂介L度為13(不含源端),所以公式中的N是一個(gè)13位的二進(jìn)制數(shù),按照路徑上檢查點(diǎn)的順序,將N中對(duì)應(yīng)的位置為1,得到N=10010001000001.然后分別為檢查點(diǎn)組中每個(gè)實(shí)體計(jì)算對(duì)應(yīng)的分段路徑信息字段SegInfo:SegInfo3,SegInfo7和SegInfoD,依次填入到SegInfo字段中.由源S到R3需要按序經(jīng)歷R1和R2,S為該段路徑信息執(zhí)行MAC操作,使用與R3共享的密鑰加密,得到SegInfo3.源端分別與路徑上的中間路由器及D共享對(duì)稱密鑰.在開始轉(zhuǎn)發(fā)數(shù)據(jù)包前使用現(xiàn)有的DRKey協(xié)議完成密鑰分發(fā)與交換.
圖2 分段路徑認(rèn)證模型Fig.2 Segmented path verification model
S下發(fā)數(shù)據(jù)包,接收到數(shù)據(jù)包后,Ri首先檢查Checks字段是否有自己的名字.如果沒有,使用密鑰Ki簽名公式(3),更新字段Sign,繼續(xù)向下傳輸數(shù)據(jù)包.若Checks字段中第n位為自己的名字,則該路由器是檢查點(diǎn).它首先計(jì)算Sign的值(公式(3)),并將其與SegInfon進(jìn)行比較.如果這兩個(gè)值相等,表示這一段路徑驗(yàn)證成功.Ri將Sign字段清空,并用密鑰簽名,然后將數(shù)據(jù)包轉(zhuǎn)發(fā)到下游路由器.目的端D收到數(shù)據(jù)包后,先用密鑰KSD計(jì)算Sign字段值,與SegInfo比較,若比較成功,代表從S到D的所有分段路徑都已被成功驗(yàn)證.本文默認(rèn)S未收到任意一個(gè)檢查節(jié)點(diǎn)回傳的Fail報(bào)文(ICMP報(bào)文),即表示整條路徑都驗(yàn)證成功.
檢查點(diǎn)計(jì)算出的值與SegInfon字段不匹配時(shí),丟棄數(shù)據(jù)包,將收到的數(shù)據(jù)包的Sign字段的信息填入Fail數(shù)據(jù)包內(nèi),并用密鑰簽名,然后向源端發(fā)送Fail報(bào)文.
在某些應(yīng)用環(huán)境中,不需要對(duì)整條路徑進(jìn)行嚴(yán)格的路徑驗(yàn)證,用戶想自定義地對(duì)其中一段進(jìn)行驗(yàn)證,如只需驗(yàn)證數(shù)據(jù)包是否按正確的順序遍歷了
圖3以R3和R7為檢查點(diǎn),表示了具體的過程.非驗(yàn)證路徑上的路由器不更新簽名,僅轉(zhuǎn)發(fā)數(shù)據(jù)包.當(dāng)數(shù)據(jù)包到達(dá)R3時(shí),R3將Checks最高位置1,更新Sign字段后繼續(xù)向下轉(zhuǎn)發(fā)數(shù)據(jù)包.R3-R7路徑上的實(shí)體在解析出最高位的值為1后,同樣更新Sign字段.直到R7收到數(shù)據(jù)包,因?yàn)镽7是最后一個(gè)檢查節(jié)點(diǎn),R7將Checks的最高位置0.下游的路由器將不再進(jìn)行標(biāo)記或驗(yàn)證,僅執(zhí)行轉(zhuǎn)發(fā)操作.
若需要實(shí)現(xiàn)更復(fù)雜粒度的自定義驗(yàn)證,可以拓展標(biāo)記位的長度.例如,3位的標(biāo)記位可以表示8種的選擇狀態(tài),可以包含路徑被劃分為幾段,選擇了第幾段路徑(可以多段)等信息.這里僅將最高位1位作為標(biāo)記位,可實(shí)現(xiàn)挑選中間一段路徑執(zhí)行驗(yàn)證.
圖3 自定義路徑認(rèn)證模型Fig.3 Definable path verification model
4.4.1 檢查點(diǎn)收到數(shù)據(jù)包,但驗(yàn)證失敗
檢查點(diǎn)收到了上一跳傳來的數(shù)據(jù)包,但計(jì)算出的SegInfo值與報(bào)文頭部預(yù)先填入的SegInfo字段值不相等,則檢查點(diǎn)對(duì)它負(fù)責(zé)的這段路徑驗(yàn)證失敗.這可能是由于惡意路由器將報(bào)文轉(zhuǎn)發(fā)路徑修改,亂序,增加或跳過了某些正確路徑上的路由器.在驗(yàn)證分段路徑失敗時(shí),該檢查點(diǎn)會(huì)丟棄數(shù)據(jù)包,并在時(shí)間段e的末尾時(shí)刻向源端發(fā)送Fail報(bào)文(ICMP報(bào)文).檢查點(diǎn)將驗(yàn)證失敗的數(shù)據(jù)包中的Sign字段信息填入Fail報(bào)文,并填入自己的簽名信息.
S將重建分段路徑,使用收到的Fail報(bào)文來定位故障,這些連接全部從一系列接收到的SPV標(biāo)頭中獲得.例如R4受到惡意攻擊丟棄數(shù)據(jù)包,R4的下游中距離最近的檢查節(jié)點(diǎn)R7將收不到含有正確Sign字段的數(shù)據(jù)包,R7將向S發(fā)送Fail數(shù)據(jù)包,在時(shí)間段e內(nèi),S收到同一檢查點(diǎn)發(fā)來的Fail報(bào)文數(shù)量超過k,就會(huì)將公式(2)中的N的對(duì)應(yīng)于該檢查點(diǎn)至前一檢查點(diǎn)的路徑上的所有實(shí)體的位都置為1.將Checks的第4至7位都設(shè)置為1,即R4至R7都將進(jìn)行路徑驗(yàn)證,若R5未正確收到數(shù)據(jù)包,可以將故障定位到R4和R5之間的路徑上.
4.4.2 檢查點(diǎn)未收到數(shù)據(jù)包
檢查點(diǎn)未收到數(shù)據(jù)包,可能是惡意路由器將數(shù)據(jù)包丟棄或轉(zhuǎn)發(fā)到其他路徑上.該檢查點(diǎn)也會(huì)向S發(fā)送Fail報(bào)文,僅用密鑰簽上自己名字,填入Sign字段.S收到Fail報(bào)文并解析后,會(huì)知道該檢查點(diǎn)未收到數(shù)據(jù)包,若并未收到上一個(gè)檢查點(diǎn)的Fail報(bào)文,則可以將故障定位到上一個(gè)檢查點(diǎn)到該檢查點(diǎn)的這段路徑上.在下一個(gè)時(shí)間段,將這段路徑上的所有路由器都設(shè)置為檢查點(diǎn).
在本節(jié)中,通過NS2仿真平臺(tái),對(duì)指定模塊的修改實(shí)現(xiàn)了SPV分段路徑驗(yàn)證方案.實(shí)驗(yàn)平臺(tái)配置為Core i5處理器,
8G RAM.實(shí)驗(yàn)分為兩部分,第1部分通過網(wǎng)絡(luò)吞吐量對(duì)本方案路徑驗(yàn)證的性能進(jìn)行評(píng)估,并與目前的最佳方案OPT進(jìn)行比較.第2部分是對(duì)檢查點(diǎn)概率對(duì)故障定位時(shí)間的影響進(jìn)行測試,并給出一般網(wǎng)絡(luò)環(huán)境下檢查點(diǎn)概率的建議值.
本文評(píng)估SPV中間路由器的吞吐量并與OPT進(jìn)行比較.雖然目前也有一些關(guān)于源地址和路徑驗(yàn)證的方案,但有些不適用于IPv6協(xié)議,而本文方案針對(duì)于IPv6網(wǎng)絡(luò),與其對(duì)比意義不大.本文是在流粒度上對(duì)數(shù)據(jù)包進(jìn)行驗(yàn)證,有一些方案將粒度細(xì)分到了端口,雖然更加細(xì)致,但增加了驗(yàn)證開銷,降低了網(wǎng)絡(luò)通信的效率.而OPT仍是目前較好的路徑認(rèn)證方案,且可拓展應(yīng)用于IPv6報(bào)文.因此本文選擇與OPT方案進(jìn)行對(duì)比.
圖4 路徑長度對(duì)吞吐量的影響Fig.4 Influence of path length on forwarding efficiency
首先,將新增字段填入IPv6首部的選項(xiàng)字段.設(shè)置路徑長度分別為最長為20跳,最短為10跳.對(duì)大小分別為256B,512B,1024B和1500B的數(shù)據(jù)包進(jìn)行多組實(shí)驗(yàn).從圖4可以看出,在不同路徑長度條件下,SPV的路由節(jié)點(diǎn)的吞吐量都優(yōu)于OPT,最大是OPT的1.17倍.因?yàn)镺PT需要每個(gè)中間路由器都執(zhí)行MAC操作,而SPV只有檢查節(jié)點(diǎn)執(zhí)行MAC操作,其余節(jié)點(diǎn)使用為隨機(jī)函數(shù),以本地信息作為輸入,計(jì)算開銷小于MAC.隨著路徑長度的增加.源端選擇檢查節(jié)點(diǎn)的概率不變的條件下,更多的中間路由器僅執(zhí)行簡單的簽名計(jì)算,因此SPV路由節(jié)點(diǎn)的吞吐量隨路徑增長而顯著增長.
圖5 數(shù)據(jù)包大小對(duì)吞吐量的影響Fig.5 Impact of packet size on forwarding efficiency
圖5為數(shù)據(jù)包大小與吞吐量的關(guān)系.從圖中可以看出,SPV的吞吐量隨著數(shù)據(jù)包大小的增大而增大.特別是當(dāng)數(shù)據(jù)包大小達(dá)到1500字節(jié)時(shí),與無安全驗(yàn)證相比,SPV能夠?qū)崿F(xiàn)約90%的吞吐量.
實(shí)驗(yàn)改變檢查點(diǎn)的概率,以分析SPV的性能.在n=13的條件下,對(duì)于256B和512B的數(shù)據(jù)包,隨著檢查點(diǎn)概率的增加,源端定位到故障路徑的時(shí)間需要的時(shí)間逐漸減小.圖6表明,較小的數(shù)據(jù)包所需的故障定位時(shí)間比更大數(shù)據(jù)包所需的時(shí)間少.當(dāng)檢查點(diǎn)概率為1,即每個(gè)中間路由器都執(zhí)行路徑驗(yàn)證時(shí),定位到故障路徑的時(shí)間最少.但檢查點(diǎn)為1即意味著所有中間路由器都需要進(jìn)行路徑驗(yàn)證,這會(huì)帶來計(jì)算開銷的增大.因此,為平衡故障定位性能與轉(zhuǎn)發(fā)性能,本文給出SPV檢查點(diǎn)概率的推薦值為0.2.
圖6 檢查點(diǎn)概率對(duì)故障定位時(shí)間的影響Fig.6 Effect of checkpoint probability on fault location time
本文提出一種基于IPv6的分段源和路徑驗(yàn)證的方案.首先,根據(jù)IPv6的首部結(jié)構(gòu),選擇目的選項(xiàng)作為標(biāo)記域,由源端選擇的檢查節(jié)點(diǎn)對(duì)標(biāo)記字段進(jìn)行計(jì)算,通過與源端預(yù)先填入的值進(jìn)行比較,判斷路徑驗(yàn)證是否成功.當(dāng)路徑驗(yàn)證失敗后,檢查節(jié)點(diǎn)向源端發(fā)送錯(cuò)誤報(bào)告報(bào)文,源端將以更細(xì)粒度重新設(shè)置檢查節(jié)點(diǎn),來定位到故障的鏈路.
本文提出的源和分段路徑驗(yàn)證技術(shù),在中間路由器,而非僅目的端執(zhí)行路徑驗(yàn)證,如果驗(yàn)證失敗,立即丟棄報(bào)文,能夠減少錯(cuò)誤報(bào)文的傳輸開銷;而且源端僅選擇的少量的中間路由器執(zhí)行驗(yàn)證,其余實(shí)體僅對(duì)數(shù)據(jù)包進(jìn)行標(biāo)記.與OPT相比,不僅減小了傳輸開銷,而且對(duì)于不同數(shù)據(jù)包大小,和不同路徑長度,中間路由器的吞吐量均優(yōu)于OPT,最大是OPT的1.17倍.此外,檢查節(jié)點(diǎn)隨著每個(gè)會(huì)話周期結(jié)束會(huì)被重新設(shè)置,不僅可以降低被攻擊者探測到的概率,且將計(jì)算負(fù)載平攤到路徑上每一個(gè)實(shí)體.如果需要僅在自定義路段上執(zhí)行路徑驗(yàn)證操作,可通過設(shè)置字段的最高位為標(biāo)記位來實(shí)現(xiàn).