通过esp mfg_tools生成matter证书并加载分区

1、安装 python 依赖项

cd ~/esp/esp-matter/tools/mfg_tool
python3 -m pip install -r requirements.txt

cd ~/esp/esp-matter/connectedhomeip/connectedhomeip
source scripts/activate.sh
gn gen out/host
ninja -C out/host

export PATH="$PATH:~/esp/esp-matter/connectedhomeip/connectedhomeip/out/host"
cd ~/esp/esp-matter/tools/mfg_tool

./mfg_tool.py -cn "Mythermostat" -v 0xFFF2 -p 0x8001 --pai    -k ~/esp/esp-matter/connectedhomeip/connectedhomeip/credentials/test/attestation/Chip-Test-PAI-FFF2-8001-Key.pem    -c ~/esp/esp-matter/connectedhomeip/connectedhomeip/credentials/test/attestation/Chip-Test-PAI-FFF2-8001-Cert.pem    -cd ~/esp/esp-matter/connectedhomeip/connectedhomeip/credentials/test/certification-declaration/Chip-Test-CD-FFF2-8001.der

将生成的信息写入flash

//烧录进nvs分区
  esptool.py  write_flash 0x10000 ~/esp/esp-matter/tools/mfg_tool/out/fff2_8001/e5928011-f022-4c47-bc90-0f30115bb9dd/e5928011-f022-4c47-bc90-0f30115bb9dd-partition.bin

配置出厂信息分区

烧录生成的信息进对应分区

# Name,   Type, SubType, Offset,  Size, Flags
# Note: Firmware partition offset needs to be 64K aligned, initial 36K (9 sectors) are reserved for bootloader and partition table
esp_secure_cert,  0x3F, ,0xd000,    0x2000, encrypted
nvs,      data, nvs,     0x10000,   0x6000,
nvs_keys, data, nvs_keys,,          0x1000, encrypted
otadata,  data, ota,     ,          0x2000
phy_init, data, phy,     ,          0x1000,
ota_0,    app,  ota_0,   0x20000,   0x1E0000,
ota_1,    app,  ota_1,   0x200000,  0x1E0000,
fctry,    data, nvs,     0x3E0000,  0x6000
//烧录进fatry 也可以使用乐鑫的烧录工具进行写入
 esptool.py  write_flash 0x3E0000 ~/esp/esp-matter/tools/mfg_tool/out/fff2_8001/e5928011-f022-4c47-bc90-0f30115bb9dd/e5928011-f022-4c47-bc90-0f30115bb9dd-partition.bin

配网连接码

//QR code 链接
https://project-chip.github.io/connectedhomeip/qrcode.html?data=MT:634J0CEK0119UQ4N410
//手动配对码:
53070553

之后就可以使用生成的新QRcode进行配网

2、配置sdkconfig

启用ESP32 Factory Data Provider
[组件配置 → CHIP 设备层 → 调试选项 → 使用 ESP32 Factory Data Provider]
启用配置选项CONFIG_ENABLE_ESP32_FACTORY_DATA_PROVIDER以使用 CommissionableDataProvider 和 DeviceAttestationCredentialsProvider 的 ESP32 特定实现。
启用ESP32 Device Instance Info Provider
[组件配置 → CHIP 设备层 → 调试选项 → 使用 ESP32 设备实例信息提供程序]
启用配置选项ENABLE_ESP32_DEVICE_INSTANCE_INFO_PROVIDER以从工厂分区获取设备实例信息。
启用Attestation - Factory
[组件配置 → ESP 事项 → DAC 提供商选项 → 证明 - 工厂]
启用配置选项CONFIG_FACTORY_PARTITION_DAC_PROVIDER以在证明期间使用来自工厂分区的 DAC 证书。
设置chip-factory namespace partition label
【组件配置→CHIP设备层→物质制造选项→芯片工厂命名空间分区标签】
设置配置选项CHIP_FACTORY_NAMESPACE_PARTITION_LABEL以选择分区标签以将键值存储在“chip-factory”命名空间中。默认选择的分区标签是nvs

使用 esp安全证书分区

1.1 ESP 安全证书分区

  • 预先预配设备时,将为 设备并存储在名为 ESP安全证书的分区中。
  • 在事务预配置服务中,事务 DAC 证书是 在 ESP安全证书分区中预烧录。
  • ESP32SecureCertDACProvider 读取 PKI 凭据 尤其是安全cert_partition。
  • DAC,PAI和私钥是从esp安全证书分区读取的,但是 证书声明是从工厂数据分区读取的。 因此,除了 ESP安全证书分区。
  • esp安全证书分区可以在主机上生成 configure_esp安全的cert.py 实用程序。
  • esp安全cert_partition的使用在照明应用程序中进行了演示。

