Zigbee 3.0基础02

描述

1.3 Clusters

在每个Endpoint中,我们可以配置几个Clusters。ZigBee Cluster实际上是一种通信模型。它基于客户端/服务器模式,用于描述两个设备之间的应用协议。每个Cluster都有一个Cluster ID,该ID在ZigBeeCLuster Library(ZCL)中定义。Cluster中可以定义多个属性和命令。

例如,我们需要实现一个带有两个灯泡的灯。我们可以在其中定义两个Endpoint。每个Endpoint代表一个灯泡。

通信模型

对于基本功能,例如打开/关闭,我们可以使用打开/关闭 Cluster。灯是服务器端,而开关是客户端。服务器端定义了一个属性“ on / off”,指示灯是打开还是关闭。还定义了诸如“打开”,“关闭”,“切换”之类的命令,这些命令应从客户端发送到服务器端。

通信模型

如果我们需要更多功能,例如我们需要支持亮度级别控制。我们可以使用亮度级别控制Cluster。在此Cluster中,服务器端定义了一个属性“Level”,指示灯泡的亮度。还定义了诸如“逐渐变化亮度级别”之类的命令,这些命令应从客户端发送到服务器端。

通信模型

而且,如果我们需要更多功能,例如需要支持颜色控制,则可以使用颜色控制Cluster。对于ZCL规范中没有定义的一些功能,开发者可以添加一些自定义的Cluster,自己去定义属性、命令等,就成了一个私有的协议。

1.4 安全加密

1.4.1 安全威胁

由于ZigBee是一种无线技术,因此安全性非常重要,因为黑客可以通过无线检测到这些数据包。想象您有一个智能门锁。如果黑客捕获了打开您的门的数据包,那么他可以重发该文件以打开您的门。这是很危险的。

(1) 伪造 :比如黑客捕获到无线报文,进行篡改之后,伪造一个假的报文,再发送到这个ZigBee网络中,从而去控制网络里的设备;

(2) 重播 :捕获到这个报文后,不进行编辑,直接重新播放一下,

为了防止这种情况发生,ZigBee定义了许多安全功能。下面将会做简要介绍。

1.4.2 Zigbee安全

1、加密流程

APS层和网络层的加密流程,如下图所示。

通信模型

它显示了如何在网络层中保护不安全的网络帧:首先,网络有效负载将被加密。之后,将在加密的有效负载之前添加安全标头。然后根据网络标头,安全标头和加密的有效负载来计算哈希值。最后,将32位哈希值附加到帧的末尾。如果更改了网络标头,安全标头和加密的有效负载中的任何字节,则哈希值将不同。我们将此值称为MIC(mandatory integrity control),是消息完整性检查的缩写。

2、加密算法

通信模型

APS层和网络层的两个加密环节使用的都是AES128对称加密算法,这意味着需要使用相同的密钥进行加密和解密。

3、完整性检查

通信模型

4、重播攻击保护

通信模型

添加了帧计数器以防止重发攻击。让我们看看它是如何工作的。

通信模型

1、在发送方

(1)每发送一次FrameCounter的值都需要增加1;

(2)Frame Counter的值需要保存在non-volatile memory中,便于重启后恢复Frame Counter。

2、在接收方

(1)首先,将记录接收到帧的节点的Eui64和Frame Counter的值;

(2)来自同一节点的下一条消息的FrameCounter必须大于记录的Frame Counter值。如果此次的Frame Counter比上一次的小或者相等,该消息都将被视为重发并将被丢弃;

(3)由于资源有限,接收方只保存所有邻居的Frame Counter。

由于Frame Counter是一个32位值,因此如果设备长时间保持运行状态,它可能会自动溢出。显然,如果帧计数器被覆盖,可能会出现问题。为防止这种情况发生,必须在溢出之前更新Network Key。如果更新了Network Key,帧计数器则可以再次从零开始。对于End Device来说,它通常只需要保存其父节点的Frame Counter即可。

1.4.3 APS层安全

在APS层用来加密的密钥被称为Link key。在ZigBee网络中,虽然APS层和网络层都有加密,但是绝大部分通信都只是在网络层的加密。一般来说,只有在传输NetworkKey的时候需要在应用层被加密,并且这仅在Trust Center和新设备之间发生。因此,在这种情况下,我们也将其称为Trust Center Link key。

新设备和Trust Center之间必须要在组网之前就使用哪一个Link Key达成共识,所以新设备和Trust Center之间是不需要一个Link Key的传输过程的。

网络中的设备可以使用相同的Linkkey或不同的Link key,只要新设备和TrustCenter之间达成共识即可。

