ZigBee 3.0

ZigBee协议有如下特性:

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很容易实现组帧和解帧的识读。

在这其中,ZCL Header的第一字节是帧控制域字段,它的信息包括帧命令类型和其它控制标志位. 其中帧控制域字段的第三位定义了这个ZCL是否是厂家的自定义特别扩展,默认为0也就是ZCL帧对所有厂家设备都有效,如果定义为1,ZCL Header会多出两个厂家代码字节在控制域字段之后,表示这个ZCL帧是特定厂家使用的扩展。