1.2 先决条件:

要生成 esp安全证书分区和工厂数据分区,我们 需要 DAC 和 PAI 证书以及 .der 中的私钥(DAC 密钥) 格式。工厂data_provider还需要证书 .der 格式的声明。生成所需的证书和密钥 在下面给出的步骤中提到。

1.2.1 构建认证生成工具:

运行以下命令:

cd path/to/connectedhomeip 
source scripts/activate.sh 
gn gen out/host 
ninja -C out/host 
chip-cert cd out/host

在 /path/to/connectedhomeip/out/host 处运行以下命令。

1.2.2 生成认证声明 CD证书

./chip-cert gen-cd -K ../../credentials/test/certification-declaration/Chip-Test-CD-Signing-Key.pem -C ../../credentials/test/certification-declaration/Chip-Test-CD-Signing-Cert.pem -O esp_dac_fff1_8000.der -f 1 -V 0xfff1 -p 0x8000 -d 0x0016 -c "CSA00000SWC00000-01" -l 0 -i 0 -n 1 -t 0

1.2.3 生成PAI

./chip-cert gen-att-cert -t i -c "ESP TEST PAI" -V 0xfff1 -P 0x8000 -C ../../credentials/development/attestation/Chip-Development-PAA-Cert.pem -K ../../credentials/development/attestation/Chip-Development-PAA-Key.pem -o Esp-Development-PAI-Cert.pem -O Esp-Development-PAI-Key.pem -l 4294967295

自建测试PAI

./chip-cert gen-att-cert -t i -c "ESP TEST PAI" -V 0x1280 -P 0x0301 -C ./temp/PAA_certificate.pem -K ./temp/PAA_key.pem -o ./temp/SiterWell-PAI-Cert.pem -O ./temp/SiterWell-PAI-Key.pem -l 4294967295

1.2.4 生成数字转换器 DAC

./chip-cert gen-att-cert -t d -c "ESP TEST DAC 01" -V 0xfff1 -P 0x8000 -C Esp-Development-PAI-Cert.pem -K Esp-Development-PAI-Key.pem -o Esp-Development-DAC-01.pem -O Esp-Development-DAC-Key-01.pem -l 4294967295

./chip-cert gen-att-cert -t d -c "ESP TEST DAC 01" -V 0xfff1 -P 0x8000 -C ./temp/SiterWell-PAI-Cert.pem -K ./temp/SiterWell-PAI-Key.pem -o SiterWell-DAC-01.pem -O SiterWell-DAC-Key-01.pem -l 4294967295

1.2.5 更改证书和密钥的格式(.pem 到 .der 格式)

  • 将 DAC 密钥从 .pem 转换为 .der 格式。
openssl ec -in Esp-Development-DAC-Key-01.pem -out Esp-Development-DAC-Key-01.der -inform pem -outform der
  • 将 DAC 和 PAI 证书从 .pem 转换为 .der 格式
openssl x509 -in Esp-Development-DAC-01.pem -out Esp-Development-DAC-01.der -inform pem -outform der 
openssl x509 -in Esp-Development-PAI-Cert.pem -out Esp-Development-PAI-Cert.der -inform pem -outform der

步骤 1.2 中的证书将在 /path/to/connectedhomeip/out/host.有关步骤 1.3 和 1.4,请转到 连接家庭IP/脚本/工具 ,设置IDF_PATH。

生成证书流程小总结:
1、生成PAA
./chip-cert gen-att-cert --type a --subject-cn "Matter Development PAA 01" --valid-from "2020-10-15 14:23:43" --lifetime 7305 --out-key Chip-PAA-Key.pem --out Chip-PAA-Cert.pem
2、生成PAI
./chip-cert gen-att-cert --type i --subject-cn "Matter Development PAI 01" --subject-vid FFF1 --valid-from "2020-10-15 14:23:43" --lifetime 7305 --ca-key Chip-PAA-Key.pem --ca-cert Chip-PAA-Cert.pem --out-key Chip-PAI-Key.pem --out Chip-PAI-Cert.pem
3、生成DAC
./chip-cert gen-att-cert --type d --subject-cn "Matter Development DAC 01" --subject-vid FFF1 --subject-pid 0123 --valid-from "2020-10-15 14:23:43" --lifetime 7305 --ca-key Chip-PAI-Key.pem --ca-cert Chip-PAI-Cert.pem --out-key Chip-DAC-Key.pem --out Chip-DAC-Cert.pem
4、验证节点证书
./chip-cert validate-att-cert --dac Chip-DAC-Cert.pem --pai Chip-PAI-Cert.pem --paa Chip-PAA-Cert.pem
5、也可以使用OpenSSL进行证书链验证同第四步
openssl verify -CAfile Chip-PAA-Cert.pem -untrusted Chip-PAI-Cert.pem Chip-DAC-Cert.pem

