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

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

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

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

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

مجموعة التوقيع 3.1

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

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

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

تتضمّن حِزمة APK سلسلة النسب قيمة rotation-min-sdk-version مجموعة التوقيع 3 مجموعة التوقيع 3.1
لا تلقائي أو أي قيمة (ممثلة بالرمز x أدناه) تم التوقيع باستخدام المُوقِّع الأصلي، ويستهدف Android 9 والإصدارات الأحدث غير متوفر
نعم تلقائي تم التوقيع باستخدام المُوقِّع الأصلي، ويستهدف Android 9 إلى 12L تم التوقيع باستخدام المُوقِّع الذي تم تغيير مفتاحه، ويستهدف Android 12 والإصدارات الأحدث
نعم x < 33 (Android 13) تم التوقيع باستخدام المُوقِّع الذي تم تغيير مفتاحه، ويستهدف Android 9 والإصدارات الأحدث غير متوفر
نعم 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 (أي إذا كانت سلسلة نسب توقيع تطبيق هي 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، شغِّل اختبارات CTS PkgInstallSignatureVerificationTest.java في cts/hostsidetests/appsecurity/src/android/appsecurity/cts/.

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