สร้างใบรับรองการทดสอบอุปกรณ์ Matter

สถานการณ์การทดสอบบางสถานการณ์จำเป็นต้องสร้างใบรับรองที่ไม่ใช่เวอร์ชันที่ใช้งานจริง แม้จะไม่ใช่ข้อกำหนด

ฟีเจอร์บางอย่างในระบบนิเวศของ Google ซึ่งรวมถึงการอัปเดตซอฟต์แวร์ OTA ของอุปกรณ์จะดำเนินการโดยใช้ VID/PID ทดสอบไม่ได้

คู่มือนี้อธิบายวิธีสร้างและยืนยันใบรับรอง Matter ที่ไม่ใช่ของเวอร์ชันที่ใช้งานจริงเพื่อใช้ในการทดสอบ ประเภทของใบรับรองได้แก่

  1. คำประกาศการรับรอง (CD)
  2. ใบรับรองกลางสำหรับเอกสารรับรองผลิตภัณฑ์ (PAI)
  3. ใบรับรองเอกสารรับรองของอุปกรณ์ (DAC)

ในกระบวนการจัดเตรียม อุปกรณ์ที่ผ่านการรับรองของ Matter จะต้องรับรองตนเอง กล่าวคือ พิสูจน์ว่าเป็นผลิตภัณฑ์ที่ผ่านการรับรอง Matter ของแท้ ข้อมูลเข้าสู่ระบบที่ใช้โดยอุปกรณ์ Matter เครื่องเพื่อเอกสารรับรองมีดังนี้

  1. คู่คีย์เอกสารรับรอง
  2. ชุดใบรับรอง

Device Attestation Certificate (DAC) คือลิงก์แรกของเชนใบรับรอง และได้รับการตรวจสอบโดย Product Attestation Intermediate Certificate (PAI) ซึ่งก็จะได้รับการตรวจสอบโดย Product Attestation Authority (PAA)

ใบรับรองจะได้รับการลงชื่อในเวลาเดียวกับที่มีการสร้างคู่คีย์เอกสารรับรอง และลงนามโดยใช้คีย์ส่วนตัวของผู้ออกใบรับรองหนึ่งระดับสูงกว่า 1 ระดับเพื่อประกอบเป็นเชนความน่าเชื่อถือ ดังนั้นใบรับรอง DAC จึงมีการลงชื่อโดยคีย์ PAI และใบรับรอง PAI จะได้รับการลงนาม โดยคีย์ PAA เป็นส่วนบนสุดของเชน ใบรับรอง PAA จะมีการลงนามด้วยตนเอง ห่วงโซ่ความน่าเชื่อถือนี้ทำให้เกิดโครงสร้าง PAA แบบรวมศูนย์ ซึ่งซิงค์โดย Unifiedd Compliance Ledger (DCL)

ดูข้อมูลเพิ่มเติมเกี่ยวกับขั้นตอนเอกสารรับรองและประกาศการรับรอง (CD) ได้ในเอกสารและข้อความสำหรับเอกสารรับรองเพิ่มเติมและในข้อกำหนดของ Matter

ติดตั้ง Matter SDK

วิธีการเหล่านี้ขอสมมุติว่าคุณมีการติดตั้ง SDK Matter ที่ทํางานอยู่ โปรดอ่านเอกสารประกอบใน GitHub หรือดูข้อมูลเพิ่มเติมที่หัวข้อเริ่มต้นใช้งาน Matter

ติดตั้งยูทิลิตีเฮกซ์ดัมพ์ xxd หากคุณยังไม่มี เครื่องมือนี้มีประโยชน์สำหรับการพิมพ์ข้อมูลเข้าสู่ระบบในรูปแบบ C:

sudo apt-get install xxd

