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

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

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

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

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

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

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

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

يدعم Android ثلاثة أنظمة لتوقيع التطبيقات:

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

توقيع JAR (مخطط الإصدار الأول)

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

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

نظام توقيع APK الإصداران 2 و3 (مخطط الإصدار 2+)

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

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

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

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

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

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

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