====ZigBee 3.0==== {{ digi:rf-wireless:xbee:xbee3-temp:zigbee3stack.png?400|}} ZigBee协议有如下特性: * 支持多种网络拓扑,比如点对点,点对多点,自组网; * 低工作占空比能力,提供长电池供电的可能; * 低延迟; * 采用DSSS扩频技术; * 每个网络最高可支持65,000节点 * 128-bit AES 加密 * 碰撞避免,重试和应答确认 ZigBee 3.0软件栈集成了一个“基础设备”,它为配置节点加入到网络提供一致的行为。它提供了一套通用的配置方法,包括Touchlink,一种通过邻近节点的配置入网的方法。 ZigBee 3.0增强了网络的安全特性,有两种安全的方法来生成网络: 集中式安全入网:这种方法采用协调器/信任中心来生成网络,管理网络资源和连接密钥。 分布式安全入网:这种方法没有协调器/信任中心,它通过路由节点为其它节点提供入网密钥。 Zigbee 3.0支持越来越多和越大的网络, ZigBee网络有强大的自愈能力能应对各种场景的变化。ZigBee具有向前兼容能力, ZLL 1.0和ZHA 1.2已经支持ZigBee 3.0。ZigBee smart energy在功能上兼容zigBee 3.0,但它有额外的安全要求仅在这个profile中处理。 ===ZigBee 3.0中的密钥和安全性=== ZigBee的安全规范中,分别使用Network Key和Link Key在网络层和APS层加密数据。APS层安全允许信任中心(Trust Center)来安全传输Network Key给加入节点或拒绝节点加入,并且它允许应用来增加可选的安全加密消息。网络层安全用来保证所有的ZigBee网络中发送消息的安全性。ZigBee定义了这些不同类型的密钥,所有的Keys都是用128位对称密钥(AES-128)来解密和加密数据包。\\ **Network Key**\\ Network Key用来保证网络层的安全传输。所有ZigBee网络中的设备都会对Network Key进行备份。Trust Center可以周期性的更新Network Key。\\ **Trust Center Link Key** \\ Trust Center Link Key用于两个节点(其中有一个节点是Trust center)之间的端到端的安全通信。在以下情况下使用Trust Center Link Key: \\ • 当节点初次加入网络时,需加密传输Network Key到加入节点。 \\ • 当Network Key更新时,有些节点因未接收到新的Network Key,因此需要Rejoin。此时,Trust Center使用Trust Center Link Key加密 Network Key发送给该重新入网节点。 \\ • 路由器向发送给Trust Center,或从Trust Center接收APS安全消息时,需要使用Trust Center Link Key。比如路由器发送节点加入或Rejoin的更新给Trust Center时,或由Trust Center发送到路由器以执行一些安全功能的命令时, 需要使用Trust Center Link Key。 \\ • 启用APS加密的应用程序单播消息,其中发送或接收设备是Trust Center。 \\ 由Trust Center决定如何管理Trust Center Link Key的选项。它可以为每个设备选择唯一的密钥 (从设备的IEEE地址导出的密钥),或者对于所有的设备采用相同的全局密钥。\\ **Installation Code Keys**\\ ZigBee 3.0支持Installation Code Key,在之前只用于Smart Energy Network(智能能源网络),Smart Energy Network必须使用install code。现在所有ZigBee 3.0认证设备都需要支持install code,但是由Trust center决定是否在网络中使用。 \\ Install code用来预配置Trust Center Link Key,其用于加入ZigBee网络时对Network Key的传输进行加密。在进入网络时,加入设备和Trust Center都必须知道这个唯一的密钥,所以install code用于在两端导出密钥。Install code可以是6,8,12或16字节的任意值,再末尾加上这些字节的16位CRC(最低有效字节优先)。Install code用作Matyas-Meyer-Oseas(MMO)Hash散列函数的输入,其散列长度等于128位。该AES-MMO哈希函数的128位(16字节)结果就是用作该设备的预配置Trust Center Link Key的值,并且Trust Center可以安装密钥表条目(该密钥和加入设备的EUI64),其然后允许在加入网络期间成功地进行认证,加入设备可以成功地接收和解密Network Key。作为此过程的一部分,Install code和加入设备的EUI64必须在带外传送(目标ZigBee之外网络,因为新节点尚未加入)到网络的Trust Center,以允许创建正确的Link key表条目。\\ **Application Link Keys** \\ 属于可选的一种安全机制。Application Link Key用于网络中两个都不是Trust Center的设备之间的APS级加密。 ===ZigBee的入网机制=== 在入网过程中,有一个相关的预配置连接密钥:Trust Center可以选择该密钥是Default global Link Key(ZigBeeAlliance09)还是installation code。如果新设备没有这个密钥,它将无法加入网络。为了允许设备加入到网络,Trust Center发送Network Key(使用Preconfigured Link Key加密)给父节点。ZigBee 3.0和所有ZigBee应用程序配置文件需要Preconfigured Link Key才能加入。 ZigBee 3.0设备成功加入网络后,设备需要请求更新的Trust Center Link Key以替换它们现有的Preconfigured Link Key或Install code。 * 子节点入网过程 设备加入ZigBee Standard Security网络时,首先向父节点发送MAC关联请求。 如果关联成功,则设备处于已加入但未认证状态,此时它不具有Network Key。父节点给设备发送MAC关联成功的响应之后,再向Trust Center发送更新设备消息,指示新节点希望加入ZigBee网络。 然后由Trust Center决定是否允许设备加入。 如果不允许设备加入,则向父节点发送移除设备(Remove device)请求。 如果允许该设备加入,Trust Center则向父节点发送Network Key,Trust Center的行为取决于设备是否具有预配置的Trust Center Link Key。 ===ZCL=== ZCL的帧格式:一个普通的ZCL帧由ZCL Header和ZCL payroad组成。 在Digi的API中,ZCL header和ZCL payroad都是放在RF payload字段,以方便用户设计各种zigbee设备,而和ZigBee网络相关的cluster,endpoint,profile等都有专门字段,无需用户去熟悉网络层的相关事务。用XCTU或是利用Digi提供的XBee API很容易实现组帧和解帧的识读。 {{digi:rf-wireless:xbee:xbee3-temp:zcl-frame-format-details.png?800|}} 在这其中,ZCL Header的第一字节是帧控制域字段,它的信息包括帧命令类型和其它控制标志位. 其中帧控制域字段的第三位定义了这个ZCL是否是厂家的自定义特别扩展,默认为0也就是ZCL帧对所有厂家设备都有效,如果定义为1,ZCL Header会多出两个厂家代码字节在控制域字段之后,表示这个ZCL帧是特定厂家使用的扩展。