أداة إدارة حسابات OpenWeave

عرض المصدر على GitHub

توفّر "أداة إدارة حسابات OpenWeave" وسيلة مناسبة لتوفير معلومات الإعداد الدائمة لكل جهاز على الأجهزة التي تعمل بنظام Weave. نهدف من خلال "أداة إدارة الحسابات للمصنع" إلى استخدامها كجزء من عملية خط التصنيع تعمل على ختم الأجهزة الفردية بمعلومات فريدة ومعلومات الاعتماد قبل شحنها إلى العملاء. ويمكن لمطوّري البرامج أيضًا استخدامها لتخصيص أجهزة مرحلة ما قبل الإنتاج خلال عملية التطوير.

نظرية العمليات

والغرض من "أداة إدارة حسابات OpenWeave" هو إدخال معلومات الضبط المحددة في مخزن إعداد مستمر للجهاز، حيث يمكن التقاطه واستخدامه في وقت التشغيل بواسطة البرامج الثابتة للجهاز. وعادةً ما يتم تخزين الإعداد المستمر للجهاز في ذاكرة الفلاش الداخلية للجهاز، على الرغم من اختلاف تفاصيل كيفية تخزين البيانات وتنسيقها من نظام أساسي إلى آخر. تعتمد "أداة إدارة الحسابات" نفسها على تنسيق التخزين النهائي وتعتمد على الرمز في البرامج الثابتة للجهاز لمعرفة كيفية كتابة البيانات بالطريقة الصحيحة. وتُعدّ واجهة المستخدم لهذه الأداة مستقلة إلى حد كبير عن نوع الأجهزة التي يتم ضبطها، أي أنه يمكن استخدام عمليات التصنيع المشابهة على مستوى خطوط المنتجات التي تستند إلى الأنظمة الأساسية للأجهزة المختلفة.

تم تصميم أداة إدارة حسابات المصنع بحيث تعمل على جهاز مضيف متصل بجهاز مستهدف من خلال أحد أشكال تصحيح الأخطاء أو واجهة التحكم - على سبيل المثال، منفذ JTAG أو SWD. تعمل الأداة عن طريق إدخال معلومات إدارة الحسابات في ذاكرة الوصول العشوائي للجهاز في نموذج مشفر بشكل خاص. بعد ذلك، يتم توجيه الجهاز لإعادة التشغيل، وعند هذه النقطة، يتم تحديد موقع البيانات المرمّزة على البرامج الثابتة للجهاز والتحقق من صحّتها من خلال كتابة القيم المتضمّنة في وحدة تخزين دائمة بتنسيق مناسب للنظام الأساسي.

يتم تضمين رمز الجهاز الذي يرصد بيانات حقن الحقن ويعالجها في طبقة جهاز OpenWeave، ويمكن تفعيله على أي نظام أساسي متوافق. بعد التفعيل، يتم تشغيل الرمز تلقائيًا في كل مرة يتم فيها تشغيل الجهاز، في مرحلة مبكرة من عملية إعداد الجهاز. يعمل الرمز من خلال فحص منطقة ذاكرة الوصول العشوائي (RAM) الخاصة بالنظام الأساسي. تشمل الأنظمة الأساسية كل سعة ذاكرة الوصول العشوائي المتاحة، وذلك على المنصات التي تتضمن ذاكرة تثبيت متواضعة (مثل <1M).

وعند وضع البيانات في ذاكرة الوصول العشوائي، يتم تشفيرها باستخدام بادئة يمكن التعرف عليها بسهولة، مما يتيح إمكانية العثور عليها بسرعة أثناء عملية الفحص. يتم استخدام قيمة التحقق من السلامة استنادًا إلى التجزئة المشفّرة للتأكد من صحة البيانات قبل المعالجة.

وفقًا للإعدادات التلقائية، تختار أداة إدارة الحسابات موقع ذاكرة الوصول العشوائي (RAM) الذي يتم إدخال بيانات إدارة الحسابات فيه استنادًا إلى النظام الأساسي للجهاز المُستهدَف. يمكن إلغاء هذا الخيار عن طريق وسيطة للأداة. بصفة عامة، لا يحتاج الجهاز الثابت إلى حجز موقع ذاكرة الوصول العشوائي خصيصًا لاستلام بيانات إدارة الحسابات. وعادة تتم كتابة بيانات إدارة الحسابات في موقع مخصص لذاكرة الوصول العشوائي (RAM) يتم تخصيصه لأغراض أخرى، إلا أنه لا يتم استخدامه عمومًا في مرحلة مبكرة من عملية تشغيل الجهاز. الاختيارات الشائعة هي الجزء العلوي من حِزمة النظام الأوّلية، أو الطرف البعيد من ساحة الذاكرة.

