代碼控制ZigBee網絡密鑰的生成


代碼控制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發貼討論。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM