深入理解Zigbee与无线Mesh网络技术

本文详细解析Zigbee无线通信协议的技术架构、安全机制与网络组建过程,涵盖设备类型、加密方式、数据包嗅探及实际组网案例,为物联网安全研究提供实用参考。

理解Zigbee与无线Mesh网络

前言

近期我购置了若干家庭自动化设备,旨在研究Zigbee技术并深入理解这种流行无线技术如何与物联网(IoT)互联,同时评估该平台的实际安全性。虽然我已对基于蓝牙低功耗(BLE)Mesh拓扑的家庭自动化有所了解,但物联网设备已取得重大进展,包括但不限于:连接极低功耗设备(多为电池供电且可持续工作数年)、低数据速率(20-250Kbits/秒)提供更可靠通信,以及随需求增长而扩展的自组网和自愈网络。

本文概述了我对Zigbee协议及其Mesh拓扑在大小规模自动化应用中的研究成果,希望他人能从中受益。

实用硬件

研究Zigbee协议的初步准备包括熟悉现有用于分析和交互Zigbee网络的硬件。很快我发现RZRaven USB嗅探器是热门选择,预装RiverLoop Security的Killerbee框架(https://github.com/riverloopsec/killerbee),售价约100美元。但经 exhaustive 搜索,RZRaven已停产且无处可寻。

通过社区交流,我了解到另一款名为ApiMote的适配器,同样预装Killerbee框架,可通过Attify商店(https://www.attify-store.com/products/apimote-for-zigbee-sniffing-and-transmission)以149美元购买。此收发器适配器还支持数据包注入!

其他考虑的Zigbee嗅探器包括Nordic的nRF52840(https://www.mouser.com/new/nordic-semiconductor/nordic-nrf52840-usb-dongle)和德州仪器CC2531(http://www.ti.com/tool/PACKET-SNIFFER)。TI CC2531选项还配备强大的GUI软件,用于解析和显示捕获的数据包。

我最终选择了Api-Mote/Killerbee适配器以及价格极低的德州仪器CC2531 USB适配器(成本低于10美元)。

为何选择Zigbee?

有人可能会问:“为何选择Zigbee?我们已有Wi-Fi和蓝牙短距离通信标准,提供更远距离和更高数据速率。”虽然Wi-Fi的远距离和高数据速率支持优质视频流(蓝牙则程度较低地支持音频流),但(Zigbee)控制和传感器网络的要求远不那么苛刻。技术上讲,这正是Zigbee更优选择的原因,因为控制和传感器网络节点通常彼此相距仅几米,距离 hardly 是问题。且节点间通信可使用极小的数据包大小,从而实现很低的数据速率(20-250 kbps)。低数据速率和近距离节点带来更可靠的通信(更少重试等),并良好适配低功耗电池供电终端设备,随着网络规模扩大显著降低成本。

背景信息

Zigbee是一种开放标准无线技术,旨在促进低成本、低功耗无线物联网(IoT)网络。

具体而言,Zigbee是一种低成本、低功耗、自组网、自愈的无线Mesh网络标准解决方案,专注于提供无线控制和监控应用,强调支持电池供电、低数据速率设备。此协议通常用于家庭自动化(HA)和商业楼宇自动化、工业控制系统及医疗/保健行业。

Zigbee集成电路(IC)包含微控制器和无线电,工作在未授权的ISM(工业、科学和医疗)频段:全球多数地区为2.4GHz。少数设备使用 sub-GHz(中国745MHz、欧洲878MHz、美国和澳大利亚915MHz),但这通常是例外。Zigbee在2.4GHz ISM频段使用16个信道(11-26),每个宽2 MHz,信道间隔5 MHz。应注意,当Zigbee网络首次组建时,协调器(集线器)将扫描可用信道并选择最佳信道操作(最少RF干扰),且仅使用该信道(无信道跳变)。

Zigbee是一种基于IEEE 802.15.4的无线网络标准,基本用于传感器和控制系统间的双向通信。Zigbee是短距离无线通信标准,如蓝牙和Wi-Fi,覆盖范围10至100米。

通过创建可相互通信的设备网络(Mesh网络),10至100米范围可显著扩展,使其在商业照明和工业控制自动化应用中 extremely 有用。新设备(节点)可轻松加入网络(理论最大限制65,000节点)。通信流量重路由(由于节点故障)为网络提供自愈形式。

Zigbee终端设备(灯、插头、传感器、开关、恒温器等)功耗极低, tiny 电池可续航数年。且Zigbee基于开放标准,确保消费者和开发者设备互操作。

简史

Zigbee已存在很长时间,最初构思于1990年代。IEEE 802.15.4-2003规范于2004年批准,次年提供,称为Zigbee 2004规范。2006年,升级规范作为Zigbee 2006规范引入,用Zigbee集群库(ZCL)替换2004栈的“键值”对结构。此库由标准化命令和属性组成,组织在群组(集群)下,如智能能源、家庭自动化、Zigbee光链接等。

2007年引入Zigbee Pro,始终保持与Zigbee传统网络向后兼容。Zigbee Pro设备可加入传统网络,传统设备可加入Zigbee Pro网络。但路由选项不同,导致Zigbee Pro设备在传统网络上必须成为非路由Zigbee终端设备(ZED),传统Zigbee设备在Zigbee Pro网络上必须成为ZED。

据德国计算机电子杂志Heise Online,Zigbee家庭自动化1.2(2013)使用已知且不可更改的回退密钥进行加密协商。这使得许多传统设备的加密高度脆弱。有趣的是:当时,ZigBee联盟定义的知名默认全局信任中心链接密钥,默认值为5A 69 67 42 65 65 41 6C 6C 69 61 6E 63 65 30 39(ZigBeeAlliance09),如果应用在加入时未指定其他链接密钥,则设备使用或支持此密钥。注意:Zigbee 3.0(及以后)如果设备尝试使用知名‘ZigBeeAlliance09’信任中心链接密钥认证,则静默忽略加入网络请求。

Zigbee开发平台

EmberZNet是Silicon Labs的Zigbee实现。它包括核心Zigbee栈、Zigbee集群库支持和应用框架。借助Simplicity Studio中的AppBuilder,开发者可轻松创建可在Silicon Labs开发套件之一上运行的Zigbee应用。

Z-Stack是SimpleLink™ CC13x2 / CC26x2软件开发工具包的组件。此组件支持开发基于Zigbee® 3.0规范的产品。Z-Stack是TI在CC13x2和CC26x2平台上开发认证Zigbee 3.0解决方案的完整解决方案。

Zigbee联盟

Zigbee联盟董事会由来自亚马逊、苹果、康卡斯特、谷歌、宜家、克罗格公司、LEEDARSON、Legrand、路创电子、MMB Networks、NXP半导体、Resideo、施耐德电气、Signify(原飞利浦照明)、Silicon Labs、SmartThings、Somfy、德州仪器和Wulian的高管组成。

Zigbee联盟成立于2002年,是由500多家公司组成的团体,维护和发布Zigbee标准。该组织发布应用配置文件,允许多个OEM供应商创建互操作产品。IEEE 802.15.4与Zigbee之间的关系类似于IEEE 802.11与Wi-Fi联盟之间的关系。

截至2021年5月11日,Zigbee联盟已更名为连接标准联盟(CSA)。

技术信息

Zigbee设备类型:

  • Zigbee协调器(ZC)
  • Zigbee路由器(ZR)
  • Zigbee终端设备(ZED)

Zigbee网络恰好有一个Zigbee协调器(ZC),负责组建和协调网络。组建包括选择PAN ID(个人区域网络标识)以识别网络,并确定操作的物理无线电信道。协调器还负责配置和认证加入网络的路由器和终端设备。协调器是信任中心,存储所有关于Zigbee网络的关键信息,包括加密密钥和链接密钥。

Zigbee路由器(ZR)代表中间节点,协助网络中节点间的数据中继。它们在构建Zigbee网络(交换数据包)中起 instrumentally 作用。Zigbee路由器通过增加网络范围(在整个Mesh网络中中继数据包)、增加交换数据包的可靠性,并提供额外节点加入网络的手段(在协调器帮助下)增强Mesh网络。Zigbee路由器的好例子可能是智能插头(墙插供电)。此设备有 endless 主电源供应,因此始终开启。此智能插头是全功能设备(FFD),使其 ideal 用于路由流量,并 strong 候选成为 reduced functioning(RFD)终端设备的父设备。

Zigbee终端设备(ZED)是逻辑上连接到Zigbee路由器(ZR)的节点,通常是灯、插头、传感器、开关、恒温器等设备,且仅与它们相关的Zigbee路由器(父设备)通信。ZED通常是电池供电设备,大部分时间睡眠。它们不能直接与其他Zigbee终端设备(ZED)通信。在此意义上,ZED被视为 reduced function devices(RFD)。

ZED有较低功耗要求(由于主动睡眠模式),电池可实现长寿命。相比之下,ZR和ZC(始终唤醒)有高功耗要求,因此不能电池供电。

ZED大部分时间通常关闭(睡眠模式),因此无法实时接收发送给它们的任何流量。定期地,它们唤醒并通过查询它们逻辑连接到的(父)路由器(ZR)检查消息。注意:路由器缓冲 intended for ZED(子设备)的数据,并仅在ZED唤醒时轮询发送该数据。唤醒时间由应用开发者定义,NOT Zigbee规范。

ZED唤醒时可立即与它们的(父)路由器通信,因为ZR始终唤醒。

Zigbee栈

物理层

物理层包括物理无线电和MAC层接口、无线电开/关控制、调制和解调、信道选择、链路质量估计和能量检测。Zigbee无线电与Wi-Fi共享2.4 GHz ISM频段,使用16个信道(11-26),每个宽2 MHz,信道间载波间隔5 MHz。

MAC层

在MAC头中,有一个2字节字段“帧控制”。位0-2指示帧类型。通常有四种帧类型:

  • 信标,用于扫描网络
  • 数据,用于从更高层传输数据
  • ACK,确认
  • MAC命令,MAC层控制命令,如MAC关联过程。

每个MAC帧末尾有两个字节CRC,用于验证数据包完整性。

网络层

网络层位于MAC层和应用支持子层(APS)之间,是网络管理发生的地方。网络层负责网络结构、路由和安全。

设备类型

IEEE-802.15.4定义两种网络设备类型:

  • FFD,全功能设备,能够执行IEEE 802.15.4标准中描述的所有职责,并可接受网络中任何角色。
  • RFD, reduced functional device(通常电池供电),能力有限。

注意:RFD设备的处理能力和内存大小通常小于FFD设备。

在Zigbee中,有三种物理设备类型:

  • 协调器(组建网络,有路由能力,主电源供电,必须始终保持唤醒,可以是父设备)
    • 每个网络只能有一个协调器。协调器节点ID始终为0000。
  • 路由器(不能组建网络,有路由能力,主电源供电,必须始终保持唤醒,可以是父设备)
  • 终端设备(不能组建网络,无路由能力,主电源或电池供电,必须有父设备)
    • 终端设备可以是非睡眠终端设备或睡眠终端设备。

网络地址

Zigbee使用PAN ID和扩展PAN ID识别网络。

PAN ID是16位标识符,PAN(个人区域网络)中所有节点将共享。PAN ID由协调器在组建网络时选择,用于区分可能碰巧在同一信道上的其他附近网络。

扩展PAN ID是回退网络标识符,PAN中所有节点已知。正常(短)PAN ID在“空中”数据包中传输,因为发送16位比64位更快。扩展PAN ID也对每个PAN唯一,由协调器在组建网络时选择。但扩展PAN ID seldom 空中传输,更多用作备份标准,以防PAN ID冲突发生。使用扩展PAN ID将允许协调器与所有节点通信,并建立新的PAN ID以移动并解决问题。扩展PAN ID仅响应“主动扫描”(新节点请求加入网络)和罕见PAN ID更新时空中发送。

设备(节点)地址

如网络地址,网络中每个节点有唯一短和长地址以区别于网络中其他节点。

长地址是64位IEEE分配MAC地址(EUI-64),是全局唯一ID(GUID),通常在制造阶段分配。作为全局唯一ID意味着世界上没有两个IEEE无线电会有相同GUID。如扩展网络地址情况,长(EUI-64)地址 seldom 空中发送,除加入(信标)请求和/或解决罕见节点地址冲突。

短地址(16位),由协调器在节点加入网络时分配,用于空中传输。称为节点ID,此地址对其家庭PAN网络唯一。

应用层

ZigBee应用层称为应用框架(AF),运行在应用支持层(APS)之上。AF支持许多应用,并在注册应用间处理传入数据。一些注册应用在Zigbee规范中定义,而其他是供应商实现。Zigbee定义应用为配置文件。ZigBee配置文件用0到240之间的整数标识,称为端点。有两种应用配置文件类型:公共和供应商特定。端点ID为零的特殊配置文件是ZDO(Zigbee设备对象),用于网络配置和设置。

Zigbee联盟已定义一些配置文件,如智能能源、家庭自动化、商业楼宇自动化、玩具等。

设备端点与逻辑端点

逻辑端点ID是8位值,范围0到255。

  • 端点0保留给Zigbee设备对象(ZDO),用于网络管理目的。
  • 端点1到239可由用户应用使用。
  • 端点240到254保留给特殊应用。
  • 端点255用于广播。

广播地址

应用在AF层注册端点标识符。当AF层处理传入消息时,它基于端点标识符传递给适当集群处理。如果数据包到达未注册端点标识符,则数据包静默丢弃。

端点是应用层中定义的逻辑扩展,可视为通过单个ZigBee无线电节点可访问的设备。例如,连接到无线电节点的灯开关可能是一个端点(物理),连接到同一节点的调光器可能是另一个端点(逻辑)而非全新应用(见图1)。另一例子中,连接到无线电节点的智能插座条可能是一个端点(物理),条上每个连接到同一节点的插座可能是其他端点(见图2)。

集群

Zigbee集群基于客户端/服务器模型,用于实现两个或多个设备间的应用协议。集群是一组命令和属性,定义设备能做什么(按功能分组动作)。每个集群分配一个集群ID,在Zigbee集群库(ZCL)中定义。集群可能用 several 属性和命令定义。

ZigBee集群库中的集群是对象,包含方法(命令)和数据(属性)。

绑定是ZigBee中的动作,定义两个设备、特定端点和集群ID之间的关系。它提供机制将一节点上的端点附加到另一节点上一个或多个端点,甚至可应用于节点组。

安全

Zigbee网络内的安全基于网络密钥和链接密钥。任何两个应用层设备间的单播通信使用两设备共享的128位链接密钥保护,而广播通信由网络中所有设备共享的128位网络密钥保护。通信的 intended 接收者始终 aware 精确安全安排;由此,接收者知道帧是用链接密钥还是网络密钥保护。

网络密钥

Zigbee网络安全使用网络范围密钥进行加密和解密。网络密钥是128位密钥,由网络中所有设备共享。通常,它在网络组建时由协调器随机生成。当新设备加入网络时,它们必须获取网络密钥副本。

信任中心网络

在Zigbee网络中,向新设备分发网络密钥的角色称为信任中心(TC)。有两种安全模型,集中式安全网络和分布式安全网络。

在集中式安全网络中,只有一个信任中心,且它是协调器。所有新设备将从协调器获取网络密钥。

在分布式安全网络中(无协调器设备),每个路由器是信任中心。新设备可从任何路由器获取网络密钥,因为任何路由器可授权和认证希望加入的新设备。

注意:使用分布式信任中心网络或信任中心网络的决定在网络组建时完成。网络启动后无法更改此决定。

所有授权加入网络的设备有密钥副本,并用它加密和解密所有网络消息。网络密钥还有关联序列号以识别密钥的特定实例。偶尔,当网络密钥更新时,序列号递增以允许设备识别用于保护数据包数据的网络密钥实例。序列号范围0到255。当序列号达到255时,它回绕到0。所有部分安全Zigbee网络的设备有网络密钥副本。

由于网络密钥需要从一设备传输到另一设备,密钥值在传输期间需要加密。此加密在应用层完成。

网络层安全

数据包安全

网络层安全的数据包由以下元素组成(见下文)。

辅助安全头

辅助头包含关于数据包安全的数据,接收节点使用以正确认证和解密数据包。此数据包括使用的密钥类型、序列号(如果是网络密钥)、保护数据的设备的IEEE(长)地址和帧计数器。

认证和加密

Zigbee使用128位对称密钥加密网络层所有传输。网络和辅助头以明文发送但认证,而网络负载认证和加密。AES-128用于创建消息整个网络部分(安全头和负载)的哈希,附加到消息末尾。

此哈希称为消息完整性代码(MIC),用于通过确保未被修改认证消息。接收设备哈希消息并验证计算的MIC对附加到消息的值。消息更改使MIC无效,接收节点将静默丢弃消息。注意:Zigbee当前使用4字节MIC。

消息完整性代码(MIC)

AES-CCM*加密过程中使用的随机数(nonce)(见图3)是13八位组字符串,使用安全控制字段、帧计数器和Zigbee安全头的源地址字段构造。MIC大小可以是32位、64位或128位(以下示例中32位)。

以下截图(见图4)显示我的智能插头#1发送的广播数据包的Zigbee网络层和Zigbee安全头部分:

网络安全帧计数器

帧计数器包含在辅助头中作为防止重

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计