Matter 制造数据流程指南:NXP 平台的证书生成、Provisioning 数据写入与 DAC 私钥安全存储
【免费下载链接】connectedhomeipMatter (formerly Project CHIP) creates more connections between more objects, simplifying development for manufacturers and increasing compatibility for consumers, guided by the Connectivity Standards Alliance.项目地址: https://gitcode.com/GitHub_Trending/co/connectedhomeip
导读
本文围绕 Matter (connectedhomeip) 仓库中 NXP 平台的制造数据(Manufacturing Data)生成与写入全流程展开:默认情况下示例应用把通用测试证书与配置数据随应用代码一并烧录,而量产阶段必须为每台设备生成独立的制造数据。读完本文,你将掌握:使用chip-cert与spake2p工具生成 PAA/PAI/DAC/CD 证书链、用factory_data_generator工具生成明文或 AES 加密的 KLV 格式工厂数据二进制、按芯片平台(MCX W71/W72、RW61x、RT1060/RT1170)写入指定 Flash 地址,以及通过 SSS/EdgeLock 2Go 实现 DAC 私钥安全存储的两种进阶方案。
1. 制造数据在 Matter 设备生命周期中的位置
在 Matter(原 Project CHIP)的认证体系里,每台设备出厂前都需要烧录一组与设备唯一性绑定的数据,包括:
- 证书链:PAA(Product Attestation Authority,产品认证机构)、PAI(Product Attestation Intermediate,产品认证中间证书)、DAC(Device Attestation Certificate,设备认证证书);
- Certification Declaration(CD):由 CSA 签发的认证声明;
- Provisioning 数据:SPAKE2+ 配对参数(salt、iteration count、passcode、verifier)、discriminator、VID/PID、产品信息、序列号、制造日期等。
默认情况下,NXP 示例应用使用嵌入在应用代码中的通用测试证书与配置数据,仅适合开发调试。而“最终量产”阶段的应用应当依照本文描述的流程,为每一台设备生成独立的制造数据。这一整套流程由 docs/platforms/nxp/nxp_manufacturing_flow.md 定义,本指南以该文档为主线,并结合仓库中 scripts/tools/nxp 目录下的真实工具实现进行展开。
2. 前置条件:构建 chip-cert 与 spake2p 工具
制造数据生成依赖两个由 Matter 仓库构建出来的命令行工具:
chip-cert:用于生成、转换 Matter 证书(PAA/PAI/DAC)与认证声明 CD,源码位于src/tools/chip-cert;spake2p:用于生成 SPAKE2+ verifier,即配对口令(passcode)对应的验证器,源码位于src/tools/spake2p。
在 Matter 仓库根目录先执行gn gen生成构建文件:
gn gen out然后分别构建两个工具:
ninja -C out chip-cert ninja -C out spake2p构建完成后,chip-cert与spake2p的可执行文件会位于out/目录下,后续所有生成步骤都需要通过--chip_cert_path、--spake2p_path参数引用它们。
3. 第一步:生成证书与认证声明
3.1 工具概览
NXP 提供了 Python 脚本 scripts/tools/nxp/generate_certs.py 来批量生成证书。从源码看,该脚本内部通过subprocess调用chip-cert执行三类操作:
gen-att-cert:生成 PAA(--type a)、PAI(--type i)、DAC(--type d)证书,其中 PAI 由 PAA 签发、DAC 由 PAI 签发,形成完整的 attestation 证书链;gen-cd:生成 Certification Declaration;convert-cert/convert-key:将.pem证书与密钥转换为.der格式。
脚本总是会生成 PAI 与 DAC 证书/密钥;PAA 证书/密钥与 CD 是否生成取决于参数(见下表)。
3.2 参数说明
| 参数 | 说明 | 类型 | 是否必填 |
|---|---|---|---|
--chip_cert_path | chip-cert可执行文件路径 | string | 是 |
--output | 证书输出目录 | string | 是 |
--vendor_id | Vendor Identification Number(厂商识别号) | integer 或 hex integer | 是 |
--product_id | Product Identification Number(产品识别号) | integer 或 hex integer | 是 |
--vendor_name | 人类可读的厂商名称 | string | 是 |
--product_name | 人类可读的产品名称 | string | 是 |
--gen_cd | 是否生成 Certification Declaration | boolean | 否 |
--cd_type | CD 类型:0- development,1- provisional,2- official | integer | 否 |
--device_type | 节点实现的主设备类型(须为 Matter Device Library 规范中的设备类型标识符) | int | 否 |
--paa_cert | PAA 证书路径,不提供时自动生成 | string | 否 |
--paa_key | PAA 密钥路径,不提供时自动生成 | string | 否 |
--valid_from | 证书有效期起始日期 | string | 否 |
--lifetime | 证书有效期(天) | string | 否 |
从 scripts/tools/nxp/generate_certs.py 的参数定义可以看到两个值得注意的默认值:
--cd_type默认值为1(provisional);--valid_from默认值为2023-01-01 00:00:00,--lifetime默认值为7305(约 20 年),按<YYYY>-<MM>-<DD> [<HH>:<MM>:<SS>]格式传入;--vendor_id/--product_id使用int(i, 0)解析,因此十进制与十六进制(如0x1037)均被接受。
输入参数支持整数与十六进制整数,例如0x1037。当--gen_cd启用时,脚本使用仓库中 CSA 测试签名证书 credentials/test/certification-declaration/Chip-Test-CD-Signing-Cert.pem 及其密钥对 CD 签名,并输出为Chip-Test-CD-<VID>-<PID>.der。
3.3 生成 PAA、PAI、DAC、CD
以下示例命令会生成 CD、PAA、PAI 与 DAC 证书和密钥,并以.pem与.der两种格式输出:
python scripts/tools/nxp/generate_certs.py --gen_cd --cd_type 1 --chip_cert_path ./out/chip-cert --vendor_id 0x1037 --product_id 0xA220 --vendor_name "NXP Semiconductors" --product_name all-clusters-app --device_type 65535 --output .生成后,输出目录中会得到类似下面的文件集合(命名规则可在 scripts/tools/nxp/generate_certs.py 中看到):
Chip-Test-CD-1037-A220.der(认证声明)Chip-PAA-NXP-Cert.pem/.der、Chip-PAA-NXP-Key.pemChip-PAI-NXP-1037-A220-Cert.pem/.der、Chip-PAI-NXP-1037-A220-Key.pemChip-DAC-NXP-1037-A220-Cert.pem/.der、Chip-DAC-NXP-1037-A220-Key.pem
注意:本文给出的命令仅用于演示,请根据你的实际用例(VID/PID、证书类型、有效期等)进行调整。
如果要查看所有参数的详细说明与默认值,可直接运行:
python scripts/tools/nxp/generate_certs.py --help3.4 复用自有 PAA
若已拥有自己的 PAA 证书与密钥(例如由认证机构签发),可通过--paa_cert与--paa_key传入路径,脚本将跳过 PAA 的生成,直接用你提供的 PAA 为 PAI 签名(对应源码 scripts/tools/nxp/generate_certs.py 中的分支逻辑)。这也意味着 PAI/DAC 会随每次生成的 VID/PID 而不同,而 PAA 可复用。
提示:运行
python scripts/tools/nxp/generate_certs.py --help可获取参数的完整帮助信息。
4. 第二步:生成 Provisioning(工厂)数据二进制
4.1 工具实现与数据格式
工厂数据由 scripts/tools/nxp/factory_data_generator/generate.py 生成,该工具由三个文件组成(详见 scripts/tools/nxp/factory_data_generator/README.md):
generate.py:入口,负责argparse参数解析、调用spake2p、组装并写出二进制;default.py:定义基类InputArgument及IntArgument、Base64Argument、StrArgument、FileArgument等默认参数类;custom.py:为每个需要写入二进制的参数定义具体类,并分配唯一key()(magic number)。
最终产物是一份KLV(Key-Length-Value)编码的二进制:每个参数对应一个(K, L, V)三元组,K为 1 字节小端 key、L为 2 字节小端长度、V为编码后的值。例如 scripts/tools/nxp/factory_data_generator/custom.py 中Verifier的 key 为 1、Salt的 key 为 2、IterationCount为 3、DacPKey为 4……直至El2GoDacCertID为 26。数据在写入时按 key 升序排列,以保证同一输入生成的二进制在 SHA-256 层面可复现比对(见KlvGenerator.generate())。
二进制的整体封装(见 generate.py 的to_bin)为:
- 拼接所有 KLV 条目;
- 计算内容前 4 字节 SHA-256 作为完整性校验值;
- 前置数据长度(4 字节小端);
- 前置 Hash ID(
CE47BA5E反转后的字节序); - 可选:若指定
--hw_params,再追加APP_FACT_DATA:头部与 CRC-16 (XMODEM) 校验,将数据存入 Hardware Parameters APP 分区; - 若指定 AES key,则先将 KLV 内容按 16 字节对齐补齐后使用AES-128/256 ECB加密,再附加校验值与长度头。
4.2 生成未加密的工厂数据(推荐默认)
SPAKE2+ 参数(salt、iteration count、passcode、verifier)是设备配对的关键数据,命令行中直接给出 salt 与 passcode,spake2p会在生成过程中自动计算 verifier:
python3 ./scripts/tools/nxp/factory_data_generator/generate.py -i 10000 -s UXKLzwHdN3DZZLBaL2iVGhQi/OoQwIwJRQV4rpEalbA= -p 14014 -d 1000 --vid 0x1037 --pid 0xA220 --vendor_name "NXP Semiconductors" --product_name "Lighting app" --serial_num "12345678" --date "2023-01-01" --hw_version 1 --hw_version_str "1.0" --cert_declaration ./Chip-Test-CD-1037-A220.der --dac_cert ./Chip-DAC-NXP-1037-A220-Cert.der --dac_key ./Chip-DAC-NXP-1037-A220-Key.der --pai_cert ./Chip-PAI-NXP-1037-A220-Cert.der --spake2p_path ./out/spake2p --unique_id "00112233445566778899aabbccddeeff" --out ./factory_data.bin4.3 使用预生成的 verifier
如果已经通过其他途径生成了 verifier,可以传入--spake2p_verifier直接使用,spake2p将不会被调用:
python3 ./scripts/tools/nxp/factory_data_generator/generate.py -i 10000 -s UXKLzwHdN3DZZLBaL2iVGhQi/OoQwIwJRQV4rpEalbA= -p 14014 -d 1000 --vid "0x1037" --pid "0xA220" --vendor_name "NXP Semiconductors" --product_name "Lighting app" --serial_num "12345678" --date "2023-01-01" --hw_version 1 --hw_version_str "1.0" --cert_declaration ./Chip-Test-CD-1037-A220.der --dac_cert ./Chip-DAC-NXP-1037-A220-Cert.der --dac_key ./Chip-DAC-NXP-1037-A220-Key.der --pai_cert ./Chip-PAI-NXP-1037-A220-Cert.der --spake2p_path ./out/spake2p --spake2p_verifier ivD5n3L2t5+zeFt6SjW7BhHRF30gFXWZVvvXgDxgCNcE+BGuTA5AUaVm3qDZBcMMKn1a6CakI4SxyPUnJr0CpJ4pwpr0DvpTlkQKqaRvkOQfAQ1XDyf55DuavM5KVGdDrg== --unique_id "00112233445566778899aabbccddeeff" --out ./factory_data.bin注意:当设置了--spake2p_verifier时,所有 SPAKE2+ 输入(salt、iteration count、passcode)仍会被编码进二进制,只是不再现场计算 verifier(对应 generate.py 的逻辑)。
4.4 生成 AES 加密的工厂数据
如需防止工厂数据在 Flash 中被直接读取,可加上--aes128_key选项,整个数据集会以 AES-128 ECB 加密后写入(若指定--aes256_key则用 AES-256,见 generate.py 的优先级判断):
--aes128_key 2B7E151628AED2A6ABF7158809CF4F3C将上述选项追加到 4.2 或 4.3 任一命令即可。前提是目标应用/板卡必须支持该特性:它持有解密私钥并实现了工厂数据的解密机制。仓库中 Kconfig 亦默认开启 AES-128 ECB 加密,config/nxp/cmake/Kconfig.matter.nxp 中CHIP_ENCRYPTED_FACTORY_DATA默认y,CHIP_ENCRYPTED_FACTORY_DATA_AES128_KEY默认值为2B7E151628AED2A6ABF7158809CF4F3C。
4.5 必需参数与可选参数速查
必需参数解释:
-i -> SPAKE2+ iteration(迭代次数) -s -> SPAKE2+ salt(base64 编码字符串) -p -> SPAKE2+ passcode(配对口令) -d -> discriminator(发现码) --vid -> Vendor ID --pid -> Product ID --vendor_name -> Vendor Name --product_name -> Product Name --hw_version -> Hardware Version 数字形式 --hw_version_str -> Hardware Version 字符串形式 --cert_declaration -> Certification Declaration(der 格式)路径 --pai_cert -> PAI 证书(der 格式)路径 --spake2p_path -> spake2p 工具路径 --out -> 输出二进制文件名可选参数解释:
--dac_cert -> DAC 证书(der 格式)路径 --dac_key -> DAC 密钥(der 格式)路径 --EL2GO_bin -> EdgeLock 2Go 二进制(bin 格式)路径 --EL2GO_DAC_KEY_ID -> 配置于 EdgeLock 2Go 中的 DAC key ID(hex 值) --EL2GO_DAC_CERT_ID -> 配置于 EdgeLock 2Go 中的 DAC 证书 ID(hex 值) --dac_key_password -> 解码 DAC 密钥的密码 --dac_key_use_sss_blob -> 当 --dac_key 指向加密 blob 而非实际 DAC 私钥时使用。 blob 元数据大小为 24,因此总长度 = 私钥长度(32)+ 24 = 56。默认关闭。 --spake2p_verifier -> 预生成的 SPAKE2+ verifier(base64 编码)。设置后所有 SPAKE2+ 输入都会被编码进二进制,且不再调用 spake2p 生成新 verifier。 --aes128_key -> 用于加密整个数据集的 128 位 AES 密钥。使用前请确认目标应用/板卡 持有私钥并实现了解密机制。 --date -> 制造日期(YYYY-MM-DD 格式) --part_number -> 部件号(字符串) --product_url -> 产品 URL(字符串) --product_label -> 产品标签(字符串) --serial_num -> 序列号 --unique_id -> 用于旋转设备 ID(rotating device id)生成的唯一 ID --product_finish -> 产品可见表面处理 --product_primary_color -> 产品可见部分代表色 --hw_params -> 使用 Hardware Parameters 组件的应用工厂数据补充说明(来自 custom.py 与 default.py 的实现细节):
- 字符串参数默认最大长度 32 字节,其中
ManufacturingDate为 16、HardwareVersionStr与ProductLabel为 64、ProductURL为 256;生成时若超出会被断言拦截; --product_finish的合法取值为["Other", "Matte", "Satin", "Polished", "Rugged", "Fabric"];--product_primary_color的合法取值有 21 种,如Black、Blue、Red、Silver、Gold等,编码时以 1 字节索引写入;--dac_key若未加--dac_key_use_sss_blob,会通过cryptography库将 DER 私钥解析并提取 32 字节原始私钥值写入;--vid/--pid固定以 2 字节小端写入,--hw_version同样为 2 字节,其余整数参数默认 4 字节小端。
5. 第三步:将工厂数据写入设备 Flash
根据目标 NXP 平台,写入方式与目标地址各不相同:
| 平台 | 工具 | 命令 | 说明 |
|---|---|---|---|
mcxw71 | JLink | loadfile factory_data.bin 0xFE080 | NA |
mcxw72 | blhost | write-memory 0x2002680 factory_data.bin | 工厂数据写入IFR0的 sector 1 预定偏移处,此处地址已展开 |
rw61x | JLink | loadfile factory_data.bin 0xBFFF000 | 0xBFFF000是对应.map文件中符号__FACTORY_DATA_START的值 |
rt1060 | MCUXpresso Flash Tool GUI | NA | 地址由.map文件中__FACTORY_DATA_START符号给出 |
rt1170 | MCUXpresso Flash Tool GUI | NA | 地址由.map文件中__FACTORY_DATA_START符号给出 |
提示:
0x2002680这类地址会因构建/链接结果而变化,请以实际.map文件中的__FACTORY_DATA_START符号值为准。
6. 第四步:构建应用与测试验证
6.1 启用工厂数据
构建时需显式启用工厂数据支持:
- GN 构建:在
gn gen构建命令中加入参数nxp_use_factory_data=true; - CMake 构建:在构建命令中加入
-DCONFIG_CHIP_FACTORY_DATA=y,或使用支持工厂数据的prj_<flavour>.conf配置文件。完整配置文件列表参见 docs/platforms/nxp/nxp_examples_freertos_platforms.md 的 “available project configuration files and platform compatibility” 一节。
从 CMake 侧的桥接逻辑可以看到这些开关的对应关系(config/nxp/chip-cmake-freertos/CMakeLists.txt):
matter_add_gn_arg_bool("nxp_use_factory_data" ${CONFIG_CHIP_FACTORY_DATA}) matter_add_gn_arg_bool("nxp_enable_secure_whole_factory_data" ${CONFIG_CHIP_ENABLE_SECURE_WHOLE_FACTORY_DATA}) matter_add_gn_arg_bool("nxp_enable_secure_EL2GO_factory_data" ${CONFIG_CHIP_ENABLE_EL2GO_FACTORY_DATA})即 GN 参数nxp_use_factory_data对应 Kconfig 的CONFIG_CHIP_FACTORY_DATA。此外 config/nxp/cmake/Kconfig.matter.nxp 中还提供了丰富的配套开关,例如:
CONFIG_CHIP_PLAT_LOAD_REAL_FACTORY_DATA:允许从 Flash 加载已烧录的工厂数据;CONFIG_CHIP_DEVICE_PRODUCT_URL/CONFIG_CHIP_DEVICE_PRODUCT_LABEL/CONFIG_CHIP_DEVICE_PART_NUMBER:以 Basic Information 集群属性暴露的产品 URL、标签、部件号;CONFIG_CHIP_FACTORY_DATA_CUSTOM_BACKEND:使用自定义工厂数据后端(与默认 NXP 实现互斥)。
6.2 使用新 PAA 运行 chip-tool 验证
由于设备端 DAC 是自签发的测试链,controller 侧需要信任对应的 PAA 才能完成 attestation 校验。用--paa-trust-store-path指定 PAA 存放目录运行 chip-tool:
./chip-tool pairing ble-thread 2 hex: $hex_value 14014 1000 --paa-trust-store-path /home/ubuntu/certs/paa参数解释:
--paa-trust-store-path -> 生成的 PAA(der 格式)所在路径注意:paa-trust-store-path目录中只能放置 PAA 证书,不要混入其他证书,否则会干扰 chip-tool 的信任库解析。PAA 证书可通过 SCP 等方式复制到运行 chip-tool 的机器上。这一步仅用于测试自签 DAC 的场景;若使用由生产级 PAI 签发的 DAC,通常不需要显式指定 PAA。
6.3 已知说明
- 制造数据烧录的实现已使用
OpenSSL 1.1.1l生成的测试证书完成验证; - 启用工厂数据所需的示例 DAC、PAI、PAA 证书(包含
dut1/dut2两套 DAC)位于 scripts/tools/nxp/demo_generated_certs 目录,结构为dac/、pai/、paa/三个子目录,便于快速搭建验证环境。
7. 进阶安全方案:保护 DAC 私钥
量产场景中,DAC 私钥是设备 attestation 信任链的根,绝不能以明文形式暴露给攻击者。NXP 平台提供了两条基于安全子系统(SSS,Secure SubSystem)的加固路径。
7.1 方案一:基于 EdgeLock 2Go(EL2GO)的云端安全烧录
EdgeLock 2Go 服务可在制造阶段将 DAC key/cert 安全地预置到安全元件中。使用前需先按 NXP 的 EL2GO 流程(AN14705)生成 EL2GO 数据(含加密的 DAC 私钥与证书的secure_objects.bin)。随后在工厂数据生成命令中追加以下选项:
--EL2GO_bin ~/secure_objects.bin # 含加密 DAC 私钥与证书的 EL2GO 信息 --EL2GO_DAC_KEY_ID 0x40000 # EL2GO key 生成时选定的 DAC key ID --EL2GO_DAC_CERT_ID 0x40001 # EL2GO key 生成时选定的 DAC 证书 ID完整参考命令:
python3 ./scripts/tools/nxp/factory_data_generator/generate.py -i 10000 -s UXKLzwHdN3DZZLBaL2iVGhQi/OoQwIwJRQV4rpEalbA= -p ${passcode} -d ${discriminator} --vid "0x$VID" --pid "0x$PID" --vendor_name "NXP Semiconductors" --product_name "Thermostat" --serial_num "12345678" --date "$DATE" --hw_version 1 --hw_version_str "1.0" --cert_declaration $FACTORY_DATA_DEST/Chip-Test-CD-$VID-$PID.der --EL2GO_bin ~/secure_objects.bin --EL2GO_DAC_KEY_ID 0x40000 --EL2GO_DAC_CERT_ID 0x40001 --pai_cert $FACTORY_DATA_DEST/Chip-PAI-NXP-$VID-$PID-Cert.der --spake2p_path ./out/spake2p --unique_id "00112233445566778899aabbccddeeff" --out $FACTORY_DATA_DEST/factory_data.bin支持平台:rw61x
构建启用方式:
- GN 构建:在
nxp_use_factory_data=true基础上,再以nxp_enable_secure_EL2GO_factory_data=true构建 Matter 应用; - CMake 构建:启用 Kconfig 的
CONFIG_CHIP_ENABLE_EL2GO_FACTORY_DATA,可写入支持工厂数据的prj_<flavour>.conf,或在命令行加-DCONFIG_CHIP_ENABLE_EL2GO_FACTORY_DATA=y。
EL2GO 模式下,密钥始终保持加密状态、只对 SSS 可用,所有需要 DAC 私钥的操作都会被移交到 SSS 执行。仓库中还为 EL2GO 预置了 PSA 持久化 key ID 区间(config/nxp/cmake/Kconfig.matter.nxp):CHIP_CRYPTO_PSA_KEY_ID_EL2GO_BASE默认0x40000,CHIP_CRYPTO_PSA_KEY_ID_EL2GO_END默认0x4FFFF,与示例中的0x40000/0x40001ID 一致。
7.2 方案二:SSS 本地加密 blob(无需 EL2GO)
对于具备安全子系统(SSS)的 NXP 平台,可将 DAC 私钥转换为加密 blob,blob 会覆盖工厂数据中的 DAC 私钥区域,并在应用初始化时由工厂数据提供者(FactoryDataProvider)实例导入 SSS。
支持平台:mcxw71、rw61x
在该架构下,制造流程之外 DAC 私钥始终只能由 SSS 使用,所有需要 DAC 私钥的操作都会被移交到 SSS。应用在初始化时会检查 DAC 私钥是否已转换,若未转换则自动转换;但出于安全考虑,转换应在制造阶段完成。
参考命令(注意该示例未提供--dac_key,应用会在运行时完成转换):
python3 ./scripts/tools/nxp/factory_data_generator/generate.py -i 10000 -s UXKLzwHdN3DZZLBaL2iVGhQi/OoQwIwJRQV4rpEalbA= -p 14014 -d 1000 --vid "0x1037" --pid "0xA221" --vendor_name "NXP Semiconductors" --product_name "Lighting app" --serial_num "12345678" --date "2023-01-01" --hw_version 1 --hw_version_str "1.0" --cert_declaration ./Chip-Test-CD-1037-A221.der --dac_cert ./Chip-DAC-NXP-1037-A221-Cert.der --dac_key ./Chip-DAC-NXP-1037-A221-Key.der --pai_cert ./Chip-PAI-NXP-1037-A221-Cert.der --spake2p_path ./out/spake2p --unique_id "00112233445566778899aabbccddeeff" --hw_params --out ./factory_data.bin此方案无需额外的二进制文件,后续步骤为:
- 将工厂数据二进制写入设备 Flash;
- 构建应用:GN 构建设置
nxp_use_factory_data=true;CMake 构建加-DCONFIG_CHIP_FACTORY_DATA=y或使用支持工厂数据的prj_<flavour>.conf(完整列表见 docs/platforms/nxp/nxp_examples_freertos_platforms.md); - 将应用烧录到板卡并正常使用。
烧录后工厂数据中应包含加密 blob 而非 DAC 私钥明文。
7.3 直接使用已转换的加密 blob
如果已经通过其他途径得到了 DAC 私钥的加密 blob,则无需再执行转换流程,改用--dac_key_use_sss_blob选项,此时--dac_key指向的是包含加密 blob 的二进制文件:
python3 ./scripts/tools/nxp/factory_data_generator/generate.py -i 10000 -s UXKLzwHdN3DZZLBaL2iVGhQi/OoQwIwJRQV4rpEalbA= -p 14014 -d 1000 --vid "0x1037" --pid "0xA221" --vendor_name "NXP Semiconductors" --product_name "Lighting app" --serial_num "12345678" --date "2023-01-01" --hw_version 1 --hw_version_str "1.0" --cert_declaration ./Chip-Test-CD-1037-A221.der --dac_cert ./Chip-DAC-NXP-1037-A221-Cert.der --dac_key ./Chip-DAC-NXP-1037-A221-Key-encrypted-blob.bin --pai_cert ./Chip-PAI-NXP-1037-A221-Cert.der --spake2p_path ./out/spake2p --unique_id "00112233445566778899aabbccddeeff" --dac_key_use_sss_blob --out ./factory_data_with_blob.bin请留意:此例中--dac_key指向的是包含加密 blob 的二进制文件,而非原始私钥。从源码看(custom.py),--dac_key_use_sss_blob会把文件原始内容(blob 元数据 24 字节 + 32 字节私钥 = 56 字节)直接作为 DAC 私钥字段写入,不再进行 DER 解析。
7.4 回退选项:明文 DAC 私钥
如需在无 SSS 的场景下直接使用明文 DAC 私钥(rw61x 不支持),可在 GN 构建中加入参数:
chip_use_plain_dac_key=true该选项与 SSS 方案互斥,仅在平台能力受限且接受私钥明文暴露于 Flash 的前提下使用。
8. 制造数据生成全流程回顾
| 阶段 | 工具/操作 | 产物 |
|---|---|---|
| 准备 | gn gen out+ninja -C out chip-cert/spake2p | chip-cert、spake2p可执行文件 |
| 证书 | scripts/tools/nxp/generate_certs.py | PAA/PAI/DAC 证书与密钥、CD(pem + der) |
| 工厂数据 | scripts/tools/nxp/factory_data_generator/generate.py | KLV 格式factory_data.bin(明文或 AES 加密) |
| 烧录 | JLink / blhost / MCUXpresso Flash Tool | 设备 Flash 中的工厂数据分区 |
| 验证 | chip-tool--paa-trust-store-path | 配对与 attestation 验证通过 |
9. 相关文档与源码索引
- 制造数据流程主文档:docs/platforms/nxp/nxp_manufacturing_flow.md
- 证书生成脚本:scripts/tools/nxp/generate_certs.py(配套 shell 版本见 scripts/tools/nxp/generate_cert.sh)
- 工厂数据生成器:scripts/tools/nxp/factory_data_generator(
generate.py、default.py、custom.py) - 示例证书:scripts/tools/nxp/demo_generated_certs
- NXP 平台配置与 Kconfig:config/nxp/cmake/Kconfig.matter.nxp、config/nxp/chip-cmake-freertos/CMakeLists.txt
- 支持的示例平台指南:docs/platforms/nxp/nxp_examples_freertos_platforms.md、docs/platforms/nxp/nxp_rw61x_guide.md、docs/platforms/nxp/nxp_mcxw72_guide.md、docs/platforms/nxp/nxp_se05x_guide.md
【免费下载链接】connectedhomeipMatter (formerly Project CHIP) creates more connections between more objects, simplifying development for manufacturers and increasing compatibility for consumers, guided by the Connectivity Standards Alliance.项目地址: https://gitcode.com/GitHub_Trending/co/connectedhomeip
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考