บิลด์ chip-cert

  1. ตรวจสอบว่าคุณใช้ SDK เวอร์ชันล่าสุดอยู่ กระบวนการเหล่านี้ได้รับการทดสอบใน GitHub SHA 0b17bce8 ในสาขา v1.0-branch

    $ cd connectedhomeip
    $ git checkout v1.0-branch
    $ git pull
    
  2. บิลด์ chip-cert ซึ่งเป็นเครื่องมือที่ใช้ในการดำเนินการต่างๆ ในข้อมูลเข้าสู่ระบบสำหรับอุปกรณ์ Matter ดังนี้

    1. กำหนดค่าบิวด์ดังนี้

      $ cd src/credentials
      $ source ../../scripts/activate.sh
      $ gn gen out
      

      ตัวอย่างเอาต์พุตของ gn

      Done. Made 5774 targets from 289 files in 658ms
      
    2. เรียกใช้บิลด์ด้วยคำสั่งต่อไปนี้

      $ ninja -C out
      

      ตัวอย่างเอาต์พุตของ ninja

      ninja: Entering directory `out'
      [2000/2000] stamp obj/default.stamp
      

สร้างใบรับรอง

ส่งออก VID/PID ที่กำหนดเองเป็นตัวแปรสภาพแวดล้อมเพื่อลดความเสี่ยงในการเกิดข้อผิดพลาดทางธุรการเมื่อแก้ไขอาร์กิวเมนต์คำสั่ง

$ cd ../..
$ export VID=hexVendorId
$ export PID=hexProductId

สร้างซีดี

  1. สร้างซีดีโดยใช้ chip-cert ปัจจุบันคณะกรรมาธิการจะตรวจสอบเพียงว่า VID และ PID ตรงกับข้อมูลที่อุปกรณ์แสดงที่อื่นเท่านั้น ซึ่งได้แก่ คลัสเตอร์ข้อมูลพื้นฐาน, DAC และ DAC (หากมี) คุณไม่จำเป็นต้องเปลี่ยนแปลงช่องอื่นๆ

    $ src/credentials/out/chip-cert gen-cd \
      --key credentials/test/certification-declaration/Chip-Test-CD-Signing-Key.pem \
      --cert credentials/test/certification-declaration/Chip-Test-CD-Signing-Cert.pem \
      --out credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der \
      --format-version "1" \
      --vendor-id "${VID}" \
      --product-id "${PID}" \
      --device-type-id "0x1234" \
      --certificate-id "ZIG20141ZB330001-24" \
      --security-level "0" \
      --security-info "0" \
      --version-number "9876" \
      --certification-type "0"
    
  2. ยืนยันซีดี ตรวจสอบว่ามี VID/PID ของคุณ (ในรูปแบบทศนิยม) ดังนี้

    $ src/credentials/out/chip-cert print-cd credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der
    

    ตัวอย่างเอาต์พุต

    SignerKeyId value: hex:62FA823359ACFAA9963E1CFA140ADDF504F37160
    0x01, tag[Anonymous]: 0xffffffff, type: Structure (0x15), container:
    0x04,     tag[Context Specific]: 0x0, type: Unsigned Fixed Point (0x04), value: 1
    0x08,     tag[Context Specific]: 0x1, type: Unsigned Fixed Point (0x04), value: XXXXX // <- VID
    0x0A,     tag[Context Specific]: 0x2, type: Array (0x16), container:
    0x0D,         tag[Anonymous]: 0xffffffff, type: Unsigned Fixed Point (0x04), value: XXXXX // <- PID
    0x12,     tag[Context Specific]: 0x3, type: Unsigned Fixed Point (0x04), value: 4660
    0x15,     tag[Context Specific]: 0x4, type: UTF-8 String (0x0c), length: 19, value: "ZIG20141ZB330001-24"
    0x2B,     tag[Context Specific]: 0x5, type: Unsigned Fixed Point (0x04), value: 0
    0x2E,     tag[Context Specific]: 0x6,type: Unsigned Fixed Point (0x04), value: 0
    0x32,     tag[Context Specific]: 0x7, type: Unsigned Fixed Point (0x04), value: 39030
    0x35,     tag[Context Specific]: 0x8, type: Unsigned Fixed Point (0x04), value: 0
    

สร้าง PAI และ DAC

ในตัวอย่างนี้ เราจะใช้ใบรับรองจากผู้ออกใบรับรอง (PAA) สำหรับผลิตภัณฑ์ทดสอบ (PAA) และคีย์การลงชื่อ Chip-Test-PAA-NoVID ของ Matter เป็นใบรับรองรูทเอง โดยเราจะใช้เป็น CA หลักในการสร้าง PAI และ DAC ของเราเอง

  1. สร้าง PAI โดยใช้ PAA คุณสามารถเลือกที่จะรวมข้อมูล PID ไว้ใน PAI ได้ แต่การไม่ใส่ข้อมูลนี้จะช่วยเพิ่มความคล่องตัวในการทดสอบ หากคุณต้องการ DAC สำหรับ PID เพิ่มเติม ให้ทำตามขั้นตอนการสร้าง DAC เท่านั้น

    $ src/credentials/out/chip-cert gen-att-cert --type i \
      --subject-cn "Matter Test PAI" \
      --subject-vid "${VID}" \
      --valid-from "2021-06-28 14:23:43" \
      --lifetime "4294967295" \
      --ca-key credentials/test/attestation/Chip-Test-PAA-NoVID-Key.pem \
      --ca-cert credentials/test/attestation/Chip-Test-PAA-NoVID-Cert.pem \
      --out-key credentials/test/attestation/"test-PAI-${VID}-key".pem \
      --out credentials/test/attestation/"test-PAI-${VID}-cert".pem
    
  2. สร้าง DAC โดยใช้ PAI

    $ src/credentials/out/chip-cert gen-att-cert --type d \
      --subject-cn "Matter Test DAC 0" \
      --subject-vid "${VID}" \
      --subject-pid "${PID}" \
      --valid-from "2021-06-28 14:23:43" \
      --lifetime "4294967295" \
      --ca-key credentials/test/attestation/"test-PAI-${VID}-key".pem \
      --ca-cert credentials/test/attestation/"test-PAI-${VID}-cert".pem \
      --out-key credentials/test/attestation/"test-DAC-${VID}-${PID}-key".pem \
      --out credentials/test/attestation/"test-DAC-${VID}-${PID}-cert".pem
    
  3. ยืนยันเชน DAC, PAI และ PAA หากไม่มีข้อผิดพลาดปรากฏในเอาต์พุต หมายความว่าเชนเอกสารรับรองของใบรับรองได้รับการยืนยันเรียบร้อยแล้ว ดังนี้

    $ src/credentials/out/chip-cert validate-att-cert \
    --dac credentials/test/attestation/"test-DAC-${VID}-${PID}-cert".pem \
    --pai credentials/test/attestation/"test-PAI-${VID}-cert".pem \
    --paa credentials/test/attestation/Chip-Test-PAA-NoVID-Cert.pem
    
  4. คุณตรวจสอบกุญแจได้โดยใช้ openssl ดังนี้

    $ openssl ec -noout -text -in \
      credentials/test/attestation/test-DAC-${VID}-${PID}-key.pem
    

    ตัวอย่างเอาต์พุต

    read EC key
    Private-Key: (256 bit)
    priv:
        c9:f2:b3:04:b2:db:0d:6f:cd:c6:be:f3:7b:76:8d:
        8c:01:4e:0b:9e:ce:3e:72:49:3c:0e:35:63:7c:6c:
        6c:d6
    pub:
        04:4f:93:ba:3b:bf:63:90:73:98:76:1e:af:87:79:
        11:e6:77:e8:e2:df:a7:49:f1:7c:ac:a8:a6:91:76:
        08:5b:39:ce:6c:72:db:6d:9a:92:b3:ba:05:b0:e8:
        31:a0:bf:36:50:2b:5c:72:55:7f:11:c8:01:ff:3a:
        46:b9:19:60:28
    ASN1 OID: prime256v1
    NIST CURVE: P-256
    
  5. นอกจากนี้ คุณยังใช้ openssl เพื่อตรวจสอบใบรับรองที่สร้างไว้ได้ด้วย

    $ openssl x509 -noout -text -in \
      credentials/test/attestation/test-DAC-${VID}-${PID}-cert.pem
    

    ตัวอย่างเอาต์พุต

    Certificate:
        Data:
            Version: 3 (0x2)
            Serial Number: 2875998130766646679 (0x27e9990fef088d97)
            Signature Algorithm: ecdsa-with-SHA256
            Issuer: CN = Matter Test PAI, 1.3.6.1.4.1.37244.2.1 = hexVendorId
            Validity
                Not Before: Jun 28 14:23:43 2021 GMT
                Not After : Dec 31 23:59:59 9999 GMT
            Subject: CN = Matter Test DAC 0, 1.3.6.1.4.1.37244.2.1 = hexVendorId, 1.3.6.1.4.1.37244.2.2 = hexProductId
            Subject Public Key Info:
                Public Key Algorithm: id-ecPublicKey
                    Public-Key: (256 bit)
                    pub:
                        04:4f:93:ba:3b:bf:63:90:73:98:76:1e:af:87:79:
                        11:e6:77:e8:e2:df:a7:49:f1:7c:ac:a8:a6:91:76:
                        08:5b:39:ce:6c:72:db:6d:9a:92:b3:ba:05:b0:e8:
                        31:a0:bf:36:50:2b:5c:72:55:7f:11:c8:01:ff:3a:
                        46:b9:19:60:28
                    ASN1 OID: prime256v1
                    NIST CURVE: P-256
            X509v3 extensions:
                X509v3 Basic Constraints: critical
                    CA:FALSE
                X509v3 Key Usage: critical
                    Digital Signature
                X509v3 Subject Key Identifier:
                    21:0A:CA:B1:B6:5F:17:65:D8:61:19:73:84:1A:9D:52:81:19:C5:39
                X509v3 Authority Key Identifier:
                    37:7F:24:9A:73:41:4B:16:6E:6A:42:6E:F5:E8:89:FB:75:F8:77:BB
        Signature Algorithm: ecdsa-with-SHA256
        Signature Value:
            30:45:02:20:38:8f:c5:0d:3e:90:95:dd:7d:7c:e9:5a:05:19:
            1f:2d:14:08:a3:d7:0e:b5:15:6d:d3:b0:0b:f7:b8:28:4d:bf:
            02:21:00:d4:05:30:43:a6:05:00:0e:b9:99:0d:34:3d:75:fe:
            d3:c1:4e:73:ff:e7:05:64:7a:62:8d:2d:38:8f:fd:4d:ad
    

PAA

กระบวนการที่คล้ายกันนี้อาจใช้ในการสร้าง PAA แบบ Self-signed ได้ แต่ไม่จำเป็นต้องทำ

สิ่งที่เราทำคือการใช้ PAA สำหรับการพัฒนาแบบ Self-signed ที่มีอยู่ซึ่งไม่มีข้อมูล VID

หากต้องการดูตัวอย่างการสร้าง CD เพิ่มเติม โปรดดู credentials/test/gen-test-cds.sh และตัวอย่างเพิ่มเติมของการสร้าง PAA, PAI และ DAC โปรดดู credentials/test/gen-test-attestation-certs.sh

แทนที่ใบรับรอง

แทนที่ PAA และ PAI

  1. เรียกใช้สคริปต์ตัวช่วยต่อไปนี้ ซึ่งใช้เครื่องมือใบรับรอง CHIP (chip-cert) เพื่อสร้างอาร์เรย์รูปแบบ C ของใบรับรอง

ดาวน์โหลดสคริปต์ตัวช่วยใบรับรองแบบฝังได้

#!/bin/bash

#
# generate-embeddable-certs.sh script
# —----------------------------------
#
# This script generates self-minted DAC and PAI.
# The output may easily be included in your C++ source code.
#

# Edit this information with your paths and certificates
folder="credentials/test/attestation"
chip_cert_tool="src/credentials/out/chip-cert"
cert_file_der="${folder}/test-PAI-${VID}-cert.der"
cert_file_pem="${folder}/test-PAI-${VID}-cert.pem"
key_file_pem="${folder}/test-PAI-${VID}-key.pem"

type="Pai"

printf "namespace chip {\n"
printf "namespace DevelopmentCerts {\n\n"
printf "#if CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID == ${PID}\n\n"

printcert() {
  # convert cert to DER
  if [ -f "${cert_file_der}" ]; then
      rm "${cert_file_der}"
  fi
  "${chip_cert_tool}" convert-cert "${cert_file_pem}" "${cert_file_der}" --x509-der

  printf "// ------------------------------------------------------------ \n"
  printf "// ${type} CERTIFICATE ${cert_file_der} \n\n"

  printf "constexpr uint8_t ${type}_Cert_Array[] = {\n"
  less -f "${cert_file_der}" | od -t x1 -An | sed 's/\/,/g' | sed 's/^/   /g'
  printf "};\n\n"
  printf "ByteSpan k${type}Cert = ByteSpan(${type}_Cert_Array);\n\n"

  printf "// ${type} PUBLIC KEY FROM ${key_file_pem} \n\n"

  printf "constexpr uint8_t ${type}_PublicKey_Array[] = {\n"
  openssl ec -text -noout -in "${key_file_pem}" 2>/dev/null | sed '/ASN1 OID/d' | sed '/NIST CURVE/d' | sed -n '/pub:/,$p' | sed '/pub:/d' | sed 's/\([0-9a-fA-F][0-9a-fA-F]\)/0x\1/g' | sed 's/:/, /g'
  printf "};\n\n"
  printf "ByteSpan k${type}PublicKey = ByteSpan(${type}_PublicKey_Array);\n\n"

  printf "// ${type} PRIVATE KEY FROM ${key_file_pem} \n\n"

  printf "constexpr uint8_t ${type}_PrivateKey_Array[] = {\n"
  openssl ec -text -noout -in "${key_file_pem}" 2>/dev/null | sed '/read EC key/d' | sed '/Private-Key/d' | sed '/priv:/d' | sed '/pub:/,$d' | sed 's/\([0-9a-fA-F][0-9a-fA-F]\)/0x\1/g' | sed 's/:/, /g'
  printf "};\n\n"
  printf "ByteSpan k${type}PrivateKey = ByteSpan(${type}_PrivateKey_Array);\n\n"
}

# generates PAI
printcert

type="Dac"
cert_file_der="${folder}/test-DAC-${VID}-${PID}-cert.der"
cert_file_pem="${folder}/test-DAC-${VID}-${PID}-cert.pem"
key_file_pem="${folder}/test-DAC-${VID}-${PID}-key.pem"

# generates DAC
printcert

printf "#endif // CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID\n"
printf "} // namespace DevelopmentCerts\n"
printf "} // namespace chip\n"


  1. คัดลอกเนื้อหาของเอาต์พุต PAI และ DAC ไปยังการติดตั้งใช้งาน DeviceAttestationCredentialsProvider::GetProductAttestationIntermediateCert

    ส่วนในอุปกรณ์ที่ใช้งานจริงนั้น PAI และ DAC จะอยู่ใน ข้อมูลจากโรงงาน ในขณะที่มีการฝังซีดีไว้ในเฟิร์มแวร์เอง

    1. หากยังไม่ได้ใช้ข้อมูลจากโรงงาน คุณอาจต้องการวาง PAI ไว้ใน src/credentials/examples/ExampleDACs.cpp ในกรณีนี้ ให้เพิ่มโค้ดที่สร้างขึ้นต่อท้ายไฟล์ ExampleDACs.cpp ของคุณ ดังนี้

      ByteSpan kDacCert       = ByteSpan(kDevelopmentDAC_Cert_FFF1_801F);
      ByteSpan kDacPrivateKey = ByteSpan(kDevelopmentDAC_PrivateKey_FFF1_801F);
      ByteSpan kDacPublicKey  = ByteSpan(kDevelopmentDAC_PublicKey_FFF1_801F);
      #endif
      } // namespace DevelopmentCerts
      } // namespace chip
      
      /* ------------------------------------------ */
      /* current end-of-file                        */
      /* ------------------------------------------ */
      
      /* ------------------------------------------ */
      /* output of creds-codelab.sh script          */
      /* ------------------------------------------ */
      
      namespace chip {
      namespace DevelopmentCerts {
      
      #if CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID == hexProductId
      
      ...
      
      ByteSpan kDacPrivateKey = ByteSpan(Dac_PrivateKey_Array);
      
      #endif // CHIP_DEVICE_CONFIG_DEVICE_PRODUCT_ID
      } // namespace DevelopmentCerts
      } // namespace chip
      
    2. หากคุณกำลังใช้ข้อมูลจากโรงงานหรือโปรแกรมการเข้าสู่ระบบโดยใช้บัญชีที่กำหนดเอง โปรดตรวจสอบว่าได้แทรกข้อมูลเข้าสู่ระบบไว้ในตำแหน่งที่เหมาะสมแล้ว คุณอาจต้องสอบถาม ผู้ให้บริการ SoC สำหรับข้อมูลเฉพาะเกี่ยวกับแพลตฟอร์มของคุณ

เปลี่ยนซีดี

  1. ดึงการนำเสนอข้อความของเนื้อหาในไฟล์ CD โดยใช้ xxd ดังนี้

      $ xxd -i credentials/test/certification-declaration/Chip-Test-CD-${VID}-${PID}.der
    

    ตัวอย่างเอาต์พุต

      unsigned char credentials_test_certification_declaration_Chip_Test_CD_hexVendorId_hexProductId_der[] = {
        0x30, 0x81, 0xe9, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
        0x07, 0x02, 0xa0, 0x81, 0xdb, 0x30, 0x81, 0xd8, 0x02, 0x01, 0x03, 0x31,
        0x0d, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04,
        0x02, 0x01, 0x30, 0x45, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
        0x01, 0x07, 0x01, 0xa0, 0x38, 0x04, 0x36, 0x15, 0x24, 0x00, 0x01, 0x25,
        0x01, 0xfe, 0xca, 0x36, 0x02, 0x05, 0xce, 0xfa, 0x18, 0x25, 0x03, 0x34,
        0x12, 0x2c, 0x04, 0x13, 0x5a, 0x49, 0x47, 0x32, 0x30, 0x31, 0x34, 0x31,
        0x5a, 0x42, 0x33, 0x33, 0x30, 0x30, 0x30, 0x31, 0x2d, 0x32, 0x34, 0x24,
        0x05, 0x00, 0x24, 0x06, 0x00, 0x25, 0x07, 0x76, 0x98, 0x24, 0x08, 0x00,
        0x18, 0x31, 0x7d, 0x30, 0x7b, 0x02, 0x01, 0x03, 0x80, 0x14, 0x62, 0xfa,
        0x82, 0x33, 0x59, 0xac, 0xfa, 0xa9, 0x96, 0x3e, 0x1c, 0xfa, 0x14, 0x0a,
        0xdd, 0xf5, 0x04, 0xf3, 0x71, 0x60, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86,
        0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x0a, 0x06, 0x08, 0x2a,
        0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x04, 0x47, 0x30, 0x45, 0x02,
        0x20, 0x53, 0x25, 0x03, 0x2c, 0x96, 0x50, 0xb6, 0x64, 0xf4, 0x18, 0xbf,
        0x99, 0x47, 0xf8, 0x9d, 0xe6, 0xeb, 0x43, 0x94, 0xf1, 0xce, 0xb2, 0x61,
        0x00, 0xe0, 0xf9, 0x89, 0xa8, 0x71, 0x82, 0x02, 0x0a, 0x02, 0x21, 0x00,
        0xea, 0x0a, 0x40, 0xab, 0x87, 0xad, 0x7e, 0x25, 0xe1, 0xa1, 0x6c, 0xb1,
        0x12, 0xfa, 0x86, 0xfe, 0xea, 0x8a, 0xaf, 0x4b, 0xc1, 0xf3, 0x6f, 0x09,
        0x85, 0x46, 0x50, 0xb6, 0xd0, 0x55, 0x40, 0xe2
      };
      unsigned int credentials_test_certification_declaration_Chip_Test_CD_hexVendorId_hexProductId_der_len = 236;
      ```
    
  2. คัดลอกข้อความที่ดึงมาในขั้นตอนก่อนหน้าไปยังไฟล์ที่ใช้กำหนดซีดีลงในบิลด์ อย่างในกรณีของ PAI และ DAC การทำเช่นนั้นจะขึ้นอยู่กับแพลตฟอร์มที่กำลังพัฒนา

