Zigbee Install code的使用和CRC的计算

news2024/12/26 13:42:31

Zigbee Install code的使用和CRC的计算

  • 前言
  • 什么是Install codes?
  • Zigbee install codes的格式
  • CRC算法信息:
  • python演示:
  • Install Code的使用:
  • 烧录Install codes到Silicon labs EFR32设备中去
    • 安装代码文件格式
    • 烧录Install codes:
    • 核查烧录的Install codes:
    • 读取预烧录的EUI-64:

前言

在集中式网络安全模式中,信任中心(Trust Center)可以要求每个新设备使用唯一的Install Code来加入集中式安全网络。Install Code 必须与以带外方式与预先输入信任中心(Trust Center)的秘钥匹配。
例如,Install Code 可以用数字或二维码的形式打印在加入设备的包装中;用户或安装者可以将密码键入或扫描到连接信任中心(Trust Center) 的智能手机或平板电脑中。所有zigbee 设备都必须包含唯一的Install Code。

什么是Install codes?

Zigbee Install codes,有时也称为“Installtion code”,Install codes是在设备生产制造时烧录到设备上的随机值,用于加密从Zigbee网络的信任中心(Trust Center)到待入网设备的初始网络密钥传输。 Zigbee Install codes提供一种让设备以合理安全的方式加入Zigbee网络的方法。Zigbee 3.0规定,所有能够加入网络的Zigbee设备必须支持在入网时使用Install codes,这是 Zigbee 3.0 合规性的要求。

Install codes通常印在设备的外壳或包装上,可以是十六进制字符串,也可以是条形码或二维码等编码方式。在入网过程中,Install codes通常和设备的64位IEEE MAC地址(EUI64)一起并通过带外机制提供给信任中心(Trust Center)或其关联的网络/云界面。

Install codes由16位CRC保护的随机128位数字。待入网设备和信任中心(Trust Center)根据其共同的Install Code使用Matyas-Meyer-Oseas(MMO)哈希算法生成唯一的128位Trust Center Link Key。

Zigbee install codes的格式

Zigbee 3.0网络要求Install Code 由一个128位的数字和一个16位的CRC(使用CCITT CRC标准多项式:𝑥16+ 𝑥12+𝑥5+1)组成。Zigbee 3.0特别要求使用16字节的十六进制安装代码,并附加2字节的CRC。 因此,从用户的角度来看,Install Code的长度为 18字节(在 ZSE 设备中可能有 8、10 或 14 字节的变体)。打印或显示install code时,Install code表示为多组4个十六进制数字。CRC16应以小端字节顺序交付给用户。 对用户而言,CRC是install code的一部分,用户不需要知道CRC的存,也不需要知道CRC为什么存在。

提示:Zigbee 3.0特别要求使用16字节的Install codes,Zigbee smart energy允许使用6,8,12,16字节的Install codes。

CRC算法信息:

Zigbee install code的CRC用于在install code通过带外机制传输到应用程序时验证install code的完整性。 CRC 被设计为一种验证install code是否有效且在传输过程中未被错误更改的方法。Zigbee install code的CRC计算是基于CRC 16-CCITT算法并使用以下参数计算:

Length: 16
Polynomial: 𝑥16+ 𝑥12+𝑥5+1 (0x1021)
Initialization method: Direct
Initialization value: 0xFFFF
Final XOR value: 0xFFFF
Reflected In: True
Reflected Out: True

python演示:

Install code:"83FE D340 7A93 9723 A5C6 39B2 6916 D505 C3B5"

使用数值0x83, 0xFE, 0xD3, 0x40, 0x7A, 0x93, 0x97, 0x23, 0xA5, 0xC6, 0x39, 1780 0xB2, 0x69, 0x16, 0xD5, 0x05来计算CRC16的值,CRC16的结果为0xB5C3(Install code和CRC16使用小端模式显示).

#!/usr/bin/python3

def print_bytes_hex(data):
    lin = ['%02X' % i for i in data]
    print(" ".join(lin))
    
def caculate_install_code_CRC(install_code):
    #CRC-16-CITT poly, the CRC sheme used by ymodem protocol
    poly = 0x8408
    
    crc16 = 0xFFFF
    data = 0xFF
    
    if(len(install_code)) != 32:
        crc16 = ~crc16
        print()
        return crc16

    install_code_byte = bytearray.fromhex(install_code)
    install_code_list = list(install_code_byte)
    print_bytes_hex(install_code_list)

    index = 0
    for x in install_code_list:
        #print("%02x" % x)
        data = 0xFF & install_code_list[index]
        #print(hex(data))
        index = index + 1
        #print("orignal data = %x" %data)
        for i in range(8):
            #print("data value = %x caculate crc16 = %x" %(data,crc16))
            temp = (crc16 & 0x0001) ^ (data & 0x0001) 
            if temp == 0:
                crc16 >>=1
            else:
                crc16 = (crc16 >> 1) ^ poly
            #print(hex(crc16))
            crc16 = crc16 & 0xFFFF
            #print("crc resualt = %x" %crc16)
            data >>= 1
        
    crc16 = ~crc16
    crc16 = crc16 & 0xFFFF
    return crc16

