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

يتيح توقيع التطبيق للمطورين تحديد مؤلف التطبيق وتحديث تطبيقهم دون إنشاء واجهات وأذونات معقدة. يجب أن تكون كل التطبيقات التي يتم تشغيلها على منصة أندرويد وقعت من قبل المطور . سيتم رفض التطبيقات التي تحاول التثبيت دون توقيع إما من 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 قعت . للحصول على تفاصيل حول كيفية استخدام هذا البرنامج، راجع وثائق الروبوت 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 التوقيع مخطط 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 باستخدام توقيعات v1 الخاصة بهم.

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