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

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

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

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

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

ऐप्लिकेशन पर, तीसरे पक्ष (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 scheme) और उसके बाद के वर्शन काम करते हैं. (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 में किया गया कोई भी बदलाव, APK के v2+ हस्ताक्षर को अमान्य कर देता है. जिन APK में v2 और उसके बाद के वर्शन के सिग्नेचर नहीं हैं उन्हें भी अस्वीकार कर दिया जाता है. इसकी वजह यह है कि उनके v1 सिग्नेचर से पता चलता है कि APK को v2 वर्शन के सिग्नेचर से साइन किया गया था. इस वजह से, Android 7.0 और उसके बाद के वर्शन, v1 सिग्नेचर का इस्तेमाल करके APK की पुष्टि नहीं करते.

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