تعتمد "أداة إدارة الحسابات" على الإعدادات الأصلية على مجموعة من أدوات التطوير الخارجية للربط بالجهاز المستهدف. تعتمد الأدوات المستخدمة على نوع الجهاز المستهدف. واجهتا جهاز متوافقان حاليًا:

  • مسدّ تصحيح أخطاء SEGGER J-Link متصل بجهاز JTAG أو منفذ SWD
  • منفذ USB متسلسل متصل بـ Espressif ESP32

تعتمد واجهة J-Link على أداة SEGGER J-Link Commander (JLinkExe)، والتي يجب تثبيتها بشكل منفصل على الجهاز المضيف.

تعتمد واجهة ESP32 على أمر Espressif esptool.py، الذي يتم تقديمه كجزء من Espressif's ESP-IDF SDK.

أنواع المعلومات التي يمكن توفيرها

يمكن لأداة "توفير متطلبات العمل" في OpenWeave توفير أنواع المعلومات التالية:

  • الرقم التسلسلي للجهاز
  • رقم تعريف جهاز Weave الذي صنّعته الشركة المصنّعة
  • شهادة Weave التي تخص الشركة المصنّعة ومفتاح خاص
  • رمز إقران Weave
  • رقم مراجعة المنتج
  • تاريخ التصنيع

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

مصادر معلومات إدارة الحسابات

يمكن توفير معلومات إدارة حسابات الأجهزة إلى "أداة إدارة الحسابات" بالطرق التالية:

  • وسيطات سطر الأوامر
  • استخدام ملف CSV لإدارة الحسابات
  • من خلال جلب القيم من خادم إدارة حسابات Nest

سطر الأوامر

في أبسط شكل، يتم تحديد معلومات إدارة الحسابات للأجهزة مباشرةً في سطر الأوامر إلى "أداة إدارة حسابات OpenWeave". مثلاً:

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
    --pairing-code NESTUS --mfg-date 2019/04/01

يمكن تحديد قيم البيانات الثنائية، مثل شهادة Weave والمفتاح الخاص، إما كسلاسل base-64 أو كأسماء الملفات التي تحتوي على البيانات المطلوبة بالشكل الأولي (ثنائي).

يمكنك الاطّلاع أدناه على قائمة كاملة بوسيطات سطر الأوامر المتاحة.

ملف CSV لإدارة الحسابات

لاستيعاب إدارة الحسابات المُجمّعة للأجهزة، يمكن لأداة إدارة الحسابات أيضًا قراءة بيانات إدارة الحسابات من ملف بيانات إدارة الحسابات بتنسيق CSV. من المتوقع أن تكون أعمدة هذا الملف متوافقة مع أنواع معيّنة من بيانات توفير متطلبات العمل، أي Serial_Num أو Certificate أو Private_Key أو غير ذلك. وتعطي الصفوف في الملف قيمًا فردية لأجهزة معينة، يفهرسها معرّف جهاز Weave (Device_Id). ويجب تحديد رقم تعريف الجهاز المطلوب توفيره في سطر الأوامر. مثلاً:

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
    --prov-csv-file ./dev-provisioning-data.csv

تتوفّر أعمدة CSV التالية:

الاسم التنسيق الوصف
Device_Id 16 رقمًا سداسيًا عشريًا معرّف جهاز Weave. يجب أن تكون متوفّرة.
Serial_Num string الرقم التسلسلي للجهاز.
Certificate سلسلة base-64 شهادة جهاز Weave التي صنّفتها الشركة المصنّعة
Private_Key سلسلة base-64 مفتاح Weave الخاص الذي تحدده الشركة المصنّعة.
Pairing_Code string دمج رمز الإقران
Product_Rev عدد صحيح رقم مراجعة المنتج
Mfg_Date YYYY/MM/DD تاريخ تصنيع الأجهزة

وقد تظهر الأعمدة في ملف CSV بأي ترتيب. وتُعد جميع الأعمدة اختيارية، باستثناء Device_Id. لا يتم توفير أي قيم غير موجودة في ملف CSV على الجهاز.

ويمكن للمستخدم تحديد قيم إدارة الحسابات الفردية في سطر الأوامر، بالإضافة إلى ملف CSV، وفي هذه الحالة تكون قيمة سطر الأوامر مسبوقة بتلك القيم في الملف.

إنّ تنسيق تنسيق ملف CSV الذي توفّره أداة إدارة الحسابات على الإعدادات الأصلية متوافق مع مخرجات الأمر weave في gen-provisioning-data.

خادم إدارة الحسابات في Nest

تتيح "أداة إدارة حسابات المصنع" استرجاع معلومات محددة لإدارة الحسابات من خادم توفير متطلبات العمل في Nest باستخدام بروتوكول يستند إلى HTTPS. يمكن استخدام بروتوكول خادم إدارة الحسابات للحصول على شهادة جهاز Weave التي صنّفتها الشركة المصنّعة، والمفتاح الخاص المقابل، ورمز إقران Weave من خادم إدارة الحسابات.

