الإصدار 3.1 من مخطّط توقيع حِزم APK

نظرة عامة

يتوافق نظام Android 13 مع الإصدار 3.1 من مخطّط توقيع حِزم APK، وهو تحسين على الإصدار الحالي من مخطّط توقيع حِزم APK v3. يعالج المخطّط 3.1 بعض المشاكل المعروفة في الإصدار 3 من "مخطّط توقيع حزمة APK" في ما يتعلّق بالدوران. على وجه التحديد، يتيح مخطّط التوقيع في الإصدار 3.1 استهداف إصدار حزمة تطوير البرامج (SDK)، ما يسمح بالتناوب لتحديد إصدار أحدث من المنصة.

يستخدم نظام التوقيع في الإصدار 3.1 رقم تعريف حظْر لا يتم التعرّف عليه على الإصدار 12 من نظام التشغيل Android أو الإصدارات الأقدم. لذلك، تطبّق المنصة سلوك الموقّع التالي:

  • تستخدم الأجهزة التي تعمل بالإصدار 13 من نظام التشغيل Android أو إصدار أحدث الموقّع المتغيّر في السلسلة المتعلّقة بالإصدار 3.1.
  • تتجاهل الأجهزة التي تعمل بإصدارات Android القديمة الموقّع الذي تم تدويره، ويُستخدَم بدلاً من ذلك الموقّع الأصلي في حزمة الإصدار 3.

لا تتطلّب التطبيقات التي لم يتم استبدال مفتاح توقيعها بعد أي إجراء إضافي. عندما تختار هذه التطبيقات التبديل، يطبّق النظام مخطّط التوقيع v3.1 تلقائيًا.

وحدة التوقيع في الإصدار 3.1

ستتضمّن وحدة التوقيع في الإصدار 3.1 المحتوى نفسه المضمّن في وحدة التوقيع في الإصدار 3، ولكن مع رقم تعريف الوحدة الجديد، لن يتم التعرّف على هذه التوقيعات إلا على الأجهزة التي تعمل بالإصدار 13 من Android والإصدارات الأحدث. يتيح ذلك للتطبيقات تغيير مفاتيح التوقيع بأمان بدون القلق بشأن ملفات APK المخصّصة لعدة أنظمة تشغيل، لأنّه يمكن استخدام الموقّع الأصلي لتوقيع حزمة APK في قالب التوقيع بالإصدار 3 وحزمة APK الموقّعة باستخدام الموقّع الذي تم تغييره في قالب التوقيع بالإصدار 3.1. ويسمح ذلك أيضًا ل النظام الأساسي بإعادة استخدام جميع رموز التحقّق الحالية لوحدة التوقيع في الإصدار 3 عند التحقّق من توقيع الإصدار 3.1.

ستستخدم مكتبة apksig تلقائيًا ملف توقيع الإصدار 3.1 كلما تم تقديم مفتاح متغيّر وسلسلة منشأ في إعدادات التوقيع. إذا كان إصدار minSdkVersion للتطبيق أقل من Android 13 وكان يتم استخدام مفتاح متغيّر، يجب تحديد مفتاح التوقيع الأصلي أيضًا لكي يمكن استخدامه لتوقيع حزمة APK في قالب التوقيع بالإصدار 3. وهذا مشابه للسلوك الحالي الذي يتطلب توقيع الموقّع الأصلي إذا كانت حزمة APK تستهدف إصدارًا أقدم من Android 9.

لتمكين ميزة استهداف تبديل المفاتيح بدءًا من إصدار معيّن من حزمة SDK، ستوفّر مكتبة apksig واجهات برمجة تطبيقات جديدة تتيح ضبط الحد الأدنى لإصدار حزمة SDK لتبديل المفاتيح. وإذا تم تحديد إصدار حزمة SDK أقل من Android 13 كحد أدنى للإصدار المتوافق مع ميزة تبديل المفاتيح، سيتم استخدام الإصدار الأصلي من الإصدار 3. لا يتم استخدام حزمة التوقيع v3.1 إلا في حال استخدام ميزة "التبديل السريع"، حيث يتم ضبط الحد الأدنى لإصدار حزمة SDK المتوافق مع ميزة "التبديل السريع" على Android 13 والإصدارات الأحدث. ستحتوي حزمة التوقيع من الإصدار 3 على سمة جديدة للاستبدال لحماية من إزالة الحد الأدنى لإصدار حزمة تطوير البرامج (SDK).

تضمين Lineage في حزمة APK قيمة rotation-min-sdk-version وحدة التوقيع في الإصدار 3 وحدة التوقيع في الإصدار 3.1
لا القيمة التلقائية أو أي قيمة (يتم تمثيلها بالرمز x أدناه) تم التوقيع عليها باستخدام الموقّع الأصلي، وتستهدف الإصدار 9 من Android والإصدارات الأحدث غير متوفّر
نعم تلقائي تم التوقيع باستخدام الموقّع الأصلي، ويستهدف الإصدارات من Android 9 إلى 12L تم التوقيع باستخدام موقّع متغيّر، مع استهداف الإصدار 13 من نظام التشغيل Android والإصدارات الأحدث
نعم x < 33 (Android 13) تم التوقيع باستخدام موقّع متغيّر، مع استهداف الإصدار 9 من Android والإصدارات الأحدث غير متوفّر
نعم x >= 33 (Android 13) تم التوقيع باستخدام الموقّع الأصلي، مع استهداف Android 9 (x-1) تم التوقيع باستخدام موقّع تم تغييره، مع استهداف x+

