مفاتيح WireGuard على ESP32: لكل جهاز أم مفتاح واحد مضمَّن؟
المفتاح المضمَّن في برنامج ESP32 الثابت هو هوية نظير لا كلمة مرور. قرِّر وفق ثلاثة شروط: الحيازة، وحماية الوميض، وإعادة الاستخدام على مستوى الأسطول.
يضع الرسم البرمجي مفتاح WireGuard الخاص في مصفوفة أحرف، ويعمل النفق، ولهذا يتكرر السؤال. القرار الذي عليك فعله ليس «هل هذا آمن؟» بل «أي الشروط الثلاثة ينطبق على هذا النشر؟». وهي: من يمكنه حمل الجهاز ماديًا، وما الذي ينتج عن قراءة الوميض على شريحتك، وهل يتقاسم الأسطول مفتاحًا واحدًا أم يحمل كل جهاز مفتاحه. أجب عن هذه الأسئلة وسيتبع التصميم، لأن كل شرط يغيّر كلفة تسريب المفتاح لا حقيقة إمكانية تسريبه.
ما الذي يخوّله المفتاح
يصادق WireGuard على الأقران بالمفتاح العام. يربط الخادم مفتاح كل نظير عام بعنوان وقائمة AllowedIPs، لذا المفتاح الخاص هو ما يسمح للعميل بإرسال حركة من ذلك العنوان.
يدخل المدخل نفسه في تحديد الوجهات التي قد يصل إليها الجهاز، لذا يكشف المفتاح المسرَّب الشبكة خلف النفق بالإضافة إلى عنوان النفق.
الشرط الأول: من يمكنه حمل الجهاز
إذا كانت الوحدة في خزانة مقفلة ولا يتعامل معها أحد خارج فريقك، فالانكشاف مسألة توزيع برنامج ثابت في الأساس. أما إذا شُحنت إلى العملاء أو وُضعت في مركبة أو عادت ضمن الضمان، فالحيازة المادية هي بيان الاعتماد وسرية الملف الثنائي أمر ثانوي. من يحمل الجهاز لا يحتاج إلى قراءة المفتاح، لأن البرنامج الثابت العامل سيفتح له النفق. لهذا يجب أن يتضمن جواب جهة الخادم الإلغاء وعمرًا محدودًا، لا صورة محمية فقط.
احسم هذا الشرط قبل الشرطين الآخرين، لأنه يحدد الميزانية لكليهما.
الشرط الثاني: ما الذي تنتجه قراءة الوميض
من يستطيع قراءة صورة الوميض يستعيد مفتاحًا مخزَّنًا كقيمة حرفية، سواء عبر اتصال تنقيح أو ملف تحديث أو نسخة احتياطية أو وحدة معادة. تشفير الوميض يرفع كلفة الاستخراج المباشر، وتوضح وثائق ESP-IDF ما تغطيه الميزة لشريحة وإعداد معينين. لكنه لا يجعل المفتاح غير قابل للاستخراج في كل نموذج هجوم، ولا يفعل شيئًا لحالة الجهاز الموجود في اليد. تعامل معه كطبقة تغيّر الكلفة، لا كالجواب.
اقرأ وثائق المنصة الخاصة بشريحتك وإعدادك بدقة قبل أن تدّعي خاصية في مراجعة تصميم.
الشرط الثالث: إعادة الاستخدام عبر الأسطول
مفتاح واحد لدورة إنتاج يعني أن كل وحدة تتقاسم هوية واحدة. لا يستطيع الخادم تمييزها في السجلات، ولا إلغاء واحد دون إلغاء الجميع، ولا تمييز نسخة مستنسخة من أصلية. مفاتيح لكل جهاز تحل الثلاثة معًا، بكلفة خطوة تسجيل وربط الرقم التسلسلي بالمفتاح العام. هذا الربط هو الأصل الذي يحوّل الإلغاء إلى تغيير في سطر واحد بدل إعادة وميض للأسطول كله.
إذا كان الأسطول خمس وحدات على طاولة، فقد يكون تقاسم مفتاح مقايضة معقولة. وإذا كان خمس مئة في الميدان، فليست مقايضة على الإطلاق.
نمط التسجيل الذي يجعل مفاتيح كل جهاز عملية
ولّد زوج المفاتيح على الجهاز عند أول إقلاع، واحفظ النصف الخاص في تخزين محمي غير متطاير، وأرسل المفتاح العام فقط إلى خدمة تسجيل تخصص عنوانًا وتكتب مدخل النظير. وثّق استجابة التسجيل، وإلا استطاع مهاجم على الشبكة المحلية تسجيل مفتاحه مقابل حسابك. لا تطبع المفتاح الخاص أبدًا على وحدة التحكم التسلسلية أثناء التجهيز. سجّل الرقم التسلسلي للجهاز بجانب المفتاح العام، كي تُربط وحدة مفقودة بمدخل نظير واحد بالضبط.
تلك خدمة صغيرة، وهي الفرق بين أسطول يمكنك تدقيقه وأسطول لا يمكنك سوى إعادة وميضه.
الوقت ونقاط النهاية والقرار
يزامن المثال الوقت قبل بدء النفق، وهذا يهم خارج TLS: تحمل مصافحات WireGuard طابعًا زمنيًا يُستخدم للحماية من إعادة الإرسال، لذا قد تُرفض مصافحات جهاز يقلع بساعة خاطئة. نقطة النهاية اسم مضيف، وهذا يضع DNS في مسار الثقة رغم أن المفتاح العام للخادم ما زال يصادق النظير. العنوان الخاطئ يهدر المحاولات ويكشف متى يكون الجهاز متصلًا. عالج الأمرين قبل الجدال حول المفتاح.
ثم قرِّر: مفتاح مشترك فقط ما دامت الحيازة مضبوطة والأسطول صغيرًا، ومفاتيح لكل جهاز بمجرد أن يتوقف أي منهما عن الصحة.