Skip to content

Latest commit

 

History

History
409 lines (309 loc) · 26.6 KB

AN1089.md

File metadata and controls

409 lines (309 loc) · 26.6 KB

Using Installation Codes with Zigbee Devices (Rev. 0.2)

本应用笔记说明了如何使用 EM3xx 实用程序或 Simplicity Commander 来检查、写入、验证和擦除 Silicon Labs EM3x 和 EFR32 设备上的安装码。最后,还提供了一个完整的示例,说明如何使用安装码派生的链路密钥加入到 Z3 网络。

目录

1. 安装码概述

1.1 安装码是什么

ZigBee 安装码(installation code)为设备提供了一种合适的安全入网方法。安装码本质上是在制造时安装在加入设备上的一个随机值,其用于加密集中式信任中心设备(协调器)到加入设备的初始网络密钥传输。随着 2016 年底 ZigBee 3.0 标准的创建,所有能够加入网络(非形成网络)的 ZigBee 设备在加入时都必须支持安装码的使用(这是 ZigBee 3.0 合规性的要求)。

当两个设备配对时,安装码与蓝牙设备上的 PIN 码类似。PIN 码作为父设备的授权码来提供,以便加入设备知道它正在安全地接收信息。

安装码通常以十六进制字符串或以一种编码方式(如条形码或 QR 码)印刷在设备的外壳或包装上,并与设备的 64-bit IEEE MAC 地址(“EUI64”)一起通过一个带外(out-of-band)机制提供给信任中心设备或其关联的 Web/Cloud 接口。如果这些特定数据存储在远程 Web 服务器或 Cloud 系统上,则该远程系统随后应将该信息安全地传输到信任中心,以在加入设备执行带内(in-band)加入过程之前为加入设备建立安全凭证。

1.2 ZigBee 智慧能源设备的注意事项

信任中心和加入设备使用安装码作为共享密钥来建立初始信任关系,以允许新设备加入到 ZigBee 网络。一旦设备成功加入到被授权的网络,ZigBee 就要求该节点协商新的信任中心链路密钥,以便将来与信任中心进行安全交换。在标准的 ZigBee 3.0 网络中,该行为通过直接向信任中心发出密钥请求来实现。然而,ZigBee 智慧能源网络与标准 ZigBee 3.0 网络不同,新的信任中心链路密钥是通过一个称为 CBKE(Certificate-Based Key Establishment)的特殊过程派生出的。有关 CBKE 过程的详情,请参阅 UG103.5: Fundamentals of ZigBee Security

注意:CBKE 过程需要在制造过程中安装 Certicom 签署的 CBKE 数据证书。有关如何设置这些证书数据的详情,请参阅 AN708: Setting Smart Energy Certificates for ZigBee Devices。另请参阅 AN714: Smart Energy ECC-Enabled Device Setup Process,以了解更多关于 ZigBee 智慧能源设备加入到网络的要求,以及该过程的故障排除。

本文档概述了与标准 Z3 设备或 ZSE 设备的安装码相关的常见实践。

2. 安全使用

