חתימת יישום

חתימת אפליקציות מאפשרת למפתחים לזהות את מחבר האפליקציה ולעדכן את היישום שלהם מבלי ליצור ממשקים והרשאות מסובכים. כל יישום המופעל על פלטפורמת אנדרואיד חייב להיות חתום על ידי היזם . יישומים שמנסים להתקין ללא חתימה יידחו על ידי Google Play או מתקין החבילות במכשיר ה- Android.

ב- Google Play, חתימת אפליקציות מגשרת את האמון שיש לגוגל למפתח והאמון שיש למפתח באפליקציה שלו. מפתחים יודעים שהיישום שלהם מסופק, ללא שינוי, למכשיר האנדרואיד; ומפתחים יכולים להיות אחראים להתנהגות היישום שלהם.

באנדרואיד, חתימת אפליקציות היא השלב הראשון להצבת אפליקציה בארגז החול של היישומים שלה. תעודת היישום החתומה מגדירה לאיזה יישום משויך מזהה משתמש; יישומים שונים פועלים תחת מזהי משתמש שונים. חתימת אפליקציות מבטיחה שאפליקציה אחת לא תוכל לגשת לאפליקציה אחרת אלא באמצעות IPC מוגדר היטב.

כאשר מותקנת אפליקציה (קובץ APK) במכשיר אנדרואיד, מנהל החבילות מאמת כי ה- APK נחתם כראוי עם האישור הכלול ב- APK זה. אם התעודה (או, ליתר דיוק, המפתח הציבורי באישור) תואמת את המפתח המשמש לחתימת כל APK אחר במכשיר, ל- APK החדשה יש אפשרות לציין במניפסט כי הוא ישתף UID עם האחר באופן דומה חבילות APK חתומות.

ניתן לחתום על יישומים על ידי צד שלישי (OEM, מפעיל, שוק חלופי) או בחתימה עצמית. אנדרואיד מספקת חתימת קוד באמצעות אישורים בחתימה עצמית שמפתחים יכולים ליצור ללא סיוע חיצוני או אישור. אין צורך לחתום על הבקשות על ידי רשות מרכזית. Android אינו מבצע כיום אימות CA לתעודות יישום.

יישומים יכולים גם להצהיר על הרשאות אבטחה ברמת ההגנה על חתימה, ולהגביל את הגישה רק ליישומים החתומים עם אותו מפתח תוך שמירה על UIDs וארגזי חול של יישומים. יחסים קרובים יותר עם ארגז חול יישום משותף מותרים באמצעות תכונת UID המשותפת שבו שניים או יותר יישומים חתום עם מפתח למפתח זהה יכולים להכריז על UID משותף גלוי שלהם.

תוכניות חתימה של APK

Android תומך בשלוש תוכניות לחתימת אפליקציות:

לקבלת תאימות מרבית, חתום על יישומים עם כל התוכניות, תחילה עם v1, לאחר מכן v2 ולאחר מכן v3. מכשירי אנדרואיד 7.0 ומעלה מתקינים אפליקציות חתומות יותר עם תוכניות v2+ מהר יותר מאלו שנחתמו רק עם ערכת v1. פלטפורמות ישנות יותר של Android מתעלמות מחתימות v2+ ולכן זקוקות לאפליקציות שיכילו חתימות v1.

חתימת JAR (ערכת v1)

חתימת APK הייתה חלק מאנדרואיד מההתחלה. היא מבוססת על JAR חתם . לפרטים על השימוש בתכנית זו, עיין בתיעוד סטודיו אנדרואיד על חתימת האפליקציה שלך .

חתימות v1 אינן מגינות על חלקים מסוימים ב- APK, כגון מטא נתונים של ZIP. מאמת ה- APK צריך לעבד הרבה מבני נתונים לא מהימנים (שטרם אומתו) ולאחר מכן למחוק נתונים שאינם מכוסים בחתימות. זה מציע משטח התקפה ניכר. יתר על כן, מאמת APK חייב לבטל את הדחיסה של כל הערכים הדחוסים, ולצרוך יותר זמן וזיכרון. כדי לטפל בבעיות אלה, Android 7.0 הציגה את תכנית החתימה של APK v2.

תוכנית חתימה APK v2 ו- v3 (ערכת v2+)

התקנים שבהם פועל אנדרואיד 7.0 ואילך תומכים ב- ערכת חתימות APK v2 (ערכת v2) ואילך. (ערכת v2 עודכנה ל- v3 ב- Android 9 כך שתכלול מידע נוסף בחסימת החתימה, אך אחרת פועלת אותו הדבר.) התוכן של ה- APK מחובר וחתום, ואז בלוק החתימה של APK שהתקבל מוכנס ל- APK. לפרטים על יישום התכנית + v2 באפליקציה, לראות v2 Scheme חתימת APK .

במהלך האימות, ערכת v2+ מתייחסת לקובץ ה- APK כאל כתם ומבצעת בדיקת חתימות בקובץ כולו. כל שינוי ב- APK, כולל שינויי מטא נתונים של ZIP, מבטל את חתימת ה- APK. צורה זו של אימות APK מהירה באופן מהותי ומאפשרת לזהות סוגים נוספים של שינויים לא מורשים.

הפורמט החדש תואם לאחור, כך שניתן להתקין חבילות APK חתומות בפורמט החתימה החדש במכשירי אנדרואיד ישנים יותר (המתעלמים מהנתונים הנוספים שנוספו ל- APK), כל עוד חבילות ה- APK האלה גם חתומות על v1.

תהליך אימות חתימות APK

תהליך אימות חתימה איור 1. APK

חשיש הקובץ המלא של ה- APK מאומת מול חתימת v2+ המאוחסנת בבלוק החתימה של APK. החשיש מכסה הכל למעט בלוק החתימה של APK, המכיל את חתימת v2+. כל שינוי ב- APK מחוץ לחסום חתימת ה- APK מבטל את חתימת ה- v2+ של ה- APK. APK עם חתימת v2+ מופשטת נדחים גם הם, מכיוון שחתימת v1 שלהם מציינת כי ה- APK היה חתום על v2, מה שגורם לאנדרואיד 7.0 ואילך לסרב לאמת APK באמצעות חתימות v1 שלהם.

לפרטים על תהליך אימות חתימת APK, לראות את קטע האימות של v2 Scheme חתימת APK.