代碼控制ZigBee網絡密鑰的生成
關鍵詞:ZigBee, 安全, networkkey,固定值,芯視頻, EmberZnet, 建立網絡, EmberZnet
在開發zigbee設備的早期,工程師是比較希望各個環境相對穩定,這樣便於調試,比如網絡密鑰,可以肯定每次建立網絡都會生成一個完全不同的密鑰,因此不利於調試。Zigbee 3.0的實現是每次建立網絡都會使用一個隨機生成的密鑰,這樣才比較安全,因此本例只是為了方便調試,在完成調試以后,請還原回更加安全的密鑰生成機制。
網絡密鑰是zigbee用來加密網絡中所有數據的密鑰,是保證Zigbee安全的重要信息,因此除了在調試階段,請不要使用固定密鑰。網絡密鑰是由Coordinator在建立網絡的時候生成,這個部分的代碼在silicon labs的協議棧(emberznet)中是可以修改的,本文介紹使用network creator 生成網絡時,如何用代碼控制密鑰。
這里以固定的網絡密鑰為例,這是一個16字節的密碼, 用十六進制表示
{ BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB BB }。對應的代碼在network-creator-security.c文件當中。
找到函數emberAfPluginNetworkCreatorSecurityStart()。
搜索到關鍵行注釋: // Generate a random network key.
這里的代碼改為
// Generate a random network key.
#if 0
status = emberAfGenerateRandomKey(&(state.networkKey));
#else
status = EMBER_SUCCESS;
for (int i = 0; i < EMBER_ENCRYPTION_KEY_SIZE; i++)
state.networkKey.contents[i] = 0xBB;
#endif
if (status != EMBER_SUCCESS) {
goto kickout;
}
其他代碼保護不變即可。
代碼生成以后,使用CLI指令建立網絡,再讀回密鑰可以看到生成的密鑰是否與預期一致,筆者驗證的結果截圖如下:

以上表明,我們的設置是完全正確的,如果還需要更完整的代碼,可以點擊鏈接下載。如果有任何問題,歡迎給我們留言,或者直接在newbitbbs.com發貼討論。