安装码用于创建预配置的链路密钥。通过在安装码上使用 AES-MMO 哈希算法,可以将安装码转换为链路密钥。有关更多信息和示例代码,请参阅 ZigBee Alliance’s Base Device Behavior Specification (ZigBee document #13-0402) 的安全章节的安装码部分。

安装码虽然不完全是一个秘密,但是其不容易被监听(加入设备与信任中心之间的)初始交换的恶意设备推测出来。在不知道安装码和密钥的情况下,恶意设备无法解密消息。

派生的 ZigBee 链路密钥只有信任中心和加入设备知道。信任中心使用该密钥将 ZigBee 网络密钥安全地传输到设备。一旦设备拥有网络密钥,它就可以在网络层上与 ZigBee 网络通信。设备就能够执行服务发现并开始应用的初始化过程。在 Z3(non-ZSE)网络中,拥有网络密钥通常足以跨各种 cluster 进行标准消息传递。但是,ZSE 网络还有其他限制,如下所述。请参阅 7. 示例:使用安装码派生的链路密钥将 Z3 Light 加入到 Z3 Gateway,以便按步骤执行使用安装码生成的链路密钥进行网络加入的过程。

从安装码派生的初始链路密钥在 ZSE 网络上没有完整访问权限。尝试将其用于智慧能源消息传递是不被允许的,并且其他 ZSE 设备将忽略它。在加入网络(不久)后,设备必须使用 Key Establishment cluster 来通过 CBKE 过程与信任中心建立新的链路密钥。只有在密钥建立成功完成时,设备才会在网络上拥有完整的权限,并且能够发送和接收某些 ZSE 消息。

3. 安装码格式

ZigBee 智慧能源网络允许安装码为随机的十六进制数(6-byte、8-byte、12-byte 或 16-byte),并且末尾需要附加一个 CRC(2-byte)。而 Z3 网络明确地要求安装码为 16-byte 的十六进制数,并且也附带一个 2-byte CRC。注意,CRC16 应该以小端字节顺序交付给用户,因为这是执行 AES-MMO 哈希算法的设备的预期顺序。对用户而言,CRC 是安装码的一部分,他们不需要了解它。因此,从用户的角度来看,安装码的长度是 18-byte(在 ZSE 设备中可能为 8-byte、10-byte 或 14-byte)。

制造和管理安装码的列表将会影响安装设备的大小、安全性和用户体验等方面的选择。较大的安装码意味着攻击者推测出安装码和窃听初始加入的可能性较小。但是,较小的安装码更便于用户安装时输入。

注意:ZigBee 3.0 Base Device Behavior Specification 要求您只使用 16-byte 的安装码。虽然这可能不便于输入,但它更不容易被攻击者推测出来。

4. 安装码的 CRC

安装码的 CRC 是一种机制,用于验证通过带外机制传输到实用程序的安装码的完整性。这种传输机制在某种程度上涉及人类的互动。因此,CRC 被设计成一种验证安装码是否有效并且在传输过程中是否被错误更改的方法。

ZigBee 安装模型使用户可以自行安装设备。用户只需阅读设备背面的安装码并将其输入到网页或通过电话提供给公用事业服务。因为数字是十六进制值,所以很容易会颠倒数字或读错数值。

4.1 验证

ZigBee 规范期望服务器处理带外安装码条目并执行安装码的基本校验以确保其有效性。服务器将计算安装码的 CRC,并将计算出的 CRC 与待处理安装码的 CRC 进行比较,以查看它们是否匹配。如果不匹配,则可以立即通知输入安装码的用户该安装码无效。然后,用户应仔细检查该值。

ZigBee 规范没有要求信任中心直接验证安装码(如果信任中心没有此本地功能,则可以在远程 Web 或 Cloud 服务器上进行任何验证)。信任中心希望接收新加入设备的预配置的链路密钥和 EUI64,它不需要知道如何派生该密钥。如何管理和传输链路密钥到信任中心取决于特定的实用程序。

有关如何计算 CRC(包括示例代码)的详细信息,请参阅 ZigBee 3.0 Base Device Behavior Specification (ZigBee document #13-0402) 的安全章节的安装码部分。

4.2 产生

Silicon Labs 建议安装码为随机数。这样可以降低攻击者推测安装码和破坏初始加入过程的可能性。安装码不应该基于制造过程(例如与 EUI64 关联或基于制造批次的顺序编号)。如果是这样的话,了解正在加入设备的类型的攻击者将拥有已知范围的安装码,他可能会试图破坏网络并克隆设备的身份。对于所有制造商而言,所有 ZigBee 设备的安装码不必是唯一的。

4.3 标签

设备的安装码应该与设备的 EUI64 一起印刷在设备外部的标签上,并且应该用文本标识这两个元素,指示它们代表什么。安装码不应该印刷在盒子外面,因为这样攻击者可以更容易获得安装码的内容,并可能危及设备安全。建议以 2-byte 块的形式印刷安装码(例如,83FE D340 7A93 9723 A5C6 39B2 6916 D505 C3B5)。

注意:CRC 应该在标签上以小端格式附加到安装码中。

4.4 示例

以下是一个 18-byte 的安装码标签(16-byte 的随机码和 2-byte 的 CRC):

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

该码的随机数部分是前 16 个连续字节。计算出的 CRC 值为 0xB5C3,并且它以小端(little-endian)格式附加到随机数后。

5. 在 ZigBee 设备上编程安装码

5.1 安装码文件的格式

要编程安装码,请使用安装码的值(不带 CRC)创建一个简单的文本文件。在本说明中,该文件名为 install-code-file.txt。此文件随后传递给 em3xx_load 或 Simplicity Commander。

文件格式如下:

Install Code: <ascii-hex>

以下是一个示例安装码文件。该码的 CRC 为 0xB5C3,并且不包含在文件中。

Install Code: 83FED3407A939723A5C639B26916D505

5.2 检查 EM3x 设备上的安装码

首先,最好验证要编程的设备是否已连接,以及当前存储在节点上的信息。为此,请执行以下命令以从基于 EM3x 的设备上打印所有 manufacturing token 的数据:

$ ./em3xx_load.exe --cibtokensprint

您应该看到类似于以下内容的输出,其中下面的粗体码(Smart Energy Install Code 部分)反映了与安装码相关的重要字段:

$ em3xx_load.exe --cibtokensprint

em3xx_load version 4.1b04
Connecting to ISA via IP address 10.4.176.51
DLL version 1.1.28, compiled Sep 25 2013 13:55:00
SerialWire interface selected
SWJCLK speed is 500kHz
Targeting EM3588

'General' token group
TOKEN_MFG_CIB_OBS                [16-byte array ] : A55AFFFFFFFFFFFF FFFFFFFFFFFFFFFF
TOKEN_MFG_CUSTOM_VERSION         [16-bit integer] : 0xFFFF
TOKEN_MFG_CUSTOM_EUI_64          [8-byte array ]  : FFFFFFFFFFFFFFFF
TOKEN_MFG_STRING                 [16-byte string] : "" (0 of 16 chars) FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
TOKEN_MFG_BOARD_NAME             [16-byte string] : "" (0 of 16 chars) FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
TOKEN_MFG_MANUF_ID               [16-bit integer] : 0xFFFF
TOKEN_MFG_PHY_CONFIG             [16-bit integer] : 0xFF26
TOKEN_MFG_BOOTLOAD_AES_KEY       [16-byte array ] : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
TOKEN_MFG_EZSP_STORAGE           [8-byte array ]  : FFFFFFFFFFFFFFFF
TOKEN_MFG_OSC24M_BIAS_TRIM       [16-bit integer] : 0xFFFF
TOKEN_MFG_SYNTH_FREQ_OFFSET      [16-bit integer] : 0xFFFF
TOKEN_MFG_OSC24M_SETTLE_DELAY    [16-bit integer] : 0xFFFF
TOKEN_MFG_SECURITY_CONFIG        [16-bit integer] : 0xFFFF
TOKEN_MFG_CCA_THRESHOLD          [16-bit integer] : 0xFFFF
TOKEN_MFG_SECURE_BOOTLOADER_KEY  [16-byte array ] : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF

'Smart Energy CBKE (TOKEN_MFG_CBKE_DATA)' token group
Device Implicit Cert             [48-byte array ] : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF 
                                                    FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
CA Public Key                    [22-byte array ] : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFF
Device Private Key               [21-byte array ] : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFF
CBKE Flags                       [1-byte array ]  : FF

'Smart Energy Install Code (TOKEN_MFG_INSTALLATION_CODE)' token group
Install Code Flags               [2-byte array ]  : FFFF
Install Code                     [16-byte array ] : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
CRC                              [16-bit integer] : 0xFFFF

'Smart Energy 1.2 CBKE (TOKEN_MFG_CBKE_283K1_DATA)' token group
Device Implicit Cert (283k1)     [74-byte array ] : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
                                                    FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
                                                    FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
                                                    FFFF
CA Public Key (283k1)            [37-byte array ] : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
                                                    FFFFFFFFFFFFFFFF FFFFFFFFFF
Device Private Key (283k1)       [36-byte array ] : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
                                                    FFFFFFFFFFFFFFFF FFFFFFFF
CBKE FLAGS (283k1)               [1-byte array ]  : FF

DONE

注意:ZigBee 智慧能源设备和 ZigBee 3.0 设备使用相同的 installation code token,因此上面的输出中显示了有关 “Smart Energy Install Code” 的注释。

5.3 将安装码写入到 EM3x 设备的制造区域

要将安装码写入到制造区域(manufacturing area),请执行以下命令:

$ em3xx_load.exe --cibtokenspatch install-code-file.txt

5.4 验证 EM3x 设备上已存储的安装码

在写入安装码后,最好通过再次执行以下命令来验证信息:

$ ./em3xx_load.exe --cibtokensprint

此命令的输出应该与 5.2 检查 EM3x 设备上的安装码 类似,但安装码字段已更新(根据 install-code-file.txt 文件)。

5.5 检查 EFR32 设备上的安装码

首先,最好验证要编程的设备是否已连接,以及当前存储在节点上的信息。为此,请执行以下命令以从基于 EFR32 的设备上打印所有 manufacturing token 的数据。tokendump 命令将 manufacturing token 的数据打印成 key-value 对。Simplicity Commander 支持多组 token。在此示例中,使用名为 “znet” 的 token 组。

$ commander tokendump --tokengroup znet

您应该会看到如下的输出,其中下面的粗体码(MFG_INSTALLATION_CODE 部分)反映了与安装码相关的重要字段:

#
# The token data can be in one of three main forms: byte-array, integer, or string.
# Byte-arrays are a series of hexadecimal numbers of the required length.
# Integers are BIG endian hexadecimal numbers.
# String data is a quoted set of ASCII characters.
#
# MFG_EMBER_EUI_64     : A8D417FEFF570B00
MFG_CUSTOM_VERSION     : 0xFFFF
MFG_CUSTOM_EUI_64      : FFFFFFFFFFFFFFFF
MFG_STRING             : ""
MFG_BOARD_NAME         : ""
MFG_MANUF_ID           : 0xFFFF
MFG_PHY_CONFIG         : 0xFFFF
MFG_SYNTH_FREQ_OFFSET  : 0xFFFF
MFG_CCA_THRESHOLD      : 0xFFFF
MFG_EZSP_STORAGE       : FFFFFFFFFFFFFFFF
MFG_CTUNE              : 0xFFFF
MFG_XO_TUNE            : 0xFFFF
MFG_LOCKBITS_PLW       : 0x000000000000000000000000FFFFFFFF
MFG_LOCKBITS_CLW0      : 0xFFFFFFFF
MFG_LOCKBITS_MLW       : 0xFFFFFFFF
MFG_LOCKBITS_ULW       : 0xFFFFFFFF
MFG_LOCKBITS_DLW       : 0xFFFFFFFF
MFG_BOOTLOAD_AES_KEY   : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
MFG_SECURITY_CONFIG    : 0xFFFF
MFG_ASH_CONFIG[0]      : 0xFFFF
MFG_ASH_CONFIG[1]      : 0xFFFF
MFG_ASH_CONFIG[2]      : 0xFFFF
MFG_ASH_CONFIG[3]      : 0xFFFF
MFG_ASH_CONFIG[4]      : 0xFFFF
MFG_ASH_CONFIG[5]      : 0xFFFF
MFG_ASH_CONFIG[6]      : 0xFFFF
MFG_ASH_CONFIG[7]      : 0xFFFF
MFG_ASH_CONFIG[8]      : 0xFFFF
MFG_ASH_CONFIG[9]      : 0xFFFF
MFG_ASH_CONFIG[10]     : 0xFFFF
MFG_ASH_CONFIG[11]     : 0xFFFF
MFG_ASH_CONFIG[12]     : 0xFFFF
MFG_ASH_CONFIG[13]     : 0xFFFF
MFG_ASH_CONFIG[14]     : 0xFFFF
MFG_ASH_CONFIG[15]     : 0xFFFF
MFG_ASH_CONFIG[16]     : 0xFFFF
MFG_ASH_CONFIG[17]     : 0xFFFF
MFG_ASH_CONFIG[18]     : 0xFFFF
MFG_ASH_CONFIG[19]     : 0xFFFF

#'MFG_CBKE_DATA (Smart Energy CBKE)' token group
Device Implicit Cert         : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
                               FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
CA Public Key                : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFF
Device Private Key           : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFF
# CBKE Flags : 0xFF

#'MFG_INSTALLATION_CODE (Smart Energy Install Code)' token group
# Install Code Flags         : 0xFFFF
Install Code                 : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
# CRC                        : 0xFFFF

#'MFG_SECURE_BOOTLOADER_KEY (Manufacture token space for storing secure bootloader key.)' token group
MFG_SECURE_BOOTLOADER_KEY    : FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

#'MFG_CBKE_283K1_DATA (Smart Energy 1.2 CBKE)' token group
Device Implicit Cert (283k1) : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
                               FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
                               FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFpFFFFFFFFF
CA Public Key (283k1)        : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
                               FFFFFFFFFFFFFFFF FFFFFFFFFF
Device Private Key (283k1)   : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
                               FFFFFFFFFFFFFFFF FFFFFFFF
# CBKE FLAGS (283k1)         : 0xFF

#'MFG_SIGNED_BOOTLOADER_KEY_X (Manufacture token space for storing ECDSA signed bootloader key (X-point).)'
token group
MFG_SIGNED_BOOTLOADER_KEY_X  : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF
#'MFG_SIGNED_BOOTLOADER_KEY_Y (Manufacture token space for storing ECDSA signed bootloader key (Y-point).)'
token group
MFG_SIGNED_BOOTLOADER_KEY_Y  : FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF

DONE

通过执行以下命令读取预编程(pre-programmed)的 EUI64:

commander tokendump --tokengroup znet --token MFG_EMBER_EUI_64

#
# The token data can be in one of three main forms: byte-array, integer, or string.
# Byte-arrays are a series of hexadecimal numbers of the required length.
# Integers are BIG endian hexadecimal numbers.
# String data is a quoted set of ASCII characters.
#
# MFG_EMBER_EUI_64: A8D417FEFF570B00

DONE

5.6 将安装码写入到 EFR32 设备的制造区域

要将安装码写入到制造区域(manufacturing area),请执行以下命令:

$ commander flash --tokengroup znet --tokenfile install-code-file.txt

您应该会看到类似如下的输出:

Writing 2048 bytes starting at address 0x0fe04000
Comparing range 0x0FE04000 - 0x0FE047FF (2 KB)
Programming range 0x0FE04270 - 0x0FE04283 (20 Bytes)
Verifying range 0x0FE04000 - 0x0FE047FF (2 KB)
DONE

5.7 验证 EFR32 设备上已存储的安装码

在写入安装码后,最好通过再次执行以下命令来验证信息:

$ commander tokendump --tokengroup znet

此命令的输出应该与 5.5 检查 EFR32 设备上的安装码 类似,但 MFG_INSTALLATION_CODE 数据现在表示为您选择的安装码和 CRC(小端)。

6. 擦除安装码

如果您要从设备中删除安装码,那么您只需创建一个安装码文件,其内容为 “!ERASE!”(如下所示)。然后根据 5.3 将安装码写入到 EM3x 设备的制造区域5.6 将安装码写入到 EFR32 设备的制造区域 中的说明将此文件编程到目标设备。

Install Code: !ERASE!

使用 5. 在 ZigBee 设备上编程安装码 中介绍的步骤来检查确认安装码的内容。现在,您的 MFG_INSTALLATION_CODE token 的数据应该显示为全 0xFF 字节。

7. 示例:使用安装码派生的链路密钥将 Z3 Light 加入到 Z3 Gateway

此示例通过命令行选项使用安装码派生的链路密钥将 Z3 Light 加入到 Z3 Gateway。本示例使用 EmberZNet SDK 6.3.1 或更高版本中包含的 Z3 Light 和 Z3 Gateway 示例应用。

本示例假定您已经构建了具有默认配置的 Z3 Light 应用(SoC-based)和 Z3 Gateway 应用(NCP + Host setup)。请确保链路密钥表(link key table)的大小至少为一个条目。您可以在 host 端的 NCP Configuration 插件中配置密钥表大小。您可以使用 EM358x 或 EFR32MG 平台。如果您对构建示例应用不熟悉,请参阅 QSG106: Getting Started with EmberZNet PRO 获取说明。

  1. 确保 Z3 Light 不在任何网络上,如果在网络上,则发出 network leave 以离开网络。
  2. 按照 5. 在 ZigBee 设备上编程安装码 中的说明创建安装码文本文件,并将安装码编程到 Z3 Light 设备上。
  3. 在 Z3 Gateway 上,使用 Network Creator 插件的 CLI 中的此命令形成具有 ZigBee 3.0 安全性的集中式网络:
    plugin network-creator start 1
    
  4. 要从安装码中派生出链路密钥并将其存储到 Z3 Gateway(充当集中式网络的信任中心)上的链路密钥表中,请输入:
    option install-code <link key table index> {<Joining Node’s EUI64>} {<installation code + 2-byte CRC>}
    
    示例:
    option install-code 0 {00 0B 57 FF FE 07 A9 E3} {88 77 66 55 44 33 22 11 11 22 33 44 55 66 77 88 D4 90}
    
    • 第一个参数是链路密钥表的索引。
    • 下一个参数是加入节点的 EUI64(在此示例中为 Z3 Light 的)

    提示:您可以通过在加入节点上运行 CLI 的 info 命令来查找此信息,其与 node [(>)000B57FFFE07A9E3] 类似。您也可以从 tokendump 命令的输出中找到 EUI64,但请注意它以小端格式打印,您需要反转字节以获得正确的输出。

    • 最后一个参数是安装码,末尾附带了 2-byte CRC。

    提示:您可以自己计算 CRC,或者从运行 Simplicity Commander tokendump 命令中找到:

    $ commander tokendump --tokengroup znet
    
    CRC 显示在安装码的正下方,并以小端格式打印。在使用它作为 option install-code CLI 参数之前,需要将字节反转为大端。由于大括号内的空格不是必需的,因此可以直接复制/粘贴不带空格的,但包含空格有助于更好地查看数据。
  5. 要查看链路密钥是否已成功添加,请在 Z3 Gateway 上输入 keys print CLI,以在链路密钥表中查看。这将显示从安装码派生出的链路密钥和网络密钥。

    注意:事实上,通过 option install-code CLI 将链路密钥复制到链路密钥表的实践可能并不理想。为了避免完全地填充永久链路密钥表,可以调用 API emAfInstallCodeToKey() 来计算安装码中的加入链路密钥。(原文:The fact that the option install-code CLI copies the link key to the link key table may not be desirable in practice. To avoid populating the permanent link key table completely, instead of using the option install-code CLI call the API emAfInstallCodeToKey() to calculate the joining link key from the install code.)

  6. (可选并且强烈建议,以便您看到加入设备加入网络,如步骤 8 中所述)此时,您拥有网络分析仪所需的用来解密 Z3 Gateway 和 Z3 Light 之间未来事务的所有信息。在 File > Preferences > Network Analyzer > Decoding > Security Keys 中,将网络密钥和链路密钥添加到安全密钥列表中。详情请参阅 QSG106: Getting Started with EmberZNet PRO。从 Z3 Light 和/或 Z3 Gateway 中开始一个新的网络捕获。

    提示:如果您处于 “noisy” 环境中,则可以选择仅捕获特定 PAN。

  7. 现在在信任中心上设置临时的(transient)链路密钥(从安装码派生的链路密钥)和加入设备的 EUI64,并开放网络以允许加入:
    plugin network-creator-security open-with-key {eui64} {linkkey}
    
    示例:
    plugin network-creator-security open-with-key {00 0B 57 FF FE 07 A9 E3} {FA 80 81 CA AA 41 D5 AD E9 B5 65 87 99 26 8B 88}
    
  8. 最后,在加入设备上输入此 CLI 以使用 Network Steering 插件加入到网络:
    plugin network-steering start 0
    
    加入设备应该使用临时的链路密钥加入网络。如果您已在步骤 6 中启动网络捕获,则应该能看到完整的事务活动。最初允许 Z3 Light 使用临时的链路密钥加入网络。信任中心在 “Transport Key (NWK)” 帧中传输网络密钥(使用临时的链路密钥加密)。随后,Z3 Light 请求新的链路密钥(信任中心在 “Transport Key (Link)” 帧中传输该链路密钥)。

7.1 将安装码传递到信任中心

在此示例中使用手工输入安装码,但实际上以这种方式连接到信任中心可能不切实际。客户负责实施安装码,并应该考虑多个细节:

  • Will the commissioning be done all at the same time (perhaps for a large industrial lighting application), or piece-by-piece in a home automation setting?
  • Will there be an Internet-connected gateway?
  • Can the installation codes be written during manufacturing for a pre-commissioned bundle?
  • Will initial commissioning differ from later commissioning for added devices or in the case of leaving the network and then re-joining?
  • How the network might accommodate a commissioner that would leave and return to a network in a switched multiprotocol scenario?

下面是我们设想的一些方法:

  • Bluetooth commissioning using our Dynamic Multiprotocol (DMP) feature and a Bluetooth phone app for commissioning. See UG305: Dynamic Multiprotocol User’s Guide for more information.
  • Pre-commissioning at the factory: install codes entered at manufacturing time for trust center and joining devices.
  • Bluetooth-based commissioning with Switched Multiprotocol (SMP) on the trust center and a Bluetooth phone app for entering install codes. See UG267: Switched Multiprotocol User's Guide for more information.
  • Using QR codes on joining devices, and using an app to send the install code via WiFi to an internet-enabled NCP gateway.
  • Barcode/QR code scanning capability on the trust center.