在 RFDM-RW612 上运行的 Matter EdgeLock 2GO 安全锁示例
这是一个在 FRDM-RW612 板上运行的演示应用程序,它提供了如何使用EdgeLock 2GO服务安全地配置 Matter 设备的示例。
主板:FRDM-RW612
类别:无线连接、安全
外设:Wi-Fi、802.15.4、蓝牙、UART
工具链:GCC
目录
1. 简介
EdgeLock 2GO 是恩智浦用于配置和管理物联网设备的服务平台,它允许您在制造过程中或现场将密钥和证书安全地安装到设备中,然后在设备生命周期内保持凭据为最新。
对于像 FRDM-RW612 这样具有安全子系统 (SSS) 的平台,Matter DAC 私钥可以转换为加密的 blob。此 blob 将覆盖工厂数据中的 DAC 私钥,并由工厂数据提供程序实例导入 SSS。
在此架构中,除了制造流程之外,DAC 私钥始终只能由 SSS 使用。在这种情况下,所有需要访问 DAC 私钥的操作都将转移到 SSS。
EdgeLock2go 服务可用于安全地配置 DAC 密钥/证书,在设备调试期间增加额外的安全层,如下图所示:
2.软件
- Ubuntu 22.04 作为独立 PC 或安装在虚拟机(如 VirtualBox)中
- JLink 版本(> v.792f)
- FRDM-RW612 Matter-Secure-lock:/secure-lock/nxp/rt/rw61x/out/debug/chip-rw61x-secure-lock-app-example.srec
3.硬件
| FRDM-RW612引脚 | USB-UART 转换器引脚 |
| :-----------------------------------------: | :-------------------: |
| FRDM-RW612 J5引脚4 (GPIO03) FC0UART_TXD | 转换器RX引脚 |
| FRDM-RW612 J5引脚8(GND) | 转换器TX引脚 |
4. 设置
4.1 步骤 1:创建 matter 构建环境
创建构建环境:
- 将 Matter repo 初始化为secure-lock/nxp/rt/rw61x/third_party内的子模块:
shell
git submodule update --init
- 将补丁从补丁文件夹复制到?secure-lock/nxp/rt/rw61x/third_party?:
shell
cp patches/* secure-lock/nxp/rt/rw61x/third_party/
- 转到事项根文件夹:
shell
cd secure-lock/nxp/rt/rw61x/third_party/matter/
- 安装物质所需的软件包:
shell
sudo apt-get install git gcc g++ pkg-config libssl-dev libdbus-1-dev libglib2.0-dev libavahi-client-dev ninja-build python3-venv python3-dev python3-pip unzip libgirepository1.0-dev libcairo2-dev libreadline-dev
- 查看 NXP 特定的 Matter 子模块:
shell
scripts/checkout_submodules.py --shallow --platform nxp --recursive
- 运行引导脚本来初始化 Matter 构建环境
shell
source scripts/bootstrap.sh
- 如果引导已经完成,则可以使用激活脚本来激活环境:
shell
source scripts/activate.sh
?注意:?该环境仅在执行引导/激活脚本的终端中处于活动状态。
- 为 Matter repo 应用以下补丁:
shell
git apply ../matter.patch
- 初始化NXP SDK:
shell
third_party/nxp/nxp_matter_support/scripts/update_nxp_sdk.py --platform common
- 转到nxp_matter_support文件夹:
shell
cd third_party/nxp/nxp_matter_support/
- 将以下补丁应用到 SDK 子模块:
shell
git apply ../../../../sdk.patch
4.2 步骤 2:构建 mcuboot 和 factory_data 二进制文件
按照本应用说明中的说明构建 mcuboot 二进制文件和工厂数据二进制文件
?注意?:请遵循从头到尾的所有步骤,包括“构建 Matter 应用程序”章节,但不要使用恒温器应用程序,而是使用步骤 4.3 中的命令来构建安全锁应用程序
4.3 步骤 3:构建应用程序二进制文件
构建 FRDM-RW612 Matter-Secure-lock 应用程序,启用出厂数据和 EdgeLock2GO 配置。这样,应用程序就会知道在启动之前需要从专用内存地址读取出厂数据。
- 返回到secure-lock/nxp/rt/rw61x文件夹
shell
cd ../../../../../
- 使用 Thread BR 选项生成 FRDM-RW612 板的构建文件:
shell
gn gen --args="chip_enable_wifi=true chip_enable_openthread=true nxp_enable_matter_cli=true board_version="frdm" nxp_use_factory_data=true nxp_enable_secure_EL2GO_factory_data=true chip_enable_ota_requestor=true is_debug=true optimize_debug=false no_mcuboot=false" out/debug
- 构建示例:
shell
ninja -C out/debug/
- 构建完成后,可以在 out/debug/ 文件夹中找到应用程序二进制文件(.srec 文件),名称为chip-rw61x-secure-lock-example.srec。
shell
cd out/debug/
- 从输出文件生成一个二进制文件,使用 SDK 中的图像签名工具进行签名:
shell
arm-none-eabi-objcopy -R .flash_config -R .NVM -O binary chip-rw61x-secure-lock-example chip-rw61x-secure-lock-example.bin
- 对图像进行签名并将应用程序的原始二进制文件与标题和尾部包装在一起,
imgtool
这在 SDK 中提供,可以在以下位置找到:<matter_repo_root>/third_party/nxp/nxp_matter_support/github_sdk/sdk_next/repo/mcuxsdk/middleware/mcuboot_opensource/scripts/
。 - 可以运行以下命令(确保用适当的文件替换 /path/to/file/binary):
shell
cd ../../third_party/matter/third_party/nxp/nxp_matter_support/github_sdk/sdk_next/repo/mcuxsdk/middleware/mcuboot_opensource/scripts/
shell
python3 imgtool.py sign --key ~/<path-to-repo>/secure-lock/nxp/rt/rw61x/third_party/matter/third_party/nxp/nxp_matter_support/github_sdk/sdk_next/repo/mcuxsdk/examples/_boards/frdmrw612/ota_examples/mcuboot_opensource/keys/sign-rsa2048-priv.pem --align 4 --header-size 0x1000 --pad-header --pad --confirm --slot-size 0x440000 --max-sectors 1088 --version "1.0" ~/<path-to-repo>/secure-lock/nxp/rt/rw61x/out/debug/chip-rw61x-secure-lock-example.bin ~/<path-to-repo>/secure-lock/nxp/rt/rw61x/out/debug/chip-rw61x-secure-lock-example_SIGNED.bin
?注意:?参数
slot-size
和max-sectors
与为主应用程序和辅助应用程序保留的分区大小一致。(默认情况下,每个应用程序的保留大小为 4.4 MB)。如果修改了这些分区的大小,则slot-size
和 也max-sectors
应进行相应调整。
4.4 步骤 4:将电路板生命周期更改为 OEM 封闭
由于该开发板需要运行特定的加密操作,因此需要将其生命周期更改为 OEM 封闭。为此,请遵循应用说明中的“Flash your board”章节。
?警告?:请注意,将主板的生命周期更改为 OEM 封闭式是不可逆的操作。如果您想了解更多关于此更改的信息,请参阅我们的专用AN14105:了解 SECO 安全存储和非易失性内存管理
?注意?:如果您使用 SEC 工具刷新了电路板,则可以跳过步骤 4.5。
4.5. 步骤 5:闪存二进制文件(可选)
- 为了烧录二进制文件,我们使用了 Segger 的 JLink。您可以从https://www.segger.com/products/debug-probes/j-link下载并安装。安装完成后,从命令行(Windows 或 Linux 系统均可)运行 JLink 来烧录映像:
shell
$ JLink
- 运行以下命令:
shell
J-Link> connect
Device> ? # you will be presented with a dialog -> select `CORTEX-M33`
Please specify target interface:
J) JTAG (Default)
S) SWD
T) cJTAG
TIF> S
Specify target interface speed [kHz]. <Default>: 4000 kHz
Speed> # <enter>
- 擦除闪存
shell
J-Link> exec EnableEraseAllFlashBanks
shell
J-Link> erase 0x8000000, 0x88a0000
- 刷新 mcuboot 二进制文件
shell
J-Link> loadfile <path_to_mcuboot>/mcuboot_opensource.axf
- 刷写应用程序签名的二进制文件
shell
J-Link> loadbin <path-to-app>/chip-rw61x-secure-lock-example_SIGNED.bin 0x8020000
- 刷新工厂数据二进制文件
shell
J-Link> loadbin <path-to-factory-data>/factory_data.bin 0x0bfff000
- 然后按下 FRDM-RW612 板 (SW1) 上的重置按钮并检查应用程序是否正在启动。
5. 运行演示
- 将 Matter PAA 证书(可在应用说明的EdgeLock 2GO 托管配置章节获取)加载到 Matter 控制器的专用文件夹中。您可以使用 SCP 从 PC 加载该证书。
- 使用 openssl 或任何类似工具将证书转换为 .DER 格式:
shell
openssl x509 -in MATTER-01-CERT_NXP_GLOB_MatterPAA_RCA-63709330400001-01-20221122152804-EC_SEC_P256R1-DD5BAD.crt -out PAA_cert.der -outform DER
- 使用 BLE 和 Wi-Fi 配对 FRDM-RW612 板以及包含转换后的 PAA 证书的文件夹路径:
shell
chip-tool pairing ble-wifi <node_id> <wifi_ssid> <wifi_password> <setup_pincode> <discriminator> --paa-trust-store-path <path_to_el2go_paa_certificate>
?注意?:setup_pincode和discriminator值是生成 factorydata 二进制文件时使用的值。nodeid可以是 1 到 65535 之间的任意值。
- 您可以查看应用说明中的“事项调试”章节,了解有关如何验证所有安全调试步骤的更多详细信息。
- 通过发送锁定或解锁命令开始与电路板交互:
shell
chip-tool doorlock lock-door 1 1 --timedInteractionTimeoutMs 1000
shell
chip-tool doorlock unlock-door 1 1 --timedInteractionTimeoutMs 1000
- 电路板上的 RGB led(D2)将开始闪烁,表示从一种状态变为另一种状态,然后根据设置状态设置为开/关。
6. 支持
如有任何问题,请联系您的 FAE 或在NXP 社区上创建工单。
项目元数据
来源:恩智浦appcodehub