يتم تحديد موقع شبكة خادم إدارة الحسابات من خلال تقديم عنوان URL أساسي في سطر أوامر أداة إدارة الحسابات. يتم تحديد معلومات إدارة الحسابات المطلوبة من خلال تحديد رقم تعريف جهاز Weave على سطر الأوامر. مثلاً:

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000001 \
    --prov-server https://192.168.172.2:8000/

قد يحدد المستخدم قيم إدارة الحسابات الفردية في سطر الأوامر بالإضافة إلى عنوان URL لخادم إدارة الحسابات. في هذه الحالة، تأخذ القيم الواردة في سطر الأوامر أولوية أعلى من القيم التي يعرضها الخادم.

تفعيل / إيقاف دعم إدارة حسابات المصنع

يتم التحكم في دعم إدارة حسابات OpenWeave في البرامج الثابتة للجهاز من خلال خيار ضبط وقت التجميع WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING. يتم تفعيل هذا الخيار تلقائيًا. يمكن إيقاف هذه الميزة من خلال إلغاء الخيار في ملف WeaveProjectConfig.h للتطبيق. مثلاً:

#define WEAVE_DEVICE_CONFIG_ENABLE_FACTORY_PROVISIONING 0

بشكل عام، يمكنك تفعيل توفير الإعدادات الأصلية للبرامج الثابتة لجهاز الإنتاج بشرط أن تكون واجهة تصحيح أخطاء الجهاز غير مفعّلة بشكل صحيح على أجهزة الإنتاج. يمكن تحقيق ذلك إمّا من خلال الأجهزة (على سبيل المثال، عن طريق صمم الصمامات الكهربائية في المنظومة على رقاقة (SoC)، أو من خلال البرامج (على سبيل المثال، من خلال برنامج تحميل بدء التشغيل الآمن الذي يمنع الوصول إلى تصحيح الأخطاء كجزء من عملية التشغيل).

تشغيل أداة إدارة حسابات المصنع

تتيح "أداة إدارة حسابات OpenWeave" خيارات سطر الأوامر التالية:

خيار الوصف
--<string> نوع الجهاز المستهدف الخيارات هي: nrf52840 وesp32
--load-addr <hex-numbers> العنوان في ذاكرة الجهاز التي سيتم كتابة بيانات إدارة الحسابات فيها.
-verbose, -v ضبط مستوى الإسهاب في الإخراج يمكنك استخدام وسيطات متعددة لزيادة مستوى الإسهاب.
-serial-num <string> اضبط الرقم التسلسلي للجهاز.
--device-id <hex-numbers> اضبط رقم تعريف الجهاز الذي حدّدته الشركة المصنّعة.
--device-cert <base-64> | <file-name> ضبط شهادة جهاز Weave التي صنّفتها الشركة المصنّعة
--key-key <base-64> | <file-name> اضبط مفتاح Weave الخاص للجهاز الذي حدّدته الشركة المصنّعة.
--pairing-code <string> إعداد رمز إقران الجهاز
--product-rev <integer> إعداد مراجعة المنتج للجهاز
--mfg-date <YYYY/MM/DD> | اليوم | الآن تحديد تاريخ تصنيع الجهاز.
--jlink-cmd <path-name> المسار إلى أمر JLink. الإعداد التلقائي على 'JLinkExe'.
--jlink-if SWD | JTAG نوع واجهة J-Link. الإعداد التلقائي هو SWD.
--jlink-speed <integer> | تكيُّفي | تلقائي سرعة واجهة J-Link:
--jlink-sn <string> الرقم التسلسلي لاختبار J-Link
--esptool-cmd <path-name> المسار إلى أمر esptool. الإعداد التلقائي على 'esptool.py'.
--port <path-name> اسم جهاز منفذ COM لـ ESP32. ويتم إعداد الإعدادات التلقائية على /tty/USB0.
--speed <integer> معدل الباود لمنفذ COM. القيمة التلقائية هي 115200.
--prov-csv-file <file-name> قراءة بيانات إدارة حسابات الأجهزة من ملف CSV لإدارة الحسابات.
--prov-server <url> قراءة بيانات إدارة الأجهزة من خادم إدارة الحسابات.
--disable-server-validation عند استخدام HTTPS، أوقِف التحقّق من صحة الشهادة التي يقدمها خادم إدارة الحسابات.

أمثلة

يؤدي الأمر التالي إلى ضبط رقم تعريف الجهاز والرقم التسلسلي ومراجعة المنتج ورمز الإقران على قيم معيّنة. تم ضبط تاريخ التصنيع على التاريخ الحالي. ويتم إعداد شهادة الجهاز والمفتاح الخاص على اختبار القيم الواردة في ملف CSV والمتوفّر في مستودع المصدر openweave-core.

./weave-factory-prov-tool --target nrf52840 --device-id 18B4300000000042 \
    --serial-num JAYS_DEVICE_42 --product-rev 1 --pairing-code NESTUS --mfg-date today \
    --prov-csv-file ~/projects/openweave-core/certs/development/device/test-dev-provisioning-data.csv