Doogree
الأمن · نموذج الثقة

قناة تحكّم لا تُزوَّر: TOFU + توقيع غير متماثل

30/06/2026 · قراءة ~7 دقائق
نموذج الثقةالتوقيع الرقميTOFUسلسلة التوريد

حين يستطيع نظام إرسال أوامر إلى أجهزة العملاء، فأهمّ سؤال هو: من المفوَّض فعلًا بإرسالها؟ الجواب البديهي — "كلمة مرور داخلية سرّية" — أضعف مما يبدو. إليك لماذا اخترنا شيئًا أقوى.

الفكرة البديهية: سرّ مشترك

الفكرة الواضحة: توجد "كلمة مرور داخلية" لا يعرفها إلا النظام، ويُتحقَّق كل أمر مقابلها. إن حاول شيء أجنبي حقن أمر — فهو لا يعرف السرّ، فيفشل. يبدو معقولًا.

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

مشكلة السرّ المشترك: من يتحقق يجب أن يحمل السرّ. من يحمل السرّ يستطيع التزوير. اختراق واحد = تحكّم.

ما اخترناه: توقيع غير متماثل

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

الفرق جوهري: اختراق كامل لكلٍّ من سحابتنا وجهاز العميل لا يستطيع تزوير أمر، لأن المفتاح الخاص ببساطة غير حاضر في أيٍّ من هذين المكانين. سحابتنا تنقل الأمر الموقّع فحسب — لا تتحقق ولا تشغّل شيئًا.

تحصين ثانٍ: TOFU — تثبيت المفتاح

لكن ماذا لو استبدل مهاجمٌ اخترق سحابتنا المفتاح العام بمفتاحه؟ عندها يستطيع التوقيع لنفسه. لإغلاق ذلك، أضفنا TOFU (الثقة عند الاستخدام الأول): يُثبّت الوكيل مفتاح المشغّل مرة واحدة، عند التسجيل الأول. وفي كل تحقّق لاحق، يتأكد من أن المفتاح الذي تقدّمه السحابة مطابق للمثبَّت — وإن لم يكن، يرفض.

فتدوير المفتاح إجراء مقصود خارج النطاق، لا استبدال صامت من السحابة. المهاجم الذي استولى على سحابتنا لا يستطيع استبدال المفتاح المثبَّت — الوكيل ببساطة لن يقبل الاستبدال.

تحصين ثالث: لا صدفة حرة

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

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

كيف اختبرنا

تحققنا من النموذج سلوكًا، لا نظريًا فحسب: حاكينا السيناريو حيث تقدّم السحابة مفتاحًا مختلفًا عن المثبَّت، وأكّدنا أن الوكيل يرفض فعلًا (rc=2) ولا يشغّل. ذلك النمط — ثبّت ← تحقّق ← ارفض — هو جوهر مرونة سلسلة التوريد لدينا.

كيف نواصل تحسين هذا — مراقبة جودة مستمرة

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

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

← كل التدوينات