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