एपीके हस्ताक्षर योजना v3.1

अवलोकन

एंड्रॉइड 13 एपीके सिग्नेचर स्कीम v3.1 का समर्थन करता है, जो मौजूदा एपीके सिग्नेचर स्कीम v3 में सुधार है। v3.1 योजना रोटेशन के संबंध में एपीके सिग्नेचर स्कीम v3 के साथ कुछ ज्ञात मुद्दों को संबोधित करती है। विशेष रूप से, v3.1 हस्ताक्षर योजना एसडीके संस्करण लक्ष्यीकरण का समर्थन करती है, जो प्लेटफ़ॉर्म के बाद के रिलीज़ को लक्षित करने के लिए रोटेशन की अनुमति देती है।

V3.1 हस्ताक्षर योजना एक ब्लॉक आईडी का उपयोग करती है जो एंड्रॉइड 12 या उससे पहले के संस्करण पर मान्यता प्राप्त नहीं है। इसलिए, प्लेटफ़ॉर्म निम्नलिखित हस्ताक्षरकर्ता व्यवहार लागू करता है:

  • एंड्रॉइड 13 या उच्चतर चलाने वाले डिवाइस v3.1 ब्लॉक में घुमाए गए हस्ताक्षरकर्ता का उपयोग करते हैं।
  • एंड्रॉइड के पुराने संस्करण चलाने वाले डिवाइस घुमाए गए हस्ताक्षरकर्ता को अनदेखा करते हैं और इसके बजाय v3 ब्लॉक में मूल हस्ताक्षरकर्ता का उपयोग करते हैं।

जिन ऐप्स ने अभी तक अपनी हस्ताक्षर कुंजी को घुमाया नहीं है, उन्हें किसी अतिरिक्त कार्रवाई की आवश्यकता नहीं है। जब भी ये ऐप्स घूमना चुनते हैं, सिस्टम डिफ़ॉल्ट रूप से v3.1 हस्ताक्षर योजना लागू करता है।

v3.1 साइनिंग ब्लॉक

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

डिफ़ॉल्ट रूप से, जब भी साइनिंग कॉन्फिगरेशन में एक घुमाई गई कुंजी और वंशावली प्रदान की जाती है apksig लाइब्रेरी v3.1 साइनिंग ब्लॉक का उपयोग करेगी। यदि किसी ऐप का minSdkVersion Android 13 से कम है और एक घुमाई गई कुंजी का उपयोग किया जा रहा है, तो मूल हस्ताक्षर कुंजी भी निर्दिष्ट की जानी चाहिए ताकि इसका उपयोग v3 हस्ताक्षर ब्लॉक में एपीके पर हस्ताक्षर करने के लिए किया जा सके। यह वर्तमान व्यवहार के समान है जहां एपीके एंड्रॉइड 9 से पहले के संस्करण को लक्षित करता है तो मूल हस्ताक्षरकर्ता की आवश्यकता होती है।

किसी विशेष एसडीके संस्करण से शुरू होने वाले कुंजी रोटेशन को लक्षित करने का समर्थन करने के लिए, apksig लाइब्रेरी नए एपीआई को उजागर करेगी जो रोटेशन के लिए न्यूनतम एसडीके संस्करण सेट करने की अनुमति देगी यदि एंड्रॉइड 13 से कम एसडीके संस्करण को रोटेशन समर्थन के लिए न्यूनतम संस्करण के रूप में निर्दिष्ट किया गया है तो मूल v3 ब्लॉक का उपयोग किया जाएगा. V3.1 साइनिंग ब्लॉक का उपयोग केवल रोटेशन की उपस्थिति में किया जाता है जहां रोटेशन के लिए न्यूनतम एसडीके संस्करण एंड्रॉइड 13 और बाद में सेट किया गया है। वी3 साइनिंग ब्लॉक में रोटेशन न्यूनतम एसडीके संस्करण स्ट्रिपिंग सुरक्षा के लिए एक नई विशेषता होगी।

एपीके में वंश शामिल है रोटेशन-न्यूनतम-एसडीके-संस्करण का मान v3 हस्ताक्षर ब्लॉक v3.1 साइनिंग ब्लॉक
नहीं डिफ़ॉल्ट या कोई मान (नीचे x द्वारा दर्शाया गया) मूल हस्ताक्षरकर्ता के साथ हस्ताक्षरित, Android 9 और बाद के संस्करण को लक्ष्य करते हुए नहीं होना
हाँ गलती करना मूल हस्ताक्षरकर्ता के साथ हस्ताक्षरित, Android 9 से 12L को लक्ष्य करते हुए एंड्रॉइड 13 और बाद के संस्करण को लक्षित करते हुए, घुमाए गए हस्ताक्षरकर्ता के साथ हस्ताक्षरित
हाँ x <33 (एंड्रॉइड 13) घुमाए गए हस्ताक्षरकर्ता के साथ हस्ताक्षरित, एंड्रॉइड 9 और बाद के संस्करण को लक्षित करते हुए नहीं होना
हाँ x >= 33 (एंड्रॉइड 13) एंड्रॉइड 9 को लक्ष्य करते हुए, मूल हस्ताक्षरकर्ता के साथ हस्ताक्षरित - ( x -1) x+ को लक्ष्य करते हुए घुमाए गए हस्ताक्षरकर्ता के साथ हस्ताक्षरित

रोटेशन से संबंधित मुद्दे

प्लेटफ़ॉर्म में निम्नलिखित रोटेशन-संबंधी समस्याओं का समाधान किया गया है:

एंड्रॉइड 12 फिक्स

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

एंड्रॉइड 11 ठीक करता है

  • दो पैकेजों की मूल हस्ताक्षर कुंजियों की जांच करने के लिए PackageManager#checkSignatures उचित रूप से अद्यतन नहीं किया गया था। इसने मूल साइनिंग कुंजी का उपयोग करके इंस्ट्रूमेंटेशन एपीके के साथ घुमाई गई साइनिंग कुंजी का उपयोग करने वाले ऐप्स के लिए इंस्ट्रूमेंटेशन को तोड़ दिया।
  • sharedUserId के अंतर्गत पैकेज अपने हस्ताक्षर वंश को साझा करते हैं। जब भी अपडेटेड साइनिंग लाइनेज वाला कोई ऐप sharedUiserId में इंस्टॉल या अपडेट किया जाता है, तो उस ऐप की लाइनेज ने sharedUserId के लिए शेयर्ड लाइनेज को बदल दिया है (अर्थात, यदि किसी ऐप की साइनिंग लाइनेज ए -> बी थी, और एक ऐप को sharedUserId में अपडेट किया जाता है) वंश B -> C के साथ, तो sharedUserId वंश को B -> C से बदल दिया जाएगा)। इसी तरह वंश में पिछले हस्ताक्षरकर्ता की क्षमताओं को तब तक अद्यतन नहीं किया जा सकता जब तक कि हस्ताक्षर वंश को नहीं बदला जाता।

v4 एकीकरण

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

मान्यकरण

v3.1 के अपने कार्यान्वयन का परीक्षण करने के लिए, cts/hostsidetests/appsecurity/src/android/appsecurity/cts/ में PkgInstallSignatureVerificationTest.java CTS परीक्षण चलाएँ।

परीक्षण के बारे में अधिक जानकारी के लिए, v3 में सत्यापन अनुभाग देखें।