TI论坛
直播中

江孟琢

7年用户 215经验值
私信 关注
[问答]

zstack加密通讯验证不正确或超时会有自动复位的功能但跟踪了终端的整个入网流程后并未发现应该如何触发这个验证机制

协议栈版本:Z-Stack Mesh 1.0.0
有关加密的编译选项:
-DSECURE=1
-DZG_SECURE_DYNAMIC=0
uint8 zgPreConfigKeys = TRUE;
拿一终端和一协调器进行实验,当双方的DEFAULT_KEY相同时,终端可成功入网并且双方可正常通讯,抓包可看到通讯过程与程序运行流程一致,内容也进行了加密处理;
当双方的DEFAULT_KEY不相同时,终端入网后并未因验证失败而进行自动复位,抓包时发现终端成功入网且分配到网络地址,也能向协调器发送数据并得到ACK应答,但协调器却不会向终端发送回应的数据包(自己设定的回应数据包),估计原因为双方DEFAULT_KEY不同,协调器只在MAC层接收到了数据包然后进行了过滤;
打断点调试终端,发现终端在入网成功后,并未进入“devState = DEV_END_DEVICE_UNAUTH;”的状态,原因为函数ZDApp_ProcessNetworkJoin( void )中的条件判断语句if ( ZG_SECURE_ENABLED && ( ZDApp_RestoreNwkKey() == false ) )中的ZDApp_RestoreNwkKey()结果为true,因此跳过了devState = DEV_END_DEVICE_UNAUTH;和ZDApp_ResettimerStart( MAX_DEVICE_UNAUTH_TIMEOUT );语句,导致在双方DEFAULT_KEY不相同时终端也没办法进行自动复位;
按照我对加密通讯的理解,在使能了加密通讯后,终端成功入网后应该会有个验证,验证不正确或超时会有自动复位的功能,但跟踪了终端的整个入网流程后并未发现应该如何触发这个验证机制,还是我的编译选项有误或是不足?希望能得到大家的帮助,谢谢!

回帖(12)

江孟琢

2018-8-17 06:31:54
本问题比较急,希望能尽快得到大家的帮助,能给出一点思路和建议,谢谢!
举报

李果

2018-8-17 06:39:14
麻烦把整个过程的抓包文件保存下来,用附件上传下。
正常情况下,如果配置了 zgPreConfigKeys=TRUE的话,两边Key不一样的话,是无法通信的,很奇怪你说的“也能向协调器发送数据并得到ACK应答”
如果zgPreConfigKeys=FALSE的话,两边Key不一样,也没关系,可以正常工作,
举报

江孟琢

2018-8-17 06:49:53
引用: wenlonghbo 发表于 2018-8-17 06:39
麻烦把整个过程的抓包文件保存下来,用附件上传下。
正常情况下,如果配置了 zgPreConfigKeys=TRUE的话,两边Key不一样的话,是无法通信的,很奇怪你说的“也能向协调器发送数据并得到ACK应答”
如果zgPreConfigKeys=FALSE的话,两边Key不一样,也没关系,可以正常工作, ...

为做对比,先上传双方密钥相同时的通讯过程:
RX37: 终端搜索网络
RX39: 终端发出入网请求
RX43: 终端请求分配网络地址
RX45: 网络地址分配成功
RX47: 终端将自己的地址发给父设备让其帮自己进行广播
RX49: 协调器帮终端广播地址
RX50: 终端发送心跳包给父设备(自定义的)
RX52: 终端轮询是否有数据要接收
RX54: 协调器发送回应包给终端(自定义的)
RX58: 终端上传采集数据给协调器
RX90: 下一个通讯环节的开始(重复RX50至RX58的流程)
举报

江孟琢

2018-8-17 07:08:43
引用: wenlonghbo 发表于 2018-8-17 06:39
麻烦把整个过程的抓包文件保存下来,用附件上传下。
正常情况下,如果配置了 zgPreConfigKeys=TRUE的话,两边Key不一样的话,是无法通信的,很奇怪你说的“也能向协调器发送数据并得到ACK应答”
如果zgPreConfigKeys=FALSE的话,两边Key不一样,也没关系,可以正常工作, ...

下面是双方密钥不同时的通讯过程,已再次确认过编译选项如上所示
RX33: 终端搜索网络
RX37: 终端发送入网请求
RX39: 终端请求分配网络地址
RX41: 终端网络地址分配成功
RX43: 终端请求父设备帮其广播自己的地址
RX45: 终端发送心跳包给父设备
RX47,49,54: 终端轮询是否有数据包需要接收(自己设定终端发送心跳包后以200ms的时间间隔进行轮询)
RX51: 不知道是什么数据包,但一定不是回应包,否则在RX47后终端就会收到回应包,而不会出现RX49和RX54的轮询(自己设定终端收到回应包后就停止轮询,没停止轮询说明没收到回应包)
RX56: 终端上传所采集到的数据发给协调器(自己设定该事件在终端发送心跳包后的800ms时被触发并停止轮询,因此前面所出现的三次轮询符合代码运行流程)
RX90: 终端发送心跳包给父设备(重复RX45至RX56的流程,但再未出现过RX51这种数据包了)
举报

更多回帖

发帖
×
20
完善资料,
赚取积分