淺談Zigbee協議棧的加密算法
前面我們介紹了有關于Zigbee協議棧的一些原理和結構。不知道大家是否已經掌握了。那么這里我們則重點說明一下Zigbee協議棧中的加密算法。Z-stack對Zigbee2006提供了全面的支持,功能之強大,性能穩定、安全性高,說到安全性是我們今天的主題.CC2430硬件支持128bit的AES加密算法,在Zigbee協議棧中為了避開相同設備的干擾,和防止被其他設備監聽,我們就采用這個技術將數據加密來提高數據的安全性.
AES(The Advanced Encryption Standard)是美國國家標準與技術研究所用于加密電子數據的規范.它被預期能成為人們公認的加密包括金融、電信和政府數字信息的方法.AES 是一個新的可以用于保護電子數據的加密算法.明確地說,AES 是一個迭代的、對稱密鑰分組的密碼,它可以使用128、192 和 256 位密鑰,并且用 128 位(16字節)分組加密和***數據.與公共密鑰密碼使用密鑰對不同,對稱密鑰密碼使用相同的密鑰加密和***數據.通過分組密碼返回的加密數據 的位數與輸入數據相同.迭代加密使用一個循環結構,在該循環中重復置換(permutations)和替換(substitutions)輸入數據.
在Z-stack中采用的是128bit的加密,首先需要一個128bit的key,這個KEY不同,加密出來的內容也不同在Z-stack中是通過DEFAULT_KEY="{0x01, 0x03, 0x05, 0x07, 0x09, 0x0B, 0x0D, 0x 0F, 0x00, 0x02, 0x04, 0x06, 0x08, 0x0A, 0x0C, 0x0D}"這種方式來定義的.
在Z-stack中已經在Zigbee協議棧中實現了這個加密算法,如果需要使用直接開啟這個服務就可以了,下面我們主要將Z-stack的加密算法的開啟.
Z-stack1.4.3加密算法的功能開啟方法:
1.將f8wConfig.cfg文件中設置為-DSECURE=1,這句話的意思是SECURE=1,這個變量在Zigbee協議棧中作為if語句的條件使用,條件為真的語句中就是開啟加密算法的函數.所以要使用***步是要將這個參數設置為1.
2.將ZGlobals.c中的uint8 zgPreConfigKeys = FLASE;修改為uint8 zgPreConfigKeys = TRUE.
3.準備一個key,這個可以在函數nwk_global.c中修改:
- CONST byte defaultKey[SEC_KEY_LEN] =
- {
- #if defined ( APP_TP ) || defined ( APP_TP2 )
- // Key for ZigBee Conformance Testing
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x89, 0x67, 0x45, 0x23, 0x01, 0xEF, 0xCD, 0xAB
- #else
- // Key for In-House Testing
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F
- #endif
- };
在Zigbee協議棧中,如果使用了加密算法后,網絡中所有的設備都需要開啟這個算法,而且各個設備中的key必須相同.否則后果是很嚴重的,這會導致你的網絡不能正常通訊,因為沒有加密的數據或者相同key加密,這些數據網絡是不認識的,根本就不會傳到網絡層.
加密算法開啟以后,如果你需要修改代碼,就必須改變你的key,或者是擦除一次你的flash,否則會出現不可逾期的錯誤,而且沒有規律.通常的做法是擦除flash一次,這樣可以保證和整個網絡的key相同.
采用這個加密算法的好處是:如果一個網絡在做實驗,你再隨便加入一個協調器或者路由或者終端對現有的網絡狀態不會造成影響,這樣就可以進行多個并行實驗了.























