代码控制ZigBee网络密钥的生成(慎用)
zigbee吧
全部回复
仅看楼主
level 11
baojianliu 楼主
在开发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指令建立网络,再读回密钥可以看到生成的密钥是否与预期一致,笔者验证的结果截图如下:
以上表明,我们的设置是完全
正确的
,如果还需要更完整的代码,可以点击链接下载。
2019年10月25日 08点10分 1
level 7
[乖]
2019年11月06日 15点11分 3
level 1
请问楼主链接在哪[呵呵][呵呵][呵呵]
2020年03月07日 13点03分 4
1