【XBEE手册】ZigBee安全
@(ZigBee)[ZigBee, XBEE手册]
[转载请注明出处,谢谢!]
安全模式
Zigbee标准级支持三种安全模式:家居级(residental),标准级(standard)和高级安全性(high security)。
- 家居级安全性要求在设备之间共享网络**。
- 标准级安全性在家居级安全性方面增加了许多可选的安全增强功能,包括APS层链接**。
- 高级安全性增加了实体身份验证和许多其他未得到广泛支持的功能。
XBee ZB模块主要支持标准级安全性,但支持家居级安全的终端设备可以加入标准级安全设备并与之互操作。本节重点介绍与标准级安全性相关的材料。
Zigbee安全模型
Zigbee安全性应用于NWK层(网络层)和APS层。数据包使用128位AES加密进行加密。网络**和可选链接**可用于加密数据。只有具有相同**的设备才能在网络中一起通信。将在安全网络上通信的路由器和终端设备必须获取正确的安全**。
网络层安全性
网络**用于加密APS层和应用程序数据。除了加密应用程序消息之外,网络安全性还应用于路由请求和回复消息,APS命令和ZDO命令。网络加密不应用于诸如信标传输的MAC层传输。如果在网络上启用安全性,则使用网络**加密所有数据包。
帧计数
加密包的网络头包括32位帧计数。网络中的每个设备都维护一个32位帧计数,该计数器针每次传输递增一次。此外,设备跟踪每个邻居最后已知的32位帧计数。如果设备从邻居接收到包,这个包的帧计数比之前的要小,则丢弃该包。该设备使用帧计数来防止重放攻击(replay attack)。
注意重放攻击(Replay Attacks)又称重播攻击、回放攻击,是指攻击者发送一个目的主机已接收过的包,来达到欺骗系统的目的,主要用于身份认证过程,破坏认证的正确性。重放攻击可以由发起者,也可以由拦截并重发该数据的敌方进行。攻击者利用网络监听或者其他方式盗取认证凭据,之后再把它重新发给认证服务器。重放攻击在任何网络通过程中都可能发生,是计算机世界黑客常用的攻击方式之一。
如果帧计数达到最大值0xFFFFFFFF,则它不会转换到0并且不能再发送任何传输。由于帧计数的大小,达到最大值对于大多数应用来说并不常见。下表显示了帧计数达到其最大值所需的时间。
| 平均传输率 | 直到32位帧计数到期的时间 |
|---|---|
| 1次/秒 | 136年 |
| 10次/秒 | 13.6年 |
要在不影响安全性的情况下清除帧计数,可以更改网络中的网络**。更新网络**后,所有设备上的帧计数将重置为0.有关详细信息,请参阅网络**更新。
消息完整性代码(Message integrity code)
网络标头,APS标头和应用程序数据均使用128位AES进行身份验证。设备在这些字段上执行散列(hash),并作为4字节消息完整性代码(MIC)附加到数据包的末尾。MIC使接收设备可以确保消息未被更改。MIC在Zigbee安全模型中提供消息完整性。如果设备收到数据包并且MIC与设备自己的数据哈希值不匹配,则会丢弃数据包。
网络层加密和解密
具有网络层加密的数据包由路由中的每个跃点加密和解密。当设备收到带有网络加密的数据包时,它会对数据包进行解密并对数据包进行身份验证。如果设备不是目的地,则它使用网络头部分中自己的帧计数和源地址对数据包进行加密和验证。
由于设备在每一跳都执行网络加密,因此加密网络中的数据包延迟比非加密网络中的数据包延迟略长。此外,安全性需要18个字节的开销来包括32位帧计数,8字节源地址,4字节MIC和2个其他字节。这减少了可以在数据包中发送的有效负载字节数。
网络**更新
Zigbee支持用于更改网络中的网络**的机制。更改网络**后,所有设备中的帧计数将重置为0。
APS层安全性
APS层安全性使用源和目标设备之间共享的**加密应用程序数据。在网络层安全性应用于所有数据传输并且逐跳解密和重新加密的情况下,APS安全性是可选的,并且使用仅由源和目标设备知道的APS链路**来提供端到端安全性。APS安全性不能应用于广播传输。
如果启用APS安全性,则APS标头和数据有效负载将使用128位AES进行身份验证,如下图所示:
消息完整性代码
如果启用APS安全性,则使用128位AES对APS标头和数据有效负载进行身份验证。设备在这些字段上执行散列(hash),并作为4字节消息完整性代码(MIC)附加到数据包的末尾。该MIC与网络层附加的MIC不同。MIC允许目标设备确保消息未被更改。如果目标设备收到数据包且MIC与目标设备自己的数据哈希值不匹配,则会丢弃该数据包。
APS链接**
有两种APS链接**:信任中心链接**和应用程序链接**。在设备和信任中心之间建立信任中心链路**,在网络中设备与设备之间建立应用链路**,其中两个设备都不是信任中心。
APS层加密和解密
具有APS层加密的数据包在源处加密,并且仅由目标解密。由于APS加密需要5字节标头和4字节MIC,因此当使用APS加密时,最大数据有效负载减少9个字节。
网络层和APS层加密
网络和APS层加密都可以应用于数据。下图演示了在应用两者时对最终Zigbee数据包执行的身份验证和加密。
信任中心
Zigbee定义了一个信任中心设备,负责验证加入网络的设备。信任中心还管理网络中的链路**分发。
启动或加入安全网络
协调器负责选择网络加***。此**可以预先配置或随机选择。此外,协调器通常作为信任中心运行,并且必须选择信任中心链路**。信任中心链接**也可以预先配置或随机选择。
加入网络的设备必须在加入时获取网络**。当设备加入安全网络时,可以将网络**和链接**发送到加入设备。如果加入设备具有预先配置的信任中心链接**,则网络**将被发送到由链接**加密的加入设备。否则,如果加入设备没有预配置链接**,则设备只能在未加密发送网络**时加入网络(“明文”)。
信任中心必须决定是否将未加密的网络**发送到未预先配置链接**的加入设备。我们不建议发送未加密的网络**,因为它可能会在网络中打开安全漏洞。要最大限度地提高安全性,请使用正确的链接**预配置设备。
在XBee / XBee-PRO Zigbee RF模块上实现安全性
如果在XBee Zigbee固件中启用安全性,则设备在加入网络时会获取网络**。数据传输始终使用网络**加密,并且可以选择使用APS链接**进行端到端(end-to-end)加密。
启用安全性
要在设备上启用安全性,必须将加密启用(Encryption Enable,EE)参数设置为1.当参数值更改时,XBee模块将离开其正在运作的网络(PAN ID和通道)并尝试启动或加入新的网络。
如果将EE设置为1,则使用网络**加密所有数据传输。启用安全性时,单个RF传输中的最大字节数将减少。有关更多信息,请参阅NP(最大数据包有效负载字节数)。
注意在一个网络中所有设备的EE参数必须是设置相同的。应使用WR命令将对EE命令的更改写入非易失性存储器(将保留设置直到重启电源或重置)。
设置网络安全**
协调器使用NK(Network Encryption Key,网络加***)参数(只写)选择网络的网络安全**(Network security key)。如果NK = 0(默认值),协调器将选择随机网络**。否则,将NK设置为非零值,它将此值用作网络安全**。
NK仅受协调器支持。启用安全性(EE = 1)的路由器和终端设备在加入网络时获取网络**。如果它们与协调器共享预配置的链接**,则它们接收使用链接**加密的网络**。
注意在Zigbee中,如果EE和EO设置为0x01,则设备在关联时以明文(未加密)发送带有链接**的网络**。这在开发环境中可能是一个有用的设置,但出于安全原因,我们不鼓励它进行产品部署。
设置APS信任中心链接**
协调器还必须使用KY(Link Key,链接**)选择信任中心链接**。如果KY = 0(默认值),协调器将选择随机信任中心链接**(不推荐)。否则,如果KY设置为大于0,则设备将此值用作预配置的信任中心链接**。KY是只写的,无法读取。
注意 Zigbee固件不支持在未包含协调器的两个设备之间发送的应用程序链接**。
随机信任中心链接**
如果协调器选择随机信任中心链路**(KY = 0,默认),则它允许设备加入网络而无需预先配置的链路**。但是,这会将未加密的网络**通过空中发送到加入设备,不建议这样做。
预配置的信任中心链接**
如果协调器使用预先配置的链接**(KY > 0),则它不会将未加密的网络**发送到加入设备。只有具有正确预配置链接**的设备才能在加入并在网络上通信。
启用APS加密
APS加密是一个可选的安全层,它使用链接**加密数据有效负载。与逐跳解密和加密的网络加密不同,APS加密仅由目标设备解密。必须将XBee / XBee-PRO Zigbee RF模块配置为启用安全性(EE设置为1)以使用APS加密。
在API固件中可以基于每个数据包启用APS加密。要为给定传输启用APS加密,请在API传输帧中设置“启用APS加密”传输选项位。启用APS加密会将最大有效负载大小减少9个字节。
使用信任中心
使用加密选项(Encryption Options,EO)参数将协调器定义为信任中心。如果协调器是信任中心,则它会收到网络中所有新连接尝试的警报。信任中心还可以更新或更改网络上的网络**。
在ZB固件中,用户可以建立具有或不具有信任中心的安全网络。无论用户是否使用信任中心,都支持网络层和APS层加密。
使用信任中心更新网络**。
如果信任中心已启动网络并且NK值发生更改,则协调器将更新网络中所有设备上的网络**。对NK的更改不会强制设备离开网络。网络继续在相同的信道和PAN ID上运行,但网络中的设备会更新其网络**,增加其网络*****,并将其帧计数恢复为0。
在没有信任中心的情况下更新网络**。
如果协调器未作为信任中心运行,则可以使用网络重置(**NR**1)命令强制网络中的所有设备离开当前网络并在另一个通道上重新加入网络。设备离开并改造网络后,帧计数被重置为0. 这种方式即协调器启动其余设备应该加入的新网络。以这种方式重置网络会使网络中的协调器和路由器停机大约十秒钟,并导致16位PAN ID和设备的16位地址发生变化。
安全示例
本节介绍了一些XBee设备配置示例,以支持不同的安全模式,并列出了几个带有建议参数值的AT命令。
在AT命令模式下,发出的每个命令需使用前缀“AT”并去掉“=”符号:例如,**EE**1。在API中,在命令字段中使用双字节命令,并且在参数字段中将参数填充为二进制值。
示例1:形成具有安全性的网络(预配置的链接**)
1.使用以下设置启动协调器:
a. ID = 2234(任意选择)
b, EE = 1
c. NK = 0
d. KY = 4455
e. WR(保存网络参数并保持它们直到重启电源)
2.使用以下设置配置一个或多个路由器或终端设备:
a. ID = 2234
b. EE = 1
c. KY = 4455
d. WR(保存网络参数并保持它们直到重启电源)
3.读取协调器和加入设备上的AI设置,直到它们返回0(成功启动或加入网络的标志)。
此示例在所有设备上设置EE,ID和KY命令相同。在成功加入安全网络之后,网络**加密所有应用程序数据传输。由于NK在协调器上设置为0,因此设备选择随机网络**。由于链接**(KY)在所有设备上配置为非零值,因此预配置的链接**(KY)会在设备加入时发送加密的网络**。
示例2:形成具有安全性的网络(在加入期间获取**)
1.使用以下设置启动协调器:
a. ID = 2235
b. EE = 1
c. NK = 0
d. KY = 0
e. WR(保存网络参数以通过电源循环保持)
2.使用以下设置配置一个或多个路由器或终端设备:
a. ID = 2235
b. EE = 1
c. KY = 0
d. WR(保存网络参数以通过电源循环保持)
3.读取协调器和加入设备上的AI设置,直到它们返回0(成功启动或加入网络的标志)。
此示例在所有设备上设置EE,ID和KY命令相同。由于NK在协调器上设置为0,因此设备选择随机网络**。由于KY在所有设备上都设置为0,因此当设备加入时,网络**以未加密的方式发送(“明文”)。
注意此方法会在网络中引入安全漏洞,不建议这样做。