एप्लिकेशन पर हस्ताक्षर करने से डेवलपर्स को एप्लिकेशन के लेखक की पहचान करने और जटिल इंटरफेस और अनुमतियां बनाए बिना अपने एप्लिकेशन को अपडेट करने की अनुमति मिलती है। एंड्रॉइड प्लेटफ़ॉर्म पर चलने वाले प्रत्येक एप्लिकेशन पर डेवलपर का हस्ताक्षर होना चाहिए। जो एप्लिकेशन हस्ताक्षर किए बिना इंस्टॉल करने का प्रयास करेंगे, उन्हें Google Play या Android डिवाइस पर पैकेज इंस्टॉलर द्वारा अस्वीकार कर दिया जाएगा।
Google Play पर, एप्लिकेशन साइनिंग Google का डेवलपर के साथ विश्वास और डेवलपर का अपने एप्लिकेशन के साथ विश्वास को पाटता है। डेवलपर्स जानते हैं कि उनका एप्लिकेशन एंड्रॉइड डिवाइस पर, असंशोधित, प्रदान किया गया है; और डेवलपर्स को उनके एप्लिकेशन के व्यवहार के लिए जवाबदेह ठहराया जा सकता है।
एंड्रॉइड पर, एप्लिकेशन पर हस्ताक्षर करना किसी एप्लिकेशन को उसके एप्लिकेशन सैंडबॉक्स में रखने का पहला कदम है। हस्ताक्षरित आवेदन प्रमाणपत्र परिभाषित करता है कि कौन सी उपयोगकर्ता आईडी किस एप्लिकेशन से संबद्ध है; अलग-अलग एप्लिकेशन अलग-अलग उपयोगकर्ता आईडी के तहत चलते हैं। एप्लिकेशन पर हस्ताक्षर यह सुनिश्चित करता है कि एक एप्लिकेशन अच्छी तरह से परिभाषित आईपीसी के अलावा किसी अन्य एप्लिकेशन तक नहीं पहुंच सकता है।
जब किसी एप्लिकेशन (एपीके फ़ाइल) को एंड्रॉइड डिवाइस पर इंस्टॉल किया जाता है, तो पैकेज मैनेजर सत्यापित करता है कि एपीके को उस एपीके में शामिल प्रमाणपत्र के साथ ठीक से हस्ताक्षरित किया गया है। यदि प्रमाणपत्र (या, अधिक सटीक रूप से, प्रमाणपत्र में सार्वजनिक कुंजी) डिवाइस पर किसी अन्य एपीके पर हस्ताक्षर करने के लिए उपयोग की जाने वाली कुंजी से मेल खाता है, तो नए एपीके में मैनिफ़ेस्ट में निर्दिष्ट करने का विकल्प होता है कि यह यूआईडी को अन्य के साथ साझा करेगा। -हस्ताक्षरित APK.
आवेदनों पर तीसरे पक्ष (ओईएम, ऑपरेटर, वैकल्पिक बाजार) द्वारा हस्ताक्षर किए जा सकते हैं या स्वयं हस्ताक्षर किए जा सकते हैं। एंड्रॉइड स्व-हस्ताक्षरित प्रमाणपत्रों का उपयोग करके कोड हस्ताक्षर प्रदान करता है जिसे डेवलपर्स बाहरी सहायता या अनुमति के बिना उत्पन्न कर सकते हैं। आवेदनों पर किसी केंद्रीय प्राधिकारी द्वारा हस्ताक्षर करना आवश्यक नहीं है। एंड्रॉइड वर्तमान में आवेदन प्रमाणपत्रों के लिए सीए सत्यापन नहीं करता है।
एप्लिकेशन हस्ताक्षर सुरक्षा स्तर पर सुरक्षा अनुमतियों की घोषणा करने में भी सक्षम हैं, अलग-अलग यूआईडी और एप्लिकेशन सैंडबॉक्स को बनाए रखते हुए केवल एक ही कुंजी से हस्ताक्षरित एप्लिकेशन तक पहुंच को प्रतिबंधित करते हैं। साझा यूआईडी सुविधा का उपयोग करके साझा एप्लिकेशन सैंडबॉक्स के साथ घनिष्ठ संबंध की अनुमति दी जाती है, जहां एक ही डेवलपर कुंजी के साथ हस्ताक्षरित दो या दो से अधिक एप्लिकेशन अपने मेनिफ़ेस्ट में एक साझा यूआईडी घोषित कर सकते हैं।
एपीके हस्ताक्षर योजनाएं
एंड्रॉइड तीन एप्लिकेशन हस्ताक्षर योजनाओं का समर्थन करता है:
- v1 योजना: JAR हस्ताक्षर पर आधारित
- v2 स्कीम: एपीके सिग्नेचर स्कीम v2 , जिसे एंड्रॉइड 7.0 में पेश किया गया था।
- v3 स्कीम: एपीके सिग्नेचर स्कीम v3 , जिसे एंड्रॉइड 9 में पेश किया गया था।
अधिकतम अनुकूलता के लिए, सभी योजनाओं के साथ आवेदन पर हस्ताक्षर करें, पहले v1, फिर v2, और फिर v3 के साथ। एंड्रॉइड 7.0+ और नए डिवाइस केवल v1 स्कीम के साथ साइन किए गए ऐप्स की तुलना में v2+ स्कीम के साथ साइन किए गए ऐप्स को अधिक तेज़ी से इंस्टॉल करते हैं। पुराने एंड्रॉइड प्लेटफ़ॉर्म v2+ हस्ताक्षरों को अनदेखा करते हैं और इसलिए उन्हें v1 हस्ताक्षर वाले ऐप्स की आवश्यकता होती है।
JAR हस्ताक्षर (v1 योजना)
एपीके साइनिंग शुरू से ही एंड्रॉइड का हिस्सा रहा है। यह हस्ताक्षरित JAR पर आधारित है। इस योजना का उपयोग करने के विवरण के लिए, अपने ऐप पर हस्ताक्षर करने पर एंड्रॉइड स्टूडियो दस्तावेज़ देखें।
v1 हस्ताक्षर एपीके के कुछ हिस्सों, जैसे ज़िप मेटाडेटा, की सुरक्षा नहीं करते हैं। एपीके सत्यापनकर्ता को बहुत सारे अविश्वसनीय (अभी तक सत्यापित नहीं) डेटा संरचनाओं को संसाधित करने और फिर हस्ताक्षर द्वारा कवर नहीं किए गए डेटा को त्यागने की आवश्यकता है। यह एक बड़ी आक्रमण सतह प्रदान करता है। इसके अलावा, एपीके सत्यापनकर्ता को अधिक समय और मेमोरी का उपभोग करते हुए सभी संपीड़ित प्रविष्टियों को अनकंप्रेस करना होगा। इन समस्याओं के समाधान के लिए, एंड्रॉइड 7.0 ने एपीके सिग्नेचर स्कीम v2 पेश किया।
एपीके सिग्नेचर स्कीम v2 और v3 (v2+ स्कीम)
एंड्रॉइड 7.0 और बाद के संस्करण चलाने वाले डिवाइस एपीके हस्ताक्षर योजना v2 (v2 योजना) और बाद के संस्करण का समर्थन करते हैं। (साइनिंग ब्लॉक में अतिरिक्त जानकारी शामिल करने के लिए एंड्रॉइड 9 में v2 स्कीम को v3 में अपडेट किया गया था, लेकिन अन्यथा वही काम करता है।) एपीके की सामग्री को हैश और हस्ताक्षरित किया जाता है, फिर परिणामी एपीके साइनिंग ब्लॉक को एपीके में डाला जाता है। किसी ऐप पर v2+ योजना लागू करने के विवरण के लिए, एपीके सिग्नेचर स्कीम v2 देखें।
सत्यापन के दौरान, v2+ योजना एपीके फ़ाइल को एक ब्लॉब के रूप में मानती है और संपूर्ण फ़ाइल में हस्ताक्षर जांच करती है। एपीके में कोई भी संशोधन, जिसमें ज़िप मेटाडेटा संशोधन भी शामिल है, एपीके हस्ताक्षर को अमान्य कर देता है। एपीके सत्यापन का यह रूप काफी तेज़ है और अनधिकृत संशोधनों की अधिक श्रेणियों का पता लगाने में सक्षम बनाता है।
नया प्रारूप पश्चगामी संगत है, इसलिए नए हस्ताक्षर प्रारूप के साथ हस्ताक्षरित एपीके पुराने एंड्रॉइड डिवाइसों पर स्थापित किए जा सकते हैं (जो एपीके में जोड़े गए अतिरिक्त डेटा को अनदेखा करते हैं), जब तक कि ये एपीके भी v1-हस्ताक्षरित हों।
एपीके की संपूर्ण फ़ाइल हैश को एपीके साइनिंग ब्लॉक में संग्रहीत v2+ हस्ताक्षर के विरुद्ध सत्यापित किया जाता है। हैश एपीके साइनिंग ब्लॉक को छोड़कर सब कुछ कवर करता है, जिसमें v2+ हस्ताक्षर होता है। एपीके साइनिंग ब्लॉक के बाहर एपीके में कोई भी संशोधन एपीके के v2+ हस्ताक्षर को अमान्य कर देता है। छीने गए v2+ हस्ताक्षर वाले एपीके भी अस्वीकार कर दिए जाते हैं, क्योंकि उनके v1 हस्ताक्षर निर्दिष्ट करते हैं कि एपीके v2-हस्ताक्षरित था, जो एंड्रॉइड 7.0 और नए को उनके v1 हस्ताक्षर का उपयोग करके एपीके को सत्यापित करने से इंकार कर देता है।
एपीके हस्ताक्षर सत्यापन प्रक्रिया के विवरण के लिए, एपीके हस्ताक्षर योजना v2 का सत्यापन अनुभाग देखें।