1.3 生成 esp安全cert_partition

要生成 esp安全cert_partition请使用

pip install esp-secure-cert-tool

生成 esp安全cert_partition的示例命令

configure_esp_secure_cert.py --private-key path/to/dac-key --device-cert path/to/dac-cert --ca-cert path/to/pai-cert --target_chip esp32c3 --port /dev/ttyUSB0 -- skip_flash

~/.espressif/python_env/idf5.0_py3.8_env/lib/python3.8/site-packages/configure_esp_secure_cert.py

https://github.com/espressif/esp安全cert_mgr/树/主/工具#生成-esp安全证书分区 以获取更多帮助。

1.4 生成工厂数据分区

生成工厂数据分区的示例命令

./generate_esp32_chip_factory_bin.py -d 3434 -p 99663300 \ --product-name ESP-lighting-app --product-id 0x8000 \ --vendor-name Test-vendor --vendor-id 0xFFF1 \ --hw-ver 1 --hw-ver-str DevKit \ --dac-cert path/to/dac-cert \ --dac-key path/to/dac-key \ --pai-cert path/to/pai-cert \ --cd path/to/certificate-declaration

https://github.com/project-chip/connectedhomeip/blob/master/docs/guides/esp32/factorydata.md#generate-nvs-binary-image 以生成工厂data_partition。

1.5 使用以下配置选项构建固件

```

禁用 DS 外设支持

CONFIGESPSECURE_CERTDSPERIPHERAL=n

使用 DAC 提供程序实现从安全证书分区读取证明数据

CONFIGSECCERTDACPROVIDER=Y

启用一些从出厂分区读取CD和其他基本信息的选项

配置启用ESP32工厂数据提供程序=Y 配置启用ESP32设备实例信息提供程序=Y 配置芯片工厂命名空间分区标签=“FCTRY” ```

为了使用esp安全证书分区,除了启用上述 配置选项,您还应该具有 ESP安全证书分区和工厂 应用中的分区。有关参考,请参阅分区.csv文件 照明应用程序。

1.6 烧录固件、安全证书和出厂分区

构建和刷新

idf.py -p (PORT) build flash

闪存和出厂分区二进制文件esp_secure_cert

分区二进制文件包含设备证明信息 工厂分区二进制文件包含物质制造特定数据。esp_secure_cert

  • 闪存分区二进制文件

esptool.py -p (PORT) write_flash 0xd000 path/to/secure_cert_partition.bin
  • 闪存工厂分区二进制文件
esptool.py -p (PORT) write_flash 0x3E0000 path/to/factory_partition.bin

监控

idf.py monitor

请通过查看地址来刷新上述分区 分区.csv.上述命令仅用于示例目的。

1.6 使用切屑工具测试调试

从主机运行以下命令以调试设备。

./chip-tool pairing ble-wifi 1234 my_SSID my_PASSPHRASE my_PASSCODE my_DISCRIMINATOR --paa-trust-store-path /path/to/PAA-Certificates/

例如:

./chip-tool pairing ble-wifi 0x7283 my_SSID my_PASSPHRASE 99663300 3434 --paa-trust-store-path /path/to/connectedhomeip/credentials/development/attestation/

测试生成温控器证书:

VID,PID和测试PAI自己生成后
//启动环境 
get_idf
get_matter
//安装依赖
python3 -m pip --default-timeout=200 install -r requirments.txt

cd connectedhomeip/connectedhomeip
//gn gen out/host 我已经生成环境不需要再执行
//ninja -C build
//生成CD证书 -CHIP认证声明签名消息。-K:包含用于签署新证书的CA私钥的文件或字符串, -C:包含要用于签署新证书的CA证书的文件或字符串
out/host/chip-cert gen-cd -f 1 -V 0x1xxx -p 0x0301 -d 0x00E \
                          -c "CSA00000SWC00000-01" -l 0 -i 0 -n 1 -t 0 \
                          -K credentials/test/certification-declaration/Chip-Test-CD-Signing-Key.pem \
                          -C credentials/test/certification-declaration/Chip-Test-CD-Signing-Cert.pem \
                          -O TEST_CD_1xxx_0301.der 
