ऐप पर हस्ताक्षर

ऐप्लिकेशन साइनिंग की मदद से डेवलपर, ऐप्लिकेशन के लेखक की पहचान कर सकते हैं. साथ ही, वे मुश्किल इंटरफ़ेस और अनुमतियां बनाए बिना, अपने ऐप्लिकेशन को अपडेट कर सकते हैं. Android प्लैटफ़ॉर्म पर चलने वाले हर ऐप्लिकेशन पर, डेवलपर का हस्ताक्षर होना चाहिए. ऐसे ऐप्लिकेशन जो साइन इन किए बिना इंस्टॉल करने की कोशिश करते हैं, उन्हें Google Play या Android डिवाइस पर पैकेज इंस्टॉलर की ओर से अस्वीकार कर दिया जाता है.

Google Play पर, ऐप्लिकेशन साइनिंग की सुविधा से, Google को डेवलपर और अपने ऐप्लिकेशन पर भरोसा मिलता है. डेवलपर जानते हैं कि Android डिवाइस को उनका ऐप्लिकेशन उपलब्ध कराया गया है और उसमें कोई बदलाव नहीं किया गया है. साथ ही, ऐप्लिकेशन के काम करने के तरीके के लिए डेवलपर को जवाबदेह बनाया जा सकता है.

Android पर, ऐप्लिकेशन को उसके ऐप्लिकेशन सैंडबॉक्स में डालने के लिए, ऐप्लिकेशन साइनिंग करना पहला चरण है. साइन किए हुए ऐप्लिकेशन के सर्टिफ़िकेट से यह तय होता है कि कौनसा यूज़र आईडी किस ऐप्लिकेशन से जुड़ा है. अलग-अलग ऐप्लिकेशन, अलग-अलग यूज़र आईडी के तहत चलते हैं. ऐप्लिकेशन साइनिंग से यह पक्का होता है कि कोई ऐप्लिकेशन, अच्छी तरह से तय किए गए आईपीसी के अलावा किसी दूसरे ऐप्लिकेशन को ऐक्सेस न कर सके.

जब किसी ऐप्लिकेशन (APK फ़ाइल) को Android डिवाइस पर इंस्टॉल किया जाता है, तो Package Manager इस बात की पुष्टि करता है कि APK में शामिल सर्टिफ़िकेट से, APK पर सही तरीके से हस्ताक्षर किया गया है या नहीं. अगर सर्टिफ़िकेट (या ज़्यादा सटीक तरीके से, सर्टिफ़िकेट में मौजूद सार्वजनिक कुंजी) उस कुंजी से मेल खाती है जिसका इस्तेमाल डिवाइस पर किसी दूसरे APK को साइन करने के लिए किया गया है, तो नए APK के पास मेनिफ़ेस्ट में यह बताने का विकल्प होता है कि वह इसी तरह साइन किए गए अन्य APKs के साथ यूआईडी शेयर करता है.

ऐप्लिकेशन पर, तीसरे पक्ष (OEM, ऑपरेटर, अन्य मार्केट) या डेवलपर खुद साइन कर सकता है. Android, खुद के हस्ताक्षर वाले सर्टिफ़िकेट का इस्तेमाल करके कोड साइन करने की सुविधा देता है. डेवलपर, बाहरी मदद या अनुमति के बिना ये सर्टिफ़िकेट जनरेट कर सकते हैं. ऐप्लिकेशन पर किसी सेंट्रल अथॉरिटी का हस्ताक्षर होना ज़रूरी नहीं है. फ़िलहाल, Android ऐप्लिकेशन के सर्टिफ़िकेट के लिए, CA की पुष्टि नहीं करता.

ऐप्लिकेशन, सिग्नेचर की सुरक्षा के लेवल पर भी सुरक्षा अनुमतियां तय कर सकते हैं. इससे, अलग-अलग यूआईडी और ऐप्लिकेशन सैंडबॉक्स बनाए रखते हुए, सिर्फ़ उन ऐप्लिकेशन को ऐक्सेस करने की अनुमति मिलती है जिन्हें एक ही पासकोड से साइन किया गया है. शेयर की गई यूआईडी सुविधा का इस्तेमाल करके, शेयर किए गए ऐप्लिकेशन सैंडबॉक्स के साथ जुड़ाव की अनुमति मिलती है. इस सुविधा में, एक ही डेवलपर कुंजी से साइन किए गए दो या दो से ज़्यादा ऐप्लिकेशन, अपने मेनिफ़ेस्ट में शेयर किए गए यूआईडी के बारे में बता सकते हैं.

APK साइन करने के तरीके

Android, ऐप्लिकेशन साइन करने के लिए तीन स्कीम इस्तेमाल करता है:

ज़्यादा से ज़्यादा डिवाइसों पर काम करने के लिए, सभी स्कीम के साथ ऐप्लिकेशन साइन करें. सबसे पहले v1, फिर v2, और फिर v3 के साथ. Android 7.0 और इसके बाद के वर्शन वाले डिवाइसों पर, v2 और उसके बाद के वर्शन वाली सिग्नेचर स्कीम से साइन किए गए ऐप्लिकेशन, सिर्फ़ v1 वाली सिग्नेचर स्कीम से साइन किए गए ऐप्लिकेशन के मुकाबले तेज़ी से इंस्टॉल होते हैं. पुराने Android प्लैटफ़ॉर्म, v2 और उसके बाद के वर्शन के सिग्नेचर को अनदेखा करते हैं. इसलिए, ऐप्लिकेशन में v1 सिग्नेचर होने चाहिए.

