يتيح توقيع التطبيق للمطوّرين تحديد مؤلف التطبيق وتحديثه بدون إنشاء واجهات و أذونات معقّدة. يجب أن يكون كل تطبيق يتم تشغيله على نظام Android موقَّعًا من المطوّر. يرفض Google Play أو أداة تثبيت الحِزم على جهاز Android التطبيقات التي تحاول التثبيت بدون توقيع.
على Google Play، يُعدّ توقيع التطبيق حلقة وصل بين الثقة التي تحظى بها Google لدى المطوّر والثقة التي يحظى بها المطوّر لدى تطبيقه. ويعلم المطوّرون أنّ تطبيقاتهم يتم توفيرها على جهاز Android بدون أي تعديلات، ويمكن تحميل المطوّرين المسؤولية عن سلوك تطبيقاتهم.
على Android، تُعد ميزة "توقيع التطبيق" الخطوة الأولى لوضع تطبيق في "مبادرة حماية التطبيقات" على التطبيق. تحدِّد شهادة التطبيق الموقَّعة معرّف المستخدِم المرتبط بالتطبيق، ويتم تشغيل التطبيقات المختلفة باستخدام معرّفات مستخدِمين مختلفة. يضمن توقيع التطبيق عدم تمكّن تطبيق واحد من الوصول إلى أي تطبيق آخر إلا من خلال واجهة برمجة تطبيقات معيّنة.
عند تثبيت تطبيق (ملف APK) على جهاز Android، يتحقّق "مدير الحِزم" من أنّه تم توقيع حزمة APK بشكل صحيح باستخدام الشهادة المضمّنة فيها. إذا كانت الشهادة (أو بتعبير أدق، المفتاح العام في الشهادة) تتطابق مع المفتاح المستخدَم لتوقيع أي حزمة APK أخرى على الجهاز، يمكن لملف APK الجديد تحديد ما إذا كان يشترك في معرّف فريد مع حِزم APK الأخرى الموقَّعة بالطريقة نفسها في البيان.
يمكن أن يتم توقيع التطبيقات من قِبل جهة خارجية (مثل المصنّع الأصلي للجهاز أو المشغّل أو السوق البديل) أو أن يتم توقيعها ذاتيًا. يقدّم نظام التشغيل Android ميزة توقيع الرموز البرمجية باستخدام الشهادات الموقَّعة ذاتيًا التي يمكن للمطوّرين إنشاؤها بدون مساعدة أو إذن خارجي. لا يلزم توقيع التطبيقات من قِبل هيئة مركزية. لا يُجري نظام التشغيل Android حاليًا عمليات التحقّق من مرجع التصديق لشهادات التطبيقات.
يمكن للتطبيقات أيضًا الإفصاح عن أذونات الأمان على مستوى حماية التوقيع، مع حصر الوصول بالتطبيقات الموقَّعة بالمفتاح نفسه مع الحفاظ على أرقام تعريف المستخدمين المميزة ووضع الحماية للأمان في التطبيقات. يُسمح بعلاقة أقرب مع Sandbox مشترَك للتطبيقات باستخدام ميزة رقم تعريف مستخدم مشترَك حيث يمكن لتطبيقَين أو أكثر موقَّعين باستخدام مفتاح المطوِّر نفسه تحديد رقم تعريف مستخدم مشترَك في البيان.
أنظمة توقيع حِزم APK
يتيح Android ثلاثة مخطّطات لتوقيع التطبيق:
- مخطّط الإصدار 1: يستند إلى توقيع JAR
- مخطّط الإصدار 2: الإصدار 2 من مخطّط توقيع حِزم APK، الذي تم طرحه في الإصدار 7.0 من نظام التشغيل Android
- مخطّط الإصدار 3: الإصدار 3 من مخطّط توقيع حِزم APK، الذي تم طرحه في Android 9
لتحقيق أقصى توافق، وقِّع التطبيقات باستخدام كل المخططات، أولاً باستخدام الإصدار 1، ثم الإصدار 2، ثم الإصدار 3. إنّ أجهزة Android 7.0 والإصدارات الأحدث تُثبِّت التطبيقات الموقَّعة باستخدام الإصدار 2 من مخطّط التوقيع أو الإصدارات الأحدث بشكل أسرع من التطبيقات الموقَّعة باستخدام الإصدار 1 من مخطّط التوقيع فقط. تتجاهل الإصدارات القديمة من نظام Android التوقيعات من الإصدار 2 والإصدارات الأحدث، لذا يجب أن تحتوي التطبيقات على توقيعات الإصدار 1.
توقيع JAR (مخطّط الإصدار 1)
كان توقيع حِزم APK جزءًا من نظام التشغيل Android منذ البداية. وهي تستند إلى JAR الموقَّع. للحصول على تفاصيل حول استخدام هذا المخطّط، اطّلِع على مستندات "استوديو Android" المتعلّقة بموضوع توقيع تطبيقك.
لا تحمي التوقيعات من الإصدار 1 بعض أجزاء حِزم APK، مثل البيانات الوصفية لملف ZIP. يحتاج أداة التحقّق من حِزم APK إلى معالجة الكثير من ملفّات بنية البيانات غير الموثوق بها (التي لم يتم التحقّق منها بعد)، ثم تجاهل البيانات التي لا تغطيها التوقيعات. ويؤدي ذلك إلى توفير مساحة هجومية كبيرة. علاوةً على ذلك، على أداة التحقق من حِزم APK فك ضغط جميع الإدخالات المضغوطة، ما يستهلك المزيد من الوقت والذاكرة. لحلّ هذه المشاكل، قدّم الإصدار 7.0 من Android الإصدار 2 من مخطّط توقيع حِزم APK.
الإصدار 2 والإصدار 3 من مخطّط توقيع حِزم APK (مخطّط الإصدار 2 والإصدارات الأحدث)
تتوافق الأجهزة التي تعمل بنظام التشغيل Android 7.0 والإصدارات الأحدث مع الإصدار 2 من مخطّط توقيع حِزم APK (v2 scheme) والإصدارات الأحدث. (تم تعديل مخطّط الإصدار 2 إلى الإصدار 3 في Android 9 لتضمين معلومات إضافية في مجموعة التوقيع، ولكنّه يعمل بالطريقة نفسها بخلاف ذلك). يتم تجزئة محتويات حزمة APK وتوقيعها، ثم يتم إدراج كتلة توقيع حزمة APK الناتجة في حزمة APK. لمعرفة تفاصيل عن تطبيق مخطّط الإصدار 2 والإصدارات الأحدث على تطبيق، يُرجى الاطّلاع على مقالة الإصدار 2 من مخطّط توقيع حزمة APK.
أثناء عملية التحقق، يتعامل مخطط v2+ مع ملف APK على أنّه كائن ثنائي كبير (blob) ويجري فحصًا للتوقيع في الملف بالكامل. يؤدي أي تعديل على حزمة APK، بما في ذلك تعديلات البيانات الوصفية لملف ZIP، إلى إلغاء توقيع حزمة APK. ويتميز هذا النوع من التحقق من APK بمعدل أسرع إلى حد كبير ويتيح اكتشاف المزيد من فئات التعديلات غير المصرح بها.
يتوافق التنسيق الجديد مع الإصدارات القديمة، لذا يمكن تثبيت حِزم APK الموقَّعة باستخدام تنسيق التوقيع الجديد على أجهزة Android القديمة (التي تتجاهل ببساطة البيانات الإضافية المُضافة إلى حِزم APK)، طالما أنّ حِزم APK هذه موقَّعة أيضًا باستخدام الإصدار 1.
يتم التحقّق من تجزئة الملف الكامل لحزمة APK مقارنةً بالتوقيع من الإصدار 2 والإصدارات الأحدث المخزّن في ملف حزمة توقيع APK. وتغطي التجزئة كل شيء باستثناء مجموعة توقيع APK، التي تحتوي على توقيع الإصدار 2 والإصدارات الأحدث. يؤدي أي تعديل على حزمة APK خارج كتلة توقيع APK إلى إلغاء توقيع الإصدار 2 من حزمة APK والإصدارات الأحدث. ويتم أيضًا رفض حِزم APK التي تمّت إزالة توقيع الإصدار 2 والإصدارات الأحدث منها، لأنّ توقيع الإصدار 1 يحدّد أنّه تم توقيع حِزمة APK باستخدام الإصدار 2، ما يجعل نظام التشغيل Android 7.0 والإصدارات الأحدث يرفض التحقّق من حِزم APK باستخدام توقيعات الإصدار 1.
لمعرفة التفاصيل حول عملية التحقّق من توقيع حزمة APK، يُرجى الاطّلاع على قسم "التحقّق" من الإصدار 2 من مخطّط توقيع حزمة APK.