หากใช้ตัวอย่างข้อมูลเข้าสู่ระบบ คุณอาจต้องแทนที่เนื้อหาของ kCdForAllExamples ใน ExampleDACProvider::GetCertificationDeclaration ใน src/credentials/examples/DeviceAttestationCredsExample.cpp โดยทำดังนี้

    const uint8_t kCdForAllExamples[] = {
            0x30, 0x81, 0xe9, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01,
            0x07, 0x02, 0xa0, 0x81, 0xdb, 0x30, 0x81, 0xd8, 0x02, 0x01, 0x03, 0x31,
            0x0d, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04,
            0x02, 0x01, 0x30, 0x45, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d,
            0x01, 0x07, 0x01, 0xa0, 0x38, 0x04, 0x36, 0x15, 0x24, 0x00, 0x01, 0x25,
            0x01, 0xfe, 0xca, 0x36, 0x02, 0x05, 0xce, 0xfa, 0x18, 0x25, 0x03, 0x34,
            0x12, 0x2c, 0x04, 0x13, 0x5a, 0x49, 0x47, 0x32, 0x30, 0x31, 0x34, 0x31,
            0x5a, 0x42, 0x33, 0x33, 0x30, 0x30, 0x30, 0x31, 0x2d, 0x32, 0x34, 0x24,
            0x05, 0x00, 0x24, 0x06, 0x00, 0x25, 0x07, 0x76, 0x98, 0x24, 0x08, 0x00,
            0x18, 0x31, 0x7d, 0x30, 0x7b, 0x02, 0x01, 0x03, 0x80, 0x14, 0x62, 0xfa,
            0x82, 0x33, 0x59, 0xac, 0xfa, 0xa9, 0x96, 0x3e, 0x1c, 0xfa, 0x14, 0x0a,
            0xdd, 0xf5, 0x04, 0xf3, 0x71, 0x60, 0x30, 0x0b, 0x06, 0x09, 0x60, 0x86,
            0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x30, 0x0a, 0x06, 0x08, 0x2a,
            0x86, 0x48, 0xce, 0x3d, 0x04, 0x03, 0x02, 0x04, 0x47, 0x30, 0x45, 0x02,
            0x20, 0x53, 0x25, 0x03, 0x2c, 0x96, 0x50, 0xb6, 0x64, 0xf4, 0x18, 0xbf,
            0x99, 0x47, 0xf8, 0x9d, 0xe6, 0xeb, 0x43, 0x94, 0xf1, 0xce, 0xb2, 0x61,
            0x00, 0xe0, 0xf9, 0x89, 0xa8, 0x71, 0x82, 0x02, 0x0a, 0x02, 0x21, 0x00,
            0xea, 0x0a, 0x40, 0xab, 0x87, 0xad, 0x7e, 0x25, 0xe1, 0xa1, 0x6c, 0xb1,
            0x12, 0xfa, 0x86, 0xfe, 0xea, 0x8a, 0xaf, 0x4b, 0xc1, 0xf3, 0x6f, 0x09,
            0x85, 0x46, 0x50, 0xb6, 0xd0, 0x55, 0x40, 0xe2
        };