JAR साइनिंग (v1 स्कीम)

APK साइनिंग की सुविधा, Android के शुरुआती दिनों से ही उपलब्ध है. यह साइन किए गए JAR पर आधारित है. इस स्कीम का इस्तेमाल करने के बारे में ज़्यादा जानने के लिए, अपने ऐप्लिकेशन को साइन करना सेक्शन में मौजूद, Android Studio का दस्तावेज़ देखें.

वर्शन 1 के हस्ताक्षर, APK के कुछ हिस्सों को सुरक्षित नहीं करते. जैसे, ZIP मेटाडेटा. APK की पुष्टि करने वाले टूल को, कई ऐसे डेटा स्ट्रक्चर को प्रोसेस करना पड़ता है जिन पर भरोसा नहीं किया जा सकता (जिनकी पुष्टि नहीं हुई है). इसके बाद, वह ऐसे डेटा को खारिज कर देता है जिस पर हस्ताक्षर नहीं किए गए हैं. इससे बड़े स्तर पर हमले की संभावना के बारे में पता चलता है. इसके अलावा, APK की पुष्टि करने वाले टूल को सभी संपीड़ित एंट्री को अनकंप्रेस करना होगा. इससे ज़्यादा समय और मेमोरी खर्च होती है. इन समस्याओं को हल करने के लिए, Android 7.0 में APK सिग्नेचर स्कीम v2 को पेश किया गया था.

APK सिग्नेचर स्कीम v2 और v3 (v2+ स्कीम)

Android 7.0 और इसके बाद के वर्शन वाले डिवाइसों पर, APK सिग्नेचर स्कीम v2 (v2 स्कीम) और इसके बाद वाले वर्शन काम करते हैं. (Android 9 में, हस्ताक्षर करने वाले ब्लॉक में ज़्यादा जानकारी शामिल करने के लिए, v2 स्कीम को v3 पर अपडेट किया गया था. हालांकि, इसके अलावा यह स्कीम पहले की तरह ही काम करती है.) APK के कॉन्टेंट को हैश किया जाता है और उस पर हस्ताक्षर किया जाता है. इसके बाद, APK साइनिंग ब्लॉक को APK में डाला जाता है. किसी ऐप्लिकेशन पर v2+ स्कीम लागू करने के बारे में जानकारी के लिए, APK सिग्नेचर स्कीम v2 देखें.

पुष्टि करने के दौरान, v2+ स्कीम APK फ़ाइल को ब्लॉब के तौर पर इस्तेमाल करती है और पूरी फ़ाइल में सिग्नेचर की जांच करती है. APK में कोई भी बदलाव करने पर APK सिग्नेचर को अमान्य कर दिया जाता है. इसमें ZIP मेटाडेटा में किए गए बदलाव भी शामिल हैं. APK की पुष्टि करने का यह तरीका काफ़ी तेज़ है. साथ ही, इससे बिना अनुमति के किए गए बदलावों की ज़्यादा क्लास का पता लगाया जा सकता है.

नया फ़ॉर्मैट, पुराने वर्शन के साथ काम करता है. इसलिए, नए सिग्नेचर फ़ॉर्मैट से साइन किए गए APK, पुराने Android डिवाइसों पर इंस्टॉल किए जा सकते हैं. ये डिवाइस, APK में जोड़े गए अतिरिक्त डेटा को अनदेखा कर देते हैं. हालांकि, ऐसा तब ही होगा, जब इन APK को v1 से भी साइन किया गया हो.

APK हस्ताक्षर की पुष्टि करने की प्रोसेस

पहली इमेज. APK के हस्ताक्षर की पुष्टि करने की प्रोसेस

APK की पूरी फ़ाइल के हैश की पुष्टि, APK साइनिंग ब्लॉक में सेव किए गए v2+ सिग्नेचर के आधार पर की जाती है. हैश में APK साइनिंग ब्लॉक के अलावा, सब कुछ शामिल होता है. इसमें v2+ सिग्नेचर होता है. APK में हस्ताक्षर करने वाले ब्लॉक के बाहर किया गया कोई भी बदलाव, APK के v2+ हस्ताक्षर को अमान्य कर देता है. जिन APK में v2 और उसके बाद के वर्शन के सिग्नेचर नहीं हैं उन्हें भी अस्वीकार कर दिया जाता है. इसकी वजह यह है कि उनके v1 सिग्नेचर से पता चलता है कि APK को v2 वर्शन के सिग्नेचर से साइन किया गया था. इस वजह से, Android 7.0 और उसके बाद के वर्शन, v1 सिग्नेचर का इस्तेमाल करके APK की पुष्टि करने से इंकार कर देते हैं.

APK हस्ताक्षर की पुष्टि करने की प्रक्रिया के बारे में जानने के लिए, APK सिग्नेचर स्कीम v2 का पुष्टि सेक्शन देखें.