一般来说有四种Link Key,但是我们以前两种为主。后两种目前可能用得很少了,这里仅作简要描述,不做深入探讨。

(1)DefaultGlobal Trust Center Link Key又被称为the well-known linkkey,其内容如下:

Default global Trust Center link key (0:15)= 0x5a 0x69 0x67 0x42 0x65 0x65 0x41 0x6c 0x6c 0x69 0x61 0x6e 0x63 0x65 0x300x39

其实就是字符串“ZigBeeAlliance09 ”。这个是在ZigBee 3.0之前就一直在广泛使用的一个相同的默认的密钥,如今得以保留主要是为了保持向后的兼容性。

所有的ZigBee设备都会有这个Default Global Trust Center Link Key。如果没有指定其他的link key的话,Default Global Trust Center LinkKey就是设备在入网过程中第一个被尝试使用的密钥。

如果希望能保证和其他的ZigBee3.0的设备之间互联互通的话,这个密钥是不能改变的。

(2)Install CodeDerived Preconfigured Link Key

通信模型

Install Code并不是一个Key,而是一个Key的输入。InstallCode是16字节多项式+ 2字节CRC,再通过固定的算法,计算可以得出Link Key。这种Link Key的传输是由人工来完成的,Install Code的实际应用场景如下图所示:

通信模型

首先,在产品生产的时候,由厂家在产线随机生成一个Install Code;

●然后将这个Install Code烧录到产品里面;

●然后把这个Install Code和Eui64打到标签上面,贴在这个产品表面;

●在安装的时候,安装人员利用手持设备的扫描功能,从产品标签上扫描获取InstallCode和Eui64;

●将获取到的Install Code和Eui64告诉Trust Center(一般是协调器);

●然后在Trust Center上通过这个Install Code得到Link Ley,让Trust Center知道IEEE地址为Eui64的这个新设备必须使用这个Link Key进行组网;

●待入网的新设备这边,从flash中读取出预先烧录的Install Code,然后使用相同的算法得出Link key。

●待入网的新设备这边计算得出的Link Key应与Trust Center端的派生Link Key相同。这样,即使消息已加密,他们也可以在应用程序层进行通信。接下来就开始组网的过程了。

An Install Codeis a sequence of 16 bytes followed by 2 bytes of CRC. A complete 18 bytessequence is needed to generate a unique TCLK. The usage of install codesdefined in Z3.0 was added to allow a generalized out-of-band key deliverymethod for network commissioning. It works as follows:

·TC gets the install code and the 64-bitIEEE address of the device that will use this install code to join, via anyuser interface (serial, display and switches, etc.). The install code must bephysically provided with the joining device.

·TC validates the CRC of the install codeintroduced. If this is valid then a TCLK entry is added into the TC with thederived key and the address of the corresponding device.

·The joining device is instructed to useits install code to generate the corresponding TCLK.

·The network is open by any means.

·The joining device performs associationand the Trust Center delivers the network key encrypted in APS layer with theinstall code derived key.

·After this, the joining device mustperform the update of its TCLK as BDB specification requires.

For further details on how to generate theinstall codes, see the Base Device Specification [7]. This is supported only byR21 or later revisions, so to allow backwards compatibility the applicationmust have a way to attempt joining networks without the usage of Install Codes.

(3)DistributedSecurity Global Link Key

在DistributedSecurity Network中,没有Trust Center,每个Router都可以分发 network key。由Router父节点向新入网设备分发的network key,在APS层是使用Distributed Security Global Link Key进行加密的。如果希望能保证和其他的ZigBee 3.0的设备之间互联互通的话,这个密钥是不能改变的。

Distributed Security Global Link Key (0:15)= 0xd0 0xd1 0xd2 0xd3 0xd4 0xd5 0xd6 0xd7 0xd8 0xd9 0xda 0xdb 0xdc 0xdd 0xde0xdf

(4)Touchlink PreconfiguredLink Key

如果新设备是要通过touchlink的方式进行组网的话,就需要使用Touchlink Preconfigured Link Key。

Touchlink Preconfigured Link Key (0:15) =0xc0 0xc1 0xc2 0xc3 0xc4 0xc5 0xc6 0xc7 0xc8 0xc9 0xca 0xcb 0xcc 0xcd 0xce 0xcf

1.4.4 网络层安全

1、总览

该密钥称为Network Key。由于它是一种对称加密算法,因此同一ZigBee网络中的所有设备都将使用相同的Network Key。

在网络安全标头中,添加了“帧计数器”的字段和加密信息节点的源Eui64,以防止重发攻击。还添加了密钥序列号以支持Network Key更新。

2、逐跳安全