cd  esp/esp-matter/tools/mfg_tool
//生成工厂分区用于调试测试设备
./mfg_tool.py --passcode 20202023 \
              --discriminator 3841 \
              -cd TEST_CD_1280_0301.der \
              -v 0x1xxx --vendor-name siterwell \
              -p 0x0301 --product-name  Thermostat\
              --hw-ver 1 --hw-ver-str DevKit 
//生成结果:目前不指定大小则默认为0x6000==24K大小的bin文件 '-s', '--size', type=any_base_int, default=0x6000
[2023-07-26 00:32:03,806] [   INFO] - Do not include the device attestation certificates and keys in partition binaries
[2023-07-26 00:32:03,806] [   INFO] - Number of manufacturing NVS images to generate: 1
[2023-07-26 00:32:03,858] [   INFO] - Generating Config CSV...
[2023-07-26 00:32:03,858] [   INFO] - Writing chip manifest CSV header...
[2023-07-26 00:32:03,859] [   INFO] - Appending chip master CSV row...
[2023-07-26 00:32:03,862] [   INFO] - Generated QR code: MT:4C9A00QJ01I.0648G00
[2023-07-26 00:32:03,862] [   INFO] - Generated manual code: 3497-031-2335
[2023-07-26 00:32:03,903] [   INFO] - Generated onboarding data and QR Code
[2023-07-26 00:32:03,907] [   INFO] - creating out/1xxx_301/csv
[2023-07-26 00:32:03,907] [   INFO] - creating out/1xxx_301/bin

Created CSV file: ===> out/1xxx_301/csv/matter_partition-1.csv

Creating NVS binary with version: V2 - Multipage Blob Support Enabled

Created NVS binary: ===> out/1xxx_301/bin/matter_partition-1.bin

Files generated in out/1280_301 ...
[2023-07-26 00:32:03,911] [   INFO] - Generated output files at: out/1xxx_301/6d37f610-66f6-4a95-931c-e041cefc2400

esptool.py  write_flash 0x3E0000 ~/code/cert/thrermostat-6d37f610-66f6-4a95-931c-e041cefc2400-partition.bin
//可用于调试的信息
PID:0x0301,
VID:0x1xxx,
dev-type:0x00E,
pin-code:20202023,
manualcode:3497-031-2335,
discriminator:3841,
QR code: MT:4C9A00QJ01I.0648G00

读取DAC并确认

如果实现了 esp_secure_cert 分区并将正确的安全证书二进制文件闪存到该分区中,那么可以像下面的伪代码一样读取并确认 DAC。

#include <credentials/CHIPCert.h>
#include <credentials/DeviceAttestationCredsProvider.h>
#include <platform/CommissionableDataProvider.h>

using namespace chip;
using namespace chip::DeviceLayer;
using namespace chip::Credentials;
uint16_t discriminator;

CHIP_ERROR chip_err = GetCommissionableDataProvider()->GetSetupDiscriminator(discriminator);
if (chip_err == CHIP_NO_ERROR) {
    ESP_LOGI(TAG, "fctry successfully read");
} else {
    ESP_LOGI(TAG, "fctry read failed");
}

uint8_t der_cert_buf[kMaxDERCertLength];
MutableByteSpan der_cert_span(der_cert_buf);
chip_err = GetDeviceAttestationCredentialsProvider()->GetDeviceAttestationCert(der_cert_span);
if (chip_err == CHIP_NO_ERROR) {
    ESP_LOGI(TAG, "esp_secure_cert successfully read");
} else {
    ESP_LOGI(TAG, "esp_secure_cert read failed");
}

AttestationCertVidPid dacVidPid;
chip_err = ExtractVIDPIDFromX509Cert(der_cert_span, dacVidPid);
if (chip_err == CHIP_NO_ERROR) {
    ESP_LOGI(TAG, "VID in DAC: %d, PID in DAC: %d", dacVidPid.mVendorId.Value(), dacVidPid.mProductId.Value());
} else {
    ESP_LOGI(TAG, "DAC Format Invalid");
}

参考:

乐鑫mfg工具使用说明

matter官网CHIP Certificate Tool工具使用

secure_cert加密证书写入安全分区

CHIP加密分区使用流程

  • 37
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像的目标属于哪个类别。 定位问题:确定目标在图像的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值