المشاكل المتعلّقة بالدوران

تم حلّ المشاكل التالية المتعلّقة بالدوران في النظام الأساسي:

إصلاحات Android 12

  • لن تمنح المنصة إذن التوقيع إلا للتطبيق الذي يطلب إذن التوقيع إذا كان ملف توقيع التطبيق المعنيّ في سلسلة التوقيع، أو كان ملف التوقيع الحالي للتطبيق الآخر، ما يمنع منح إذن التوقيع للتطبيق الذي يطلب إذن التوقيع إذا كان التطبيقان يتّبعان أفضل الممارسات المتعلّقة بمفاتيح التوقيع ويبدّلان مفاتيح التوقيع المختلفة.
  • لا يمكن ميزة التراجع عن تثبيت ملف APK في النظام الأساسي التراجع عن تثبيت ملف APK الذي تم استبدال مفتاح توقيعه مؤخرًا ما لم يكن المفتاح السابق في سلسلة توقيعات التطبيق يمتلك إمكانية التراجع، ولكن هذه الميزة تبطل الغرض من استبدال المفاتيح لأنّها تسمح بتوقيع تحديث حزمة جديد باستخدام مفتاح التوقيع السابق والتراجع عن استبدال المفتاح.
  • إذا تم توقيع حزمة APK باستخدام المفتاح الذي تم تغييره فقط وتم تعديلها لاحقًا باستخدام حزمة APK موقَّعة بالمفتاح الأصلي والمفتاح الذي تم تغييره في السلسلة، لن تعرض سوى المفتاح الذي تم تغييره في السلسلة على الأجهزة التي تعمل بالإصدار Android 11 والإصدارات الأقدم.

إصلاحات Android 11

  • لم يتم تعديل PackageManager#checkSignatures بشكل صحيح للتحقّق من مفاتيح التوقيع الأصلية لحِزمتَين. أدّى ذلك إلى إيقاف أداة تحليل الأداء للتطبيقات التي تستخدم مفتاح توقيع تم استبداله مع حزمة APK الخاصة بأداة تحليل الأداء التي تستخدم مفتاح التوقيع الأصلي.
  • تشترك الحِزم ضمن sharedUserId في سلسلة التوقيع. عند تثبيت تطبيق يتضمّن سلسلة مُحدَّثة لتوقيع التطبيق أو تعديله في sharedUiserId، يتم استبدال سلسلة sharedUserId المشترَكة بسلسلة sharedUserId لهذا التطبيق (أي، إذا كانت سلسلة توقيع التطبيق هي A -> B، وتم تعديل التطبيق في sharedUserId باستخدام السلسلة B -> C، سيتم استبدال سلسلة sharedUserId بسلسلة B -> C). وبالمثل، لا يمكن تعديل إمكانات موقّع سابق في سلسلة النسب ما لم يتم تغيير سلسلة النسب الخاصة بالتوقيع.

دمج الإصدار 4

يستخدم مخطّط التوقيع في الإصدار 4 إعدادات التوقيع المقدَّمة إلى apksigner. في حال توفُّر إعدادات توقيع متعدّدة لتغيير التوقيع، يتم استخدام أحدث إعدادات التوقيع التي تم تغييرها. قبل طرح الإصدار 3.1، كان الإصدار 3 يتضمّن فقط أحدث إعدادات التوقيع المتغيّر، لذلك تمكّن الإصدار 4 من استخدام هذه الإعدادات كما هي. وبفضل هذا، تمكّن نظام التوقيع في الإصدار 4 من إتاحة إمكانية التبديل لأنّه استخدم مفتاح التوقيع المتغيّر في SigningInfo. على الرغم من أنّ SigningInfo في الإصدار 4 لا يضمّن سلسلة التوقيع الكاملة، يمكنه سحب هذا العنصر من قالب التوقيع في الإصدار 3 للسماح للمنصة بالوصول إلى سلسلة التوقيع لأي طلبات بحث عن التوقيعات. عند استخدام الإصدار 3.1 لاستهداف عملية التدوير لقيمة rotation-min-sdk-version المقدَّمة، ستتضمّن إعدادات الإصدار 3 العامة كلّ من إعدادات التوقيع الأصلية وأحدث إعدادات التوقيع التي تم تدويرها. تم إنشاء إضافة لنظام توقيع الإصدار 4 تتضمّن مزيدًا من كتل معلومات التوقيع لكلّ من إعدادات التوقيع من الإصدار 3.1.

التحقُّق

لاختبار عملية تنفيذ الإصدار 3.1، يمكنك إجراء PkgInstallSignatureVerificationTest.java اختبارات CTS في cts/hostsidetests/appsecurity/src/android/appsecurity/cts/.

لمزيد من المعلومات عن الاختبار، اطّلِع على قسم التحقّق في الإصدار 3.