主函数

if __name__ == '__main__':
    install_code = '83FED3407A939723A5C639B26916D505'
    installcodecrc = caculate_install_code_CRC(install_code)
    print("crc resualt = %X" %installcodecrc)

Install Code的使用:

如图所示,在工厂生产过程中,会为每个节点创建一个随机Install codes。 Install codes以制造商特定的方式(标签等)提供,并在安装(设备入网)期间引用。 Install codes应该具有与密钥空间相同的随机性属性。Install codes是随机产生的,但可能并不是唯一的。 知道一组Install codes不应该产生任何另一个Install codes的知识,每个Install codes应该是等概率的。
在这里插入图片描述
如图所示,在安装过程(设备入网)中,Trust Center link key是从Install codes产生的,并通过带外通信通道发送到信任中心。 信任中心使用此密钥作为Trust Center link key,随后用于配置关联节点的网络密钥(Network key)。

烧录Install codes到Silicon labs EFR32设备中去

安装代码文件格式

烧录Install codes到Silicon labs EFR32设备中去,需要先创建一个包含Install codes(不包含CRC)的简单文本文件。例如:文件名为 install-code-file.txt。 该文件通过Simplicity Commander烧录到EFR32中。install-code-file.txt文件内容如下:

Install Code: 83FED3407A939723A5C639B26916D505

烧录Install codes:

commander flash --tokengroup znet --tokenfile install-code-file.txt

核查烧录的Install codes:

commander tokendump --tokengroup znet

读取预烧录的EUI-64:

commander tokendump --tokengroup znet --token MFG_EMBER_EUI_64

打包python脚本

pip install pyinstaller
pyinstaller -F -c crc_caculatee.py

CSDN博客仅作为本人工作学习之余的笔记使用,无任何商业目的,如果侵犯了你的隐私或权益,请随时联系作者,本人将及时删除相关内容

参考资料:
[1]: https://csa-iot.org/
[2]: https://www.silabs.com/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/594984.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习笔记】【万字长文】linux三剑客学习笔记

前言 ​ 上班以后用到的服务器大多数是centos的,很多命令会用一部分但稍微复杂一点的只能问度娘了。 ​ 时间长了,还是没积攒下什么本事,每次都需要百度查找。 ​ 终于有时间整理一篇关于linux三剑客的笔记,作为记录方便以后查…

项目经验分享:LVGL编程举例

本文介绍如何在成功移植LVGL的基础之上,编写自己的LVGL GUI程序。 文章目录 1. LVGL组件简介与LVGL仿真1.1 LVGL组件1.2 LVGL仿真 2. 代码结构3. 编程目标4. 编程前的准备5. LVGL编程基础5.1 简单示例代码5.2 设置组件位置5.3 图片的显示5.4 组件的事件响应5.5 设置…

【P46】JMeter 响应断言(Response Assertion)

文章目录 一、响应断言(Response Assertion) 参数说明二、准备工作三、测试计划设计3.1、包括3.2、匹配3.3、相等3.4、字符串3.5、字符串3.6、或者 一、响应断言(Response Assertion) 参数说明 可以对 Jmeter 取样器的响应消息进…

0x10 会话服务 DiagnosticSessionControl

0x10 会话服务 相当是一种分类,通过控制会话模式,使用不同的服务。应始终只有一个诊断会话在服务器中处于活动状态。 服务器应在启动时始终启动默认的诊断会话。 如果没有启动其他诊断会话,则只要服务器通电,默认诊断会话就应该运…

Hudi(五)集成Flink(3)

12、离线compaction MOR表的compaction默认是自动打开的,策略是5个commits执行一次压缩。因为压缩操作比较耗费内存,和写流程放在同一个pipeline,在数据量比较大的时候(10w/sqps),容易干扰写流程&#xff0…

LLM:LoRA: Low-Rank Adaptation of Large Language Models

随着模型规模的不断扩大,微调模型的所有参数(所谓full fine-tuning)的可行性变得越来越低。以GPT-3的175B参数为例,每增加一个新领域就需要完整微调一个新模型,代价和成本很高。 为解决微调大规模语言模型到不同领域和…

西南交通大学智能监测 培训课程练习3

