ایجاد گواهینامه‌های آزمایشی دستگاه Matter

برخی‌از سناریوهای توسعه مانند آزمایش OTA نیازمند ایجاد گواهینامه‌های Matter غیرتولیدی است.

برخی‌از ویژگی‌های بوم‌سازگان Google، ازجمله به‌روزرسانی‌های نرم‌افزار OTA دستگاه، بااستفاده از VID/PID آزمایشی قابل‌اجرا نیستند.

این راهنما نحوه ایجاد و درستی‌سنجی گواهی‌های غیرتولیدی Matter را برای استفاده در آزمایش توضیح می‌دهد. انواع گواهی‌ها عبارت‌اند از:

  1. اظهارنامه گواهینامه (CD)
  2. گواهینامه واسط گواهی محصول (PAI)
  3. گواهی تصدیق دستگاه (DAC)

درطول فرایند راه‌اندازی، دستگاه دارای گواهینامه Matter باید خودش را تصدیق کند، یعنی ثابت کند که محصولی اصل و دارای گواهینامه Matter است. اعتبارنامه‌هایی که دستگاه‌های Matter برای گواهی‌دهی استفاده می‌کنند شامل موارد زیر است:

  1. جفت کلید گواهی
  2. زنجیره گواهینامه

«گواهینامه تصدیق دستگاه» (DAC) اولین پیوند زنجیره گواهینامه است و توسط «گواهینامه واسط تصدیق محصول» (PAI) اعتبارسنجی می‌شود که آن هم به‌نوبه خود توسط «مرجع تصدیق محصول» (PAA) اعتبارسنجی می‌شود.

گواهی‌ها هم‌زمان با تولید جفت کلید گواهی امضا می‌شوند و بااستفاده از کلید خصوصی «مرجع صدور گواهی» یک سطح بالاتر امضا می‌شوند و زنجیره اعتماد را تشکیل می‌دهند. بنابراین، گواهینامه DAC با کلید PAI امضا می‌شود و گواهینامه PAI با کلید PAA امضا می‌شود. گواهینامه‌های PAA که در بالای زنجیره قرار دارند، خودامضا هستند. این زنجیره اعتماد یک ساختار PAA فدراسیونی را تشکیل می‌دهد که توسط «دفتر کل توزیع‌شده رعایت مقررات» (DCL) همگام‌سازی می‌شود.

اطلاعات بیشتر درباره فرایند «تصدیق» و «اظهاریه‌های گواهینامه» (CD) را می‌توانید در اسناد و پیام‌های تصدیق اضافی و در «مشخصات Matter» پیدا کنید.

نصب Matter SDK

این دستورالعمل‌ها فرض می‌کنند که شما یک نصب فعال از Matter SDK دارید. لطفاً به اسناد آن در Github مراجعه کنید یا برای اطلاعات بیشتر، شروع کار با Matter را ببینید.

اگر ابزار کمکی hexdump xxd را ندارید، آن را نصب کنید. این ابزار برای چاپ کردن اطلاعات اعتباری در قالب C-style مفید است:

sudo apt-get install xxd

ساختن chip-cert

  1. مطمئن شوید که از نسخه جدید کیت توسعه نرم‌افزار استفاده می‌کنید. این رویه‌ها در 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

تولید کردن CD

  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) آزمایشی خود Matter و کلید امضای Chip-Test-PAA-NoVID به‌عنوان گواهی ریشه استفاده می‌کنیم. از آن به‌عنوان مرجع صدور گواهی ریشه برای تولید PAI و DAC خودمان استفاده خواهیم کرد.

  1. PAI را بااستفاده از PAA تولید کنید. می‌توانید به‌صورت اختیاری اطلاعات PID را در PAI اضافه کنید، اما حذف آن انعطاف‌پذیری بیشتری برای آزمایش به شما می‌دهد. اگر برای شناسه‌های محصول دیگر به DAC نیاز دارید، می‌توانید فقط مرحله تولید 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 خودامضا استفاده کرد، اما انجام این کار ضروری نیست.

درعوض، کاری که در اینجا انجام داده‌ایم این است که از یک PAA توسعه خودامضاشده موجود که حاوی اطلاعات 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/\ | 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 در داده‌های کارخانه هستند، درحالی‌که CD در خود سفت‌افزار جاسازی شده است.

    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. بااستفاده از xxd، نمایش نوشتاری محتوای فایل CD خود را استخراج کنید:

      $ 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. نوشتاری را که در مرحله قبل استخراج کردید در فایلی که برای تعریف CD در ساختتان استفاده می‌شود کپی کنید. همانند 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 (GHP) راه‌اندازی کنید.

مشکلات را بااستفاده از 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 ارسال کنید.

بنابراین برای راه‌اندازی دستگاه Thread بااستفاده از 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 است.

برای دریافت اطلاعات اعتباری Thread از 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