郭 江 王 淼 許志偉 張瀚文 張玉軍
(*中國科學(xué)院計(jì)算技術(shù)研究所 北京 100190)
(**中國科學(xué)院大學(xué) 北京 100049)
為了確保用戶接收完整、真實(shí)的內(nèi)容,命名數(shù)據(jù)網(wǎng)絡(luò)(named data networking,NDN)[1,2]規(guī)定內(nèi)容發(fā)布者對每個(gè)數(shù)據(jù)包進(jìn)行簽名,用戶對收到的數(shù)據(jù)包進(jìn)行驗(yàn)證簽名。考慮到計(jì)算開銷巨大等因素,NDN沒有要求沿途路由器對數(shù)據(jù)包進(jìn)行驗(yàn)證簽名(網(wǎng)內(nèi)簽名驗(yàn)證)。攻擊者通過劫持路由器,向其緩存注冊毒化內(nèi)容。對于到來的請求興趣包,惡意路由器返回對應(yīng)名字的毒化內(nèi)容數(shù)據(jù)包,導(dǎo)致反向路徑的路由器轉(zhuǎn)發(fā)并緩存毒化內(nèi)容數(shù)據(jù)包,最終使得用戶接收到毒化內(nèi)容數(shù)據(jù)包,這種攻擊稱為內(nèi)容毒化攻擊(content poisoning attack,CPA)[3]。文獻(xiàn)[4,5]指出,根據(jù)內(nèi)容被篡改信息的不同,毒化內(nèi)容攻擊可以分為無效簽名和冒名簽名。無效簽名是指數(shù)據(jù)包的內(nèi)容被毒化(破壞或者篡改),而冒名簽名是指數(shù)據(jù)包的簽名被毒化,即簽名密鑰是他人冒名的。
現(xiàn)有解決CPA的方案根據(jù)驗(yàn)證實(shí)體的不同大致可以歸結(jié)為2類:基于用戶反饋的機(jī)制和基于網(wǎng)內(nèi)驗(yàn)證的機(jī)制?;谟脩舴答伒臋C(jī)制提出讓用戶對數(shù)據(jù)包進(jìn)行簽名驗(yàn)證,利用用戶反饋使路由器在不執(zhí)行復(fù)雜簽名驗(yàn)證的情況下識別被污染的數(shù)據(jù)包,減少內(nèi)容污染攻擊的影響。Gasti等人[3]提出利用興趣包中的EXCLUDE域,排除再次接收相同無效的內(nèi)容包。Ghali等人[6]提出一種統(tǒng)計(jì)內(nèi)容排名算法,路由器根據(jù)用戶反饋對其緩存副本進(jìn)行排除次數(shù)統(tǒng)計(jì)排序,從而區(qū)分有效和污染的內(nèi)容。文獻(xiàn)[7]提出2種回避解決方法:即時(shí)故障轉(zhuǎn)移法和探針優(yōu)先法。在第1種方法中,簡單地把返回污染數(shù)據(jù)的路由器作為后續(xù)請求包傳輸時(shí)優(yōu)先級最低的下一跳節(jié)點(diǎn);在第2種方法中,路由器需要驗(yàn)證用戶的反饋,并把污染數(shù)據(jù)包對應(yīng)的請求包作為探針來檢測惡意攻擊者。上述機(jī)制都需要修改用戶端,使其主動(dòng)發(fā)送反饋信息,導(dǎo)致通信開銷大。
基于網(wǎng)內(nèi)驗(yàn)證的機(jī)制提出讓沿途路由器對數(shù)據(jù)包進(jìn)行簽名驗(yàn)證,一旦發(fā)現(xiàn)污染數(shù)據(jù)就將其剔除,這樣整個(gè)網(wǎng)絡(luò)都不會(huì)緩存被污染的內(nèi)容。然而考慮到網(wǎng)絡(luò)內(nèi)驗(yàn)證帶來的負(fù)荷,很多優(yōu)化的簽名驗(yàn)證方法被提出[3,8-11]。其中,Gasti等人[3]提出選擇性驗(yàn)證機(jī)制,即路由器隨機(jī)選擇一部分經(jīng)過它的數(shù)據(jù)包進(jìn)行驗(yàn)證,但這種機(jī)制無法保證未經(jīng)驗(yàn)證的數(shù)據(jù)包的正確性,無法確定到底能夠獲得多大的安全保證。Bianchi等人[8]提出通過降低緩存來減少內(nèi)容驗(yàn)證的計(jì)算量,即在路由器設(shè)置校驗(yàn)緩沖區(qū),當(dāng)數(shù)據(jù)包到達(dá)路由器時(shí),若緩沖區(qū)存在剩余空間,路由器將按某固定概率實(shí)施存入校驗(yàn);若緩沖區(qū)已滿,直接將數(shù)據(jù)交付到下游路由器。Kim等人[9]提出只驗(yàn)證流行的內(nèi)容,避免不必要驗(yàn)證。上述機(jī)制雖然能夠在一定程度上緩解無效簽名內(nèi)容毒化攻擊,但都無法抵御冒名簽名的內(nèi)容毒化攻擊。Ghali等人[10]提出興趣包公鑰綁定機(jī)制(interest key binding,IKB),通過綁定內(nèi)容名字和內(nèi)容發(fā)布者的公鑰摘要,確保路由器轉(zhuǎn)發(fā)的數(shù)據(jù)包來源于真實(shí)的發(fā)布者。該機(jī)制能夠抵御冒名簽名的內(nèi)容毒化攻擊,但依賴一個(gè)類似PKI的集中式數(shù)據(jù)庫系統(tǒng),容易導(dǎo)致公鑰集中獲取擁塞問題,甚至導(dǎo)致單點(diǎn)故障問題,而且用戶需要從遠(yuǎn)端訪問集中式的數(shù)據(jù)庫獲取相關(guān)信息,延時(shí)較大。
為了克服IKB機(jī)制集中獲取公鑰導(dǎo)致服務(wù)器擁塞問題,提升正確內(nèi)容獲取效率,本文提出了一種基于區(qū)塊鏈的命名數(shù)據(jù)網(wǎng)絡(luò)內(nèi)容毒化攻擊抵御機(jī)制(blockchain-based content poisoning attacks defense mechanism in NDN,BlockIKB)。區(qū)塊鏈[12,13]作為一種去中心化、不可篡改、可追溯、多方共同維護(hù)的分布式多副本數(shù)據(jù)庫,可在互不了解的多方之間建立可靠的信任,在沒有第三方中介機(jī)構(gòu)的協(xié)調(diào)下,實(shí)現(xiàn)可信的數(shù)據(jù)共享。鑒于區(qū)塊鏈的上述特性,本文基于區(qū)塊鏈建立一個(gè)分布式的數(shù)據(jù)庫,存儲(chǔ)發(fā)布者內(nèi)容名字和公鑰摘要綁定信息,使得用戶就近訪問對應(yīng)內(nèi)容名字的公鑰摘要,路由器根據(jù)公鑰摘要對到來的內(nèi)容進(jìn)行Hash驗(yàn)證,以抵御內(nèi)容毒化攻擊。
NDN網(wǎng)絡(luò)包括用戶(Consumer)、發(fā)布者(Publisher or Producer)和路由器(Router)3類實(shí)體,其數(shù)據(jù)傳輸主要包括2種類型:興趣包(Interest)和數(shù)據(jù)包(Data)。興趣包是由用戶發(fā)送的數(shù)據(jù)請求包,其中包括請求的內(nèi)容名稱(Name)、發(fā)布者公鑰摘要(publisher public key digest,PPKD)等;數(shù)據(jù)包是由發(fā)布者或路由器根據(jù)用戶的請求返回的內(nèi)容,其中包括內(nèi)容名稱(Name)、內(nèi)容本身(Content)、發(fā)布者的簽名(Signature)、發(fā)布者簽名公鑰定位器(Key Locator)等。NDN網(wǎng)絡(luò)中單個(gè)節(jié)點(diǎn)通信流程如圖1所示。每個(gè)實(shí)體包含3種數(shù)據(jù)結(jié)構(gòu),分別是內(nèi)容緩存(content store,CS)、待定興趣表(pending interest table,PIT)和轉(zhuǎn)發(fā)信息表(forwarding information base,F(xiàn)IB)。CS用于存儲(chǔ)接收到的數(shù)據(jù)包,對于后續(xù)相同的內(nèi)容請求從本地響應(yīng)數(shù)據(jù)包,有利于減少對于發(fā)布者的訪問次數(shù),提升內(nèi)容分發(fā)的傳輸效率;PIT記錄待轉(zhuǎn)發(fā)興趣包的內(nèi)容名稱以及接入接口,并且匯聚相同的興趣包在一個(gè)表項(xiàng)中;FIB依靠路由協(xié)議生成,記錄興趣包轉(zhuǎn)發(fā)下一跳接口。
圖1 命名數(shù)據(jù)網(wǎng)絡(luò)單個(gè)節(jié)點(diǎn)通信流程
NDN網(wǎng)絡(luò)用戶獲取內(nèi)容的過程分以下3個(gè)步驟:(1)當(dāng)需要內(nèi)容時(shí),用戶發(fā)送一個(gè)興趣包。路由器收到興趣包后,首先查找CS是否有請求的數(shù)據(jù),如果有,則從興趣包接入接口返回?cái)?shù)據(jù)包并丟棄興趣包;否則,繼續(xù)查找PIT,查找之前是否轉(zhuǎn)發(fā)來自其他節(jié)點(diǎn)的、并且與該條目的請求內(nèi)容相同的興趣包。如果找到,則將本次興趣包的接入接口添加到對應(yīng)的PIT信息條目中;否則,在PIT中創(chuàng)建興趣包接入接口的信息條目,繼續(xù)查找FIB,進(jìn)行路由尋址。(2)興趣包到達(dá)發(fā)布者并找到內(nèi)容對象時(shí),興趣包被丟棄,響應(yīng)的信息以數(shù)據(jù)包的形式原路返回。當(dāng)數(shù)據(jù)包到達(dá)路由器時(shí),首先查找CS,如果有相同的緩存數(shù)據(jù),則丟棄數(shù)據(jù)包;若沒有,則與PIT中條目匹配。如果PIT中有匹配條目,則向相應(yīng)的接口轉(zhuǎn)發(fā)數(shù)據(jù)包,緩存數(shù)據(jù)包在CS中,并刪除PIT中的匹配條目;否則丟棄數(shù)據(jù)包。(3)用戶在接收到數(shù)據(jù)包后進(jìn)行簽名驗(yàn)證,確保內(nèi)容完整性和真實(shí)性。
本文實(shí)現(xiàn)了一種新的抵御內(nèi)容毒化攻擊方法,解決用戶集中獲取公鑰導(dǎo)致服務(wù)器擁塞問題以及正確內(nèi)容獲取效率低問題。BlockIKB機(jī)制整體協(xié)議框架如圖2所示,其設(shè)計(jì)思想是網(wǎng)絡(luò)邊緣各自治域中邊界路由器共同維護(hù)分布式數(shù)據(jù)庫,存儲(chǔ)發(fā)布者注冊綁定信息,即內(nèi)容名字和發(fā)布者公鑰摘要;內(nèi)容獲取過程,用戶先就近訪問邊緣路由器,獲取內(nèi)容名字對應(yīng)的發(fā)布者公鑰摘要,并構(gòu)造請求包攜帶源公鑰摘要;途徑的路由器提取請求包中源公鑰摘要并存儲(chǔ),依據(jù)此憑證,對到來的數(shù)據(jù)包進(jìn)行Hash驗(yàn)證,若驗(yàn)證成功,則對數(shù)據(jù)包進(jìn)行轉(zhuǎn)發(fā)并存儲(chǔ);否則,剔除該數(shù)據(jù)包。下面,首先介紹BlockIKB相關(guān)存儲(chǔ)結(jié)構(gòu),然后具體說明發(fā)布者注冊公鑰摘要過程和用戶獲取內(nèi)容過程。
圖2 整體協(xié)議框架
BlockIKB定義了如圖3所示的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)內(nèi)容名字和發(fā)布者公鑰摘要。注冊信息存儲(chǔ)結(jié)構(gòu)是由多個(gè)數(shù)據(jù)塊組成的鏈?zhǔn)浇Y(jié)構(gòu),每個(gè)數(shù)據(jù)塊分為塊頭部(Header)和塊體(Body)兩部分。塊頭部包括前置數(shù)據(jù)塊散列值(Pre Hash)、時(shí)間戳(Timestamp)、隨機(jī)數(shù)(Nonce)、難度值(Difficulty)、本數(shù)據(jù)塊散列值(Local Hash)。前置數(shù)據(jù)塊散列值是本塊前置數(shù)據(jù)塊的散列值,指向上個(gè)數(shù)據(jù)塊,正是這種逐級包含形成鏈?zhǔn)浇Y(jié)構(gòu)[14];時(shí)間戳表示數(shù)據(jù)塊生成時(shí)間;隨機(jī)數(shù)是工作量證明(proof of work,PoW)[15]的解,采用工作量證明機(jī)制提高數(shù)據(jù)塊產(chǎn)生的代價(jià),防止分布式系統(tǒng)惡意節(jié)點(diǎn)隨意生成數(shù)據(jù)塊;難度值表示目標(biāo)散列值前導(dǎo)零的位數(shù);本數(shù)據(jù)塊散列值表示當(dāng)前塊數(shù)據(jù)的目標(biāo)散列值。塊體包括內(nèi)容名稱(Name)、內(nèi)容發(fā)布者公鑰摘要(PPKD)。
圖3 BlockIKB數(shù)據(jù)結(jié)構(gòu)
發(fā)布者注冊公鑰摘要是指發(fā)布者將待發(fā)布內(nèi)容的名字和其公鑰摘要綁定信息注冊到邊緣分布式數(shù)據(jù)庫。設(shè)計(jì)的基本思路為發(fā)布者將
圖4 發(fā)布者注冊信息獲取
圖5 同步交互
緣路由器獲取發(fā)布者公鑰摘要子過程,如圖4所示,具體過程如下。
步驟1邊緣路由器周期性向發(fā)布者發(fā)送REGISTER消息興趣包。
步驟2發(fā)布者收到REGISTER消息,如果有注冊需求,則將
步驟3邊緣路由器收到對應(yīng)數(shù)據(jù)包,提取信息
步驟4為了防止路由器隨意產(chǎn)生數(shù)據(jù)塊,采用PoW算法(見表1)。具體地,邊緣路由器利用SHA256散列函數(shù),通過改變Nonce值,重復(fù)計(jì)算數(shù)據(jù)塊散列值,SHA256(Pre Hash, Timestamp, Nonce, Difficulty, Content name, PPKD),直到滿足難度值;然后,將其封裝成數(shù)據(jù)塊鏈接到本地?cái)?shù)據(jù)庫。
表1 BlockIKB的基本算法
邊緣路由器同步過程是考慮到每個(gè)發(fā)布者向其所在自治域的邊緣路由器進(jìn)行注冊,所以各邊緣路由器維護(hù)的數(shù)據(jù)庫可能不一致,為了維護(hù)這些路由器的分布式數(shù)據(jù)庫的一致性而設(shè)計(jì),如圖5所示,具體過程如下:
步驟1邊緣路由器周期性給鄰居路由器發(fā)送SYN消息興趣包。
步驟2鄰居路由器收到SYN消息,將本地鏈數(shù)據(jù)封裝成數(shù)據(jù)包并發(fā)送。
步驟3邊緣路由器收到對應(yīng)數(shù)據(jù)包,提取鏈將其存儲(chǔ)為synbc,并與本地?cái)?shù)據(jù)庫鏈localbc比較長度以解決同步?jīng)_突。由于數(shù)據(jù)庫鏈?zhǔn)菃捂溄Y(jié)構(gòu),隨著新的數(shù)據(jù)塊的產(chǎn)生,數(shù)據(jù)庫鏈不斷更新延長。因此鏈上的數(shù)據(jù)塊數(shù)量越多,說明數(shù)據(jù)庫鏈累計(jì)的難度越大,故按照數(shù)據(jù)庫鏈最長原則處理沖突,即當(dāng)數(shù)據(jù)塊鏈不一致時(shí),選擇鏈長較大的鏈作為主鏈。具體地分2種情況處理:(1)若本地?cái)?shù)據(jù)庫長度大于接收數(shù)據(jù)庫長度,即length(localbc)>length(synbc),則不操作。例如圖6(a)中,路由器R2請求鄰居路由器R3同步,R3返回鏈為bcchainR3={…,Sn,c},路由器R2本地鏈為bcchainR2={…,Sn,a,b},更新之后的鏈為bcchainR2′={…,Sn,a,b}。(2)若本地鏈長度小于等于接收鏈長度,即length(localbc)<=length(synbc),則截取2個(gè)鏈不同的部分,將localbc截取的部分,以synbc最后一個(gè)數(shù)據(jù)塊為基準(zhǔn),依次重新封裝數(shù)據(jù)塊,鏈接到synbc最后,并以該synbc為本地鏈。例如圖6(b)中,路由器R2請求鄰居路由器R3同步,R3返回鏈bcchainR3={…,Sn,a,b},路由器R2本地鏈為bcchainR2={…,Sn,c},更新之后的鏈為bcchainR2′={…,Sn,a,b,c}。
(a) 沖突處理情形1
用戶獲取內(nèi)容過程是用戶先就近從臨近節(jié)點(diǎn)獲取對應(yīng)內(nèi)容名字的PPKD,再請求指定
圖7 內(nèi)容獲取過程
步驟1用戶向其邊緣路由器發(fā)送QUERY消息興趣包。
步驟2邊緣路由器收到QUERY消息,根據(jù)內(nèi)容名字,在本地?cái)?shù)據(jù)庫查詢對應(yīng)的PPKD值,若查找成功,返回?cái)y帶PPKD值數(shù)據(jù)包;否則返回查詢失敗數(shù)據(jù)包。
步驟3用戶獲得查詢PPKD值,構(gòu)造并發(fā)送興趣包請求獲取內(nèi)容。
步驟4途徑路由器收到興趣包,先查詢CS,若緩存命中,則返回?cái)?shù)據(jù)包;否則查詢PIT表,若有相同項(xiàng),追加接口項(xiàng);否則添加新表項(xiàng),記錄內(nèi)容名、PPKD值、傳入的接口,并根據(jù)FIB表轉(zhuǎn)發(fā)。
步驟5發(fā)布者收到興趣包,構(gòu)造內(nèi)容,并將自身的公鑰PK存儲(chǔ)在數(shù)據(jù)包Key Locator字段,最后返回?cái)?shù)據(jù)包。
步驟6途徑路由器收到數(shù)據(jù)包,提取Key Locator字段中的發(fā)布者公鑰PK,計(jì)算PK的散列值PKD,即PKD=Hash(PK),并根據(jù)Name和PKD查找PIT表,檢查是否與相應(yīng)PIT條目中的PPKD值匹配。如果匹配,則緩存該數(shù)據(jù)包并轉(zhuǎn)發(fā)到對應(yīng)接口;否則,丟棄該數(shù)據(jù)包。
本節(jié)分析BlockIKB機(jī)制的安全性。首先給出關(guān)于散列函數(shù)和簽名策略的2個(gè)定義。
定義1抗第二原像性。散列函數(shù)H具有抗第二原像性。對于任意給定數(shù)值x,不存在概率多項(xiàng)式時(shí)間內(nèi),找到一個(gè)值x0(x0≠x),使得H(x0)=H(x),散列碰撞發(fā)生。即Pr[H(x0)=H(x)]≤θ(n),其中θ(n)可忽略不計(jì)[16]。
定義2不可篡改性。簽名策略具有不可篡改性。對于任意給定消息m,不存在概率多項(xiàng)式時(shí)間內(nèi),惡意節(jié)點(diǎn)A獲知公鑰卻不知私鑰的情況下,篡改簽名并使簽名有效。令A(yù)對m篡改簽名并使簽名有效的事件,Aforge(m) =1。Pr[Aforge(m) = 1]≤θ(n),其中θ(n)可忽略不計(jì)。
下面對BlockIKB機(jī)制進(jìn)行形式化描述,并給出定理及證明過程。
給定PPKD字段值為H(PK)的興趣包Int,作為惡意節(jié)點(diǎn)A的輸入,它輸出一個(gè)數(shù)據(jù)包C0,其中包含Key Locator字段中的公鑰PK0,PPKD字段公鑰摘要H(PK0),Signature字段的簽名信息σ0。如果輸出是以下情況之一,那么A成功注入毒化內(nèi)容到網(wǎng)絡(luò),記為Apois(Int)=1:
(1)PK≠PK0且H(PK)=H(PK0)。A違反H抗第二原像性,即發(fā)生散列碰撞,其散列碰撞成功的概率由碰撞概率Prcollision與Pr[H(PK)=H(PK0)]決定;
(2)PK=PK0和σ0簽名有效。A違反簽名策略的不可篡改性,其發(fā)生篡改簽名成功的概率由篡改簽名發(fā)生的概率Prforge與Pr[Aforge(m)=1]決定。
定理如果散列函數(shù)H具有抗第二原像性,簽名策略具有不可篡改性,那么惡意節(jié)點(diǎn)A以可忽略的概率成功注入毒化內(nèi)容C0到網(wǎng)絡(luò),即Pr[Apois(Int)=1]≤θ(n),θ(n)可忽略不計(jì)。
證明(反證法) 假設(shè)A以一定的概率成功注入毒化內(nèi)容C0,即Pr[Apois(Int)=1]>θ(n)。
構(gòu)造另外一個(gè)惡意節(jié)點(diǎn)A′,利用A破壞H抗第二原像性或者簽名策略的不可篡改性。即滿足給定x,創(chuàng)建興趣包Int,設(shè)置H(x)作為PPKD字段值,運(yùn)行A(Int)以獲取C0。從C0中可以得到結(jié)果,使得x≠PK0,H(x)=H(PK0);或者使得x=PK0,σ0是C0篡改簽名且有效??梢源_定A′成功注入毒化內(nèi)容概率,即散列碰撞或者篡改簽名事件發(fā)生的概率:
Pr[A′成功注入]
=Pr[散列碰撞∪篡改簽名]
=Prcollision×Pr[H(x)
=H(PK0)]+Prforge×Pr[A′forge(C0)=1]
>θ(n)
上式成立是因?yàn)锳′與A有相同概率成功注入毒化內(nèi)容,A以一定的概率成功注入,所以A′同樣以一定的概率成功注入。如果2個(gè)函數(shù)的概率之和是不可忽略的,那么它們中至少一個(gè)是不可忽略的。
由于Prcollision和Prforge不是指數(shù)增長的函數(shù),可以得出:
Pr[H(x)=H(PK0)]>θ(n)或Pr[A′forge(C0)=1]>θ(n),這與定義1和定義2產(chǎn)生矛盾。
故Pr[Apois(Int)=1]≤θ(n)。
證畢。
以上定理說明BlockIKB機(jī)制是安全的,能夠抵御內(nèi)容毒化攻擊。
本文在NDNSim[17]網(wǎng)絡(luò)仿真平臺(tái)上,實(shí)現(xiàn)了基于邊緣分布式數(shù)據(jù)庫的內(nèi)容毒化攻擊抵御機(jī)制。仿真平臺(tái)在本地計(jì)算機(jī)上部署,其配置如下:CPU Intel Core i7 3.4 GHz,內(nèi)存16 GB,硬盤1 TB,操作系統(tǒng)內(nèi)核Ubuntu 14.04,NDNSim版本1.0。模擬參數(shù)配置如表2所示。
表2 模擬參數(shù)及其取值
仿真實(shí)驗(yàn)采用的網(wǎng)狀拓?fù)浒?0個(gè)路由器、1個(gè)IKB機(jī)制服務(wù)器、3個(gè)用戶和2個(gè)內(nèi)容發(fā)布者。設(shè)置內(nèi)容發(fā)布者為A和B,分別以組件名“/google.com”和“/youtube.com”為前綴,后綴為隨機(jī)數(shù)。內(nèi)容發(fā)布者以3.6 packet/min進(jìn)行注冊,用戶以50 pakcet/s獲取前面的組件名內(nèi)容。設(shè)置PIT大小為15 000,緩存大小1 000,采用RSA算法對內(nèi)容進(jìn)行簽名,使用SHA1散列算法計(jì)算內(nèi)容發(fā)布者的公鑰摘要。
為了評估BlockIKB機(jī)制的安全性、服務(wù)器負(fù)載、內(nèi)容獲取效率和通信開銷,使用了4項(xiàng)指標(biāo):檢出率、服務(wù)器負(fù)載、延遲和通信開銷。檢出率是網(wǎng)內(nèi)路由器能夠檢測出的毒化內(nèi)容比例,即檢測出的毒化內(nèi)容數(shù)據(jù)包數(shù)量與毒化內(nèi)容數(shù)據(jù)包總數(shù)的比值。服務(wù)器負(fù)載是指服務(wù)器節(jié)點(diǎn)單位時(shí)間處理查詢興趣包的數(shù)量。延遲是指內(nèi)容獲取過程中,從用戶發(fā)送興趣包到接收到響應(yīng)內(nèi)容的時(shí)間,單位為ms。通信開銷主要集中在注冊過程的開銷,故本文以發(fā)布者注冊信息過程的通信開銷為主,即發(fā)布者注冊信息時(shí)平均轉(zhuǎn)發(fā)興趣包和數(shù)據(jù)包的數(shù)量。
通過毒化內(nèi)容的檢出率來評估BlockIKB抵御毒化內(nèi)容的安全性。每個(gè)用戶以50 packet/s發(fā)送合法內(nèi)容請求,請求興趣包的名字由名字前綴和隨機(jī)數(shù)組成,這里使用5項(xiàng)名字前綴:“/sina.com”,“/readfar.com”,“/cs-bu.edu”,“/google.com”,“/youtube.com”。1個(gè)內(nèi)容生產(chǎn)者提供毒化內(nèi)容到網(wǎng)絡(luò)。圖8顯示了BlockIKB和IKB機(jī)制毒化內(nèi)容檢出率,可以觀察到它們都能檢測出所有的毒化內(nèi)容,檢出率為100%。這是因?yàn)槁酚善髟谵D(zhuǎn)發(fā)和緩存數(shù)據(jù)包之前,先對到來的數(shù)據(jù)包,根據(jù)從興趣包提取的內(nèi)容發(fā)布者公鑰摘要記錄驗(yàn)證數(shù)據(jù)包所攜帶的公鑰,從而可以識別出毒化內(nèi)容包。
圖8 毒化內(nèi)容檢出率
為了評估BlockIKB提供的分布式數(shù)據(jù)庫均攤用戶請求的流量,統(tǒng)計(jì)服務(wù)器負(fù)載。3個(gè)用戶以50 packet/s發(fā)送公鑰或者公鑰摘要請求,分別統(tǒng)計(jì)BlockIKB機(jī)制3個(gè)邊緣路由器平均處理請求的負(fù)載情況以及IKB機(jī)制服務(wù)器處理請求的負(fù)載情況,單位時(shí)間s。圖9顯示了BlockIKB和IKB機(jī)制的服務(wù)器負(fù)載累積分布函數(shù)。如圖所示,BlockIKB在多處情況下負(fù)載低于50,而IKB機(jī)制幾乎所有情況均大于60。而且BlockIKB邊緣路由器85%的概率單位時(shí)間處理請求46 packet,而IKB機(jī)制服務(wù)器85%的概率單位時(shí)間處理請求63 packet。此數(shù)據(jù)表明針對相同速率的請求,BlockIKB的負(fù)載情況要減輕37%。究其原因在于分布式服務(wù)器均攤了用戶請求流量,避免單個(gè)服務(wù)器負(fù)載過大。
圖9 服務(wù)器負(fù)載累積分布函數(shù)
通過用戶內(nèi)容獲取的延遲來分析BlockIKB機(jī)制的傳輸效率。圖10顯示了BlockIKB和IKB機(jī)制的內(nèi)容獲取延遲,從圖中可以看出,IKB用戶獲取內(nèi)容延時(shí)約22 ms,而BlockIKB延時(shí)約11 ms。實(shí)驗(yàn)表明BlockIKB機(jī)制比IKB機(jī)制延時(shí)節(jié)省了50%。這是因?yàn)锽lockIKB就近獲取公鑰摘要數(shù)據(jù),從而縮短了獲取內(nèi)容的時(shí)間,大幅提升了獲取內(nèi)容的效率。
圖10 內(nèi)容獲取延遲
BlockIKB機(jī)制引入的通信開銷主要存在于發(fā)布者注冊公鑰摘要過程,而對比方案IKB機(jī)制引入的通信開銷主要存在于注冊公鑰過程。通過比較上述2個(gè)過程所需轉(zhuǎn)發(fā)的同步興趣包和數(shù)據(jù)包數(shù)量,對2種機(jī)制的通信開銷進(jìn)行分析。設(shè)置難度值為5,使得邊緣節(jié)點(diǎn)平均大約每50 s生成1個(gè)數(shù)據(jù)塊,以每25 s進(jìn)行發(fā)送同步興趣包。圖11顯示了以每注冊5條信息為單位進(jìn)行統(tǒng)計(jì)的BlockIKB和IKB的通信開銷。從圖中可以看出,BlockIKB注冊信息所需開銷至少為120 packet,而IKB機(jī)制所需開銷大約維持在穩(wěn)定水平40 packet。結(jié)果表明BlockIKB比IKB維護(hù)注冊信息開銷平均約高3倍,主要原因是BlockIKB要通過周期性發(fā)送同步興趣包維護(hù)分布式數(shù)據(jù)庫。
圖11 通信開銷
針對內(nèi)容污染攻擊,提出了一種基于區(qū)塊鏈內(nèi)容毒化攻擊抵御機(jī)制——BlockIKB機(jī)制。構(gòu)建了區(qū)塊鏈數(shù)據(jù)庫來存儲(chǔ)內(nèi)容名字和發(fā)布者公鑰摘要的綁定信息;改進(jìn)了內(nèi)容獲取過程,使得用戶就近獲取發(fā)布者的公鑰摘要;路由器根據(jù)公鑰摘要驗(yàn)證內(nèi)容,實(shí)現(xiàn)了污染內(nèi)容抵御功能。安全分析證明了BlockIKB機(jī)制能夠抵御內(nèi)容毒害攻擊;評估結(jié)果表明,與已有機(jī)制相比,BlockIKB機(jī)制減輕了服務(wù)器負(fù)載,提升了內(nèi)容獲取效率。
本文在部署區(qū)塊鏈節(jié)點(diǎn)時(shí),采用的是靜態(tài)添加方式,主要考慮在NDN網(wǎng)絡(luò)架構(gòu)中小范圍內(nèi)使用區(qū)塊鏈,今后在大范圍內(nèi)擴(kuò)展,需要考慮動(dòng)態(tài)接入。另外,在維護(hù)區(qū)塊鏈時(shí)采用PoW機(jī)制,今后嘗試其他高效的共識機(jī)制。下一步將從以上2方面進(jìn)行改進(jìn),為NDN網(wǎng)絡(luò)架構(gòu)的應(yīng)用提供更好的服務(wù)。