SHARE THE PERSPECTIVE
يجب أن يقدم الاختبار دون اتصال نتيجة محددة؛ فالتجزئة أو العرض التشفيري ليسا تدقيقًا كاملًا للمنتج.

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

تجيب تجزئة الملف وتوقيع الإصدار ومتجهات الاختبار والبناء القابل لإعادة الإنتاج والتدقيق الأمني عن أسئلة مختلفة. وجمع الأدلة أنفع من تحويل أحدها إلى «ختم أمن كامل».

ماذا يبيّن كل دليل؟

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

يستند تعريف البناء القابل لإعادة الإنتاج إلى مدخلات وبيئة محددة. وتُستخدم أداة apksigner الرسمية من Android لفحص توقيع APK؛ وهذه ليست العملية نفسها التي تحسب التجزئة.

ما نطاق Proof Lab من Livara حاليًا؟

تعرّف صفحة Proof Lab بأداة محلية لتجزئة APK وعروض لعمليات P-256 وHKDF وAES-GCM، منها تعديل بت واحد لملاحظة فشل التحقق من الأصالة. وتصرح الصفحة نفسها بأن التركيب الكامل لـLVR1/LGS1 خارج نطاق منصة الاختبار هذه.

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

كيف نجهز اختبارًا دون اتصال قابلًا للتكرار؟

  1. حدد الهدف. هل تريد التحقق من هوية الملف أم من سلوك عملية تشفير؟
  2. سجل الإصدار والمصدر. يجب أن يرتبط اسم APK ورقم الإصدار وعنوان التنزيل وقيمة تجزئة الإصدار نفسه بعضها ببعض.
  3. جهز الأداة والمدخلات من مصدر موثوق. قطع الاتصال لا يجعل الشفرة التي كانت خبيثة أصلًا موثوقة.
  4. استخدم بيانات اختبار غير حساسة. لا يحتاج العرض التشفيري إلى رسالة خاصة أو سر حقيقي.
  5. اقطع الاتصال وكرر الاختبار. تقيس هذه الخطوة الاعتماد على استجابة مباشرة، لا الثقة بالشفرة التي نُزّلت سابقًا.
  6. سجل النتيجة والأخطاء. لا تستبدل اختلاف الإصدار أو فشل التحميل أو المخرجات غير المتطابقة بكلمة «نجاح».

إذا اختلفت التجزئة، فأوقف التثبيت وافحص أولًا الإصدار والملف والمصدر المرجعي. قد يكون الاختلاف ناتجًا عن اختيار إصدار آخر؛ فلا تعتبره دون فحص برمجية خبيثة مؤكدة أو اختلافًا عديم الأهمية بالتأكيد.

ما الفرق بين متجه الاختبار والشهادة الرسمية؟

يحدد متجه الاختبار المدخلات والمخرجات المتوقعة لسلوك معين. وتفيد مجموعات مثل Wycheproof في اختبار المكتبات بحالات مرتبطة بهجمات معروفة. واجتيازها لا يثبت تغطية الحالات المجهولة.

لدى NIST CAVP عملية للتحقق من صحة الخوارزميات. وتشغيل بضعة متجهات عامة في المتصفح ليس مساويًا للحصول على شهادة تحقق؛ كما أن استخدام خوارزمية معيارية لا يجعل المنتج معتمدًا تلقائيًا.

ماذا نطلب عند مقارنة تطبيقات المراسلة؟

اطرح الأسئلة نفسها على Livara أو Signal أو WhatsApp أو Session أو Element: ما الإصدار الدقيق؟ ما الملف الرسمي؟ كيف يُتحقق من مفتاح الموقّع أو قيمة التجزئة المرجعية؟ ما الاختبارات الممكن تنفيذها؟ وأي شفرة ومكونات شملها تقرير التدقيق؟

هذه المقالة ليست ترتيبًا لهذه المنتجات مبنيًا على اختبارات. فغياب أداة من صفحة واحدة لا يثبت غياب أدلة أمنية؛ ووجودها لا يثبت تفوق المنتج بأكمله. قارن الوثائق الرسمية للإصدار نفسه والتقرير القابل للتكرار.

ورقة نتائج مفيدة

اكتب في تقريرك الموجز: الهدف والإصدار ومصدر الملف وhash والأداة وإصدارها وحالة الشبكة والمدخلات غير الحساسة والمخرجات المتوقعة والمخرجات المرصودة والحدود. وإذا لم يُجرَ اختبار آخر، فسجله بوصفه «لم يُختبر».

التحقق من مفتاح جهة الاتصال فحص منفصل أيضًا. تستطيع الأداة المحلية عرض عملية، لكنها لا تتحقق نيابة عنك من هوية الطرف الآخر في المحادثة أو سلامة هاتفه. اقرأ حدود أمن Livara إلى جانب النتائج، بدل اعتبار الدرجة الكاملة في الأداة ضمانًا لجميع الحدود.

إجراء الاختبار في Proof Lab
CONTINUE THE THREADAndroid & device security ↗
YOU’VE REACHED THE ENDBack to the reading room ↗