APS层的安全性,是端到端安全性。在APS层,是节点A加密好了之后一直得等到达目的地(节点C)之后才去解密。这中间的加密/解密密钥(Link Key)只要A和C两个知道,B不知道这个密钥,不能去进行加密解密,所以B不关心通信的内容。在这种情况下,我们可以有很多的Link Key,只要通信的双方知道即可。

网络层的安全性,是逐跳安全性。A加密好了在发给C的过程中要经过B,B收到这个报文后要先解密再加密,加密完了之后再发给下一跳。由于所有的中间节点都要参与解密和重新加密的过程,所以所有的节点都必须使用相同的Network Key。

路由器节点需要解密该消息,然后对其进行加密,然后替换安全标头中的信息,再将其发送出去。如果解密失败,该消息将立即被丢弃。这样的好处是可以尽快丢弃攻击消息。

3、Network Key

Network Key是一个16字节的八位位组。通常,它是在网络创建时由协调器随机生成的。当新设备加入网络时,它们必须获得Network Key的副本。

在ZigBee网络中,将Network Key分发给新设备的角色称为Trust Center。有两种典型的安全模型,即集中式安全网络和分布式安全网络。

通信模型

在集中式安全网络中,只有一个TrustCenter,通常是协调器。所有新设备将从协调器获取Network Key。

在分布式安全网络中,没有一个固定的Truster Center,也就是说每个路由器都是一个Trust Center。新设备可以从每个路由器父节点那里获取Network Key。

DistributedSecurity Model目前主要就是在飞利浦的Touch Link上在使用。ZigBee 3.0中最主要的还是Centralized Security Model的模式。

由于需要将Network Key从一个设备传输到另一台设备,因此在传输过程中需要对密钥值进行加密。此加密在应用程序层中完成。我们稍后再讨论。

1.5 网络建立与组网

1.5.1 创建网络

首先,由协调器创建一个网络,您必须准备4个参数:

(1)PAN ID

(2)扩展 PAN ID

(3)工作频道

(4)发射功率

您需要指定这四个参数。如果您不这样做,协调器将随机选择一个PAN ID和一个扩展的PAN ID。如果您未指定频道,则协调器将扫描并选择一个相对安静的频道进行工作。

1.5.2 加入网络

1、使用Well-KnownLink Key加入

通信模型

网络创建后,新设备可以开始加入。

(1)新设备将开始查找可连接的网络。在此阶段,新设备不知道可加入的网络处于哪个信道,所以它将通过扫描的方式来发现可加入的网络。它将在每个信道上都发送Beacon Request,等待一会儿如果没有回应的话,就跳到下一个信道继续发BeaconRequest。

(2)路由器和协调器将使用Beacon中携带的网络信息来响应Beacon Request。这些信息包括PAN ID,扩展PAN ID以及路由器或协调器的其他一些属性,例如设备是否允许连接,设备是否具有允许新设备连接的能力。

(3)新设备可以从不同设备接收多个Beacon。它将选择信号质量最好的一个,并开始发送Association Request。在该Association Request中,将PAN ID设置为所选的PAN,并将目标节点ID设置为所选设备的节点ID。在这个报文里面,将会携带这个新设备的设备类型等信息。

(4)当路由器或协调器收到此AssociationRequest时,它将为新设备选择一个节点ID,并以AssociationResponse进行响应。然后,新设备获得了其Node ID,但由于未获得Network Key而无法与其他节点通信。

(5)协调器会将当前的Network Key传输到新设备。该传输消息在应用程序层中使用Well-Known Link Key加密。

(6)当新设备收到此消息时,它将使用Well-KnownLink Key对消息解密并获取Network Key。之后,该设备实际上已加入网络,并能够与网络中的所有其他节点通信。

(7)设备将发送一条DeviceAnnounce,以通知网络的其他节点,以通知他们我已加入。

2、使用Install CodeDerived Link Key加入

通信模型

(1)在出厂之前,应该已经将InstallCode烧录到新设备里面了。

(2)在加入之前,用户需要获取新设备的InstallCode和Eui64,然后在协调器上对其进行配置。

(3)然后,协调器从InstallCode中获取Link Key,并将协调器设置为使用此LinkKey来加密此新设备的传输Network Key消息。

(4)当协调器开始将NetworkKey传输到新设备时,它将对消息使用Install Code Derived Link Key进行加密并将其传输到新设备。

(5)当新设备收到此消息时,它将从闪存中读取Install Code并计算得出应和协调器端相同的Link Key,然后使用此密钥对消息进行解密并获取Network Key。

其余过程类似于使用Well-Known Link Key进行组网的过程。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分