توقيع التطبيق

يتيح توقيع التطبيق للمطورين تحديد مؤلف التطبيق وتحديث تطبيقهم دون إنشاء واجهات وأذونات معقدة. يجب أن يوقع المطور على كل تطبيق يتم تشغيله على نظام Android الأساسي. سيتم رفض التطبيقات التي تحاول التثبيت دون توقيع إما من Google Play أو مثبت الحزمة على جهاز Android.

على Google Play ، يربط توقيع التطبيق ثقة Google بالمطور والثقة التي يتمتع بها المطور في تطبيقه. يعرف المطورون أن تطبيقاتهم مقدمة ، غير معدلة ، إلى جهاز Android ؛ والمطورين يمكن أن يكونوا مسؤولين عن سلوك تطبيقاتهم.

في نظام Android ، يعد توقيع التطبيق هو الخطوة الأولى لوضع تطبيق في Sandbox الخاص به. تحدد شهادة التطبيق الموقعة معرف المستخدم المرتبط بالتطبيق ؛ يتم تشغيل تطبيقات مختلفة بمعرفات مستخدم مختلفة. يضمن توقيع التطبيق عدم تمكن تطبيق واحد من الوصول إلى أي تطبيق آخر إلا من خلال IPC محدد جيدًا.

عند تثبيت تطبيق (ملف APK) على جهاز Android ، يتحقق مدير الحزم من أن ملف APK قد تم توقيعه بشكل صحيح باستخدام الشهادة المضمنة في ملف APK هذا. إذا كانت الشهادة (أو ، بشكل أكثر دقة ، المفتاح العام في الشهادة) تتطابق مع المفتاح المستخدم لتوقيع أي APK آخر على الجهاز ، فإن ملف APK الجديد لديه خيار التحديد في البيان أنه سيشارك UID مع الآخر بالمثل ملفات APK ذات التوقيع.

يمكن توقيع الطلبات من قبل طرف ثالث (OEM ، مشغل ، سوق بديل) أو موقعة ذاتيًا. يوفر Android توقيع رمز باستخدام شهادات موقعة ذاتيًا يمكن للمطورين إنشاؤها بدون مساعدة أو إذن خارجي. لا يجب أن تكون الطلبات موقعة من قبل سلطة مركزية. لا يقوم Android حاليًا بالتحقق من المرجع المصدق لشهادات التطبيق.

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

مخططات توقيع APK

يدعم Android ثلاثة مخططات لتوقيع التطبيق:

لتحقيق أقصى قدر من التوافق ، قم بتوقيع التطبيقات بجميع المخططات ، أولاً باستخدام v1 ، ثم v2 ، ثم v3. تقوم الأجهزة التي تعمل بنظام التشغيل Android 7.0+ والأجهزة الأحدث بتثبيت التطبيقات الموقعة بمخططات v2 + بسرعة أكبر من تلك الموقعة فقط بنظام v1. تتجاهل منصات Android الأقدم توقيعات v2 + وبالتالي تحتاج إلى تطبيقات تحتوي على توقيعات v1.

توقيع JAR (مخطط v1)

كان توقيع APK جزءًا من Android منذ البداية. يعتمد على JAR الموقعة . للحصول على تفاصيل حول استخدام هذا النظام ، راجع وثائق Android Studio حول تسجيل التطبيق الخاص بك .

لا تحمي توقيعات v1 بعض أجزاء ملف APK ، مثل بيانات ZIP الوصفية. يحتاج مدقق APK إلى معالجة الكثير من هياكل البيانات غير الموثوق بها (التي لم يتم التحقق منها بعد) ثم تجاهل البيانات التي لا تغطيها التوقيعات. يوفر هذا مساحة هجوم كبيرة. علاوة على ذلك ، يجب أن يقوم مدقق APK بإلغاء ضغط جميع الإدخالات المضغوطة ، مما يستهلك المزيد من الوقت والذاكرة. لمعالجة هذه المشكلات ، قدم Android 7.0 APK Signature Scheme v2.

APK Signature Scheme v2 & v3 (v2 + مخطط)

تدعم الأجهزة التي تعمل بنظام التشغيل Android 7.0 والإصدارات الأحدث مخطط توقيع APK الإصدار 2 (نظام الإصدار 2) والإصدارات الأحدث. (تم تحديث نظام الإصدار 2 إلى الإصدار 3 في Android 9 لتضمين معلومات إضافية في كتلة التوقيع ، ولكن بخلاف ذلك يعمل بالطريقة نفسها.) يتم تجزئة محتويات ملف APK وتوقيعها ، ثم يتم إدراج كتلة توقيع APK الناتجة في APK. للحصول على تفاصيل حول تطبيق مخطط v2 + على أحد التطبيقات ، راجع APK Signature Scheme v2 .

أثناء التحقق من الصحة ، يتعامل مخطط v2 + مع ملف APK على أنه ملف blob ويقوم بفحص التوقيع عبر الملف بأكمله. أي تعديل على APK ، بما في ذلك تعديلات بيانات ZIP الوصفية ، يبطل توقيع APK. يعد هذا النوع من التحقق من ملفات APK أسرع بشكل كبير ويسمح باكتشاف المزيد من فئات التعديلات غير المصرح بها.

التنسيق الجديد متوافق مع الإصدارات السابقة ، لذا يمكن تثبيت ملفات APK الموقعة بتنسيق التوقيع الجديد على أجهزة Android القديمة (التي تتجاهل ببساطة البيانات الإضافية المضافة إلى APK) ، طالما أن ملفات APK هذه موقعة أيضًا على الإصدار v1.

عملية التحقق من توقيع APK

الشكل 1. عملية التحقق من توقيع APK

يتم التحقق من تجزئة الملف بالكامل لملف APK مقابل توقيع v2 + المخزن في كتلة توقيع APK. تغطي التجزئة كل شيء باستثناء حزمة توقيع APK ، والتي تحتوي على توقيع v2 +. يؤدي أي تعديل لملف APK خارج كتلة توقيع APK إلى إبطال توقيع APK v2 +. يتم أيضًا رفض ملفات APK ذات توقيع v2 + المجرد ، لأن توقيعها v1 يحدد أن ملف APK تم توقيعه بالإصدار 2 ، مما يجعل Android 7.0 والإصدارات الأحدث ترفض التحقق من ملفات APK باستخدام توقيعات الإصدار 1

للحصول على تفاصيل حول عملية التحقق من توقيع APK ، راجع قسم التحقق في APK Signature Scheme v2.