Introduction to Matter factory data#
Each Matter device should have it own unique factory data manufactured.
This guide demonstrates what Bouffalo Lab
provides to support factory data:
credential factory data protected by hardware security engine
reference tool to generate factory data
tool/method to program factory data
Matter factory data#
How to enable#
One dedicate flash region allocates for factory data as below which is read-only for firmware.
name = "MFD"
address0 = 0x3FE000
size0 = 0x1000
To enable matter factory data feature, please append -mfd
option at end of
target name. Take BL602 Wi-Fi Matter Light as example.
./scripts/build/build_examples.py --target bouffalolab-bl602dk-light-littlefs-mfd build
Factory data#
This flash region is divided to two parts:
One is plain text data, such as Vendor ID, Product ID, Serial number and so on.
For development/test purpose, all data can put in plain text data.
Other is cipher text data, such as private key for device attestation data.
Bouffalo Lab
provides hardware security engine to decrypt this part data with only hardware access efuse key.
Current supported data
DAC certificate and private key
PAI certificate
Certificate declaration
Discriminator ID
Pass Code
Spake2p iteration count, salt and verifier
Vendor ID and name
Product ID and name
Product part number and product label
Manufacturing date
Hardware version and version string
Serial Number
Unique identifier
Note, it is available to add customer/product own information in factory data, please reference to
bl_mfd.h
/bl_mfd.c
in SDK and reference generation script generate_factory_data.py
Generate Matter factory data#
Script tool
generate_factory_data.py
call chip-cert
to generate test certificates and verify certificates.
Please run below command to compile chip-cert
tool under connnectedhomeip
repo.
./scripts/build/build_examples.py --target linux-x64-chip-cert build
Command options#
--cd
, certificate declareIf not specified,
Chip-Test-CD-Signing-Cert.pem
andChip-Test-CD-Signing-Key.pem
will sign a test certificate declare for development and test purpose--pai_cert
and--pai-key
, PAI certificate and PAI private keyIf not specified,
Chip-Test-PAI-FFF1-8000-Cert.pem
andChip-Test-PAI-FFF1-8000-Key.pem
will be used for development and test purpose.--dac_cert
and--dac_key
, DAC certificate and DAC private key.If not specified, script will use PAI certificate and key specified by
--pai_cert
and--pai-key
to generate DAC certificate and private key for development and test purpose.--discriminator
, discriminator IDIf not specified, script will generate for user.
--passcode
, passcodeIf not specified, script will generate for user.
--spake2p_it
and--spake2p_salt
If not specified, script will generate and calculate verifier for user.
Please reference to --help
for more detail.
Generate with default test certificates#
Run following command to generate all plain text factory data
Please create output folder first. Here takes
out/test-cert
as example../scripts/tools/bouffalolab/generate_factory_data.py --output out/test-cert
Run following command to generate factory data which encrypt private of device attestation data
./scripts/tools/bouffalolab/generate_factory_data.py --output out/test-cert --key <hex string of 16 bytes>
An example of hex string of 16 bytes: 12345678123456781234567812345678
After command executes successfully, the output folder will has files as below:
Test certificate declare file which file name ends with
cd.der
If user wants to reuse CD generated before, please specify CD with option
--cd
as below../scripts/tools/bouffalolab/generate_factory_data.py --output out/test-cert --cd <cd file>
Test DAC certificate and DAC certificate key which file names ends with
dac_cert.pem
anddac_key.pem
separately.QR code picture which file name ends with
onboard.png
On board information which file name ends with
onboard.txt
Matter factory data which file name ends with
mfd.bin
.
Generate with self-defined PAA/PAI certificates#
Self-defined PAA/PAI certificates may use in development and test scenario. But, user should know it has limit to work with real ecosystem.
Export environment variables in terminal for easy operations
export TEST_CERT_VENDOR_ID=130D # Vendor ID hex string export TEST_CERT_CN=BFLB # Common Name
Generate PAA certificate and key to
out/cert
folder.mkdir out/test-cert ./out/linux-x64-chip-cert/chip-cert gen-att-cert --type a --subject-cn "${TEST_CERT_CN} PAA 01" --valid-from "2020-10-15 14:23:43" --lifetime 7305 --out-key out/test-cert/Chip-PAA-Key-${TEST_CERT_VENDOR_ID}.pem --out out/test-cert/Chip-PAA-Cert-${TEST_CERT_VENDOR_ID}.pem --subject-vid ${TEST_CERT_VENDOR_ID}
Convert PAA PEM format file to PAA DER format file
./out/linux-x64-chip-cert/chip-cert convert-cert -d out/test-cert/Chip-PAA-Cert-${TEST_CERT_VENDOR_ID}.pem out/test-cert/Chip-PAA-Cert-${TEST_CERT_VENDOR_ID}.der
Please save this PAA DER format file which will be used by
chip-tool
during commissioning.Generate PAI certificate and key:
./out/linux-x64-chip-cert/chip-cert gen-att-cert --type i --subject-cn "${TEST_CERT_CN} PAI 01" --subject-vid ${TEST_CERT_VENDOR_ID} --valid-from "2020-10-15 14:23:43" --lifetime 7305 --ca-key out/test-cert/Chip-PAA-Key-${TEST_CERT_VENDOR_ID}.pem --ca-cert out/test-cert/Chip-PAA-Cert-${TEST_CERT_VENDOR_ID}.pem --out-key out/test-cert/Chip-PAI-Key-${TEST_CERT_VENDOR_ID}.pem --out out/test-cert/Chip-PAI-Cert-${TEST_CERT_VENDOR_ID}.pem
Generate
MFD
in plain text data./scripts/tools/bouffalolab/generate_factory_data.py --output out/test-cert --paa_cert out/test-cert/Chip-PAA-Cert-${TEST_CERT_VENDOR_ID}.pem --paa_key out/test-cert/Chip-PAA-Key-${TEST_CERT_VENDOR_ID}.pem --pai_cert out/test-cert/Chip-PAI-Cert-${TEST_CERT_VENDOR_ID}.pem --pai_key out/test-cert/Chip-PAI-Key-${TEST_CERT_VENDOR_ID}.pem
Appending
--key <hex string of 16 bytes>
option to enable encrypt private key of attestation device data.
Generate with self-defined DAC certificate and key#
Self-defined DAC certificates may use in development and test scenario. But, user should know it has limit to work with real ecosystem.
Export environment variables in terminal for easy operations
export TEST_CERT_VENDOR_ID=130D # Vendor ID hex string export TEST_CERT_PRODUCT_ID=1001 # Vendor ID hex string export TEST_CERT_CN=BFLB # Common Name
Generate DAC certificate and key
out/linux-x64-chip-cert/chip-cert gen-att-cert --type d --subject-cn "${TEST_CERT_CN} PAI 01" --subject-vid ${TEST_CERT_VENDOR_ID} --subject-pid ${TEST_CERT_VENDOR_ID} --valid-from "2020-10-16 14:23:43" --lifetime 5946 --ca-key out/test-cert/Chip-PAI-Key-${TEST_CERT_VENDOR_ID}.pem --ca-cert out/test-cert/Chip-PAI-Cert-${TEST_CERT_VENDOR_ID}.pem --out-key out/test-cert/Chip-DAC-Key-${TEST_CERT_VENDOR_ID}-${TEST_CERT_PRODUCT_ID}.pem --out out/test-cert/Chip-DAC-Cert-${TEST_CERT_VENDOR_ID}-${TEST_CERT_PRODUCT_ID}.pem
Note,
--valid-from
and--lifetime
should be in--valid-from
and--lifetime
of PAI certificate.Generate
MFD
in plain text data./scripts/tools/bouffalolab/generate_factory_data.py --output out/test-cert --pai_cert out/test-cert/Chip-PAI-Cert-${TEST_CERT_VENDOR_ID}.pem --dac_cert out/test-cert/Chip-DAC-Cert-${TEST_CERT_VENDOR_ID}-${TEST_CERT_PRODUCT_ID}.pem --dac_key out/test-cert/Chip-DAC-Key-${TEST_CERT_VENDOR_ID}-${TEST_CERT_PRODUCT_ID}.pem
Appending
--key <hex string of 16 bytes>
option to enable encrypt private key of attestation device data.
Program factory data#
After each target built successfully, a flash programming python script will be generated under out folder.
Take BL616 Wi-Fi Matter Light as example, chip-bl616-lighting-example.flash.py
is using to program firmware, and also for factory data and factory decryption
key.
/out/bouffalolab-bl616dk-light-wifi-mfd/chip-bl616-lighting-example.flash.py --port <serial port> --mfd out/test-cert/<mfd bin file>
If
MFD
file has cipher text data, please append--key <hex string of 16 bytes>
option to program to this key to efuse.
Limits on BL IOT SDK
If developer would like to program
MFD
with all plain text data, option--key <hex string of 16 bytes>
needs pass to script, otherwise, flash tool will raise an error. And SoC BL602, BL702 and BL702L use BL IOT SDK for Matter Application.
Please free contact to Bouffalo Lab
for DAC provider service and higher
security solution, such as SoC inside certificate requesting.