عرض توضيحي للتحديث الذاتي مكتوب بلغة C++. يتضمن أدوات التحميل والعميل والخادم والتوقيع لتقديم التحديثات التلقائية لتطبيقات سطح المكتب Win32 بشكل آمن.
لا تتمتع تطبيقات سطح المكتب Win32 الأصلية برفاهية مدير الحزم المتكامل للنظام للتعامل مع التحديثات التلقائية. يوفر إطار العمل هذا عرضًا عمليًا لكيفية تقديم التحديثات ومعالجتها بشكل آمن وفعال.
يجب أن يفي نظام التحديث الذاتي بأهداف السلامة والأصالة الأمنية. يستخدم هذا الإطار مفاتيح RSA 4096 بت للتوقيع والتحقق من توقيع SHA-256 لبيانات التحديث. تم تضمين المفتاح العام في الملف الثنائي للعميل للتحقق منه. بافتراض أن التسليم الأولي للبرنامج يتم عبر مصدر موثوق به، فإن الجهات المصدرة الوحيدة الصالحة للتحديثات هي تلك التي لديها حق الوصول إلى المفتاح الخاص.
يتم نقل بيانات التحديث عبر UDP. كان العامل الأساسي في هذا القرار هو تقليل حمل ذاكرة الخادم من اتصالات TCP (مع تقليل حمل وحدة المعالجة المركزية كمكافأة). مقدار الحمل المتوقع للذاكرة هو تقريبًا:
(Update File Size) + (Max Connections) * 80 bytes
يتم تخزين بيانات التحديث مباشرة في الذاكرة لتجنب الوصول إلى القرص. يتحقق العميل والخادم من ملكية IP عن طريق تبادل رموز التشفير 64 بت. يتم تعيين مقدار محدود من النطاق الترددي للشبكة لكل اتصال قبل أن يتم التحكم فيه. يقتصر كل عنوان IP على الحد الأقصى لعدد الاتصالات المتزامنة. تعمل هذه الميزات على تخفيف عدد من الهجمات الشائعة على الشبكة:
يعتمد منع هجوم رجل في الوسط على ضمانات الأصالة من نظام التحديث.
لا يلزم تشغيل وظائف تشفير ثقيلة على الخادم (كما هو الحال في HTTPS) نظرًا لأن السرية ليست هدفًا أمنيًا لتحديثات البرامج - فبيانات التحديث ليست حساسة.
لا يتم بذل أي جهد من جانب العميل للحد من سرعة التنزيل. يجب أن يبذل التكامل في تطبيقك جهودًا لضبط معدل الإرسال ديناميكيًا استنادًا إلى الحزم المسقطة وزمن وصول الاتصال.
تعمل بنية الخادم التجريبي على منفذ واحد/مؤشر ترابط واحد. يمكن تشغيل مثيلات خادم متعددة لكل مؤشر ترابط على منافذ مختلفة أو أنظمة مختلفة (مع التفاوض بشأن ذلك الذي يحدث عند موازن التحميل الذي سيتصل به العميل أولاً (لتسليم التحديث على نطاق واسع).
يتم إرسال بيانات التحديث لملف واحد كما هو. إذا كنت بحاجة إلى دعم لتصحيح ملفات متعددة أو تحديثات دلتا أو الضغط، فيجب عليك تقديم ملف قابل للتنفيذ مع الأدوات المساعدة والبيانات للتعامل مع هذه الميزات (وفصلها عن نظام التحديث نفسه).
تظل الضمانات الأمنية سارية فقط طالما ظل المفتاح الخاص آمنًا. لا توجد طريقة إلغاء رئيسية مجمعة مع إطار العمل (لأنها تتطلب التحقق الخارجي والثقة من مزود آخر).
updater.sln
.Release
.client.dll
إلى update.dll
signtool.exe
لإنشاء pub.h
و pub.key
و pri.key
و update.sig
.public_key
في client_updater.cpp
بالمحتويات من pub.h
الذي تم إنشاؤه.server.exe
و loader.exe
لتوضيح التحديث.