[Zigbee 科普系列】 - 5 安全模型

Zigbee 子设备开发


Post Reply
zeso
Posts: 132

1. Zigbee安全概述

Zigbee安全性以AES分组密码和CCM操作模式构建底层安全性。Zigbee提供的安全服务包括密钥建立、密钥传输、帧的保护和设备管理的方法。这些安全服务形成了Zigbee设备内实施安全策略的结构单元。

1.1. 安全架构

Zigbee安全架构包括在协议栈几个层次上的安全机制。

  • NWK层和APS层负责安全地传输他们各自的帧;
  • APS子层提供了建立和维护安全关系的服务;
  • Zigbee设备对象(ZDO)管理一个设备的安全策略和安全配置;

基于该安全架构,有如下:

  • 提供的安全服务仅仅加密保护不同设备之间的接口;
  • 相同设备上不同协议栈层之间接口的分离是通过对安全服务接入点的合理设计来实现的,不需要加密。

1.2. 安全设计选择

Zigbee安全设计基于以下原则:

  1. 最初产生帧的那一层负责最初加密它。例如,如果一个NWK层命令帧需要保护,则应该使用NWK层安全;

  2. 如果要求保护服务不被盗窃,则为所有帧使用NWK安全。只有已经加入网络并同步到NWK key的设备才能将自身的信息发布到网络中;

  3. 基于开放信任模式。可以在每层重复使用安全密钥,例如NWK 可以可用于加密APS层广播帧或NWK层帧;

  4. 端对端安全。只有源和目的设备可以访问有共享密钥保护的消息;

  5. 简化设备的互用性。


1.3. 安全模式

Zigbee3.0网络可以支持集中式安全模式和分布式安全模式。所有非协调器都应能加入任意模式支持的网络。

不同节点行为表:

行为协调器节点路由器节点终端节点
加入集中式安全网络NYY
加入分布式安全网络NYY
创建集中式安全网络YNN
创建分布式安全网络NYN

1.4. 信任中心(Trust Center)

信任中心是一个在网络内可以被信任的设备,它能够对网络和端到端应用的配置进行管理来分发密钥。

  • 集中式网络:所有成员只能承认一个信任中心,并且只能有一个信任中心存在;
  • 分布式网络:所有路由器节点都具有作为网络信任中心和NWK密钥分发的功能,注意:不能用于链接密钥分发,因为分布式网络不存在单一的信任中心。

某些应用中:设备可以预先加载信任中心的地址和初始化信任中心的连接密钥。或者入网设备信任中心链接密钥可以通过out-of-band(带外)方式获取和安装。

2. Zigbee 3.0密钥

Zigbee网络的安全主要是基于对”链接密钥“和”网络密钥“的管理、使用、储存和保管来实现的。

Link key在每个节点加入Zigbee网络时都要使用,Zigbee网络和验证每个节点的链接密钥。每个节点都应该支持以下类型的链接密钥:

  • 默认全局信任中心链接密钥(default global Trust Center Link Key,简称TCLK);

Code: Select all

//ZigBeeAlliance09
default global Trust Center Link Key(0:15) =
0x5a,0x69,0x67,0x42,
0x65,0x65,0x41,0x6c,
0x6c,0x69,0x61,0x6e,
0x63,0x65,0x30,0x39,
  • 分布式安全全局链接密钥(distributed security global link key);

Code: Select all

distributed security global link key(0:15) = 
0xd0,0xd1,0xd2,0xd3,										 
0xd4,0xd5,0xd6,0xd7,
0xd8,0xd9,0xda,0xdb,
0xdc,0xdd,0xde,0xdf,
  • 安装码派生的预配置链接密钥(install code derived preconfigured link key)。

此外,如果系欸但支持TouchLink网络操作,还应该包含:

  • TouchLink与配置链接密钥(TouchLink preconfigured link key)。

Code: Select all

TouchLink preconfigured link key(0:15) = 
0xc0,0xc1,0xc2,0xc3,
0xc4,0xc5,0xc6,0xc7,
0xc8,0xc9,0xca,0xcb,
0xcc,0xcd,0xce,0xcf,

2.2. 网络密钥Network key

Network key用来对Zigbee节点之间的数据交互进行加密,它由信任中心通过随机方式生成。当使用链接密钥成功加入网络后,会从信任中心获取Network key,并使用Network key加密数据之后,再与其他节点进行通信。

关于网络密钥的更新:

集中式安全网络中,更新密钥是信任中心的核心职责之一。定期更新可以确保密钥不会因使用太久而安全性降低,更新频率应遵循如下规则:

  • 更新频率取决于nwkKeyTrustCenterUpdatePeriod值,一般建议不超过30天,最迟每年至少更新一次;
  • 如果信任中心检测到邻居表中任何一个设备的帧计数器值大于0x80000000,则应该执行更新网络密钥操作;
  • 规范建议再没有RTC时钟或其他跟踪时间方法的信任中心内,当信任中心帧计数器值达到0x40000000时,信任应该执行更新网络密钥操作。

3. 安装码Install code

设备获取信任中心的链接密钥可以通过带外方式。带外(out-of-band)方式指不通过Zigbee网络。例如,可以用数字或二维码的形式打印在设备的包装上,用户或者安装者通过键入或扫描的方式链接到信任中心。

在制造过程中为每个节点创建随机安装码,并在安装期间被使用。安装码的空间应该与密钥空间一样具有随机性。

使用安装码安装节点一般性步骤:

  1. 创建并提供安装码;
  2. 预配置的链接密钥是使用Matyas-Meyer-Oseas散列函数从安装码中派生出来的;
  3. 在节点中设置预配置的链接密钥。

信任中心使用安装码安装节点的步骤:

  1. 安装码是通过带外方式发送的;
  2. 预配置的链接密钥是使用Matyas-Meyer-Oseas散列函数从安装码中派生出来的;
  3. 预配置的链接密钥安装在信任中心中。

安装码的格式:

安装码是由一个16位CRC保护的随机128位数字。在打印或显示时,安装码表示为一组多个4位十六进制数字组合。

例如,有如下安装码:

Code: Select all

83F4 D340 7A93 9723 A5C6 39B2 6916 D505 C3B5

其中:

前8组为安装码,最后1组为CRC16-CCITT校验值。校验参数:

多项式:0x1201

初始值:0xFFFF

我的栈溢不出。

Post Reply