প্রয়োজন না হলেও, কিছু পরীক্ষার পরিস্থিতিতে নন-প্রোডাকশন ম্যাটার সার্টিফিকেট তৈরি করা প্রয়োজন।
ডিভাইস OTA সফ্টওয়্যার আপডেট সহ Google-এর ইকোসিস্টেমের কিছু বৈশিষ্ট্য একটি টেস্ট VID/PID ব্যবহার করে সঞ্চালিত হতে পারে না ।
এই নির্দেশিকা ব্যাখ্যা করে কিভাবে পরীক্ষায় ব্যবহারের জন্য নন-প্রোডাকশন Matter সার্টিফিকেট তৈরি এবং যাচাই করা যায়। শংসাপত্রের প্রকারগুলি হল:
- সার্টিফিকেশন ঘোষণা ( সিডি )
- প্রোডাক্ট অ্যাটেস্টেশন ইন্টারমিডিয়েট সার্টিফিকেট ( PAI )
- ডিভাইস অ্যাটেস্টেশন সার্টিফিকেট ( DAC )
কমিশনিং প্রক্রিয়া চলাকালীন, একটি Matter সার্টিফাইড ডিভাইসকে নিজেকে প্রমাণ করতে হবে, অর্থাৎ প্রমাণ করতে হবে যে এটি একটি আসল Matter -প্রত্যয়িত পণ্য। প্রত্যয়নের জন্য Matter ডিভাইসগুলির দ্বারা ব্যবহৃত শংসাপত্রগুলির মধ্যে রয়েছে:
- একটি প্রত্যয়ন কী জোড়া
- একটি শংসাপত্র চেইন
ডিভাইস অ্যাটেস্টেশন সার্টিফিকেট (DAC) হল সার্টিফিকেট চেইনের প্রথম লিঙ্ক, এবং প্রোডাক্ট অ্যাটেস্টেশন ইন্টারমিডিয়েট সার্টিফিকেট (PAI) দ্বারা যাচাই করা হয়, যা ফলস্বরূপ প্রোডাক্ট অ্যাটেস্টেশন অথরিটি (PAA) দ্বারা যাচাই করা হয়।
শংসাপত্রগুলি একই সময়ে স্বাক্ষরিত হয় যখন সত্যায়ন কী জোড়া তৈরি হয় এবং শংসাপত্র কর্তৃপক্ষের ব্যক্তিগত কী ব্যবহার করে এক স্তর উপরে স্বাক্ষরিত হয়, যা বিশ্বাসের একটি চেইন তৈরি করে। সুতরাং, একটি DAC শংসাপত্র একটি PAI কী দ্বারা স্বাক্ষরিত হয়, এবং একটি PAI শংসাপত্র একটি PAA কী দ্বারা স্বাক্ষরিত হয়। চেইনের শীর্ষে থাকা, PAA শংসাপত্রগুলি স্ব-স্বাক্ষরিত। বিশ্বাসের এই চেইনটি একটি ফেডারেটেড PAA কাঠামো গঠন করে, যা ডিস্ট্রিবিউটেড কমপ্লায়েন্স লেজার (DCL) দ্বারা সিঙ্ক করা হয়।
প্রত্যয়ন প্রক্রিয়া এবং সার্টিফিকেশন ঘোষণা (সিডি) সম্পর্কে আরও তথ্য অতিরিক্ত প্রমাণীকরণ নথি এবং বার্তা এবং ম্যাটার স্পেসিফিকেশনে পাওয়া যেতে পারে।
ম্যাটার এসডিকে ইনস্টল করুন
এই নির্দেশাবলী অনুমান করে যে আপনার কাছে Matter SDK এর একটি কার্যকরী ইনস্টলেশন রয়েছে। অনুগ্রহ করে Github- এ এর ডকুমেন্টেশন পড়ুন বা আরও তথ্যের জন্য ম্যাটার দিয়ে শুরু করুন দেখুন।
হেক্সডাম্প ইউটিলিটি xxd
ইনস্টল করুন যদি আপনার কাছে না থাকে। এই টুলটি সি-স্টাইল ফরম্যাটে শংসাপত্র মুদ্রণের জন্য দরকারী:
sudo apt-get install xxd
chip-cert
তৈরি করুন
আপনি SDK-এর সাম্প্রতিক সংস্করণে কাজ করছেন তা নিশ্চিত করুন। এই পদ্ধতিগুলি Github SHA
0b17bce8
,v1.0-branch
শাখায় পরীক্ষা করা হয়েছিল:$ cd connectedhomeip $ git checkout v1.0-branch $ git pull
Build
chip-cert
, যা Matter ডিভাইসের জন্য শংসাপত্রের বিভিন্ন অপারেশনের জন্য ব্যবহৃত টুল:বিল্ড কনফিগার করুন:
$ cd src/credentials $ source ../../scripts/activate.sh $ gn gen out
উদাহরণ
gn
আউটপুট:Done. Made 5774 targets from 289 files in 658ms
বিল্ড চালান:
$ ninja -C out
ninja
আউটপুটের উদাহরণ:ninja: Entering directory `out' [2000/2000] stamp obj/default.stamp
আপনার সার্টিফিকেট মিন্ট
আপনার কমান্ড আর্গুমেন্ট সম্পাদনা করার সময় করণিক ত্রুটির সম্ভাবনা কমাতে পরিবেশের ভেরিয়েবল হিসাবে আপনার কাস্টম VID/PID রপ্তানি করুন:
$ cd ../..
$ export VID=hexVendorId
$ export PID=hexProductId
একটি সিডি তৈরি করুন
chip-cert
ব্যবহার করে সিডি তৈরি করুন। বর্তমানে কমিশনার শুধুমাত্র যাচাই করেন যে ভিআইডি এবং পিআইডি ডিভাইসের দ্বারা অন্যত্র প্রকাশিত ডেটার সাথে মেলে: বেসিক ইনফরমেশন ক্লাস্টার, 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"
সিডি যাচাই করুন। নিশ্চিত করুন যে এটিতে আপনার 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 তৈরি করতে এটিকে রুট CA হিসাবে ব্যবহার করব।
PAA ব্যবহার করে PAI তৈরি করুন। আপনি ঐচ্ছিকভাবে PAI-তে PID তথ্য অন্তর্ভুক্ত করতে পারেন, কিন্তু এটি বাদ দিলে আপনি পরীক্ষার জন্য আরও নমনীয়তা পাবেন। অতিরিক্ত পিআইডি-র জন্য আপনার যদি 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
PAI ব্যবহার করে DAC তৈরি করুন:
$ 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
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
আপনি
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
আপনি আপনার তৈরি করা শংসাপত্রগুলি পরিদর্শন করতে
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 ব্যবহার করা যা VID তথ্য অন্তর্ভুক্ত করে না।
একটি CD তৈরি করার আরও উদাহরণের জন্য, credentials/test/gen-test-cds.sh
দেখুন এবং PAA, PAI, এবং DAC তৈরি করার আরও উদাহরণের জন্য, credentials/test/gen-test-attestation-certs.sh
দেখুন
সার্টিফিকেট প্রতিস্থাপন
PAA এবং PAI প্রতিস্থাপন করুন
- নিম্নলিখিত হেল্পার স্ক্রিপ্টটি চালান, যা আপনার সার্টিফিকেটের C-স্টাইল অ্যারে তৈরি করতে CHIP সার্টিফিকেট টুল (
chip-cert
) ব্যবহার করে।
এমবেডেবল সার্টিফিকেট হেল্পার স্ক্রিপ্ট ডাউনলোড করুন
#!/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/\0x/g' | 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"
আপনার
DeviceAttestationCredentialsProvider::GetProductAttestationIntermediateCert
এর বাস্তবায়নে PAI এবং DAC আউটপুটের বিষয়বস্তু অনুলিপি করুন।উৎপাদন ডিভাইসে, PAI এবং DAC ফ্যাক্টরি ডেটাতে থাকে, যখন সিডি ফার্মওয়্যারের মধ্যেই এমবেড করা থাকে।
আপনি যদি এখনও ফ্যাক্টরি ডেটা ব্যবহার না করেন, তাহলে আপনি আপনার 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
আপনি যদি ফ্যাক্টরি ডেটা বা একটি কাস্টম শংসাপত্র প্রদানকারী ব্যবহার করেন, তাহলে উপযুক্ত স্থানে শংসাপত্রগুলি সন্নিবেশ করা নিশ্চিত করুন৷ আপনি আপনার প্ল্যাটফর্মের সুনির্দিষ্ট বিষয়ে আপনার SoC প্রদানকারীর সাথে চেক করতে চাইতে পারেন।
সিডি প্রতিস্থাপন করুন
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; ```
আপনার বিল্ডে সিডি সংজ্ঞায়িত করার জন্য ব্যবহৃত ফাইলটিতে আগের ধাপে আপনি যে পাঠ্যটি বের করেছেন তা অনুলিপি করুন। PAI এবং DAC এর ক্ষেত্রে, আপনি কীভাবে এটি করবেন তা নির্ভর করে আপনি কোন প্ল্যাটফর্মে বিকাশ করছেন তার উপর।
আপনি যদি শংসাপত্রের উদাহরণগুলি ব্যবহার করেন, আপনি সম্ভবত src/credentials/examples/DeviceAttestationCredsExample.cpp
এ ExampleDACProvider::GetCertificationDeclaration
এ kCdForAllExamples
এর বিষয়বস্তু প্রতিস্থাপন করতে চান :
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 ডকুমেন্টেশন বা সমর্থিত ডিভাইস দেখুন।
ডিভাইস কমিশন
আপনি এখন Google Home platform আপনার Matter ডিভাইসটি চালু করতে Pair a Matter ডিভাইসে ইতিমধ্যে কভার করা ধাপগুলি অনুসরণ করতে পারেন।
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-trust-store-path
ফ্ল্যাগ দিয়ে আপনার PAA ফাইলের পাথ পাস করা একটি ভালো অভ্যাস।
এইভাবে 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
,প্রয়োজন না হলেও, কিছু পরীক্ষার পরিস্থিতিতে নন-প্রোডাকশন ম্যাটার সার্টিফিকেট তৈরি করা প্রয়োজন।
ডিভাইস OTA সফ্টওয়্যার আপডেট সহ Google-এর ইকোসিস্টেমের কিছু বৈশিষ্ট্য একটি টেস্ট VID/PID ব্যবহার করে সঞ্চালিত হতে পারে না ।
এই নির্দেশিকা ব্যাখ্যা করে কিভাবে পরীক্ষায় ব্যবহারের জন্য নন-প্রোডাকশন Matter সার্টিফিকেট তৈরি এবং যাচাই করা যায়। শংসাপত্রের প্রকারগুলি হল:
- সার্টিফিকেশন ঘোষণা ( সিডি )
- প্রোডাক্ট অ্যাটেস্টেশন ইন্টারমিডিয়েট সার্টিফিকেট ( PAI )
- ডিভাইস অ্যাটেস্টেশন সার্টিফিকেট ( DAC )
কমিশনিং প্রক্রিয়া চলাকালীন, একটি Matter সার্টিফাইড ডিভাইসকে নিজেকে প্রমাণ করতে হবে, অর্থাৎ প্রমাণ করতে হবে যে এটি একটি আসল Matter -প্রত্যয়িত পণ্য। প্রত্যয়নের জন্য Matter ডিভাইসগুলির দ্বারা ব্যবহৃত শংসাপত্রগুলির মধ্যে রয়েছে:
- একটি প্রত্যয়ন কী জোড়া
- একটি শংসাপত্র চেইন
ডিভাইস অ্যাটেস্টেশন সার্টিফিকেট (DAC) হল সার্টিফিকেট চেইনের প্রথম লিঙ্ক, এবং প্রোডাক্ট অ্যাটেস্টেশন ইন্টারমিডিয়েট সার্টিফিকেট (PAI) দ্বারা যাচাই করা হয়, যা ফলস্বরূপ প্রোডাক্ট অ্যাটেস্টেশন অথরিটি (PAA) দ্বারা যাচাই করা হয়।
শংসাপত্রগুলি একই সময়ে স্বাক্ষরিত হয় যখন সত্যায়ন কী জোড়া তৈরি হয় এবং শংসাপত্র কর্তৃপক্ষের ব্যক্তিগত কী ব্যবহার করে এক স্তর উপরে স্বাক্ষরিত হয়, যা বিশ্বাসের একটি চেইন তৈরি করে। সুতরাং, একটি DAC শংসাপত্র একটি PAI কী দ্বারা স্বাক্ষরিত হয়, এবং একটি PAI শংসাপত্র একটি PAA কী দ্বারা স্বাক্ষরিত হয়। চেইনের শীর্ষে থাকা, PAA শংসাপত্রগুলি স্ব-স্বাক্ষরিত। বিশ্বাসের এই চেইনটি একটি ফেডারেটেড PAA কাঠামো গঠন করে, যা ডিস্ট্রিবিউটেড কমপ্লায়েন্স লেজার (DCL) দ্বারা সিঙ্ক করা হয়।
প্রত্যয়ন প্রক্রিয়া এবং সার্টিফিকেশন ঘোষণা (সিডি) সম্পর্কে আরও তথ্য অতিরিক্ত প্রমাণীকরণ নথি এবং বার্তা এবং ম্যাটার স্পেসিফিকেশনে পাওয়া যেতে পারে।
ম্যাটার এসডিকে ইনস্টল করুন
এই নির্দেশাবলী অনুমান করে যে আপনার কাছে Matter SDK এর একটি কার্যকরী ইনস্টলেশন রয়েছে। অনুগ্রহ করে Github- এ এর ডকুমেন্টেশন পড়ুন বা আরও তথ্যের জন্য ম্যাটার দিয়ে শুরু করুন দেখুন।
হেক্সডাম্প ইউটিলিটি xxd
ইনস্টল করুন যদি আপনার কাছে না থাকে। এই টুলটি সি-স্টাইল ফরম্যাটে শংসাপত্র মুদ্রণের জন্য দরকারী:
sudo apt-get install xxd
chip-cert
তৈরি করুন
আপনি SDK-এর সাম্প্রতিক সংস্করণে কাজ করছেন তা নিশ্চিত করুন। এই পদ্ধতিগুলি Github SHA
0b17bce8
,v1.0-branch
শাখায় পরীক্ষা করা হয়েছিল:$ cd connectedhomeip $ git checkout v1.0-branch $ git pull
Build
chip-cert
, যা Matter ডিভাইসের জন্য শংসাপত্রের বিভিন্ন অপারেশনের জন্য ব্যবহৃত টুল:বিল্ড কনফিগার করুন:
$ cd src/credentials $ source ../../scripts/activate.sh $ gn gen out
উদাহরণ
gn
আউটপুট:Done. Made 5774 targets from 289 files in 658ms
বিল্ড চালান:
$ ninja -C out
ninja
আউটপুটের উদাহরণ:ninja: Entering directory `out' [2000/2000] stamp obj/default.stamp
আপনার সার্টিফিকেট মিন্ট
আপনার কমান্ড আর্গুমেন্ট সম্পাদনা করার সময় করণিক ত্রুটির সম্ভাবনা কমাতে পরিবেশের ভেরিয়েবল হিসাবে আপনার কাস্টম VID/PID রপ্তানি করুন:
$ cd ../..
$ export VID=hexVendorId
$ export PID=hexProductId
একটি সিডি তৈরি করুন
chip-cert
ব্যবহার করে সিডি তৈরি করুন। বর্তমানে কমিশনার শুধুমাত্র যাচাই করেন যে ভিআইডি এবং পিআইডি ডিভাইসের দ্বারা অন্যত্র প্রকাশিত ডেটার সাথে মেলে: বেসিক ইনফরমেশন ক্লাস্টার, 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"
সিডি যাচাই করুন। নিশ্চিত করুন যে এটিতে আপনার 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 তৈরি করতে এটিকে রুট CA হিসাবে ব্যবহার করব।
PAA ব্যবহার করে PAI তৈরি করুন। আপনি ঐচ্ছিকভাবে PAI-তে PID তথ্য অন্তর্ভুক্ত করতে পারেন, কিন্তু এটি বাদ দিলে আপনি পরীক্ষার জন্য আরও নমনীয়তা পাবেন। অতিরিক্ত পিআইডি-র জন্য আপনার যদি 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
PAI ব্যবহার করে DAC তৈরি করুন:
$ 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
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
আপনি
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
আপনি আপনার তৈরি করা শংসাপত্রগুলি পরিদর্শন করতে
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 ব্যবহার করা যা VID তথ্য অন্তর্ভুক্ত করে না।
একটি CD তৈরি করার আরও উদাহরণের জন্য, credentials/test/gen-test-cds.sh
দেখুন এবং PAA, PAI, এবং DAC তৈরি করার আরও উদাহরণের জন্য, credentials/test/gen-test-attestation-certs.sh
দেখুন
সার্টিফিকেট প্রতিস্থাপন
PAA এবং PAI প্রতিস্থাপন করুন
- নিম্নলিখিত হেল্পার স্ক্রিপ্টটি চালান, যা আপনার সার্টিফিকেটের C-স্টাইল অ্যারে তৈরি করতে CHIP সার্টিফিকেট টুল (
chip-cert
) ব্যবহার করে।
এমবেডেবল সার্টিফিকেট হেল্পার স্ক্রিপ্ট ডাউনলোড করুন
#!/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/\0x/g' | 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"
আপনার
DeviceAttestationCredentialsProvider::GetProductAttestationIntermediateCert
এর বাস্তবায়নে PAI এবং DAC আউটপুটের বিষয়বস্তু অনুলিপি করুন।উৎপাদন ডিভাইসে, PAI এবং DAC ফ্যাক্টরি ডেটাতে থাকে, যখন সিডি ফার্মওয়্যারের মধ্যেই এমবেড করা থাকে।
আপনি যদি এখনও ফ্যাক্টরি ডেটা ব্যবহার না করেন, তাহলে আপনি আপনার 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
আপনি যদি ফ্যাক্টরি ডেটা বা একটি কাস্টম শংসাপত্র প্রদানকারী ব্যবহার করেন, তাহলে উপযুক্ত স্থানে শংসাপত্রগুলি সন্নিবেশ করা নিশ্চিত করুন৷ আপনি আপনার প্ল্যাটফর্মের সুনির্দিষ্ট বিষয়ে আপনার SoC প্রদানকারীর সাথে চেক করতে চাইতে পারেন।
সিডি প্রতিস্থাপন করুন
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; ```
আপনার বিল্ডে সিডি সংজ্ঞায়িত করার জন্য ব্যবহৃত ফাইলটিতে আগের ধাপে আপনি যে পাঠ্যটি বের করেছেন তা অনুলিপি করুন। PAI এবং DAC এর ক্ষেত্রে, আপনি কীভাবে এটি করবেন তা নির্ভর করে আপনি কোন প্ল্যাটফর্মে বিকাশ করছেন তার উপর।
আপনি যদি শংসাপত্রের উদাহরণগুলি ব্যবহার করেন, আপনি সম্ভবত src/credentials/examples/DeviceAttestationCredsExample.cpp
এ ExampleDACProvider::GetCertificationDeclaration
এ kCdForAllExamples
এর বিষয়বস্তু প্রতিস্থাপন করতে চান :
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 ডকুমেন্টেশন বা সমর্থিত ডিভাইস দেখুন।
ডিভাইস কমিশন
আপনি এখন Google Home platform আপনার Matter ডিভাইসটি চালু করতে Pair a Matter ডিভাইসে ইতিমধ্যে কভার করা ধাপগুলি অনুসরণ করতে পারেন।
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-trust-store-path
ফ্ল্যাগ দিয়ে আপনার PAA ফাইলের পাথ পাস করা একটি ভালো অভ্যাস।
এইভাবে 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
,প্রয়োজন না হলেও, কিছু পরীক্ষার পরিস্থিতিতে নন-প্রোডাকশন ম্যাটার সার্টিফিকেট তৈরি করা প্রয়োজন।
ডিভাইস OTA সফ্টওয়্যার আপডেট সহ Google-এর ইকোসিস্টেমের কিছু বৈশিষ্ট্য একটি টেস্ট VID/PID ব্যবহার করে সঞ্চালিত হতে পারে না ।
এই নির্দেশিকা ব্যাখ্যা করে কিভাবে পরীক্ষায় ব্যবহারের জন্য নন-প্রোডাকশন Matter সার্টিফিকেট তৈরি এবং যাচাই করা যায়। শংসাপত্রের প্রকারগুলি হল:
- সার্টিফিকেশন ঘোষণা ( সিডি )
- প্রোডাক্ট অ্যাটেস্টেশন ইন্টারমিডিয়েট সার্টিফিকেট ( PAI )
- ডিভাইস অ্যাটেস্টেশন সার্টিফিকেট ( DAC )
কমিশনিং প্রক্রিয়া চলাকালীন, একটি Matter সার্টিফাইড ডিভাইসকে নিজেকে প্রমাণ করতে হবে, অর্থাৎ প্রমাণ করতে হবে যে এটি একটি আসল Matter -প্রত্যয়িত পণ্য। প্রত্যয়নের জন্য Matter ডিভাইসগুলির দ্বারা ব্যবহৃত শংসাপত্রগুলির মধ্যে রয়েছে:
- একটি প্রত্যয়ন কী জোড়া
- একটি শংসাপত্র চেইন
ডিভাইস অ্যাটেস্টেশন সার্টিফিকেট (DAC) হল সার্টিফিকেট চেইনের প্রথম লিঙ্ক, এবং প্রোডাক্ট অ্যাটেস্টেশন ইন্টারমিডিয়েট সার্টিফিকেট (PAI) দ্বারা যাচাই করা হয়, যা ফলস্বরূপ প্রোডাক্ট অ্যাটেস্টেশন অথরিটি (PAA) দ্বারা যাচাই করা হয়।
শংসাপত্রগুলি একই সময়ে স্বাক্ষরিত হয় যখন সত্যায়ন কী জোড়া তৈরি হয় এবং শংসাপত্র কর্তৃপক্ষের ব্যক্তিগত কী ব্যবহার করে এক স্তর উপরে স্বাক্ষরিত হয়, যা বিশ্বাসের একটি চেইন তৈরি করে। সুতরাং, একটি DAC শংসাপত্র একটি PAI কী দ্বারা স্বাক্ষরিত হয়, এবং একটি PAI শংসাপত্র একটি PAA কী দ্বারা স্বাক্ষরিত হয়। চেইনের শীর্ষে থাকা, PAA শংসাপত্রগুলি স্ব-স্বাক্ষরিত। বিশ্বাসের এই চেইনটি একটি ফেডারেটেড PAA কাঠামো গঠন করে, যা ডিস্ট্রিবিউটেড কমপ্লায়েন্স লেজার (DCL) দ্বারা সিঙ্ক করা হয়।
প্রত্যয়ন প্রক্রিয়া এবং সার্টিফিকেশন ঘোষণা (সিডি) সম্পর্কে আরও তথ্য অতিরিক্ত প্রমাণীকরণ নথি এবং বার্তা এবং ম্যাটার স্পেসিফিকেশনে পাওয়া যেতে পারে।
ম্যাটার এসডিকে ইনস্টল করুন
এই নির্দেশাবলী অনুমান করে যে আপনার কাছে Matter SDK এর একটি কার্যকরী ইনস্টলেশন রয়েছে। অনুগ্রহ করে Github- এ এর ডকুমেন্টেশন পড়ুন বা আরও তথ্যের জন্য ম্যাটার দিয়ে শুরু করুন দেখুন।
হেক্সডাম্প ইউটিলিটি xxd
ইনস্টল করুন যদি আপনার কাছে না থাকে। এই টুলটি সি-স্টাইল ফরম্যাটে শংসাপত্র মুদ্রণের জন্য দরকারী:
sudo apt-get install xxd
chip-cert
তৈরি করুন
আপনি SDK-এর সাম্প্রতিক সংস্করণে কাজ করছেন তা নিশ্চিত করুন। এই পদ্ধতিগুলি Github SHA
0b17bce8
,v1.0-branch
শাখায় পরীক্ষা করা হয়েছিল:$ cd connectedhomeip $ git checkout v1.0-branch $ git pull
Build
chip-cert
, যা Matter ডিভাইসের জন্য শংসাপত্রের বিভিন্ন অপারেশনের জন্য ব্যবহৃত টুল:বিল্ড কনফিগার করুন:
$ cd src/credentials $ source ../../scripts/activate.sh $ gn gen out
উদাহরণ
gn
আউটপুট:Done. Made 5774 targets from 289 files in 658ms
বিল্ড চালান:
$ ninja -C out
ninja
আউটপুটের উদাহরণ:ninja: Entering directory `out' [2000/2000] stamp obj/default.stamp
আপনার সার্টিফিকেট মিন্ট
আপনার কমান্ড আর্গুমেন্ট সম্পাদনা করার সময় করণিক ত্রুটির সম্ভাবনা কমাতে পরিবেশের ভেরিয়েবল হিসাবে আপনার কাস্টম VID/PID রপ্তানি করুন:
$ cd ../..
$ export VID=hexVendorId
$ export PID=hexProductId
একটি সিডি তৈরি করুন
chip-cert
ব্যবহার করে সিডি তৈরি করুন। বর্তমানে কমিশনার শুধুমাত্র যাচাই করেন যে ভিআইডি এবং পিআইডি ডিভাইসের দ্বারা অন্যত্র প্রকাশিত ডেটার সাথে মেলে: বেসিক ইনফরমেশন ক্লাস্টার, 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"
সিডি যাচাই করুন। নিশ্চিত করুন যে এটিতে আপনার 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 তৈরি করতে এটিকে রুট CA হিসাবে ব্যবহার করব।
PAA ব্যবহার করে PAI তৈরি করুন। আপনি ঐচ্ছিকভাবে PAI-তে PID তথ্য অন্তর্ভুক্ত করতে পারেন, কিন্তু এটি বাদ দিলে আপনি পরীক্ষার জন্য আরও নমনীয়তা পাবেন। অতিরিক্ত পিআইডি-র জন্য আপনার যদি 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
PAI ব্যবহার করে DAC তৈরি করুন:
$ 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
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
আপনি
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
আপনি আপনার তৈরি করা শংসাপত্রগুলি পরিদর্শন করতে
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 ব্যবহার করা যা VID তথ্য অন্তর্ভুক্ত করে না।
একটি CD তৈরি করার আরও উদাহরণের জন্য, credentials/test/gen-test-cds.sh
দেখুন এবং PAA, PAI, এবং DAC তৈরি করার আরও উদাহরণের জন্য, credentials/test/gen-test-attestation-certs.sh
দেখুন
সার্টিফিকেট প্রতিস্থাপন
PAA এবং PAI প্রতিস্থাপন করুন
- নিম্নলিখিত হেল্পার স্ক্রিপ্টটি চালান, যা আপনার সার্টিফিকেটের C-স্টাইল অ্যারে তৈরি করতে CHIP সার্টিফিকেট টুল (
chip-cert
) ব্যবহার করে।
এমবেডেবল সার্টিফিকেট হেল্পার স্ক্রিপ্ট ডাউনলোড করুন
#!/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/\0x/g' | 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"
আপনার
DeviceAttestationCredentialsProvider::GetProductAttestationIntermediateCert
এর বাস্তবায়নে PAI এবং DAC আউটপুটের বিষয়বস্তু অনুলিপি করুন।উৎপাদন ডিভাইসে, PAI এবং DAC ফ্যাক্টরি ডেটাতে থাকে, যখন সিডি ফার্মওয়্যারের মধ্যেই এমবেড করা থাকে।
আপনি যদি এখনও ফ্যাক্টরি ডেটা ব্যবহার না করেন, তাহলে আপনি আপনার 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
আপনি যদি ফ্যাক্টরি ডেটা বা একটি কাস্টম শংসাপত্র প্রদানকারী ব্যবহার করেন, তাহলে উপযুক্ত স্থানে শংসাপত্রগুলি সন্নিবেশ করা নিশ্চিত করুন৷ আপনি আপনার প্ল্যাটফর্মের সুনির্দিষ্ট বিষয়ে আপনার SoC প্রদানকারীর সাথে চেক করতে চাইতে পারেন।
সিডি প্রতিস্থাপন করুন
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; ```
আপনার বিল্ডে সিডি সংজ্ঞায়িত করার জন্য ব্যবহৃত ফাইলটিতে আগের ধাপে আপনি যে পাঠ্যটি বের করেছেন তা অনুলিপি করুন। PAI এবং DAC এর ক্ষেত্রে, আপনি কীভাবে এটি করবেন তা নির্ভর করে আপনি কোন প্ল্যাটফর্মে বিকাশ করছেন তার উপর।
আপনি যদি শংসাপত্রের উদাহরণগুলি ব্যবহার করেন, আপনি সম্ভবত src/credentials/examples/DeviceAttestationCredsExample.cpp
এ ExampleDACProvider::GetCertificationDeclaration
এ kCdForAllExamples
এর বিষয়বস্তু প্রতিস্থাপন করতে চান :
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 ডকুমেন্টেশন বা সমর্থিত ডিভাইস দেখুন।
ডিভাইস কমিশন
আপনি এখন Google Home platform আপনার Matter ডিভাইসটি চালু করতে Pair a Matter ডিভাইসে ইতিমধ্যে কভার করা ধাপগুলি অনুসরণ করতে পারেন।
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-trust-store-path
ফ্ল্যাগ দিয়ে আপনার PAA ফাইলের পাথ পাস করা একটি ভালো অভ্যাস।
এইভাবে 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
,প্রয়োজন না হলেও, কিছু পরীক্ষার পরিস্থিতিতে নন-প্রোডাকশন ম্যাটার সার্টিফিকেট তৈরি করা প্রয়োজন।
ডিভাইস OTA সফ্টওয়্যার আপডেট সহ Google-এর ইকোসিস্টেমের কিছু বৈশিষ্ট্য একটি টেস্ট VID/PID ব্যবহার করে সঞ্চালিত হতে পারে না ।
এই নির্দেশিকা ব্যাখ্যা করে কিভাবে পরীক্ষায় ব্যবহারের জন্য নন-প্রোডাকশন Matter সার্টিফিকেট তৈরি এবং যাচাই করা যায়। শংসাপত্রের প্রকারগুলি হল:
- সার্টিফিকেশন ঘোষণা ( সিডি )
- প্রোডাক্ট অ্যাটেস্টেশন ইন্টারমিডিয়েট সার্টিফিকেট ( PAI )
- ডিভাইস অ্যাটেস্টেশন সার্টিফিকেট ( DAC )
কমিশনিং প্রক্রিয়া চলাকালীন, একটি Matter সার্টিফাইড ডিভাইসকে নিজেকে প্রমাণ করতে হবে, অর্থাৎ প্রমাণ করতে হবে যে এটি একটি আসল Matter -প্রত্যয়িত পণ্য। প্রত্যয়নের জন্য Matter ডিভাইসগুলির দ্বারা ব্যবহৃত শংসাপত্রগুলির মধ্যে রয়েছে:
- একটি প্রত্যয়ন কী জোড়া
- একটি শংসাপত্র চেইন
ডিভাইস অ্যাটেস্টেশন সার্টিফিকেট (DAC) হল সার্টিফিকেট চেইনের প্রথম লিঙ্ক, এবং প্রোডাক্ট অ্যাটেস্টেশন ইন্টারমিডিয়েট সার্টিফিকেট (PAI) দ্বারা যাচাই করা হয়, যা ফলস্বরূপ প্রোডাক্ট অ্যাটেস্টেশন অথরিটি (PAA) দ্বারা যাচাই করা হয়।
শংসাপত্রগুলি একই সময়ে স্বাক্ষরিত হয় যখন সত্যায়ন কী জোড়া তৈরি হয় এবং শংসাপত্র কর্তৃপক্ষের ব্যক্তিগত কী ব্যবহার করে এক স্তর উপরে স্বাক্ষরিত হয়, যা বিশ্বাসের একটি চেইন তৈরি করে। সুতরাং, একটি DAC শংসাপত্র একটি PAI কী দ্বারা স্বাক্ষরিত হয়, এবং একটি PAI শংসাপত্র একটি PAA কী দ্বারা স্বাক্ষরিত হয়। চেইনের শীর্ষে থাকা, PAA শংসাপত্রগুলি স্ব-স্বাক্ষরিত। বিশ্বাসের এই চেইনটি একটি ফেডারেটেড PAA কাঠামো গঠন করে, যা ডিস্ট্রিবিউটেড কমপ্লায়েন্স লেজার (DCL) দ্বারা সিঙ্ক করা হয়।
প্রত্যয়ন প্রক্রিয়া এবং সার্টিফিকেশন ঘোষণা (সিডি) সম্পর্কে আরও তথ্য অতিরিক্ত প্রমাণীকরণ নথি এবং বার্তা এবং ম্যাটার স্পেসিফিকেশনে পাওয়া যেতে পারে।
ম্যাটার এসডিকে ইনস্টল করুন
এই নির্দেশাবলী অনুমান করে যে আপনার কাছে Matter SDK এর একটি কার্যকরী ইনস্টলেশন রয়েছে। অনুগ্রহ করে Github- এ এর ডকুমেন্টেশন পড়ুন বা আরও তথ্যের জন্য ম্যাটার দিয়ে শুরু করুন দেখুন।
হেক্সডাম্প ইউটিলিটি xxd
ইনস্টল করুন যদি আপনার কাছে না থাকে। এই টুলটি সি-স্টাইল ফরম্যাটে শংসাপত্র মুদ্রণের জন্য দরকারী:
sudo apt-get install xxd
chip-cert
তৈরি করুন
আপনি SDK-এর সাম্প্রতিক সংস্করণে কাজ করছেন তা নিশ্চিত করুন। এই পদ্ধতিগুলি Github SHA
0b17bce8
,v1.0-branch
শাখায় পরীক্ষা করা হয়েছিল:$ cd connectedhomeip $ git checkout v1.0-branch $ git pull
Build
chip-cert
, যা Matter ডিভাইসের জন্য শংসাপত্রের বিভিন্ন অপারেশনের জন্য ব্যবহৃত টুল:বিল্ড কনফিগার করুন:
$ cd src/credentials $ source ../../scripts/activate.sh $ gn gen out
উদাহরণ
gn
আউটপুট:Done. Made 5774 targets from 289 files in 658ms
বিল্ড চালান:
$ ninja -C out
ninja
আউটপুটের উদাহরণ:ninja: Entering directory `out' [2000/2000] stamp obj/default.stamp
আপনার সার্টিফিকেট মিন্ট
আপনার কমান্ড আর্গুমেন্ট সম্পাদনা করার সময় করণিক ত্রুটির সম্ভাবনা কমাতে পরিবেশের ভেরিয়েবল হিসাবে আপনার কাস্টম VID/PID রপ্তানি করুন:
$ cd ../..
$ export VID=hexVendorId
$ export PID=hexProductId
একটি সিডি তৈরি করুন
chip-cert
ব্যবহার করে সিডি তৈরি করুন। বর্তমানে কমিশনার শুধুমাত্র যাচাই করেন যে ভিআইডি এবং পিআইডি ডিভাইসের দ্বারা অন্যত্র প্রকাশিত ডেটার সাথে মেলে: বেসিক ইনফরমেশন ক্লাস্টার, 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"
সিডি যাচাই করুন। নিশ্চিত করুন যে এটিতে আপনার 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 তৈরি করতে এটিকে রুট CA হিসাবে ব্যবহার করব।
PAA ব্যবহার করে PAI তৈরি করুন। আপনি ঐচ্ছিকভাবে PAI-তে PID তথ্য অন্তর্ভুক্ত করতে পারেন, কিন্তু এটি বাদ দিলে আপনি পরীক্ষার জন্য আরও নমনীয়তা পাবেন। অতিরিক্ত পিআইডি-র জন্য আপনার যদি 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
PAI ব্যবহার করে DAC তৈরি করুন:
$ 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
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
আপনি
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
আপনি আপনার তৈরি করা শংসাপত্রগুলি পরিদর্শন করতে
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 ব্যবহার করা যা VID তথ্য অন্তর্ভুক্ত করে না।
একটি CD তৈরি করার আরও উদাহরণের জন্য, credentials/test/gen-test-cds.sh
দেখুন এবং PAA, PAI, এবং DAC তৈরি করার আরও উদাহরণের জন্য, credentials/test/gen-test-attestation-certs.sh
দেখুন
সার্টিফিকেট প্রতিস্থাপন
PAA এবং PAI প্রতিস্থাপন করুন
- নিম্নলিখিত হেল্পার স্ক্রিপ্টটি চালান, যা আপনার সার্টিফিকেটের C-স্টাইল অ্যারে তৈরি করতে CHIP সার্টিফিকেট টুল (
chip-cert
) ব্যবহার করে।
এমবেডেবল সার্টিফিকেট হেল্পার স্ক্রিপ্ট ডাউনলোড করুন
#!/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/\0x/g' | 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"
আপনার
DeviceAttestationCredentialsProvider::GetProductAttestationIntermediateCert
এর বাস্তবায়নে PAI এবং DAC আউটপুটের বিষয়বস্তু অনুলিপি করুন।উৎপাদন ডিভাইসে, PAI এবং DAC ফ্যাক্টরি ডেটাতে থাকে, যখন সিডি ফার্মওয়্যারের মধ্যেই এমবেড করা থাকে।
আপনি যদি এখনও ফ্যাক্টরি ডেটা ব্যবহার না করেন, তাহলে আপনি আপনার 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
আপনি যদি ফ্যাক্টরি ডেটা বা একটি কাস্টম শংসাপত্র প্রদানকারী ব্যবহার করেন, তাহলে উপযুক্ত স্থানে শংসাপত্রগুলি সন্নিবেশ করা নিশ্চিত করুন৷ আপনি আপনার প্ল্যাটফর্মের সুনির্দিষ্ট বিষয়ে আপনার SoC প্রদানকারীর সাথে চেক করতে চাইতে পারেন।
সিডি প্রতিস্থাপন করুন
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; ```
আপনার বিল্ডে সিডি সংজ্ঞায়িত করার জন্য ব্যবহৃত ফাইলটিতে আগের ধাপে আপনি যে পাঠ্যটি বের করেছেন তা অনুলিপি করুন। PAI এবং DAC এর ক্ষেত্রে, আপনি কীভাবে এটি করবেন তা নির্ভর করে আপনি কোন প্ল্যাটফর্মে বিকাশ করছেন তার উপর।
আপনি যদি শংসাপত্রের উদাহরণগুলি ব্যবহার করেন, আপনি সম্ভবত src/credentials/examples/DeviceAttestationCredsExample.cpp
এ ExampleDACProvider::GetCertificationDeclaration
এ kCdForAllExamples
এর বিষয়বস্তু প্রতিস্থাপন করতে চান :
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 ডকুমেন্টেশন বা সমর্থিত ডিভাইস দেখুন।
ডিভাইস কমিশন
আপনি এখন Google Home platform আপনার Matter ডিভাইসটি চালু করতে Pair a Matter ডিভাইসে ইতিমধ্যে কভার করা ধাপগুলি অনুসরণ করতে পারেন।
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-trust-store-path
ফ্ল্যাগ দিয়ে আপনার PAA ফাইলের পাথ পাস করা একটি ভালো অভ্যাস।
এইভাবে 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