معمل أمان جهاز سيلابس 21Q2 الآمن
دليل مختبر الأمن BLE
في هذا المعمل ، سترى كيفية تصميم جهاز BLE أكثر أمانًا. سنبدأ مع أكثرview حول كيفية استخدام بعض ميزات المكدس والانتقال إلى بعض النصائح العامة حول تقنيات اتصالات أكثر أمانًا ، وفي النهاية سنرى كيفية استخدام شهادات الجهاز عبر BLE لتحديد الأجهزة الطرفية على أنها أصلية.
ابدء
بلوتوث sampإن تطبيق le الذي ستبني عليه مخصص للاستخدام مع أداة تحميل التشغيل. إذا كنت تعمل مع EFR32MG21B جديدة تمامًا ، فلن تحتوي على أداة تحميل إقلاع. يمكنك العثور على محمل الإقلاع المدمج مسبقًا في النظام الأساسي \ محمل الإقلاع \ sampمجلد le-apps \ bootloader-storage-internalsingle \ efr32mg21a010f1024im32-brd4181a الخاص بـ SDK.
- ابدأ بحرف s فارغampالتطبيق le. هذاampيُستخدم تطبيق le كقالب ويُعد نقطة انطلاق جيدة لأي تطبيق BLE.
- افتح معالج مشروع Silicon Labs من Simplicity Studio File القائمة -> جديد.
- حدد BRD4181C وانقر فوق الزر "التالي".
- انقر فوق مربع الاختيار "Bluetooth (9)" ضمن نوع التقنية.
- قم بتمييز "Bluetooth - SoC Empty" ثم انقر فوق "التالي".
- انقر فوق الزر "إنهاء".
- يمكنك الآن إضافة بعض الخصائص لترى كيف يتم التعامل مع الخصائص المحمية وغير المحمية بشكل مختلف.
- افتح الملف slcp الخاص بالمشروع file بالنقر نقرًا مزدوجًا فوقه في نافذة Project Explorer
- قم بتمييز علامة التبويب "مكونات البرنامج" وافتح أداة تكوين GATT كما هو موضح أدناه:
واستخدم أداة الاستيراد الموضحة أدناه لاستيراد ملف gatt_configuration.btconf file من مجلد الخادم في المواد المتوفرة.
تحتوي قاعدة بيانات الجات على خدمة مخصصة تسمى "تدريب" ، مع بعض البيانات المحمية والبعض الآخر غير ذلك. يتيح لك هذا مقارنة ما يحدث عند محاولة الوصول إلى خاصية محمية مقابل خاصية غير محمية. هذه طريقة سريعة لإنشاء جهاز بأمان أساسي للغاية.
- سنستخدم المنفذ التسلسلي للطباعة إلى وحدة التحكم في Simplicity Studio لتتبع ما يحدث في التطبيق. أسهل طريقة للعثور على هذه المكونات هي البحث عنها في مربع حوار مكونات البرامج كما هو موضح:
-
- قم بتثبيت مكون IO Stream USART
- قم بتثبيت مكون IO Stream Retarget STDIO
- قم بتثبيت مكون الإدخال / الإخراج القياسي
- قم بتثبيت مكون السجل
- افتح مكون لوحة التحكم وقم بتشغيل "تمكين Virtual COM UART"
- انقر بزر الماوس الأيمن فوق المحول في لوحة "محولات التصحيح" وحدد "تشغيل وحدة التحكم". حدد علامة التبويب 'Serial 1' وضع المؤشر في حقل إدخال النص في نافذة وحدة التحكم واضغط على Enter لتنبيه وحدة التحكم.
-
- قم بإنشاء متغير محلي في sl_bt_on_event () ، الموجود في app.c ، لحفظ مقبض الاتصال. يجب أن يكون المتغير ثابتًا حيث يتم استدعاء هذه الوظيفة في كل مرة يتم فيها رفع الحدث بواسطة المكدس ونريد أن تكون القيمة ثابتة. سيتم استخدام مقبض الاتصال في وقت لاحق
قسم المختبر.
- أدخل بعض عبارات app_log () للأحداث لترى عندما نكون متصلين ، وأنماط الأمان ، وما إلى ذلك
-
- قم بتضمين عنوان app_log.h file
- sl_bt_evt_connection_opened - اطبع مقبض السندات واحفظ مقبض الاتصال. إذا كان مقبض السندات هو 0xFF ، فلا يوجد رابط بين الأجهزة المتصلة. قم بتعديل معالج الأحداث الحالي بحيث يبدو كالتالي:
- sl_bt_evt_connection_parameters - وضع الأمان. يتم ذلك حتى تتمكن من معرفة متى يتغير وضع الأمان. هناك اختلاف في ترقيم أوضاع الأمن حيث يتم تعداد أسلوب الأمان 1 بالقيمة 0 ، إلخ. أضف معالج الأحداث التالي إلى التطبيق الخاص بك:
- sl_bt_evt_connection_closed_id. تم تعديل معالج الأحداث هذا لتحديث مقبض الاتصال. يتم استخدام القيمة 0xFF للإشارة إلى عدم وجود اتصال نشط. يتم استخدام الأمر app_log () لطباعة سبب إغلاق الاتصال ، قائمة أكواد الحالة هنا. قم بتعديل معالج الأحداث الحالي بحيث يبدو كالتالي:
- قم بتضمين عنوان app_log.h file
-
- بناء وفلاش المشروع. في هذه المرحلة ، سنقوم بتشغيل sample لمعرفة كيف يتصرف دون أي تغييرات ، إلى جانب قاعدة بيانات الجات.
- تواصل مع تطبيق EFRConnect للهاتف المحمول على النحو التالي:
-
- اضغط على أيقونة "متصفح البلوتوث".
- اضغط على أيقونة "اتصال" على الجهاز المسمى "تدريب".
-
- اقرأ الخاصية غير المحمية كما يلي:
-
- اضغط على رابط "مزيد من المعلومات" ضمن الخدمة غير المعروفة مع UUID a815944e-da1e-9d2a- 02e2-a8d15e2430a0.
- اقرأ الخاصية غير المحمية ، UUID f9e91a44-ca91-4aba-1c33-fd43ca270b4c بالنقر فوق أيقونة "قراءة". لا مفاجآت هنا. نظرًا لأن الخاصية غير محمية بأي شكل من الأشكال ، فسيتم إرسالها بنص عادي.
-
- اقرأ الآن الخاصية المحمية ، UUID d4261dbb-dcd0-daab-ec95-deec088d532b. يجب أن يطالبك هاتفك المحمول بالإقران والاتصال ، وقد تختلف الرسالة حسب نظام تشغيل هاتفك المحمول. بعد قبول طلب الاقتران ، يجب أن تظهر رسالة على وحدة التحكم كما يلي:
ملحوظة: يحتوي الملحق أ في نهاية هذا الدليل على ملخص لقدرات الإدخال / الإخراج وطرق الاقتران للرجوع إليها. يلخص الملحق ب أوضاع أمان Bluetooth.
تكوين مدير الأمن
يعد مدير الأمان جزءًا من حزمة Bluetooth التي تحدد ميزات الأمان المستخدمة. تتضمن هذه الميزات حماية الرجل في الوسط (MITM) ، اتصالات LE الآمنة (المعروفة أيضًا باسم ECDH) ، والتي تتطلب تأكيدًا للربط ، إلخ. يتعامل مدير الأمن أيضًا مع إمكانات الإدخال / الإخراج التي تُستخدم لتحديد الطريقة المستخدمة للإقران / الترابط (انظر الملحق أ للحصول على ملخص). في هذا القسم سترى إعدادًا بسيطًا.
- قم بإعداد SM بالتكوين المطلوب. تُسهل الأجهزة الخاصة بهذا المعمل من عرض مفتاح مرور على وحدة التحكم. إدخال مفتاح المرور هو مطلب لتمكين حماية MITM. أضف التعليمات البرمجية التالية إلى معالج الأحداث sl_bt_system_boot_id. هذا يمكّن الرجل في الوسط ويعلم الجهاز البعيد بأن لدينا القدرة على عرض مفتاح مرور ، ولكن هذا كل شيء.
- لعرض مفتاح المرور على وحدة التحكم ، يلزم وجود معالج حدث كما هو موضح أدناه:
- اضبط وضع الترابط ، والحد الأقصى لعدد الروابط ، وما إلى ذلك ، استخدم الكود التالي للبدء:
يمكن استخدام هذه الإعدادات للحد من قدرة المهاجم على الارتباط بجهازك. إذا كان منتجك يحتاج إلى مستخدم واحد فقط ، فيمكنك تحديد الحد الأقصى للروابط إلى 1. مكان جيد لإضافة هذه الاستدعاءات في معالج الأحداث sl_bt_system_boot_id. لن نقوم بتمكين الترابط في هذا الوقت لجعل بقية المختبر تسير بسلاسة أكبر ، لكننا وضعنا سياسة ربط للسماح بسند واحد فقط. كمرجع ، تم العثور على وثائق واجهات برمجة التطبيقات هذه هنا وهنا.
- قم بإضافة معالجات الأحداث لكل من sl_bt_evt_sm_bonded_id و sl_bt_evt_sm_bonding_failed_id. يعد الاستخدام الرئيسي لهذه الأحداث مفيدًا حاليًا ولكن في وقت لاحق في المعمل ستضيف وظائف.
- بناء وميض للوحة الهدف. تواصل مع EFRConnect واقرأ الخاصية المحمية كما كان من قبل. هذه المرة ، سترى مفتاح مرور معروضًا على وحدة التحكم. أدخل مفتاح المرور هذا على هاتفك المحمول عندما يُطلب منك ذلك.
- جرب تأكيد الترابط. تمنح هذه الميزة المستخدم القدرة على طلب تأكيد طلبات الترابط. يؤدي القيام بذلك إلى منح التطبيق التحكم في الأجهزة النظيرة التي يرتبط بها. أحد الاحتمالات هو مطالبة المستخدم بالضغط على زر قبل السماح بالسند.
- افتح إعدادات Bluetooth في هاتفك المحمول وقم بإزالة الرابط بجهاز EFR32. تختلف تطبيقات الهاتف المحمول لذا قد لا تكون هذه الخطوة ضرورية. إذا كنت لا ترى جهاز "التدريب" في إعدادات البلوتوث ، فانتقل إلى الخطوة التالية.
- في مكونات البرنامج ، قم بتثبيت مثيل واحد لمعالج الزر البسيط.
- قم بتضمين الرأس file sl_simple_button_instances.h في التطبيق ج
- قم بإضافة معالج للحدث sl_bt_evt_sm_bonding_confirm_id. تتمثل المهمة الرئيسية لمعالج الأحداث هذا في إبلاغ المستخدم بأن جهازًا بعيدًا يطلب سندًا جديدًا.
- أضف وظيفة رد اتصال لمعالج الزر البسيط لإرسال إشارة إلى حزمة Bluetooth تشير إلى أنه تم الضغط على زر. هذا يتجاوز رد الاتصال الافتراضي الذي يعود ببساطة.
- أضف معالج حدث إشارة خارجي. يتم رفع هذا الحدث استجابة لتلقي إشارة ، كما في الخطوة السابقة. سيتم استخدام حدث الإشارة الخارجية لتأكيد الترابط.
- قم بتغيير المكالمة إلى sl_bt_sm_configure لطلب تأكيد الربط مثل
- إعادة البناء والفلاش.
- تواصل مع EFRConnect واقرأ الخاصية المحمية كما كان من قبل. الآن سترى رسالة على وحدة التحكم كما يلي:
اضغط على PB0 لتأكيد الترابط. ستعرض وحدة التحكم الآن مفتاح المرور الذي سيتم إدخاله على الهاتف المحمول للربط. أدخل مفتاح المرور لإكمال عملية الربط.
نصيحة: استخدم الحالة الافتراضية في معالج الحدث لطباعة رسالة عندما يرسل المكدس حدثًا لا تتم معالجته. قد يحاول المكدس إخبارك بشيء مهم.
ما وراء الأساسيات
في هذه المرحلة ، كنت قد اتخذت ميزةtagهـ من ميزات الأمان التي يجب أن يقدمها مكدسنا. الآن دعنا نحسن التنفيذ من خلال الاستخدام الحكيم للميزات الموجودة تحت تصرفنا. الخطوات التالية اختيارية ومستقلة عن بعضها البعض ، يمكنك البناء والوميض بعد كل خطوة لمعرفة السلوك أو تجربتها جميعًا معًا.
- قطع الاتصال عند فشل محاولات السندات. هذا مكان جيد لاكتشاف التهديدات. إذا كان الجهاز البعيد لا يدعم التشفير / المصادقة أو لم يكن لديه المفاتيح الصحيحة ، فقد يكون مخترقًا. لذا ، دعنا نقطع الاتصال. حاول إضافة استدعاء إلى sl_bt_connection_close () في حدث sl_bt_sm_bonding_failed_id. تم توثيق API هنا.
يمكنك اختبار هذه الميزة عن طريق إدخال مفتاح المرور الخطأ.
- السماح فقط بالترابط في أوقات معينة. هذا يحد من الوقت الذي يجب على المهاجم تكوين رابط فيه ويجعل من الممكن استخدام ميزة "السماح بالاتصالات المترابطة فقط". يمكن للمصمم اختيار كيفية تمكين أو تعطيل وضع الربط. لأغراض التوضيح هنا ، سنقوم بتمكين "وضع الإعداد" مع PB1 واستخدام مؤقت لتعطيله بعد 30 ثانية.
- قم بتثبيت مثيل ثانٍ لواجهة الزر البسيط. سيمكن هذا من استخدام PB1.
- قم بتعديل رد الاتصال لإرسال إشارة مختلفة إلى المكدس لتمكين / تعطيل الترابط. يجب أن تبدو النتيجة كما يلي:
- قم بتعديل معالج حدث الإشارة الخارجي بحيث يتعامل مع هذه الإشارة الجديدة. يجب أن تكون النتيجة كما يلي:
- قم بإضافة معالج حدث للحدث sl_bt_evt_system_soft_timer_id. سيستخدم هذا لتعطيل وضع الإعداد.
- يمكن استخدام الكود التالي لتمكين وضع الربط والسماح لجميع الاتصالات أو لتعطيل وضع الربط والسماح بالاتصالات من الأجهزة المرتبطة فقط:
- أضف الاستدعاء التالي في معالج الأحداث sl_bt_system_boot_id
- قم ببناء المشروع ووميضه على الجهاز.
- حاول الاتصال بالجهاز مع EFRConnect. يجب أن يفشل الاتصال.
- حاول الآن الضغط على PB1 قبل الاتصال بـ EFRConnect. هذه المرة سيكون الاتصال ناجحًا. بعد 30 ثانية ، سترى رسالة على وحدة التحكم تشير إلى أن الجهاز يخرج من وضع الإعداد. هذا يعني أن وضع الربط معطل الآن.
- زيادة الأمان عند تكوين اتصال. نظرًا لأن الأمان اختياري ، يجب أن نطلب اتصالًا مشفرًا في أسرع وقت ممكن بدلاً من الاعتماد على خصائص الجات. تم توثيق API هنا. مكان جيد لاستدعاء API هذا هو في حدث sl_bt_evt_connection_opened_id. مقبض الاتصال متاح في متغير الاتصال.
هوية آمنة
الآن بعد أن أصبح لدينا جهاز Bluetooth أكثر أمانًا ، فلنعمل على تحسين خطوة المصادقة. لقد رأيت بالفعل كيفية التحقق من الهوية الآمنة لأجهزة المخزن باستخدام سطر الأوامر في مختبرات التدريب السابقة. في هذا القسم ، سنرى كيف يمكن لجهاز يعمل بتقنية BLE التحقق من هوية جهاز BLE آخر عن طريق طلب سلسلة الشهادات الخاصة به وإرسال تحدي. جميع أجزاء الخزنة الآمنة تحمل شهادة الجهاز الخاصة بها وشهادة الدُفعات. يتم ترميز شهادات المصنع والجذر في تطبيق العميل لتمكين التحقق من سلسلة الشهادات بأكملها. الرجوع إلى AN1268 لمزيد من التفاصيل حول الهوية الآمنة.
- حدد مخزنًا مؤقتًا عالميًا لتخزين توقيع شهادة الجهاز على النحو التالي:
- قم بتعيين تكوين إدارة الأمان لاستخدام الاقتران JustWorks. يتم ذلك بحيث يتم تشفير الاتصال. في الممارسة العملية ، يجب استخدام حماية MITM ولكن لإبقاء المختبر بسيطًا ، سنستخدم JustWorks. قم بتغيير المكالمة إلى sl_bt_sm_configure مرة أخرى إلى ما يلي:
أيضًا ، قم بالتعليق على المكالمة إلى setup_mode (صواب) في معالج أحداث system_boot.
- افتح helpers.c من المواد المتوفرة وانسخ المحتويات إلى app.c. تؤدي وظائف رد الاتصال هذه مهام مثل تجزئة الشهادات بحيث يمكن إرسالها عبر BLE ، والتحقق من سلسلة الشهادات ، وإنشاء / التحقق من التحدي.
- من الضروري تحديد الحجم الأقصى لوحدة النقل (MTU) بحيث يمكن تقسيم الشهادات وإعادة تجميعها. حدد متغيرًا عامًا لحفظ MTU كما هو موضح هنا:
ثم أضف معالج حدث لحدث GATT MTU الذي تم تبادله كما هو موضح أدناه:
- هناك ثلاث خصائص لبيانات المستخدم يمكن قراءتها. تُستخدم هذه الخصائص لتوصيل شهادة الجهاز وشهادة الدُفعات والتحدي. يتم استخدام وظيفة رد الاتصال للتعامل مع طلبات قراءة المستخدم هذه. أضف معالجًا لاستدعاء هذه الوظيفة كما هو موضح أدناه:
يستخدم رد الاتصال MTU من الخطوة رقم 2 إلى المقطع وإرسال الشهادات حسب الحاجة. كما أنه يتعامل مع إرسال التحدي الموقع.
- يرسل العميل تحديًا ، رقمًا عشوائيًا ليتم توقيعه بواسطة الخادم ، عن طريق كتابة إحدى خصائص الجات. لهذا السبب ، يحتاج التطبيق إلى معالج لحدث طلب كتابة المستخدم على النحو التالي:
- أضف دعمًا آمنًا للهوية fileق للمشروع:
- app_se_manager_macro.h و app_se_manager_secure_identity.c و app_se_secure_identity.h من المواد المقدمة إلى المشروع. هؤلاء fileتحتوي s على بعض وظائف المساعد لمهام مثل الحصول على حجم الشهادة والحصول على المفتاح العام للجهاز وتوقيع التحدي.
- قم بتضمين app_se_manager_secure_identity.h في app.c.
- قم باستيراد gatt_configuration-attest.btconf المقدم من المواد المتوفرة. تسمى قاعدة بيانات الجات هذه بالتصديق الآمن الذي يتضمن أربع خصائص سيتم استخدامها للتحقق من هوية أجهزتنا. وتشمل هذه شهادة الجهاز ، وشهادة الدفعة ، والتحدي والاستجابة.
- يتم توفير العميل ، الذي يستخدم لمحاكاة جهاز مثل البوابة ، كمشروع كامل لأنه أكثر تعقيدًا في البناء. بشكل عام ، يكون عمل العميل كالتالي:
- المسح بحثًا عن الأجهزة التي تعلن عن خدمة التصديق الآمن والاتصال بها.
- يكتشف خدمات وخصائص قاعدة بيانات الجات.
- يقرأ الجهاز ويجمع الشهادات ويتحقق من سلسلة الشهادات باستخدام شهادة المصنع والجذر التي تم تخزينها في فلاش.
- يرسل تحديًا عشوائيًا إلى الخادم.
- محاولات للتحقق من الاستجابة للتحدي.
- يغلق الاتصال إذا فشل أي من التحقق.
- قم ببناء مشروع الخادم وتشغيله على الخادم WSTK / لوحة الراديو.
- استيراد مشروع العميل من مجلد العميل في المواد المتوفرة. قم ببناء مشروع العميل وميضه إلى WSTK / لوحة الراديو الخاصة بالعميل.
- اضغط على إعادة تعيين على العميل WSTK وافتح وحدة التحكم التسلسلية. يبدأ العميل في البحث عن الأجهزة التي تعلن عن خدمة الهوية الآمنة الخاصة بنا وسيقوم بالاتصال عند العثور عليها.
- سيعرض العميل بعض الرسائل للإشارة إلى أنه وجد الخادم مع الخدمة المطلوبة ورسائل الحالة حول التحقق من سلسلة الشهادات.
- إذا نجح التحقق ، فسيقوم العميل بإنشاء رقم عشوائي يسمى التحدي وإرساله إلى الخادم. سيقوم الخادم بتوقيع التحدي من خلال مفتاح الجهاز الخاص الآمن والتوقيع مرة أخرى إلى العميل ، وهذا ما يسمى استجابة التحدي. يستخدم العميل بعد ذلك المفتاح العام في شهادة الجهاز المستلمة مسبقًا للتحقق من التوقيع. يتم ذلك للتأكد من أن الخادم لديه بالفعل المفتاح الخاص الذي ادعى أنه يمتلكه. إذا تم التحقق من التحدي بشكل صحيح ، يتم عرض رسالة بهذا المعنى ؛ خلاف ذلك ، يتم إغلاق الاتصال ، ويتم عرض رسالة توضح السبب.
- أرسل الآن شهادة غير صالحة لتأكيد أن التحقق يعمل بالفعل. يمكنك تعديل user_read_request_cb () لإتلاف بيانات الشهادة أو استجابة التحدي.
الملحق أ - قدرات الإدخال / الإخراج وطرق الاقتران 
الملحق ب - أوضاع ومستويات الأمان
وضع الأمان 1 هو الوضع الوحيد المدعوم لـ Bluetooth Low Energy في مجموعة Silicon Labs. المستويات كالتالي:
- المستوى 1 لا يوجد أمن
- المستوى 2 الاقتران غير المصدق مع التشفير
- المستوى 3 مصادقة الاقتران مع التشفير
- اتصالات آمنة مصادق عليها من المستوى 4 مع تشفير قوي (تبادل مفتاح ECDH)
المستندات / الموارد
![]() |
معمل أمان جهاز سيلابس 21Q2 الآمن [بي دي اف] دليل المستخدم 21Q2 معمل أمان جهاز BLE آمن ، معمل أمان آمن لجهاز BLE ، معمل أمان |