使用ti的协议栈Z-Stack Home 1.2.0,两个节点,一个协调器,另一个是终端,SECURE=1,zgPreConfigKeys = TRUE,把defaultKey改成不一样。但是发现终端还是可以加入协调器形成的网络,这是通过抓包软件显示发现确实是加入了网络,如图,
但是终端向协调器发送数据,协调器接收不到,猜测是defaultKey不同,数据解析不出来。我感到迷惑的地方是defaultKey不同,节点也可以加入网络,按照《Zigbee Wireless Networking》上说法是不可以加入网络的,如图,
zigbee网络会在Authentication Procedure一步上把defaultKey不同的节点抛弃。
我的理解和实践不一致,深感疑惑,请高人解答。
VV:
你好,
能不能把你的抓包文件用附件上传下,截图的话我这边不好解析。
节点入网成功的标志,不是父设备发Association Response给他子设备吗,而是节点发Device Announce 出来,有看到节点发Device Announce吗?
谢谢!
shuming ye:
回复 VV:
非常感谢你的提醒,附件是抓包图,据我分析,应该已经入网,因为子节点通过父节点广播了自己的信息,这是ti最新的协议栈了,就是Z-Stack Home 1.2.0。
但是我我使用旧一点的协议栈ZStack-CC2530-2.3.0-1.4.0,同样的设置居然产生的结果不一样,旧的协议栈测试结果和我的理解一致:节点想通过父节点广播信息,但是父节点的广播并没有发出。
真的纠结了!
VV:
回复 shuming ye:
你好,
整个过程应该是没有问题的,节点也确实入网成功了。
但是有一点需要你确认下,你的NWK Key应该不是用的PreConfig Key, 也就是zgPreConfigKeys = FALSE。
因为从抓包过程来看,节点在获得父设备分配的短地址以后,父设备把NWK KEY发送给了子设备,01:03:05……..
所以即便你在节点处的DEFALUT KEY设置不一样也没关系,因为子设备只会用父设备传过来的KEY。
另外如果zgPreConfigKeys = TRUE,那么节点在入网过程中,父设备也会传输Transport Key给子设备,但是这个消息的Key都是00:00:00.。。
原因是双方的Key都是Preconfig的,不需要再重新传输了。
shuming ye:
回复 VV:
我又确认了一下,确实是设置了zgPreConfigKeys = TRUE,打断查看zgPreConfigKeys的值确实生效,是0x01。但是父设备怎么会传key过来呢?纠结啊!我尝试过使用ha1.2原封不动的代码,仅仅作了最简单的可上电组网的改动,还有把zgPreConfigKeys = TRUE,结果还是一样啊。
guozi zhou52:
回复 shuming ye:
我这边目前的理解,nwkKey的分配方式两种:
1.入网时由TC分配
2.设备上电前进行预配置(这种安全性高一些)
二者选其一;
如果选用第二种 zgPreConfigKey = TRUE时,需要禁掉TC_LINKKEY_JOIN
shuming ye:
回复 guozi zhou52:
禁掉TC_LINKKEY_JOIN确实是可以的,就不知道ti的工程师是不是这样设置的,只是忘记了在文档上说明一下,如果不是,那会不会影响了某些功能,这些都不知道啊,暂时也只能这样了,这问题纠缠太久了
100 100:
回复 shuming ye:
Hi Ye,你好,看了你们的帖子受益匪浅。我也正在学习zstack的安全设置,
不过我下载了你的psd以后用sniffer看到那个传递key的帧
。。其他情况都对 就是帧内的内容 我这里看到 的似乎是加密过的 ,不是VV说的明文密钥,你那里是这样显示的么?
(我自己做过实验 ,如果协调器没有perconfigkey =ture 那么帧里面会是明文密钥)
我的sniffer显示文件用的格式是CC2530 no File Format.
————————
另外 我在Zstack的资料(不是Zstack home 还没去看过那个)Application-Level Tuning of Z-Stack.pdf 和 Smart Energy Sample Application User's Guide.pdf 以及 Z-Stack Smart Energy Developer's Guide.pdf 里面有提及 TCLink Key的事情,不知道是不是你需要的
应该就是通过链接密钥 通过交换 生产网络密钥,源码里面似乎安全模式4和5以后会使用TCLink
user4024521:
回复 VV:
VV你好!我有个问题,希望能得到你的帮助,谢谢!我想通过加密,实现只有相同秘钥的能入网,我的设置方法:SECURE=1,zgPreConfigKeys = TRUE,没有加TC_LINKKEY_JOIN。我的测试方法是,Coordinator设置了加密,而设备分两种情况:1、设置了加密,但是秘钥不同,结果不能入网。2、没有设置加密,结果还是能入网,但是接收不到任何数据。
那么这种情况我应该如何设置,实现的效果就是,只有秘钥相同的才能入网,而没有设置加密功能的或者秘钥不同的,都不能入网。
yongjie fu1:
回复 VV:
Hi VV:
我使用Untitled打开这个抓包文件也看不见父设备发送的NWK KEY(第15行),是加密的,
前面的小锁头有一个斜杠,应该是没解密。并且Packet Information 列是Command不是你的Transport Key.
你是怎么设置的能将这行解密呢?
VV:
回复 user4024521:
@Mark Zhang
其实你的第2种情况也没有入网成功,你可以通过抓包看下具体的过程,就比较清楚了。
一般入网以入网的设备发送Device Announce为准。