本發(fā)明是一種應用于無線傳感器網絡中的動態(tài)密鑰的虛假數(shù)據(jù)過濾方法。主要用于解決無線傳感器中虛假數(shù)據(jù)的過濾,屬于無線傳感器網絡技術領域。
背景技術:
隨著無線傳感網絡技術的快速發(fā)展,無線傳感網中在生活中應用也越來越廣泛,無線傳感器網絡是面向應用的,貼近客觀物理世界的網絡系統(tǒng),其產生和發(fā)展一直都與應用相聯(lián)系。多年來經過不同領域研究人員的演繹,WSN(Wireless Sensor Network)技術在軍事領域、精細農業(yè)、安全監(jiān)控、環(huán)保監(jiān)測、建筑領域、醫(yī)療監(jiān)護、工業(yè)監(jiān)控、智能交通、物流管理、自由空間探索、智能家居等領域的應用得到了充分的肯定和展示。隨著無線傳感器網絡的大力發(fā)展,無線傳感器絡中數(shù)據(jù)傳輸量越來越大,其中包含了大量的虛假數(shù)據(jù),傳輸這些虛假數(shù)據(jù)不僅會使數(shù)據(jù)接收端的決策者做出錯誤決定還會消耗節(jié)點大量的能量,縮短節(jié)點壽命,影響網絡性能。
技術實現(xiàn)要素:
本發(fā)明提供一種應用于無線傳感器網絡動態(tài)密鑰的虛假數(shù)據(jù)過濾方法,該方法有3個目的:
(1)通過環(huán)境數(shù)據(jù)在時間上的相關性,利用DKFS(Dynamic-Key Filtering Scheme)算法對節(jié)點接收到的數(shù)據(jù)進行驗證,盡可能早的過濾出接收到的虛假數(shù)據(jù),減少網絡中虛假數(shù)據(jù)的傳輸量,節(jié)省節(jié)點能量,提高網絡帶寬利用率;
(2)通過DKFS算法可以對節(jié)點中存儲的密鑰進行動態(tài)更新,從采集節(jié)點端發(fā)起,層層遞進式地進行密鑰更新,先在采集節(jié)點與簇頭節(jié)點之間進行密鑰更新,然后,再對簇頭節(jié)點與它的下游節(jié)點進行密鑰更新,直到Sink節(jié)點更新結束;
(3)通過減少無線傳感器網絡中虛假數(shù)據(jù)的傳輸量,能提高無線傳感器網絡帶寬利用率;
為了實現(xiàn)上述技術目的,本發(fā)明采取如下技術方案:
一種應用于無線傳感器網絡的動態(tài)密鑰虛假數(shù)據(jù)過濾方法,具體包括以下步驟:
S1、簇頭節(jié)點對所有簇內節(jié)點上傳的數(shù)據(jù)r進形驗證,驗證不通過,則直接丟棄該數(shù)據(jù),驗證通過進入S2步驟;
S2、簇頭節(jié)點驗證完簇內節(jié)點上傳的數(shù)據(jù)后,再檢驗是否需要密鑰更新,同時生成數(shù)據(jù)報告R,將數(shù)據(jù)報告R發(fā)送給下游節(jié)點;
S3、如果需要更新,則簇頭節(jié)點與需要更新的簇內節(jié)點進行密鑰更新,并通知下游節(jié)點進行密鑰更新;
S4、簇頭節(jié)點的下游節(jié)點對數(shù)據(jù)報告R進行驗證,同時檢測是否需要進行密鑰更新,中轉節(jié)點將驗證通過的數(shù)據(jù)報告R發(fā)送給下游節(jié)點,直到數(shù)據(jù)報告R發(fā)送到Sink節(jié)點;
S5、數(shù)據(jù)報告R到達Sink后,Sink節(jié)點進行最后驗證,驗證通過則保存數(shù)據(jù)報告R,反之,則丟棄數(shù)據(jù)報告R;同時檢測是否需要進行密鑰更新,如果需要就與上游節(jié)點進行密鑰更新,更新成功后,向發(fā)起密鑰更新的簇內節(jié)點發(fā)送密鑰更新成功通知,新密鑰可以使用。
所述S1步驟中,當簇內傳感器節(jié)點vj上傳數(shù)據(jù)時,vj利用密鑰kl和數(shù)據(jù)值ej生成消息認證代碼MAC:macj=kl(ej);各節(jié)點將自己生成的數(shù)據(jù)發(fā)送給簇頭節(jié)點;F_Tj是生成rj的時間點,該值是由節(jié)點中定時器產生;當需要更新密鑰時,才將Mj添加到rj中,是節(jié)點vj產生的第i個隨機數(shù),Mj是隨機數(shù)生成的認證信息;
具體驗證過程如下:
S1.1、簇頭節(jié)點檢測所有上傳的數(shù)據(jù)中的ID是否是自己簇內節(jié)點的ID以及唯一性檢測,如果不是,則直接丟棄該ID的數(shù)據(jù)rj;
S1.2、驗證完ID之后,接下來驗證F_Tj與簇頭節(jié)點存儲的F_T′j:如果F_Tj≤F_T′j,則說明該數(shù)據(jù)為“過時”數(shù)據(jù),丟棄;
S1.3、接下來,簇頭節(jié)點利用自己擁有簇內所有節(jié)點的密鑰對macj進行驗證,即使用密鑰與ej重新生成mac′j,與上傳的macj進行對比,如不相等,則丟棄該數(shù)據(jù),并將驗證失敗的rj中的ID列入“不信任”ID范圍,下次不再接收該節(jié)點信息;
S1.4、在進行macj驗證之后,獲取合理數(shù)據(jù):簇頭節(jié)點取出各節(jié)點的事件值ej,計算出平均值再計算出如果Δd>d(設定誤差范圍閾值),則丟棄相應的rj數(shù)據(jù);
S1.5、檢測rj中是否有隨機數(shù)如果有,驗證對應的隨機數(shù)的加密信息Mj:
驗證通過則進行密鑰更新步驟,同時將存儲的F_T歸零;
驗證不通過,則丟棄該數(shù)據(jù)。
所述S4步驟中,簇頭節(jié)點對簇內采集節(jié)點上傳的數(shù)據(jù)進行過濾后,生成一個數(shù)據(jù)包,該數(shù)據(jù)包中包含事件值、采集節(jié)點ID、認證消息MAC、密鑰索引;
當中轉節(jié)點接收到數(shù)據(jù)報告時,中轉節(jié)點先對數(shù)據(jù)報告R中的ID、MAC以及密鑰索引個數(shù)進行檢查,然后再對MAC的正確性進行驗證,最后檢查數(shù)據(jù)報告R中的隨機數(shù),看是否需要更新密鑰;轉發(fā)節(jié)點中存儲數(shù)據(jù)報告R的標記位F_T,該標記位用于驗證重復數(shù)據(jù)報告,抵制重放攻擊;中轉節(jié)點存儲的標記位在進行密鑰更新時進行歸零處理;
具體步驟如下:
S4.1、對數(shù)據(jù)報告R中的ID、MAC以及密鑰索引個數(shù)進行檢查,如果它們的個數(shù)均為t個,如果是則進行下一步檢測,否則丟棄該數(shù)據(jù)報告R;
S4.2、檢查數(shù)據(jù)報告R中是否包含簇頭節(jié)點的ID以及簇頭節(jié)點生成的MAC,如果不存在則直接丟棄該數(shù)據(jù)報告R;
S4.3、檢測數(shù)據(jù)報告R中各個監(jiān)測節(jié)點的ID是否是數(shù)據(jù)報告R中檢測到的簇頭節(jié)點所代表的簇內節(jié)點ID,如果有任意一個不是,就丟棄數(shù)據(jù)報告R;
S4.4、如果中轉節(jié)點存儲了數(shù)據(jù)報告R中節(jié)點vi(1≤i≤t)的密鑰則利用對重新計算一個mac,與數(shù)據(jù)報告R中附帶的mac進行比較:如果二者不等,丟棄數(shù)據(jù)報告R;
S4.5、檢測數(shù)據(jù)報告R中隨機數(shù)的密鑰索引j1,j2,…,jt:
如果需要更新,則驗證對應的隨機數(shù)的加密信息Mj:
驗證通過則進行密鑰更新步驟,同時將存儲的F_T進行歸零處理;
驗證不通過,則丟棄該數(shù)據(jù);
如果不需要更新,則對數(shù)據(jù)報告R中的F_T進行檢測,如果F_T小于或者等于上一次數(shù)據(jù)報告中的F_T,則將該數(shù)據(jù)報告認定為“過時”的重復數(shù)據(jù),丟棄該數(shù)據(jù)報告;
S4.6、如果數(shù)據(jù)報告R通過上述驗證后,則將數(shù)據(jù)報告R轉發(fā)給下游節(jié)點。
4、根據(jù)權利要求1所述的應用于無線傳感器網絡的動態(tài)密鑰虛假數(shù)據(jù)過濾方法,其特征在于,更新密鑰池步驟如下:
步驟S5.1、簇內節(jié)點vj選出需要更新的第i條密鑰鏈,利用隨機函數(shù)Г生成一個新隨機數(shù)xi,利用該鏈的第一個密鑰對xi進行加密,
步驟S5.2、將xi、Mi添加到數(shù)據(jù)包r中發(fā)送給簇頭節(jié)點;
步驟S5.3、簇頭節(jié)點驗證Mi:
驗證通過后,取出隨機數(shù)xi保存;
驗證不通過,丟棄數(shù)據(jù)包r;
步驟S5.4、簇頭節(jié)點向驗證通過的節(jié)點發(fā)送信息r′={xi;Mi},表示簇頭節(jié)點已接收到更新通知:
如果節(jié)點沒有接收到r′,在下次事件發(fā)生時,繼續(xù)向簇頭節(jié)點發(fā)送包含xi、Mi的數(shù)據(jù)包r;
如果節(jié)點接收到r′,驗證Mi:
如果驗證不通過,丟棄r′,并在下次事件發(fā)生時,繼續(xù)向簇頭節(jié)點發(fā)送包含xi、Mi的數(shù)據(jù)包r;
如果驗證通過,在下次發(fā)生事件時,在向簇頭節(jié)點發(fā)送的數(shù)據(jù)包r中添加密鑰更新通知,并利用單向函數(shù)H,xi作為輸入?yún)?shù)生成一條長度為w密鑰鏈,更新密鑰鏈;
步驟S5.5、簇頭節(jié)點利用單向函數(shù)H,xi作為輸入?yún)?shù)生成一條長度為w密鑰鏈,并更新密鑰;
步驟S5.6、在簇頭節(jié)點與簇內節(jié)點更新完密鑰之后,簇頭節(jié)點將會與自己的下游節(jié)點數(shù)據(jù)R1進行密鑰更新:將xi、Mi添加到數(shù)據(jù)報告R中發(fā)送給下游數(shù)據(jù)R1,下游數(shù)據(jù)R1執(zhí)行類似與簇頭節(jié)點執(zhí)行步驟S5.2—S5.5功能,簇頭節(jié)點將對下游節(jié)點數(shù)據(jù)R1發(fā)送的進行驗證;
步驟S5.7、在下游節(jié)點數(shù)據(jù)R1更新完后,下游節(jié)點數(shù)據(jù)R1會與下游節(jié)點數(shù)據(jù)R2進行密鑰更新,更新成功后下游節(jié)點數(shù)據(jù)R2會與下游節(jié)點數(shù)據(jù)R3進行密鑰更新,直到Sink節(jié)點密鑰更新完畢;
步驟S5.8、Sink節(jié)點更新成功后,將會向上游節(jié)點發(fā)送密鑰更新成功通知,在采集節(jié)點收到該通知后,最新密鑰將會被使用。
采用本發(fā)明的有益效果是:
本發(fā)明方法提出了無線傳感器網絡中動態(tài)密鑰的虛假數(shù)據(jù)過濾方法,該方法在簇頭端對簇內節(jié)點上傳的數(shù)據(jù)進行虛假數(shù)據(jù)過濾,在中轉節(jié)點處對簇頭節(jié)點發(fā)送的數(shù)據(jù)進行驗證,過濾出虛假數(shù)據(jù)。在簇頭節(jié)點端對簇內節(jié)點上傳的數(shù)據(jù)進行驗證,可以減少簇內節(jié)點向網絡中注入的虛假數(shù)據(jù),可以減少中轉節(jié)點的工作量;中轉節(jié)點對接收到數(shù)據(jù)進行驗證,可以有效保證數(shù)據(jù)的正確性,減少攻擊者直接發(fā)送的虛假數(shù)據(jù);實施密鑰更新可以有效減少密鑰被攻擊者竊取密鑰而帶來的不良后果,對密鑰進行更新可以使攻擊者竊取到的密鑰“過時”,提高網絡安全性。
混合性:在本發(fā)明中,在虛假數(shù)據(jù)過濾時,將簇頭節(jié)點與中轉節(jié)點組成一個虛假數(shù)據(jù)過濾體系結構,可以有效地過濾出網絡中傳輸?shù)奶摷贁?shù)據(jù);同時,采用密鑰更新可以提高網絡的安全性。
高效性:本發(fā)明能夠有效較少無線傳感器網絡中虛假數(shù)據(jù)的傳輸量,節(jié)省節(jié)點能源,延長節(jié)點使用壽命,提高網絡帶寬利用利率;動態(tài)更新密鑰可以提高網絡的安全性。
附圖說明
圖1是本發(fā)明方法簇頭節(jié)點虛假數(shù)據(jù)過濾執(zhí)行流程示意圖;
圖2是本發(fā)明方法中轉節(jié)點虛假數(shù)據(jù)過濾執(zhí)行流程示意圖;
圖3是本發(fā)明方法的密鑰更新流程示意圖;
圖4是本發(fā)明方法實現(xiàn)示意圖。
具體實施方式
本發(fā)明一種應用于無線傳感器網絡的動態(tài)密鑰虛假數(shù)據(jù)過濾方法,主要分為三部分:簇頭節(jié)點過濾、中轉節(jié)點過濾、密鑰更新。
簇頭節(jié)點過濾主要是對簇內采集節(jié)點上傳的數(shù)據(jù)包進行驗證,過濾出其中的虛假數(shù)據(jù),執(zhí)行過程如圖1所示。
簇頭節(jié)點將生成的數(shù)據(jù)報告轉發(fā)給下游的中轉節(jié)點,中轉節(jié)點也會對接收到的數(shù)據(jù)進行過濾,其執(zhí)行過程如圖2。
當采集節(jié)點發(fā)起密鑰更新通知時,從采集節(jié)點到Sink節(jié)點通信鏈上的所有節(jié)點將會進行密鑰更新,如圖3。
具體流程如下:
步驟S1簇頭節(jié)點對所有簇內節(jié)點上傳的數(shù)據(jù)r進驗證,驗證不通過,則直接丟棄該數(shù)據(jù)。
步驟S2.簇頭節(jié)點驗證完簇內節(jié)點上傳的數(shù)據(jù)后,再檢驗是否需要密鑰跟新,同時生成數(shù)據(jù)報告R,將數(shù)據(jù)報告R發(fā)送給下游節(jié)點;
步驟S3.如果需要跟新,則簇頭節(jié)點與需要跟新的簇內節(jié)點進行密鑰跟新,并通知下游節(jié)點進行密鑰跟新;
步驟S4簇頭節(jié)點的下游節(jié)點對數(shù)據(jù)報告R進行驗證,同時檢測是否需要進行密鑰更新。
步驟S5.數(shù)據(jù)R到達Sink后,Sink節(jié)點進行最后驗證,驗證通過則保存數(shù)據(jù)R,反之,則丟棄R;同時檢測是否需要進行密鑰更新,如果需要就與上游節(jié)點進行密鑰更新,更新成功后,向發(fā)起密鑰更新的簇內節(jié)點發(fā)送密鑰更新成功通知,新密鑰可以使用。
一、部署在環(huán)境中的節(jié)點
在傳感器節(jié)點被部署前,先對節(jié)點進行初始化,為每個節(jié)點分配唯一身份標識的ID,還用來生成隨機數(shù)的隨機函數(shù)Г,隨機函數(shù)Г在一個節(jié)點中生成的隨機數(shù)各不相同;此外,每個節(jié)點中還會初始化一個具有以下特性的單向函數(shù)H:當給單向函數(shù)H輸入一個常量α時,函數(shù)H很容易生成一個數(shù)值β,H(α)=β;但是,卻無法通過數(shù)值β來推出α的值。
簇內節(jié)點生成長度為w的密鑰池:
1.節(jié)點利用隨機函數(shù)Г生成s個隨機數(shù);
2.計算
3.接下來,簇內節(jié)點生成密鑰池:可以得到密鑰池其中,Ki表示節(jié)點vi中生成的密鑰池,是簇內節(jié)點vi中密鑰池中的密鑰,是該節(jié)點中第i個隨機數(shù)xi生成的第l個密鑰。
在節(jié)點部署到實際的傳感器網絡中之前,先對要部署的節(jié)點進行初始化,簇內每個節(jié)點將自己生成的s個隨機數(shù)發(fā)送給簇頭節(jié)點1≤j≤n(n是簇內節(jié)點數(shù)),F(xiàn)_Tj是節(jié)點vj生成rx的時間點,由節(jié)點的定時器產生,由簇頭節(jié)點存儲。簇頭節(jié)點會根據(jù)不同的ID節(jié)點上傳的隨機數(shù)分別進行存儲,并利用每個節(jié)點上傳的隨機數(shù)來生成密鑰池。簇頭節(jié)點擁有自己生成的隨機數(shù)而產生的密鑰池,簇頭節(jié)點將簇內節(jié)點上傳的隨機數(shù)生成隨機數(shù)數(shù)據(jù)報告ID1表示簇頭節(jié)點,并將生成的隨機數(shù)數(shù)據(jù)報告Rx發(fā)送給下游節(jié)點,下游節(jié)點會和簇頭節(jié)點一樣生成密鑰進行存儲,Sink節(jié)點會接收網內所有的數(shù)據(jù)報告,并生成全局密鑰進行存儲。簇頭的下游節(jié)點只存儲簇頭節(jié)點F_T,不存儲其它節(jié)點的F_T。節(jié)點存儲密鑰方式。
二、消息認證代碼
消息認證代碼(MAC)為發(fā)送節(jié)點提供信息傳輸保障,MAC在傳輸過程中不被篡改。讓h()函數(shù)成為一個安全的加密哈希函數(shù),一個MAC可視為一個加密的哈希值,將其定義為
MAC(m,k,n)=h(m||k)mod 2n (1)
其中,h()是一個hash函數(shù),m是消息(message),k是密鑰(key),n是可調節(jié)的參數(shù)。當參數(shù)n=1時,MAC(m,k,1)提供1個bit驗證位,過濾出虛假信息的概率為當參數(shù)n為α位時,MAC(m,k,α)能夠以的概率過濾出虛假信息。
為了過濾攻擊者注入的虛假數(shù)據(jù),可以通過鄰居節(jié)點、簇頭節(jié)點、中轉節(jié)點實現(xiàn)虛假數(shù)據(jù)過濾機制,當一個監(jiān)測節(jié)點v0準備將一個信息m通過路由路徑m首先在簇頭節(jié)點處進行驗證,驗證m中mac信息,通過鄰居節(jié)點來驗證m中事件值,驗證通過后,該簇頭節(jié)點將生成消息認證代碼M_C,M_C中包含v0和節(jié)點生成的mac:
M_C=(mac1 mac2 …mact)
三、簇頭節(jié)點過濾
簇頭節(jié)點對簇內節(jié)點上傳的監(jiān)測數(shù)據(jù)進行驗證,對驗證不通過的數(shù)據(jù)直接丟棄,如果其中有受妥協(xié)節(jié)點發(fā)送虛假數(shù)據(jù),則將該節(jié)點ID視為不信任ID,不再接收該節(jié)點上傳的數(shù)據(jù)。當簇內傳感器節(jié)點vj上傳數(shù)據(jù)時,vj利用密鑰kl和數(shù)據(jù)值ej生成消息認證代碼MAC:macj=kl(ej)。各節(jié)點將自己生成的數(shù)據(jù)發(fā)送給簇頭節(jié)點。F_Tj是生成rj的時間點,該值是由節(jié)點中定時器產生。當需要更新密鑰時,才將Mj添加到rj中,是節(jié)點vj產生的第i個隨機數(shù),Mj是隨機數(shù)生成的認證信息。
簇頭節(jié)點對簇內節(jié)點上傳的數(shù)據(jù)驗證過程如下:
步驟S1.1、簇頭節(jié)點檢測所有上傳的數(shù)據(jù)中的ID是否是自己簇內節(jié)點的ID以及唯一性檢測,如果不是,則直接丟棄該ID的數(shù)據(jù)rj。
步驟S1.2、驗證完ID之后,接下來驗證F_Tj與簇頭節(jié)點存儲的F_T′j:如果F_Tj≤F_T′j,則說明該數(shù)據(jù)為“過時”數(shù)據(jù),丟棄;
步驟S1.3、接下來,簇頭節(jié)點利用自己擁有簇內所有節(jié)點的密鑰對macj進行驗證,即使用密鑰與ej重新生成mac′j,與上傳的macj進行對比,如不相等,則丟棄該數(shù)據(jù),并將驗證失敗的rj中的ID列入“不信任”ID范圍,下次不再接收該節(jié)點信息。
步驟S1.4、在進行macj驗證之后,獲取合理數(shù)據(jù):簇頭節(jié)點取出各節(jié)點的事件值ej,計算出平均值再計算出如果Δd>d(設定誤差范圍閾值),則丟棄相應的rj數(shù)據(jù)。
步驟S1.5、檢測rj中是否有隨機數(shù)如果有,驗證對應的隨機數(shù)的加密信息Mj:
·驗證通過則進行密鑰更新步驟,同時將存儲的F_T歸零;
·驗證不通過,則丟棄該數(shù)據(jù);
經過對簇內的虛假數(shù)據(jù)過濾,可以大大減少中轉節(jié)點對虛假數(shù)據(jù)過濾的工作量。將簇內受妥協(xié)的節(jié)點列為不信任的節(jié)點,可以在源頭消除攻擊者向網絡注入的虛假數(shù)據(jù),保證簇內數(shù)據(jù)的合法性,將減少網絡數(shù)據(jù)傳輸量。
簇頭節(jié)點對簇內節(jié)點上傳的數(shù)據(jù)進行驗證之后,對生成消息認證代碼,選取t個合法節(jié)點則生成{mac1,mac2,…,mact},然后再生成數(shù)據(jù)報告,數(shù)據(jù)報告
其中是簇頭節(jié)點計算出的平均值,ID1,ID2,…,IDt節(jié)點的ID號,mac1,mac2,…,mact是各節(jié)點的密鑰與事件值生成的認證代碼,mac1是簇頭節(jié)點中的密鑰與生成的認證代碼信息,i1,i2,…,it為密鑰索引,是節(jié)點需要更新密鑰時才產生的隨機數(shù)。在節(jié)點不需要更新密鑰池時,不會上傳隨機數(shù);M1,M2,…,Mt是生成的認證信息,用于驗證隨機數(shù)的合法性。F_T是生成數(shù)據(jù)報告R的標記位,F(xiàn)_T是由傳感器中定時器產生的時間,轉發(fā)節(jié)點根據(jù)數(shù)據(jù)報告中簇頭節(jié)點ID進行存儲F_T。
四、轉發(fā)過濾
在簇頭節(jié)點對簇內采集節(jié)點上傳的數(shù)據(jù)進行過濾后,生成一個數(shù)據(jù)包,該數(shù)據(jù)包中包含事件值、采集節(jié)點ID、認證消息MAC、密鑰索引,也有可能包含密鑰更新所需的隨機值和它的認證消息,轉發(fā)節(jié)點需要對其進行驗證。
當中轉節(jié)點接收到數(shù)據(jù)報告時,中轉節(jié)點先對R中的ID、MAC以及密鑰索引個數(shù)進行檢查,然后再對MAC的正確性進行驗證,最后檢查報告中的隨機數(shù),看是否需要更新密鑰。轉發(fā)節(jié)點中存儲數(shù)據(jù)報告的標記位F_T,該標記位用于驗證重復數(shù)據(jù)報告,抵制重放攻擊。中轉節(jié)點存儲的標記位在進行密鑰更新時進行歸零處理。
中轉節(jié)點驗證數(shù)據(jù)報告步驟如下:
步驟S4.1、對數(shù)據(jù)報告R中的ID、MAC以及密鑰索引個數(shù)進行檢查,如果它們的個數(shù)均為t個,如果是則進行下一步檢測,否則丟棄該數(shù)據(jù)報告R;
步驟S4.2、檢查數(shù)據(jù)報告R中是否包含簇頭節(jié)點的ID以及簇頭節(jié)點生成的MAC,如果不存在則直接丟棄該數(shù)據(jù)報告R;
步驟S4.3、檢測數(shù)據(jù)報告R中各個監(jiān)測節(jié)點的ID是否是數(shù)據(jù)報告R中檢測到的簇頭節(jié)點所代表的簇內節(jié)點ID,如果有任意一個不是,就丟棄數(shù)據(jù)報告R;
步驟S4.4、如果中轉節(jié)點存儲了數(shù)據(jù)報告R中節(jié)點vi(1≤i≤t)的密鑰則利用對重新計算一個mac,與R中附帶的mac進行比較:如果二者不等,丟棄數(shù)據(jù)報告R;
步驟S4.5、檢測數(shù)據(jù)報告R中隨機數(shù)的密鑰索引j1,j2,…,jt:
·如果需要更新,則驗證對應的隨機數(shù)的加密信息Mj:
··驗證通過則進行密鑰更新步驟,同時將存儲的F_T進行歸零處理;
··驗證不通過,則丟棄該數(shù)據(jù);
·如果不需要更新,則對數(shù)據(jù)報告R中的F_T進行檢測,如果F_T小于或者等于上一次數(shù)據(jù)報告中的F_T,則將該數(shù)據(jù)報告認定為“過時”的重復數(shù)據(jù),丟棄該數(shù)據(jù)報告;
步驟S4.6、如果數(shù)據(jù)報告R通過上述驗證后,則將數(shù)據(jù)報告R轉發(fā)給下游節(jié)點;
五、動態(tài)更新密鑰
動態(tài)更新密鑰每次只更新s條密鑰鏈中使用時間最長的一條,在滿足更新密鑰池的條件時,節(jié)點會選出s條密鑰鏈中使用時間最長的一條密鑰鏈,被更新的密鑰鏈不會再次被使用,直到整個網絡密鑰更新結束后,才會使用最新的密鑰鏈。
更新密鑰池步驟如下:
步驟S5.1、簇內節(jié)點vj選出需要更新的第i條密鑰鏈,利用隨機函數(shù)Г生成一個新隨機數(shù)xi,利用該鏈的第一個密鑰對xi進行加密,
步驟S5.2、將xi、Mi添加到數(shù)據(jù)包r中發(fā)送給簇頭節(jié)點;
步驟S5.3、簇頭節(jié)點驗證Mi:
·驗證通過后,取出隨機數(shù)xi保存;
·驗證不通過,丟棄數(shù)據(jù)包r;
步驟S5.4、簇頭節(jié)點向驗證通過的節(jié)點發(fā)送信息r′={xi;Mi},表示簇頭節(jié)點已接收到更新通知:
·如果節(jié)點沒有接收到r′,在下次事件發(fā)生時,繼續(xù)向簇頭節(jié)點發(fā)送包含xi、Mi的數(shù)據(jù)包r;
·如果節(jié)點接收到r′,驗證Mi:
··如果驗證不通過,丟棄r′,并在下次事件發(fā)生時,繼續(xù)向簇頭節(jié)點發(fā)送包含xi、Mi的數(shù)據(jù)包r;
··如果驗證通過,在下次發(fā)生事件時,在向簇頭節(jié)發(fā)送的數(shù)據(jù)包r中添加密鑰更新通知,并利用單向函數(shù)H,xi作為輸入?yún)?shù)生成一條長度為w密鑰鏈,更新密鑰鏈;
步驟S5.5、簇頭節(jié)點利用單向函數(shù)H,xi作為輸入?yún)?shù)生成一條長度為w密鑰鏈,并更新密鑰;
步驟S5.6、在簇頭節(jié)點與簇內節(jié)點更新完密鑰之后,簇頭節(jié)點將會與自己的下游節(jié)點R1進行密鑰更新:將xi、Mi添加到數(shù)據(jù)報告R中發(fā)送給R1,R1執(zhí)行類似與簇頭節(jié)點執(zhí)行(2)-(5)功能,簇頭節(jié)點將對R1發(fā)送的進行驗證;
步驟S5.7、在R1更新完后,R1會與R2進行密鑰更新,更新成功后R2會與下游節(jié)點R3進行密鑰更新,直到Sink節(jié)點密鑰更新完畢;
步驟S5.8、Sink節(jié)點更新成功后,將會向上游節(jié)點發(fā)送密鑰更新成功通知,在采集節(jié)點收到該通知后,最新密鑰將會被使用;
在更新密鑰的過程中,為了保證簇內節(jié)點的密鑰與簇頭節(jié)點保持同步,簇內節(jié)點vj在沒收到簇頭節(jié)點發(fā)送的信息r′時,vj不會更新自己的密鑰池,并在接下來的發(fā)生的事件中,將xi,Mi添加到數(shù)據(jù)包r中再次發(fā)送給簇頭節(jié)點,通知簇頭節(jié)點要更新節(jié)點vi的密鑰池;如果簇頭節(jié)點在下次事件發(fā)生后檢測到vj發(fā)送的數(shù)據(jù)包中沒有密鑰更新通知,則簇頭節(jié)點再次向vj發(fā)送r′,以確保雙方密鑰保持同步。
密鑰更新是層級向下的,當Sink節(jié)點更新完后,將向RrRr-1....R1,CHvj發(fā)送更新成功通知,采集節(jié)點可以使用最新密鑰來進行數(shù)據(jù)加密。簇頭節(jié)點的下游節(jié)點只要與自己的上游節(jié)點保持密鑰的更新同步就能保證整個網絡同步,保持網絡能夠安全通信。
攻擊者很難做到實時捕獲節(jié)點的密鑰信息,抗捕獲能力強;此外,當某節(jié)點不能正常工作,其它節(jié)點不會受到它的影響,簇內各節(jié)點與簇頭節(jié)點之間的通信鏈路不相互干擾,抗毀性較強。