2023.05.31培训 task1:MybatisPlus的使用 task2:SpringMVC常用接口开发 task3:JSON、接口测试 task4:SpringMVC拦截器与过滤器 目录 一、MybatisPlus 1.1DO类 1.2Mapper接口 1.3编写测试类测试 1.4Mybatis和MybatisPlus 二、…

Verilog学习笔记(串口RS232,基于野火教程)

目录 一、串口简介 二、设计与实现 串口数据回环顶层模块设计 串口接收模块uart_rx 串口发送模块uart_tx 顶层模块rs32_top 三、上板验证 一、串口简介 其中SPI和I2C为同步通信接口,双方时钟频率相同。而UART属于异步通信接口,没有统一时钟&…

旅游网项目(SpringBoot2.7.1 + SpringMVC + Mybatis-Plus3.5.0)

技术选型 JAVA版本:JDK17 数据库:Mysql5.7Navicat 后端框架:SpringBoot3.0.6 SpringMVC Mybatis-Plus3.5.0 权限控制:SpringSecurity 前端框架:AdminLTE2 模板引擎:Thymeleaf 工具类:发…

WIN10系统解决IDEA动不动就卡顿一下

1、前言 不知为啥,最近idea一直在卡顿,输入几个代码都会卡两秒,鼠标滚动文件卡两秒,点击打开文件卡两秒,就算是点击上方的工具栏,它也要等两秒才会出来菜单! 卡顿的时候整个idea直接无响应&a…

Java性能权威指南-总结3

Java性能权威指南-总结3 性能测试方法原则4:尽早频繁测试小结 Java性能调优工具箱操作系统的工具和分析CPU使用率 性能测试方法 原则4:尽早频繁测试 这是最后的原则。性能测试应该作为开发周期不可或缺的一部分。理想情况下,在代码提交到中心源代码仓库前&#xf…

【数据分享】1929-2022年全球站点的逐月最高气温(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据,气象指标包括气温、风速、降水、湿度等指标,其中又以气温指标最为常用!说到气温数据,最详细的气温数据是具体到气象监测站点的气温数据! 之前我们分享过1929-2022年全球气象站…

Win10搭建Nacos2.2.3集群版

Nacos是Alibaba提供的服务注册发现的管理平台,其优异的性能越来越受到广大开发者的喜爱,在构建分布式微服务项目中通常会首选Nacos作为注册/配置中心,在实际开发中为了提升服务的可用性和稳定性,通常都会搭建集群版,有…

《强风吹拂》呐!你喜欢跑步吗?

《强风吹拂》呐!你喜欢跑步吗? 三浦紫苑,1976生于东京。主要作品有《多田便利屋》《强风吹拂》《哪啊哪啊~神去村》《编舟记》等 林佩瑾、李建铨、杨正敏 译 文章目录 《强风吹拂》呐!你喜欢跑步吗?[toc]动漫摘录箱根驿…

Go Web下gin框架使用(一)

〇、前言 在前面,已经在这篇文章中详细地讨论了 gin 框架下的模板渲染问题,这篇文章主要对 gin 框架的使用进行讨论。 一、不同的路由 以下可以选择不同的路由进行渲染: r : gin.Default()type usr struct {Name string json:"name&…

八、go语言键盘输入和打印输出

键盘输入和打印输出 一、打印输出 1.1 fmt包 fmt包实现了类似C语言printf和scanf的格式化I/O。格式化verb(‘verb’)源自C语言但更简单。 详见官网fmt的API:https://golang.google.cn/pkg/fmt/ 1.2 导入包 import "fmt"1.3 常…

MyBatis——MyBatis项目搭建

但凡是框架,使用都是分三步走 1.导入jar文件,用maven导入 2.处理配置文件 3.开发业务代码 1.创建maven项目导入相关依赖 在pom文件中导入MyBatis相关依赖jar文件 安装lombok 在File->Settings Pugins 中安装lombok 要想启动lombok的话还需要在B…

GPT带你飞:Chat GPT吊打面试官,实时获取答案,分享调用OpenAI API key+完整源码脚本哦!

目录 福利:文末纯分享中文版CHAT GPT镜像,不存在魔法,纯分享免费使用 故事发生了 火爆GitHub 所以大家注意 网友看了之后调侃到,为了防止线上面试作弊,以后只好把面试都改成线下了。 如何安装 既然是调用GPT的AP…

nodejs基于vue的汽车订票客运站售票网站

使用Mysql创建数据表保存本系统产生的数据。系统可以提供信息显示和相应服务,其管理员负责审核会员充值,审核客户购票信息以及会员购票信息,管理客运班次与留言板,管理会员等级。客户查看客运班次,购买并支付车票&…