إنشاء شهادات اختبار جهاز Matter

تتطلّب بعض سيناريوهات التطوير، مثل اختبار OTA، إنشاء شهادات non-Production Matter.

بعض ميزات منظومة Google المتكاملة، بما في ذلك تحديثات البرامج عبر الهواء للأجهزة لا يمكن إجراؤها باستخدام معرّف 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) في المستندات والرسائل الإضافية للإقرار ومواصفات المادة.

تثبيت حزمة تطوير البرامج (SDK) الخاصة بمنصّة Matter

تفترض هذه التعليمات أنّ لديك تثبيتًا صالحًا لحزمة SDK لسمة Matter. يُرجى الرجوع إلى مستندات الإطار على GitHub أو الاطّلاع على البدء في استخدام Matter للحصول على مزيد من المعلومات.

ثبِّت الأداة hexdump xxd إذا لم تكن لديك. هذه الأداة مفيدة لطباعة بيانات الاعتماد بتنسيق C-style:

sudo apt-get install xxd

الإصدار chip-cert

  1. تأكَّد من استخدام أحدث إصدار من حزمة تطوير البرامج (SDK). تم اختبار هذه الإجراءات على SHA 0b17bce8 في Github، في فرع 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) يتطابقان مع البيانات التي يعرضها الجهاز في مكان آخر: مجموعة المعلومات الأساسية ووحدة التحكّم في الطاقة ومصدر وحدة التحكّم في الطاقة (في حال توفّره). يمكنك ترك الحقول الأخرى بدون تغيير:

    $ 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

في هذا المثال، سنستخدم شهادة هيئة Matter الخاصة بالاختبار لإصدار الشهادات المتعلقة بالمنتج (PAA) ومفتاح التوقيع 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/\/,/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. إذا كنت تستخدِم Factory Data أو مقدّم بيانات اعتماد مخصّص، تأكَّد من إدخال بيانات الاعتماد في المواضع المناسبة. ننصحك بالتواصل مع موفّر شريحة المعالجة المركزية (SoC) لمعرفة تفاصيل النظام الأساسي.

استبدال القرص CD

  1. استخرِج تمثيلاً نصيًا لمحتويات ملف القرص المضغوط باستخدام 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. انسخ النص الذي استخرجته في الخطوة السابقة إلى الملف المستخدَم لتحديد القرص المضغوط في الإصدار. كما هو الحال مع ميزة "الإعلانات المتجاوبة مع الجمهور" وميزة "الإعلانات الديناميكية على شبكة البحث"، تعتمد طريقة تنفيذ ذلك على المنصة التي يتم التطوير عليها.

إذا كنت تستخدِم أمثلة بيانات الاعتماد، قد تحتاج إلى استبدال محتوى 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 ../..

لتفعيل سجلّات إضافية، احرص على ضبط العلامة --trace_decode 1 عند تشغيل chip-tool. بالإضافة إلى ذلك، من الممارسات الجيدة ضبط مسارملف 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