สร้างเป้าหมาย

สร้างและแฟลชเป้าหมายโดยใช้ข้อมูลเข้าสู่ระบบที่เพิ่งสร้างใหม่ ส่วนนี้จะขึ้นอยู่กับแพลตฟอร์ม ดูข้อมูลเพิ่มเติมได้ในเอกสาร SoC หรืออุปกรณ์ที่รองรับ

จัดเตรียมอุปกรณ์

ตอนนี้คุณสามารถทำตามขั้นตอนที่ระบุไว้ในหัวข้อจับคู่อุปกรณ์ Matter เพื่อส่งอุปกรณ์ Matter ใน Google Home platform ได้แล้ว

แก้ไขข้อบกพร่องโดยใช้ chip-tool

chip-tool เป็นเครื่องมือที่มีประโยชน์มากในการตรวจสอบว่าอุปกรณ์ส่งใบรับรองที่ถูกต้องหรือไม่ วิธีสร้าง

$ cd examples/chip-tool
$ gn gen out/debug
Done. Made 114 targets from 112 files in 157ms
$ ninja -C out/debug
ninja: Entering directory `out/debug'
$ cd ../..

หากต้องการเปิดใช้บันทึกเพิ่มเติม เมื่อเรียกใช้ chip-tool โปรดตรวจสอบว่าได้ส่งแฟล็ก --trace_decode 1 แล้ว นอกจากนี้ ควรส่งต่อเส้นทางของไฟล์ PAA ด้วยแฟล็ก --paa-trust-store-path

ดังนั้นหากต้องการจัดเตรียมอุปกรณ์เทรดโดยใช้ BLE คุณจะเรียกใช้สิ่งต่อไปนี้ได้

```
$ examples/chip-tool/out/debug/chip-tool pairing ble-thread 1 \
  hex:Thread_credentials \
  pairing_code \
  discriminator \
  --paa-trust-store-path <path to PAA folder> \
  --trace_decode 1
```

ในกรณีของอุปกรณ์ทดสอบ <PAIRING CODE> คือ 20202021 และ <DISCRIMINATOR> คือ 3840

หากต้องการรับข้อมูลเข้าสู่ระบบเทรดจาก Google Nest Hub (2nd gen) คุณเรียกใช้สิ่งต่อไปนี้ได้

$ adb connect border_router_ip_address
$ adb -e shell ot-ctl dataset active -x
$ adb disconnect

และหากต้องการว่าจ้างอุปกรณ์ Wi-Fi คุณใช้ตัวเลือก ble-wifi ได้โดยทำดังนี้

$ examples/chip-tool/out/debug/chip-tool pairing ble-wifi 1 "SSID" SSID_password pairing_code discriminator