1.一種應(yīng)用于無線傳感器網(wǎng)絡(luò)的動態(tài)密鑰虛假數(shù)據(jù)過濾方法,其特征在于,具體包括以下步驟:
S1、簇頭節(jié)點對所有簇內(nèi)節(jié)點上傳的數(shù)據(jù)r進(jìn)形驗證,驗證不通過,則直接丟棄該數(shù)據(jù),驗證通過進(jìn)入S2步驟;
S2、簇頭節(jié)點驗證完簇內(nèi)節(jié)點上傳的數(shù)據(jù)后,再檢驗是否需要密鑰更新,同時生成數(shù)據(jù)報告R,將數(shù)據(jù)報告R發(fā)送給下游節(jié)點;
S3、如果需要更新,則簇頭節(jié)點與需要更新的簇內(nèi)節(jié)點進(jìn)行密鑰更新,并通知下游節(jié)點進(jìn)行密鑰更新;
S4、簇頭節(jié)點的下游節(jié)點對數(shù)據(jù)報告R進(jìn)行驗證,同時檢測是否需要進(jìn)行密鑰更新,中轉(zhuǎn)節(jié)點將驗證通過的數(shù)據(jù)報告R發(fā)送給下游節(jié)點,直到數(shù)據(jù)報告R發(fā)送到Sink節(jié)點;
S5、數(shù)據(jù)報告R到達(dá)Sink后,Sink節(jié)點進(jìn)行最后驗證,驗證通過則保存數(shù)據(jù)報告R,反之,則丟棄數(shù)據(jù)報告R;同時檢測是否需要進(jìn)行密鑰更新,如果需要就與上游節(jié)點進(jìn)行密鑰更新,更新成功后,向發(fā)起密鑰更新的簇內(nèi)節(jié)點發(fā)送密鑰更新成功通知,新密鑰可以使用。
2.根據(jù)權(quán)利要求1所述的應(yīng)用于無線傳感器網(wǎng)絡(luò)的動態(tài)密鑰虛假數(shù)據(jù)過濾方法,其特征在于,所述S1步驟中,當(dāng)簇內(nèi)傳感器節(jié)點vj上傳數(shù)據(jù)時,vj利用密鑰kl和數(shù)據(jù)值ej生成消息認(rèn)證代碼MAC:macj=kl(ej);各節(jié)點將自己生成的數(shù)據(jù)發(fā)送給簇頭節(jié)點;F_Tj是生成rj的時間點,該值是由節(jié)點中定時器產(chǎn)生;當(dāng)需要更新密鑰時,才將Mj添加到rj中,是節(jié)點vj產(chǎn)生的第i個隨機(jī)數(shù),Mj是隨機(jī)數(shù)生成的認(rèn)證信息;
具體驗證過程如下:
S1.1、簇頭節(jié)點檢測所有上傳的數(shù)據(jù)中的ID是否是自己簇內(nèi)節(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é)點利用自己擁有簇內(nèi)所有節(jié)點的密鑰對macj進(jìn)行驗證,即使用密鑰與ej重新生成mac′j,與上傳的macj進(jìn)行對比,如不相等,則丟棄該數(shù)據(jù),并將驗證失敗的rj中的ID列入“不信任”ID范圍,下次不再接收該節(jié)點信息;
S1.4、在進(jìn)行macj驗證之后,獲取合理數(shù)據(jù):簇頭節(jié)點取出各節(jié)點的事件值ej,計算出平均值再計算出如果Δd>d(設(shè)定誤差范圍閾值),則丟棄相應(yīng)的rj數(shù)據(jù);
S1.5、檢測rj中是否有隨機(jī)數(shù)如果有,驗證對應(yīng)的隨機(jī)數(shù)的加密信息Mj:
驗證通過則進(jìn)行密鑰更新步驟,同時將存儲的F_T歸零;
驗證不通過,則丟棄該數(shù)據(jù)。
3.根據(jù)權(quán)利要求1所述的應(yīng)用于無線傳感器網(wǎng)絡(luò)的動態(tài)密鑰虛假數(shù)據(jù)過濾方法,其特征在于,所述S4步驟中,簇頭節(jié)點對簇內(nèi)采集節(jié)點上傳的數(shù)據(jù)進(jìn)行過濾后,生成一個數(shù)據(jù)包,該數(shù)據(jù)包中包含事件值、采集節(jié)點ID、認(rèn)證消息MAC、密鑰索引;
當(dāng)中轉(zhuǎn)節(jié)點接收到數(shù)據(jù)報告時,中轉(zhuǎn)節(jié)點先對數(shù)據(jù)報告R中的ID、MAC以及密鑰索引個數(shù)進(jìn)行檢查,然后再對MAC的正確性進(jìn)行驗證,最后檢查數(shù)據(jù)報告R中的隨機(jī)數(shù),看是否需要更新密鑰;轉(zhuǎn)發(fā)節(jié)點中存儲數(shù)據(jù)報告R的標(biāo)記位F_T,該標(biāo)記位用于驗證重復(fù)數(shù)據(jù)報告,抵制重放攻擊;中轉(zhuǎn)節(jié)點存儲的標(biāo)記位在進(jìn)行密鑰更新時進(jìn)行歸零處理;
具體步驟如下:
S4.1、對數(shù)據(jù)報告R中的ID、MAC以及密鑰索引個數(shù)進(jìn)行檢查,如果它們的個數(shù)均為t個,如果是則進(jìn)行下一步檢測,否則丟棄該數(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é)點所代表的簇內(nèi)節(jié)點ID,如果有任意一個不是,就丟棄數(shù)據(jù)報告R;
S4.4、如果中轉(zhuǎn)節(jié)點存儲了數(shù)據(jù)報告R中節(jié)點vi(1≤i≤t)的密鑰則利用對重新計算一個mac,與數(shù)據(jù)報告R中附帶的mac進(jìn)行比較:如果二者不等,丟棄數(shù)據(jù)報告R;
S4.5、檢測數(shù)據(jù)報告R中隨機(jī)數(shù)的密鑰索引j1,j2,…,jt:
如果需要更新,則驗證對應(yīng)的隨機(jī)數(shù)的加密信息Mj:
驗證通過則進(jìn)行密鑰更新步驟,同時將存儲的F_T進(jìn)行歸零處理;
驗證不通過,則丟棄該數(shù)據(jù);
如果不需要更新,則對數(shù)據(jù)報告R中的F_T進(jìn)行檢測,如果F_T小于或者等于上一次數(shù)據(jù)報告中的F_T,則將該數(shù)據(jù)報告認(rèn)定為“過時”的重復(fù)數(shù)據(jù),丟棄該數(shù)據(jù)報告;
S4.6、如果數(shù)據(jù)報告R通過上述驗證后,則將數(shù)據(jù)報告R轉(zhuǎn)發(fā)給下游節(jié)點。
4.根據(jù)權(quán)利要求1所述的應(yīng)用于無線傳感器網(wǎng)絡(luò)的動態(tài)密鑰虛假數(shù)據(jù)過濾方法,其特征在于,更新密鑰池步驟如下:
步驟S5.1、簇內(nèi)節(jié)點vj選出需要更新的第i條密鑰鏈,利用隨機(jī)函數(shù)Г生成一個新隨機(jī)數(shù)xi,利用該鏈的第一個密鑰對xi進(jìn)行加密,
步驟S5.2、將xi、Mi添加到數(shù)據(jù)包r中發(fā)送給簇頭節(jié)點;
步驟S5.3、簇頭節(jié)點驗證Mi:
驗證通過后,取出隨機(jī)數(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é)點與簇內(nèi)節(jié)點更新完密鑰之后,簇頭節(jié)點將會與自己的下游節(jié)點數(shù)據(jù)R1進(jìn)行密鑰更新:將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ā)送的r′={IDvj;x′i;M′i}進(jìn)行驗證;
步驟S5.7、在下游節(jié)點數(shù)據(jù)R1更新完后,下游節(jié)點數(shù)據(jù)R1會與下游節(jié)點數(shù)據(jù)R2進(jìn)行密鑰更新,更新成功后下游節(jié)點數(shù)據(jù)R2會與下游節(jié)點數(shù)據(jù)R3進(jìn)行密鑰更新,直到Sink節(jié)點密鑰更新完畢;
步驟S5.8、Sink節(jié)點更新成功后,將會向上游節(jié)點發(fā)送密鑰更新成功通知,在采集節(jié)點收到該通知后,最新密鑰將會被使用。