王 浩 楊 劍 劉 杰 王 平
(重慶郵電大學(xué)自動化學(xué)院網(wǎng)絡(luò)控制技術(shù)與智能儀器儀表教育部重點實驗室,重慶 400065)
WIA-PA(wireless networks for industrial automationprocess automation)是基于 IEEE STD 802.15.4-2006 的標(biāo)準(zhǔn),用于工業(yè)過程測量、監(jiān)視與控制的無線網(wǎng)絡(luò)系統(tǒng)[1]。該規(guī)范是我國自主研發(fā)的、用于工業(yè)過程自動化的無線網(wǎng)絡(luò)規(guī)范,現(xiàn)已成為IEC國際標(biāo)準(zhǔn)。
WIA-PA網(wǎng)絡(luò)支持兩層網(wǎng)拓?fù)浣Y(jié)構(gòu)。第一層是網(wǎng)狀結(jié)構(gòu),由網(wǎng)關(guān)設(shè)備及路由設(shè)備構(gòu)成;第二層是星型結(jié)構(gòu),由路由設(shè)備、現(xiàn)場設(shè)備和手持設(shè)備構(gòu)成。用于系統(tǒng)管理的網(wǎng)絡(luò)管理者和安全管理者在實現(xiàn)時可位于網(wǎng)關(guān)設(shè)備或主控計算機。本文中,安全管理者由主控計算機擔(dān)任。同時,一種類型的物理設(shè)備可以擔(dān)任多個邏輯角色。在星型和網(wǎng)狀結(jié)合的兩層拓?fù)浣Y(jié)構(gòu)中,網(wǎng)關(guān)設(shè)備可以擔(dān)任網(wǎng)關(guān)、網(wǎng)絡(luò)管理者以及安全管理者的角色;路由設(shè)備可以擔(dān)任簇首的角色;現(xiàn)場設(shè)備和手持設(shè)備只能擔(dān)任簇成員的角色。
作為一個開放系統(tǒng),WIA-PA存在潛在的安全風(fēng)險[1],必須采取一定的安全措施,以保證WIA-PA用戶的安全操作,保護(hù)系統(tǒng)內(nèi)部的資源和維持正常的生產(chǎn)秩序。本文針對WIA-PA網(wǎng)絡(luò)的實際應(yīng)用中的安全問題,分別提出了入網(wǎng)認(rèn)證方案和密鑰更新方案。
單向散列鏈?zhǔn)且粋€散列值序列{x1,…,xj,…,xm}[4],序列中各元素滿足:
散列函數(shù)(映射)F滿足以下屬性:①給定xj-1和G,很容易計算出xj;②若未給定G,而給定了xj-1,則很難計算出 xj,若給定了 G,未給定 xj-1,也很難計算 xj。
在該散列鏈里,如果要對一個給定的散列值xj進(jìn)行認(rèn)證,可以采用如下方法:①已知 xj-k,由式(1)對xj-k重復(fù)計算 k次后得到 x'j,將其與 xj進(jìn)行比較;②已知xj+k,由式(1)對xj重復(fù)計算k次后將得到的x'j+k與xj+k進(jìn)行比較。
在本方案里,稱G為生成因子,第一次計算時參數(shù)x0稱為種子,散列鏈的每一個元素xj稱為鏈密鑰。同時給出公共散列鏈的定義,對于節(jié)點u和節(jié)點v,若u擁有散列鏈Ci,同時v從Ci提取一個或多個鏈密鑰,則稱u和v共享一個公共散列鏈Ci。
對于需要進(jìn)行安全認(rèn)證的網(wǎng)絡(luò),所有節(jié)點都有與信任中心分別共享唯一加入密鑰(KJ)。該加入密鑰在部署網(wǎng)絡(luò)前通過手持設(shè)備等安全方式寫入節(jié)點設(shè)備[1]。WIA-PA網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)如圖1所示。
圖1 WIA-PA網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)Fig.1 Topology structure of WIA-PA network
對于單跳加入網(wǎng)絡(luò)的節(jié)點,如圖1中的節(jié)點A,當(dāng)信任中心收到A的入網(wǎng)請求后,發(fā)起對節(jié)點A的認(rèn)證請求,在收到節(jié)點A的認(rèn)證響應(yīng)后對A進(jìn)行認(rèn)證。節(jié)點A的認(rèn)證響應(yīng)包含安全信息,安全信息由式(2)采用F函數(shù)計算得到。單跳節(jié)點入網(wǎng)過程如圖2所示。
式中:Sinfo為計算得到的安全信息;Paddr為設(shè)備的唯一標(biāo)志地址;Tdevicetpte為設(shè)備的類型,路由設(shè)備或現(xiàn)場設(shè)備;|為字符串連接符號。
圖2 單跳節(jié)點入網(wǎng)認(rèn)證Fig.2 Authentication of one hop node
圖2中,通信報文用原語表示,Auth.resp和Join.resp報文由密鑰加密保護(hù)。
節(jié)點A首先發(fā)送入網(wǎng)請求Join.req,其中包含自己的唯一標(biāo)志和設(shè)備類型,信任中心根據(jù)網(wǎng)絡(luò)屬性判斷是否對A認(rèn)證,需要認(rèn)證時保存A的標(biāo)志和類型,發(fā)起認(rèn)證請求Auth.req。A收到認(rèn)證請求,根據(jù)式(2)計算安全信息Sinfo并響應(yīng)信任中心Auth.resp。信任中心收到A的認(rèn)證響應(yīng),查詢與A預(yù)共享的KJ,由式(2)計算安全信息并與Sinfo比較,如果不等,拒絕A加入網(wǎng)絡(luò);否則,回復(fù)入網(wǎng)響應(yīng) Join.resp,置結(jié)果 Rresult為1,告知節(jié)點A入網(wǎng)成功。
對于多跳入網(wǎng)的節(jié)點,如圖1中節(jié)點B或節(jié)點C通過中間節(jié)點A加入網(wǎng)絡(luò),其認(rèn)證過程如圖3所示。
圖3 多跳節(jié)點入網(wǎng)認(rèn)證Fig.3 Authentication of multi-hop node
節(jié)點B發(fā)送入網(wǎng)請求Join.req,中間節(jié)點A發(fā)起認(rèn)證請求Auth.req。B利用與信任中心預(yù)共享的KJ,根據(jù)式(2)生成Sinfo,并由式(3)計算給信任中心的數(shù)據(jù)ET1,然后發(fā)送認(rèn)證響應(yīng)Auth.resp。
式中:KJB為B與信任中心共享的加密密鑰;E為加密算法,采用對稱加密,算法在此不作要求。
A收到B的認(rèn)證響應(yīng)報文不做處理,構(gòu)造關(guān)于B的入網(wǎng)請求報文Join.req,包含B的標(biāo)志Paddr_B和ET1,并發(fā)送給信任中心。
信任中心收到來自于A的報文后,首先判斷A是否為經(jīng)過認(rèn)證的在網(wǎng)節(jié)點,如不是,則丟棄該報文;如是,則解析報文,并根據(jù)Paddr_B查找與B共享的KJ,解密ET1獲得B的入網(wǎng)信息。采用同樣的方法認(rèn)證B,如果認(rèn)證成功,根據(jù)如下公式計算給A的密文ET2和給B的密文ET3,并構(gòu)造報文Join.resp發(fā)送給節(jié)點A。
式中:IB_trust(IA_trust)為節(jié)點B(A)是否可信的標(biāo)志,1表示可信,0表示不可信。
節(jié)點A在收到信任中心的入網(wǎng)響應(yīng)報文后,首先解密ET2,根據(jù)IB_trust判斷B是否可信,不可信則不予處理,可信則根據(jù)Paddr_B將ET3轉(zhuǎn)發(fā)給B。
當(dāng)節(jié)點B收到來自A的響應(yīng)報文時,對ET3進(jìn)行解密,并根據(jù)IA_trust判斷節(jié)點A是否可信,不可信則從新選擇路徑入網(wǎng),可信則由Rresult判斷加入網(wǎng)絡(luò)是否成功。
當(dāng)節(jié)點A與信任中心之間是多跳鏈路時,節(jié)點A已入網(wǎng),即確保了該鏈路是安全鏈路,節(jié)點A只需通過此鏈路轉(zhuǎn)發(fā)數(shù)據(jù)即可,無需對鏈路中節(jié)點再次認(rèn)證。
本方案在網(wǎng)絡(luò)形成時確保了所有入網(wǎng)節(jié)點的合法性,保障了網(wǎng)絡(luò)的整體安全性。雖然節(jié)點的入網(wǎng)時間短暫,但由于節(jié)點和網(wǎng)絡(luò)所在區(qū)域環(huán)境惡劣,存在各種威脅的可能性,如非本網(wǎng)絡(luò)節(jié)點、惡意攻擊節(jié)點等,故假定所有入網(wǎng)節(jié)點都不可信,通過信任中心認(rèn)證的節(jié)點才視為本網(wǎng)絡(luò)的合法節(jié)點。
對于單跳入網(wǎng),由信任中心認(rèn)證節(jié)點。因信任中心與節(jié)點間共享唯一安全的加入密鑰,通過認(rèn)證則表明節(jié)點合法。
對于多跳認(rèn)證,假如節(jié)點B是惡意節(jié)點,因A、B之間沒有共享材料,節(jié)點A不能夠認(rèn)證B,所以將B的認(rèn)證信息發(fā)送給信任中心,信任中心認(rèn)證B失敗,即可告知節(jié)點A節(jié)點B不可信,且發(fā)送給A的報文由KJA加密保護(hù);A得知B不可信則可拒絕與B通信。假設(shè)A是惡意節(jié)點,而B的安全認(rèn)證信息由KJB加密,A在短時間內(nèi)無法破解篡改,如果它把認(rèn)證信息發(fā)送給信任中心,也會被信息中心發(fā)現(xiàn)其不可信,此時A便獲取了合法節(jié)點的唯一標(biāo)志和設(shè)備類型,但并不足以構(gòu)成危害或者試圖偽裝加入網(wǎng)絡(luò)。不管A是否轉(zhuǎn)發(fā)認(rèn)證信息,節(jié)點B在規(guī)定時間內(nèi)未收到信任中心的入網(wǎng)響應(yīng),可認(rèn)為其為惡意節(jié)點,從而選擇其他路徑入網(wǎng)。假若節(jié)點A和B同為惡意節(jié)點,也會因無法偽造加入密鑰而被拒絕加入網(wǎng)絡(luò)。同時,該認(rèn)證方案在單跳入網(wǎng)時由信任中心發(fā)起認(rèn)證請求,多跳入網(wǎng)時由中間節(jié)點而不是由信任中心發(fā)起認(rèn)證請求,減小了信任中心和中間節(jié)點的通信次數(shù)和網(wǎng)絡(luò)的通信開銷。節(jié)點入網(wǎng)跳數(shù)與網(wǎng)絡(luò)報文數(shù)的關(guān)系如圖4所示。
圖4 節(jié)點入網(wǎng)跳數(shù)與網(wǎng)絡(luò)通信報文數(shù)關(guān)系Fig.4 Relationship between the numbers of hops and network communication messages
由圖4可以看出,本方案和無需認(rèn)證的入網(wǎng)相比只增加了兩次通信,即兩條報文,即第一跳的發(fā)起認(rèn)證請求和認(rèn)證響應(yīng),并且隨著跳數(shù)的增加,通信量并沒有顯著增加;當(dāng)由信任中心對入網(wǎng)的節(jié)點發(fā)起認(rèn)證時通信次數(shù)顯著遞增且遞增率大于本方案。對于大規(guī)模網(wǎng)絡(luò)的形成,網(wǎng)絡(luò)中將有大多數(shù)節(jié)點需多跳入網(wǎng),本方案能夠有效降低通信消耗,減小整體網(wǎng)絡(luò)的組網(wǎng)時間。
節(jié)點入網(wǎng)后,由信任中心為入網(wǎng)成功的節(jié)點分發(fā)相應(yīng)的密鑰并周期性地更新密鑰。一旦有節(jié)點受損或者網(wǎng)絡(luò)受到威脅,信任中心將立即剔除受損節(jié)點并更新密鑰,或者當(dāng)節(jié)點檢測到密鑰暴露時主動發(fā)起密鑰更新服務(wù)。為確保節(jié)點通信中數(shù)據(jù)的安全,密鑰的分發(fā)和更新必須正確而且安全有效,即密鑰在傳輸中不被截取破解或經(jīng)篡改后繼續(xù)發(fā)送、發(fā)送方合法。本節(jié)給出密鑰更新詳細(xì)方案,會話密鑰采用單向散列鏈模式,更新報文附帶校驗信息,從而保證數(shù)據(jù)包和密鑰本身的正確性和數(shù)據(jù)來源的合法性。
信任中心生成一系列單向散列鏈并構(gòu)成密鑰池。所有散列鏈共用一個種子(seed),對于散列鏈Ci,假設(shè)其生成因子為Gi,則該散列鏈的第j個鏈密鑰生成如式(6)所示。
式中:Fj(seed,Gi)=F[Fj-1(seed,Gi),Gi](1≤j≤M)。
為了生成密鑰池,信任中心隨機生成一個種子,并選擇L(等于網(wǎng)絡(luò)節(jié)點個數(shù))個不同的生成因子(這里我們選用與每個節(jié)點預(yù)共享的加入密鑰),通過反復(fù)執(zhí)行上述散列鏈生成過程,生成L個散列鏈,同時刪除種子。最終的密鑰池將由L個散列鏈組成,其中每個散列鏈包含M個鏈密鑰。密鑰池的組成如圖5所示。
圖5 密鑰池的組成Fig.5 Composition of the dongle pool
對于入網(wǎng)成功的節(jié)點,信任中心分發(fā)密鑰給每個節(jié)點,與每個節(jié)點共享唯一的公共散列鏈,分發(fā)密鑰加密密鑰(key encryption key,KEK)時由加入密鑰保護(hù),分發(fā)數(shù)據(jù)密鑰(data encryption key,KED)則由KEK保護(hù)。當(dāng)網(wǎng)絡(luò)到達(dá)密鑰更新周期時,信任中心對網(wǎng)絡(luò)節(jié)點進(jìn)行密鑰更新,節(jié)點的密鑰更新過程如圖6所示。
圖6 節(jié)點的密鑰更新過程Fig.6 The updating process of node dongle
為保證密鑰更新過程的安全及來源的合法性,信任中心一開始對節(jié)點分發(fā)密鑰,即選擇圖5中的對應(yīng)密鑰鏈,將該密鑰鏈的最后一個鏈密鑰KM及其他信息D1(如密鑰類型、密鑰長度等)裝入報文P1(P1=KM|D1),并生成該報文的校驗值MIC(P1)發(fā)送給節(jié)點。密鑰更新報文格式如圖7所示。節(jié)點先校驗報文的正確性,然后對報文進(jìn)行解密,獲得會話密鑰KM;在隨后密鑰更新過程中,信任中心依次發(fā)送 KM-1、KM-2等。
圖7 密鑰更新報文格式Fig.7 The message format of dongle update
節(jié)點密鑰更新流程如圖8所示。
圖8 節(jié)點密鑰更新流程圖Fig.8 Flowchart of the dongle update
密鑰更新時,節(jié)點接收到第(i+1)次更新報文Pi+1時,首先校驗該報文是否正確,若不正確,直接回復(fù)更新密鑰失敗響應(yīng);否則,解密報文,獲得KM-i。采用加入密鑰并根據(jù) K'M-i+1=F(KM+i,KJ)計算K'M-i+1,比較 K'M-i+1和已存儲的第 i次的密鑰 KM-i+1,如果相等,表明為合法的信任中心發(fā)送,未經(jīng)過篡改,將已存儲的 KM-i+1替換為 KM-i,作為會話密鑰;如果不等,則表明受到攻擊,即報文來源不可信且KEK已暴露,此時,應(yīng)向信任中心匯報。
在本方案中,密鑰更新過程在不增加通信開銷的情況下,只需節(jié)點進(jìn)行一次散列函數(shù)運算,即可以實現(xiàn)數(shù)據(jù)報文的完整性、數(shù)據(jù)的機密性、數(shù)據(jù)本身的正確性和數(shù)據(jù)來源的合法性。本方案散列鏈的使用保證了所更新的密鑰的安全性和有效性,與文獻(xiàn)[5]相比,本方案增加了對數(shù)據(jù)源的認(rèn)證。這是因為網(wǎng)絡(luò)中只有信任中心和節(jié)點共享唯一公共散列鏈,在確保數(shù)據(jù)新鮮性的情況下可以認(rèn)定該數(shù)據(jù)為信任中心所發(fā)送。根據(jù)散列鏈的特性——單向性[9],攻擊者即使破獲了當(dāng)前使用的會話密鑰,在未知密鑰鏈種子和加入密鑰的情況下,不可能通過計算得到后續(xù)的會話密鑰,而且也不可能獲得散列鏈的種子。
由于節(jié)點的加入密鑰是在網(wǎng)絡(luò)部署前通過安全方式寫入節(jié)點設(shè)備的,可認(rèn)為是安全的,所以可以確保隨后發(fā)送的密鑰加密密鑰是安全可靠的。由于密鑰加密密鑰也需進(jìn)行周期性更新[1],密鑰加密密鑰可以采用該方案中單向密鑰鏈的形式進(jìn)行下發(fā)和更新。
本文從以下四個方面分析該方案的效率。
①當(dāng)網(wǎng)絡(luò)中有新節(jié)點加入時,首先對其進(jìn)行認(rèn)證,認(rèn)證通過,信任中心隨機生成種子,并用該節(jié)點的加入密鑰生成密鑰鏈,然后進(jìn)行密鑰的分發(fā)和更新。
②當(dāng)有節(jié)點離開時,網(wǎng)絡(luò)管理者刪除與該節(jié)點共享的公共散列鏈,不影響網(wǎng)絡(luò)中的其他節(jié)點正常通信,但離開的節(jié)點為簇首節(jié)點時,如果啟用冗余簇首[7],信任中心更新與冗余簇首共享的公共散列鏈即可。
③存儲量及通信開銷,該方案中節(jié)點只需存儲三種類型的密鑰,與文獻(xiàn)[2]和[5]比較,本方案沒有增加存儲量和通信開銷。
④生命周期,密鑰鏈長度M期望值的選取根據(jù)式(7)計算。
式中:Tlifetime為節(jié)點可以有效工作的存活時間;Tupdatecycle為密鑰更新周期;δmax為由網(wǎng)絡(luò)狀況預(yù)測節(jié)點遭遇攻擊(含通信故障)的最大次數(shù)。
采用式(7)可解決鏈密鑰在節(jié)點生命結(jié)束前用盡而無法進(jìn)行后續(xù)密鑰更新的問題,鏈密鑰的長度M則滿足了網(wǎng)絡(luò)中節(jié)點的生命存活期。
當(dāng)密鑰更新節(jié)點已知如下信息:節(jié)點收到報文Pi并獲得鏈密鑰KM-i+1,丟失(d-1)次密鑰更新報文,丟失期間KEK沒有改變,暫存了更新密鑰丟失期間所有不能解密的報文,收到正確的密鑰更新報文Pi+d,則節(jié)點將依次做出如下處理:①解密報文 Pi+d,得到KM-i-d+1;②對 KM-i-d+1進(jìn)行 d 次散列運算,分別得到K'M-i+1,K'M-i,…,K'M-i+d+1;③判斷 K'M-i-d+1是否與KM-i+1相等,若不等,更新密鑰失敗,否則進(jìn)入④;④可以確認(rèn)所有更新密鑰正確,依次用②中的密鑰對相應(yīng)期間的數(shù)據(jù)報文進(jìn)行解密。
綜上所述,該方案在特定期間內(nèi)可以容忍一部分密鑰更新報文的丟失,具有較好的容忍性,允許最大丟失個數(shù)由KEK的更新周期以及節(jié)點能夠暫存的最大報文數(shù)量決定。
本文針對WIA-PA網(wǎng)絡(luò),提出了一種入網(wǎng)認(rèn)證方案。在假定網(wǎng)絡(luò)形成時所有節(jié)點都不可信情況下,保證了所有入網(wǎng)節(jié)點的合法性,并使用單向散列函數(shù),提出了一種安全的密鑰更新方案。這既保證了更新密鑰的安全性,也保證了密鑰來源的合法性,實現(xiàn)了消息認(rèn)證和消息源的認(rèn)證;同時,還具有較好的密鑰更新報文丟失容忍性。經(jīng)過分析,充分說明了該方案實現(xiàn)了對密鑰的有效更新,大大增強了網(wǎng)絡(luò)的安全性。該方案在保證網(wǎng)絡(luò)安全通信的同時,對節(jié)點存儲空間和通信量要求較低,并具有較好的可擴展性和靈活性,適合WIA-PA網(wǎng)絡(luò)。
[1]工業(yè)無線網(wǎng)絡(luò) WIA 規(guī)范[S].ICS 25.040,2008.
[2]韓瑞,劉楓.一種WIA-PA網(wǎng)絡(luò)的密鑰分配方案[J].計算機測量與控制,2010,18(1):186 -188.
[3]梁煒,張曉玲.WIA-PA:用于過程自動化的工業(yè)無線網(wǎng)絡(luò)系統(tǒng)結(jié)構(gòu)與通信規(guī)范[J].儀器儀表標(biāo)準(zhǔn)化與計量,2009(2):30-36.
[4]蘇忠,林闖,任豐原.無線傳感器網(wǎng)絡(luò)中基于散列鏈的隨機密鑰預(yù)分發(fā)方案[J].計算機學(xué)報,2009,32(1):30 -42.
[5]田豐,王交峰,王傳云,等.無線傳感器網(wǎng)絡(luò)隨機密鑰預(yù)分配改進(jìn)方案[J].計算機應(yīng)用,2008,28(6):1388 -1391.
[6]王華,劉楓,楊頌華.工業(yè)無線網(wǎng)絡(luò)WIA-PA網(wǎng)絡(luò)研究與設(shè)計[J].自動化與儀表,2009,24(7):1 -4.
[7]張丹,劉楓.WlA-PA 冗余簇首機制[J].計算機工程,2010,36(3):257 -259.
[8]Perrig A,Szewczyk R,Tygar J D,et al.SPINS:security protocols for sensor networks[J].Wireless Networks,2002,8(5):521 - 534.
[9]Bellare M,Canetti R,Krawczyk H.Keying hash functions for message authentication[J].Advances in Cryptodogy-Crypto’96,Lecture Notes in Computer Science,1996,1109:1 -15.
[10]Perrig A,Canetti R,Song D,et al.Efficient and secure source authentication for multicast[J].Network and Distributed System Security symposium,2001:35 -46.
[11]Perrig A,Canetti R,Tygar J D,et al.Efficient authentication and signing of multicast streams over lossy channels[C]∥Proceedings of the 2000 IEEE Symposium on Security and Privacy,Berkeley,CA,USA,2000:56-74.