馬學(xué)文
深圳市麥馳安防技術(shù)有限公司 廣東 深圳 518126
Zig Bee是一種近距離、低速率、低功耗、低成本的無線網(wǎng)絡(luò)技術(shù),目前基于Zig Bee標(biāo)準(zhǔn)的無線傳感器網(wǎng)絡(luò)的應(yīng)用越來越廣泛。但由于Zig Bee無線設(shè)備在存儲能力、計算能力及電源供電時間方面的局限性,不僅使得原來在有線環(huán)境下的許多安全方案和安全技術(shù)不能直接應(yīng)用于Zig Bee網(wǎng)絡(luò)環(huán)境中,而且對Zig Bee網(wǎng)絡(luò)安全服務(wù)過程與算法提出了更高的要求。
本文的相關(guān)研究是基于TI公司的CC2530芯片方案,CC2530是用于2.4-GHz的Zig Bee 應(yīng)用的一個真正的片上系統(tǒng)(SoC)解決方案。它能夠以非常低的材料成本構(gòu)建強大的網(wǎng)絡(luò)節(jié)點。CC2530 結(jié)合了TI公司的業(yè)界領(lǐng)先的Zig Bee協(xié)議棧(Z-Stack?),提供了一個強大和完整的Zig Bee 解決方案[1]。
其中,Z-Stack對Zig Bee網(wǎng)絡(luò)提供了全面的安全支持,特別是CC2530 硬件支持 128bit 的AES加密算法 我們基于這個技術(shù)來論述在Zig Bee是如何實現(xiàn)加密從而提高網(wǎng)絡(luò)的安全性。
我們先看看Z-Stack的安全管理框圖,如下:
圖1 Z-Stack安全管理框圖
如上圖所示,Zig Bee的安全架構(gòu)主要包含在協(xié)議棧兩個層次的安全機制。NWK層和APS層,其各自負責(zé)安全傳輸他們各自的幀,APS子層提供了建立和維護安全關(guān)系的服務(wù)。我們重點關(guān)注NWK層和APS子層:
NWK層也就是俗稱的網(wǎng)絡(luò)層:主要包括了配置新設(shè)備,啟動網(wǎng)絡(luò),執(zhí)行加入網(wǎng)絡(luò),重新加入網(wǎng)絡(luò)和離開網(wǎng)絡(luò)的功能,提供尋址功能,鄰居發(fā)現(xiàn),路由發(fā)現(xiàn),接收控制和路由等功能。其安全性方面主要是AES-CCM*來實現(xiàn)[2]。
APS也就是應(yīng)用層的子層:主要是提供NWK和APL之間的接口,提供數(shù)據(jù)傳輸服務(wù)和提供安全服務(wù),設(shè)備綁定和組管理。APS層基于鏈接密鑰或網(wǎng)絡(luò)密鑰的幀安全性,負責(zé)向外傳出的幀和安全的接收傳入的幀以及安全的建立和管理加密密鑰所需的處理步驟。此外,在應(yīng)用層的上層的ZDO(Zig Bee Device Object,Zig Bee設(shè)備對象),ZDO負責(zé)初始化APS,NWK和安全服務(wù)提供商。
了解完協(xié)議棧層面的安全機制后,我們知道任何通信數(shù)據(jù)都是以幀的格式來組織通信,Zig Bee也不例外,協(xié)議棧的每一層都有特定的幀結(jié)構(gòu),總計定義了信標(biāo)幀,數(shù)據(jù)幀,確認(rèn)幀和MAC命令幀四種,其目的就是實現(xiàn)在多噪音無線信道環(huán)境中的數(shù)據(jù)可靠傳輸。其通用結(jié)構(gòu)一般分幀頭(MAC Header(MHR))、負載(MAC Payload)和幀尾(MAC Footer(MRF))三部分組成,其中幀頭是由幀控制信息、幀序列號和地址信息組成,負載是可變長度的內(nèi)容,由幀類型決定,幀尾是16位的CRC校驗序列[3]。
限于篇幅,在此以NWK層的幀控制域格式為例簡單描述下幀的相關(guān)定義,例如NWK幀控制域如下,其由兩個字節(jié)組成,包括幀類型、地址和其他控制標(biāo)記:
其中安全域的標(biāo)志位為1時,該幀就具有網(wǎng)絡(luò)層的安全操作能力。在特定的安全等級上對NWK或APS幀使用安全機制,我們一般用到AES-CCM*操作模式,該模式是AES-CCM的拓展,提供認(rèn)證和加密功能。Zig Bee還采用AES-CCM*來保證數(shù)據(jù)的完整性、可靠性、安全性。
0-1 2-5 6-7 8 9 10 11 12 13-15幀類型 協(xié)議版本 發(fā)現(xiàn)路由 多播標(biāo)記 安全 源路由 目的地址 源地址 保留
發(fā)送端,將要發(fā)送的數(shù)據(jù)組織為128位的數(shù)據(jù)塊,然后進行AES-CCM*的處理,得到的是加密的128位數(shù)據(jù)和一個生成的MIC(消息完整性代碼,它是通過使用128位密鑰加密IEEE MAC幀的部分而創(chuàng)建的)
接收端將收到的數(shù)據(jù)去除掉MIC,然后進行AES-CCM*處理,得到解密的128位數(shù)據(jù),并且同步校驗,來判斷數(shù)據(jù)是否完整、正確[4]。
其示意圖如下:
圖2 AES-CCM*工作流程圖
接下來,我們結(jié)合上面的理論分析,以CC2530的Zig Bee模組為例講述一下該安全機制的具體實現(xiàn)過程。
實際應(yīng)用中,因為Z-Stack已經(jīng)在網(wǎng)絡(luò)和應(yīng)用層定義了安全管理。它包括針對關(guān)鍵進程建立和傳輸、設(shè)備管理和框架保護的方法。只要在Z-Stack開發(fā)中我們選擇使用一個公共的 Zig Bee類,那么Z-Stack就已經(jīng)為其應(yīng)用做出了安全決策,因為在該類中已經(jīng)對安全性進行了預(yù)定義,Zig Bee主要提供三個等級的安全模式:
2.1.1 非安全模式:為默認(rèn)安全模式,即不采取任何安全服務(wù),因此可能被竊聽;
2.1.2 訪問控制模式:通過訪問控制列表(Access Control List,ACL,包含有允許接入的硬件設(shè)備MAC地址)限制非法節(jié)點獲取數(shù)據(jù);
2.1.3 安全模式:采用AES128位加密算法進行通訊加密,同時提供有0,16,32,64,128位的完整性校驗。
我們只需要來判斷:是否需要對數(shù)據(jù)幀的載荷進行加密,以及附著在數(shù)據(jù)幀末尾的認(rèn)證碼長度(8、16 或 64 位,等等)。我們還必須決定在哪個層上施加安全機制:網(wǎng)絡(luò)層還是應(yīng)用層?如果應(yīng)用需要盡可能強大的安全保護,那么就在應(yīng)用層保護它。但不論哪層的安全機制,都離不開密鑰[5]。
密鑰一般分為主密鑰(兩個設(shè)備之間長期安全性的基礎(chǔ),僅由APS使用)、網(wǎng)絡(luò)密鑰(用在廣播通信,每個節(jié)點都要有網(wǎng)絡(luò)密鑰才能與其他節(jié)點安全通信。由NWK和Zig Bee的APL應(yīng)用該密鑰)、鏈接密鑰(用在單播通信)。
參照上圖,AES-CCM*第一步是創(chuàng)建密鑰,AES-CCM*是一個迭代的、對稱密鑰分組的密碼,并且用 128 位(16 字節(jié))分組加密和解密數(shù)據(jù)。同樣在Z-Stack中采用的也是128位的加密,首先需要一個128位的Key,Key不同,加密出來的內(nèi)容也不同,所以,需要在Z-Stack的配置文件f8wConfig.cfg創(chuàng)建密鑰,通過DEFAULT_KEY="{0x01, 0x03, 0x05, 0x07, 0x09, 0x0B,0x0D, 0x0F, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A,0x0C, 0x0D}"這種方式來定義,用戶只需要在此修改DEFAULT_KEY的值就可以定義自己使用的密鑰[6]。
此外,在Z-Stack中已經(jīng)實現(xiàn)了AES-CCM*加密算法,我們只需要開啟這個服務(wù)就可以了,其開啟可以簡單地 兩步完成:
首先,將f8wConfig.cfg文件中設(shè)置為DSECURE=1,這句話的意思是DSECURE=1,這個變量在協(xié)議棧中作為if語句的條件使用,條件為真的語句中就是開啟加密算法的函數(shù)。所以要使用加密算法,第一步是要將這個參數(shù)設(shè)置為1。
其次,將ZGlobals.c中的uint8 zgPreConfigKeys = FLASE;
修改為:uint8 zgPreConfigKeys = TRUE;
如果這個值為真,那么默認(rèn)的密鑰必須在每個節(jié)點程序的配置文件中配置。如果這個值為假,那么默認(rèn)的密鑰只需配置到協(xié)調(diào)器設(shè)備當(dāng)中,并且通過協(xié)調(diào)器節(jié)點發(fā)送給其他的節(jié)點[7]。
至此,整個加密過程結(jié)束,加密算法開啟。 我們通過sniffer抓包分析加密前后的數(shù)據(jù)格式,抓包分析:加密前和加密后的數(shù)據(jù)對比圖(上面為加密前下面為加密后)。
實際應(yīng)用中Zig Bee的安全機制還有非常多的內(nèi)容需要研究和關(guān)注,例如其還可以通過不同的模式進行不同的加密處理、通過不同的層進行加密等等,本文拋磚引玉論述了Zig Bee網(wǎng)絡(luò)組網(wǎng)中的安全機制及一種AES加密算法實現(xiàn)方法,該算法具有明顯的優(yōu)勢,一方面能夠提高硬件的安全性,在數(shù)據(jù)大量涌入時,能夠高速運行,另外一方面還能夠保持軟件的使用靈活性,尤其在維護方面,具有重要的實用價值和意義。