代码控制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发贴讨论。

原文地址:https://www.cnblogs.com/newbit/p/zigbee_nwkkey_fixed.html