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


2011-08-18 12:12:29




