陳 叢,周力臻
(福建師范大學(xué)協(xié)和學(xué)院,福建 福州 350117)
隨著嵌入式計(jì)算與傳感器技術(shù)的不斷發(fā)展,推動(dòng)了無線傳感網(wǎng)絡(luò)的迅速崛起,并廣泛應(yīng)用于軍事、醫(yī)療、建筑等領(lǐng)域[1]。與傳感網(wǎng)絡(luò)不同,無線傳感網(wǎng)絡(luò)將海量廉價(jià)小型傳感器節(jié)點(diǎn)隨機(jī)布置在不同區(qū)域,利用自組織形式生成網(wǎng)絡(luò),同時(shí)采用多跳方式將信息傳輸給用戶,每個(gè)節(jié)點(diǎn)都具有數(shù)據(jù)采集、處理、定位與連接等功能。但無線傳感網(wǎng)絡(luò)屬于開放式網(wǎng)絡(luò),其計(jì)算性能、儲(chǔ)存空間較為有限,抗捕獲能力較弱,攻擊者可通過捕獲節(jié)點(diǎn)獲得其中敏感信息,并對(duì)其注入虛假數(shù)據(jù),如果不能及時(shí)過濾掉這些虛假數(shù)據(jù),則會(huì)導(dǎo)致網(wǎng)絡(luò)癱瘓,引發(fā)錯(cuò)誤報(bào)警,影響用戶決策[2]。為此,該領(lǐng)域研究者對(duì)該問題進(jìn)行了很多研究,并取得了一定成果。
文獻(xiàn)[3]提出基于能量感知路由和節(jié)點(diǎn)過濾的虛假數(shù)據(jù)過濾方法。該方法將距離與能量相結(jié)合,提出能量感知和節(jié)點(diǎn)過濾方法。與傳統(tǒng)密碼交換機(jī)制不同,該方法在會(huì)話構(gòu)建前有策略的將重點(diǎn)密鑰傳輸?shù)讲糠止?jié)點(diǎn)中,而不是全部節(jié)點(diǎn);在選擇過濾節(jié)點(diǎn)時(shí)不但參考距離,且綜合分析節(jié)點(diǎn)剩余能量與密鑰傳播信息,有效過濾虛假數(shù)據(jù),更好的均衡網(wǎng)絡(luò)能耗。該方法可有效根據(jù)部分節(jié)點(diǎn)進(jìn)行過濾,但該方法過濾的數(shù)據(jù)覆蓋范圍存在一定局限。文獻(xiàn)[4]提出多路虛假數(shù)據(jù)分層過濾方法。該方法在完成網(wǎng)絡(luò)布置后,對(duì)每個(gè)節(jié)點(diǎn)分配相應(yīng)密鑰,利用密集認(rèn)證方式建立封閉區(qū)域,并通過密鑰明確簇內(nèi)節(jié)點(diǎn)和驗(yàn)證節(jié)點(diǎn)之間的關(guān)系,轉(zhuǎn)發(fā)需要檢測的數(shù)據(jù)包,判定其包括的節(jié)點(diǎn)碼、哈希值等信息是否正確;根據(jù)sink節(jié)點(diǎn)對(duì)數(shù)據(jù)包進(jìn)行對(duì)比與丟棄,以此實(shí)現(xiàn)多路虛假數(shù)據(jù)分層過濾。該方法可以準(zhǔn)確過濾掉虛假數(shù)據(jù),但對(duì)網(wǎng)絡(luò)虛假數(shù)據(jù)出現(xiàn)的溯源追蹤與定位考慮甚少。
基于上述方法存在的不足,本文利用Python爬蟲技術(shù)進(jìn)行虛假數(shù)據(jù)溯源與途中過濾。爬蟲技術(shù)通過一定規(guī)則自動(dòng)抓取網(wǎng)頁信息的一種程序。其目的是將目標(biāo)數(shù)據(jù)下載到本地,便于后續(xù)分析。Python語言是一種較為簡潔的開源編程式語言,具有標(biāo)準(zhǔn)庫與第三方庫,用戶可結(jié)合自己喜好選取最適合的編輯工具來編寫爬蟲程序。本文設(shè)計(jì)了Python爬蟲系統(tǒng),利用該系統(tǒng)生成數(shù)據(jù)包,實(shí)現(xiàn)虛假數(shù)據(jù)溯源與途中過濾。與傳統(tǒng)方法相比可以有效追蹤虛假數(shù)據(jù)的溯源,且過濾的數(shù)據(jù)范圍較大,具有一定優(yōu)勢。
為了實(shí)現(xiàn)網(wǎng)絡(luò)虛假數(shù)據(jù)的溯源與途中過濾,本文首先對(duì)虛假數(shù)據(jù)所處的網(wǎng)絡(luò)環(huán)境進(jìn)行劃分。將虛假數(shù)據(jù)網(wǎng)絡(luò)覆蓋部分分割為同樣大小的網(wǎng)格,任意一個(gè)節(jié)點(diǎn)均有固定監(jiān)測范圍,在此范圍內(nèi)發(fā)生的全部狀況都能被節(jié)點(diǎn)感知。其中,網(wǎng)格便是監(jiān)測網(wǎng)格。此外節(jié)點(diǎn)根據(jù)設(shè)置的概率,隨機(jī)挑選多個(gè)不在自身監(jiān)測范圍內(nèi)的網(wǎng)絡(luò),將其作為認(rèn)證網(wǎng)格,節(jié)點(diǎn)對(duì)認(rèn)證網(wǎng)格發(fā)生的狀況進(jìn)行驗(yàn)證。網(wǎng)絡(luò)劃分情況如圖1 所示。
圖1 虛假數(shù)據(jù)覆蓋的網(wǎng)絡(luò)劃分
圖1 中,存在L個(gè)主密鑰組,節(jié)點(diǎn)必須加入其中一個(gè)密鑰組,并利用此組中的密鑰生成監(jiān)測和認(rèn)證網(wǎng)格相對(duì)的密鑰。若某事件發(fā)生時(shí),由該事件節(jié)點(diǎn)形成數(shù)據(jù)報(bào)告;然后,節(jié)點(diǎn)使用其掌握的事件發(fā)生地點(diǎn)密鑰為詞條數(shù)據(jù)增添消息認(rèn)證碼MAC(Message Authentication Code)。
每條合法的數(shù)據(jù)報(bào)告需包含T個(gè)MAC,且形成這T個(gè)消息認(rèn)證碼節(jié)點(diǎn)必須出自不同密鑰組。當(dāng)途中節(jié)點(diǎn)接收數(shù)據(jù)報(bào)告后,需明確事件發(fā)生地址,結(jié)合掌握的密鑰斷定是否對(duì)數(shù)據(jù)報(bào)告進(jìn)行檢測與認(rèn)證。如果不對(duì)其認(rèn)證,則根據(jù)一定概率對(duì)數(shù)據(jù)包進(jìn)行標(biāo)記[5],并轉(zhuǎn)發(fā)此數(shù)據(jù)報(bào)告;如果認(rèn)證失敗,直接丟棄此數(shù)據(jù)報(bào)告。通過對(duì)虛假數(shù)據(jù)覆蓋的網(wǎng)絡(luò)劃分,明確其存在的位置以及設(shè)置相關(guān)密鑰,降低算法復(fù)雜度。
3.1.1 爬蟲抓取過程分析
網(wǎng)絡(luò)爬蟲是開發(fā)者編寫的計(jì)算機(jī)程序或腳本[6],利用設(shè)置的規(guī)則,在上述構(gòu)建的網(wǎng)格中向蜘蛛網(wǎng)一樣對(duì)網(wǎng)頁不停擴(kuò)張,從中獲取目標(biāo)數(shù)據(jù)的過程,其抓取過程如圖2所示。
圖2 網(wǎng)絡(luò)爬蟲抓取過程
由圖2可知,抓取過程是一個(gè)循環(huán)執(zhí)行過程,經(jīng)過不停循環(huán)獲得新的網(wǎng)頁信息。以鏈接構(gòu)成的集合作為種子源,將其放入待爬取隊(duì)列中,按照設(shè)置的規(guī)則從中選取某個(gè)鏈接,并將請(qǐng)求發(fā)送到遠(yuǎn)程服務(wù)器,等待服務(wù)器返回內(nèi)容;爬蟲得到網(wǎng)頁信息后,對(duì)內(nèi)容進(jìn)行解析,提取重要數(shù)據(jù)儲(chǔ)存在數(shù)據(jù)庫中。此外,獲取新的超鏈接,經(jīng)過去重處理,進(jìn)入新一輪數(shù)據(jù)提取。
3.1.2 系統(tǒng)需求分析
利用Python語言設(shè)計(jì)的爬蟲系統(tǒng)能夠?yàn)椴煌I(lǐng)域用戶提供數(shù)據(jù)采集服務(wù)的通用型系統(tǒng)。為達(dá)到一定效果,系統(tǒng)需具備下述功能:
1)適用較多采集場景:系統(tǒng)設(shè)計(jì)需適用于不同場景,為不同用戶提供服務(wù)。
2)界面可視化:結(jié)合使用場景,設(shè)計(jì)圖形化界面,確保用戶在瀏覽信息同時(shí),記載用戶操作的相關(guān)信息,生成爬蟲任務(wù)腳本。
3)執(zhí)行爬蟲任務(wù):將腳本信息變?yōu)槟軌蜃R(shí)別的內(nèi)容,結(jié)合指令驅(qū)動(dòng)[7],完成數(shù)據(jù)提取。
4)負(fù)載均衡:需針對(duì)不同性能機(jī)器分配適當(dāng)任務(wù)量。
3.1.3 Python爬蟲系統(tǒng)設(shè)計(jì)
Python爬蟲系統(tǒng)硬件結(jié)構(gòu)分為客戶模塊、服務(wù)模塊、爬取模塊與儲(chǔ)存模塊,如圖3所示。
圖3 爬蟲系統(tǒng)整體架構(gòu)
其中,客戶端是系統(tǒng)交互的入口,提供編輯、任務(wù)管理、信息查看等界面。服務(wù)端對(duì)客戶請(qǐng)求及時(shí)處理,執(zhí)行爬蟲任務(wù)的分配與調(diào)度工作。
為追溯虛假數(shù)據(jù),降低不同模塊之間耦合度,對(duì)該系統(tǒng)的硬件部分進(jìn)行設(shè)計(jì)。
1)爬蟲管理器:該管理器對(duì)物理節(jié)點(diǎn)啟動(dòng)提供適當(dāng)虛擬節(jié)點(diǎn)。結(jié)合節(jié)點(diǎn)負(fù)載狀況,對(duì)虛擬節(jié)點(diǎn)數(shù)量進(jìn)行調(diào)整,確保節(jié)點(diǎn)以最佳狀態(tài)執(zhí)行爬取任務(wù),簡化系統(tǒng)負(fù)載程度。
2)爬蟲采集器:主要任務(wù)為數(shù)據(jù)采集。包含任務(wù)解析與數(shù)據(jù)管理子模塊。
3)內(nèi)嵌瀏覽器:利用QT(Qualification Test)框架作為內(nèi)嵌瀏覽器,采用Qpush Button部件設(shè)置訪問按鈕,確保信息鏈接和網(wǎng)頁相互對(duì)應(yīng)。
在上述硬件設(shè)置后,對(duì)系統(tǒng)軟件運(yùn)行機(jī)制進(jìn)行設(shè)置。從系統(tǒng)爬取數(shù)據(jù)角度描述系統(tǒng)軟件各模塊如何協(xié)作,如圖4 所示。
圖4 軟件運(yùn)行機(jī)制
根據(jù)上述構(gòu)建爬蟲系統(tǒng),通過密鑰分配生成數(shù)據(jù)包,分析密鑰驗(yàn)證的合法性,實(shí)現(xiàn)虛假數(shù)據(jù)溯源與途中過濾。
假設(shè)存在大小未是N的全局密鑰池G,將其等分為n個(gè)不重合的分區(qū){Ui,0≤i≤n-1},任意一個(gè)分區(qū)密鑰數(shù)量表示為m(N=n×m)。在部署區(qū)域?qū)⒐?jié)點(diǎn)任意挑選一個(gè)分區(qū)進(jìn)行保存,將此種密鑰設(shè)為R型密鑰。
在完成節(jié)點(diǎn)部署后,若某節(jié)點(diǎn)的ID最小,將此節(jié)點(diǎn)當(dāng)作簇頭CH。由于感知半徑大于傳輸半徑,因此,設(shè)簇內(nèi)全部節(jié)點(diǎn)可以同時(shí)感知發(fā)生事件。CH采集簇內(nèi)數(shù)據(jù)生成hello包:{y,CH,S1,S2,…,Sy},y表示計(jì)數(shù)器,原始值是簇內(nèi)節(jié)點(diǎn)數(shù)量,S1,S2,…,Sy為簇中節(jié)點(diǎn)。
CH將hello向sink方向傳輸,傳輸跳數(shù)取決于y。首個(gè)中轉(zhuǎn)節(jié)點(diǎn)Si接收包后,刪除節(jié)點(diǎn)數(shù)最后一位,記錄Sy。Si與Sy是一對(duì)協(xié)作節(jié)點(diǎn),Si處于上游,而Sy為下游。Si將自身節(jié)點(diǎn)號(hào)插入節(jié)點(diǎn)數(shù)組首位,并轉(zhuǎn)發(fā)數(shù)據(jù)包,繼續(xù)執(zhí)行爬蟲過程,此時(shí)計(jì)數(shù)器y減去1。
hello數(shù)據(jù)包傳輸y跳后停止操作,位于最后的中轉(zhuǎn)節(jié)點(diǎn)Sj形成一個(gè)僅包括其本身節(jié)點(diǎn)的ACK包:{Sj},且將其按照hello數(shù)據(jù)包的方向進(jìn)行傳輸。中轉(zhuǎn)階段順次將自身節(jié)點(diǎn)引入到數(shù)據(jù)包末位,簇內(nèi)節(jié)點(diǎn)從包中ACK記載協(xié)作節(jié)點(diǎn)序號(hào)[8-9]。
協(xié)作節(jié)點(diǎn)間利用消息共享一對(duì)密鑰,密鑰類型表示為A′。簇內(nèi)節(jié)點(diǎn)隨機(jī)挑選一個(gè)R型密鑰對(duì)A‘密鑰進(jìn)行加密,同時(shí)傳輸給簇頭,簇頭將這些信息壓縮再傳輸?shù)絪ink節(jié)點(diǎn)。構(gòu)建協(xié)作關(guān)系的區(qū)域可以對(duì)數(shù)據(jù)進(jìn)行認(rèn)證,將其稱作封鎖區(qū)。
在建立關(guān)聯(lián)后,如果檢測到突發(fā)事件,簇頭將感知值傳輸給每個(gè)簇中的節(jié)點(diǎn)。獲得信息的節(jié)點(diǎn)S將感知數(shù)值與設(shè)定的閾值e比較,如果低于設(shè)定閾值,認(rèn)為兩個(gè)數(shù)據(jù)相同,并任意選出一個(gè)R型密鑰與其A型密鑰生成簽名:MR,MA,將其傳輸給簇頭,當(dāng)簇頭采集t個(gè)節(jié)點(diǎn)簽名信息后形成數(shù)據(jù)報(bào)告
R0={C;e;R1,R2,…,Rt;MR1,MR2,…,MRt
A1,A2,…,At;MA1,MA2,…,MAt}
(1)
式中,C表示跳數(shù)計(jì)數(shù)器,其原始值表示為y;R1,…,Rt屬于R型密鑰,MR1為密鑰R1生成的MAC;A1…At描述節(jié)點(diǎn)號(hào),MA1是A1節(jié)點(diǎn)利用對(duì)偶密鑰生成的MAC。利用布隆過濾器[10]將兩種MAC映射為d比特字符串,即
F=b0,b1…bd-1
(2)
則生成的虛假數(shù)據(jù)包為
R={C;e;R1,R2,…,Rt;A1,A2,…,At;F1;F2}
(3)
式中,t的取值是過濾性能與能耗情況的折中。
當(dāng)sink節(jié)點(diǎn)獲得數(shù)據(jù)包后,使用共享密鑰證明MAC是否合法,如果不合法,啟動(dòng)溯源過程。
當(dāng)檢測到存在虛假數(shù)據(jù)時(shí),選擇新的虛假數(shù)據(jù)包,向上一跳傳輸一個(gè)查找請(qǐng)求信息Q,當(dāng)節(jié)點(diǎn)A1收到消息后,查詢緩沖區(qū)域,并對(duì)信息Q進(jìn)行廣播,其鄰居節(jié)點(diǎn)獲取查詢信息后,檢查緩沖區(qū)日志,若沒有查詢到有關(guān)內(nèi)容,則不發(fā)送應(yīng)答信息ACK;若查找到有關(guān)內(nèi)容u.a[i].SrcID==Q.SrcID,則利用sink節(jié)點(diǎn)共享密鑰生成Mu,即
(4)
并將應(yīng)答信息傳輸?shù)紸1,傳輸過程描述為
(5)
當(dāng)節(jié)點(diǎn)A1獲得全部應(yīng)答信息后,斷定各信息中A1的前一跳節(jié)點(diǎn)是否一致,根據(jù)緩沖區(qū)查詢結(jié)果,挑選與前一跳節(jié)點(diǎn)相同的查詢結(jié)果,并將回復(fù)信息傳輸?shù)絪ink節(jié)點(diǎn)。A1傳輸?shù)絪ink節(jié)點(diǎn)的回復(fù)消息形式為
A1→sink=IDu1,…,IDut,IDd1,IDd2,Q.SrcID
Q.Seqno,Mu1,…,Mut
(6)
當(dāng)sink節(jié)點(diǎn)獲得上游節(jié)點(diǎn)回復(fù)的信息后,必須斷定信息中是否包括節(jié)點(diǎn)認(rèn)證,再結(jié)合共享密鑰驗(yàn)證信息的合法性,經(jīng)過驗(yàn)證后,獲取IDd1與IDd2值。當(dāng)獲得全部回復(fù)信息后,可以重構(gòu)路徑,溯源到虛假數(shù)據(jù)。
在Python爬蟲系統(tǒng)中,虛假數(shù)據(jù)途中過濾詳細(xì)步驟為:
1)核對(duì)數(shù)據(jù)包內(nèi)是否存在t對(duì){Rk,MRk};{Ak,MAk}元組,如果不存在則將數(shù)據(jù)包刪除;
2)核對(duì)數(shù)據(jù)包內(nèi)t個(gè)R型密鑰是否出自t個(gè)不同區(qū)域,若不存在,則刪除數(shù)據(jù)包;
3)如果節(jié)點(diǎn)具有數(shù)據(jù)包內(nèi)一個(gè)R型密鑰,則使用此密鑰重新獲得R型MAC,且與數(shù)據(jù)包內(nèi)原有MAC進(jìn)行比較,若不同則刪除數(shù)據(jù)包;
4)如果節(jié)點(diǎn)中不具有任何一個(gè)密鑰,則將數(shù)據(jù)包直接過濾,實(shí)現(xiàn)虛假數(shù)據(jù)的過濾。
本文使用C++語言構(gòu)建模擬仿真平臺(tái),在一個(gè)半徑為100 m區(qū)域內(nèi),隨機(jī)布置1000個(gè)傳感器節(jié)點(diǎn),主密鑰數(shù)量設(shè)置為6個(gè),在圓形監(jiān)測區(qū)域內(nèi),源節(jié)點(diǎn)與sink節(jié)點(diǎn)分別布置在圓心與圓的四周。具體仿真參數(shù)如表1所示。
表1 仿真參數(shù)
在上述仿真環(huán)境下,通過對(duì)比所提方法、基于能量感知路由和節(jié)點(diǎn)過濾以及傳感器網(wǎng)絡(luò)多路虛假數(shù)據(jù)分層過濾方法,以虛假數(shù)據(jù)途中過濾效果、虛假數(shù)據(jù)過濾的覆蓋性以及虛假數(shù)據(jù)追蹤定位準(zhǔn)確性為指標(biāo),驗(yàn)證所提方法的科學(xué)有效性。
4.3.1 虛假數(shù)據(jù)途中過濾效果
在虛假數(shù)據(jù)途中過濾效果分析中,通過分析虛假數(shù)據(jù)途中過濾比例與傳輸跳數(shù)之間的關(guān)系,反映方法的過濾效果。實(shí)驗(yàn)對(duì)比了所提方法、基于能量感知路由和節(jié)點(diǎn)過濾方法以及傳感器網(wǎng)絡(luò)多路虛假數(shù)據(jù)分層過濾方法的過濾效果,如圖5 所示。
圖5 虛假數(shù)據(jù)途中過濾效果分析
分析圖5中可以看出,利用本文方法時(shí),虛假數(shù)據(jù)的大部分在前5跳即可被過濾,而其它數(shù)據(jù)也在前15跳全部過濾完成,而其它兩種方法在前5跳基本無法過濾虛假數(shù)據(jù),在15跳后仍有數(shù)據(jù)沒有被過濾。相比之下所提方法途中過濾性能明顯優(yōu)于其它兩種方法。
4.3.2 虛假數(shù)據(jù)過濾范圍覆蓋性能分析
實(shí)驗(yàn)分析了所提方法、基于能量感知路由和節(jié)點(diǎn)過濾方法以及傳感器網(wǎng)絡(luò)多路虛假數(shù)據(jù)分層過濾方法在過濾時(shí)的覆蓋性能,將部署區(qū)域的網(wǎng)絡(luò)節(jié)點(diǎn)數(shù)量分別設(shè)置為1000、2000和3000個(gè),在每種情況下分別進(jìn)行100次實(shí)驗(yàn)。實(shí)驗(yàn)結(jié)果如表2 所示。
表2 不同過濾方法覆蓋性能對(duì)比
由表2可知,隨著節(jié)點(diǎn)數(shù)量的不斷增長,本文方法的覆蓋性能始終保持較高水平,而其它方法覆蓋性下降較快,導(dǎo)致虛假數(shù)據(jù)過濾效果不理想,驗(yàn)證了所提方法的有效性。
4.3.3 虛假數(shù)據(jù)追溯跟蹤定位精度分析
實(shí)驗(yàn)采用三種方法對(duì)虛假數(shù)據(jù)進(jìn)行溯源定位,比較虛假數(shù)據(jù)成功定位的概率,實(shí)驗(yàn)結(jié)果如圖6 所示。
圖6 不同方法追溯跟蹤性能對(duì)比
從圖6中可以看出,所提方法對(duì)虛假數(shù)據(jù)定位的精度更高,始終高于90 %,而其它兩種方法定位精度呈現(xiàn)下降趨勢,且始終低于所提方法,這是由于所提方法利用Python爬蟲系統(tǒng)對(duì)虛假數(shù)據(jù)進(jìn)行溯源,收集更多數(shù)據(jù)報(bào)告,提高成功定位的精度。
針對(duì)傳感器虛假數(shù)據(jù)的注入,利用Python爬蟲技術(shù)設(shè)計(jì)爬蟲系統(tǒng),建立封鎖區(qū)域、生成數(shù)據(jù)包以及判斷數(shù)據(jù)是否合法啟動(dòng)溯源程序,并對(duì)虛假數(shù)據(jù)進(jìn)行途中過濾。與傳統(tǒng)方法相比具有以下優(yōu)勢:
1)采用所提方法對(duì)虛假數(shù)據(jù)中途過濾的效果較好,且過濾的覆蓋性能具有一定優(yōu)勢。
2)采用所提方法對(duì)虛假數(shù)據(jù)溯源的定位精度始終高于90 %,具有一定可信度。