Code Signing — यह क्या है, कोड हस्ताक्षर और यह कैसे काम करता है

लेखक: IT Sectr प्रकाशित: 2026-04-16 पढ़ने का समय: 9 मिनट

Code Signing (कोड हस्ताक्षर) — निष्पादन योग्य फ़ाइलों के लिए डिजिटल हस्ताक्षर तंत्र जो डेवलपर की प्रामाणिकता और एप्लिकेशन की अखंडता सुनिश्चित करता है। Android में, प्रत्येक APK फ़ाइल को डिवाइस पर इंस्टॉलेशन या Google Play पर प्रकाशन से पहले एक सर्टिफिकेट के साथ हस्ताक्षरित होना चाहिए। Google, 2024 के अनुसार, Android हस्ताक्षर योजनाओं की चार पीढ़ियों का समर्थन करता है: JAR-आधारित v1 से लेकर स्ट्रीमिंग इंस्टॉलेशन के लिए v4 तक।

मुख्य बिंदु

  • Code Signing — कोड का डिजिटल हस्ताक्षर जो लेखकत्व और एप्लिकेशन अखंडता की पुष्टि करता है।
  • Android में, हस्ताक्षर keystore — कुंजी और सर्टिफिकेट भंडार के माध्यम से किया जाता है।
  • v2 (APK Signature Scheme) — Android 7.0 से मुख्य मानक, जो APK के सभी बाइट्स की सुरक्षा करता है।
  • कुंजी रोटेशन (v3, Android 9.0+) एप्लिकेशन को हटाए बिना हस्ताक्षर कुंजी बदलने की अनुमति देता है।
  • Google Play केंद्रीय कुंजी प्रबंधन के लिए Play App Signing का उपयोग करता है।

Code Signing क्या है?

Code Signing — एक क्रिप्टोग्राफ़िक प्रक्रिया जिसमें डेवलपर अपने डिजिटल सर्टिफिकेट के साथ निष्पादन योग्य कोड पर हस्ताक्षर करता है। हस्ताक्षर असममित एन्क्रिप्शन का उपयोग करके बनाया जाता है: डेवलपर की निजी कुंजी एक डिजिटल हस्ताक्षर उत्पन्न करती है, और सार्वजनिक कुंजी सर्टिफिकेट में एम्बेड की जाती है। कोई भी सार्वजनिक कुंजी का उपयोग करके हस्ताक्षर सत्यापित कर सकता है, लेकिन हस्ताक्षर को तोड़े बिना कोड को संशोधित करना असंभव है।

मोबाइल डेवलपमेंट में, कोड हस्ताक्षर तीन कार्य करता है। पहला — प्रमाणीकरण: उपयोगकर्ता और प्लेटफ़ॉर्म एप्लिकेशन डेवलपर की पहचान कर सकते हैं। दूसरा — अखंडता: हस्ताक्षर के बाद APK में कोई भी बदलाव हस्ताक्षर को अमान्य कर देता है। तीसरा — विश्वसनीय अपडेट: प्लेटफ़ॉर्म केवल उन APKs के साथ एप्लिकेशन को अपडेट करने की अनुमति देता है जो स्थापित संस्करण के समान सर्टिफिकेट से हस्ताक्षरित हैं।

कानूनी स्थिति

Android एप्लिकेशन के डिजिटल हस्ताक्षर का कानूनी महत्व है। रूसी कानून (63-FZ) और यूरोपीय eIDAS के अनुसार, योग्य इलेक्ट्रॉनिक हस्ताक्षर हस्तलिखित हस्ताक्षर के समतुल्य है। हालाँकि, स्व-हस्ताक्षरित सर्टिफिकेट (Android में सामान्य प्रथा) के साथ APK पर हस्ताक्षर करना योग्य नहीं है — यह अखंडता की पुष्टि करता है, लेकिन कानूनी दृष्टिकोण से डेवलपर की पहचान की नहीं।

Android हस्ताक्षर योजनाएँ: v1, v2, v3, v4

Android चार APK हस्ताक्षर योजनाओं का समर्थन करता है, प्रत्येक पिछले संस्करण की समस्याओं को हल करती है और नई क्षमताएँ जोड़ती है। सभी योजनाएँ एक ही APK में सह-अस्तित्व में रह सकती हैं — पुराने Android संस्करणों के साथ पिछड़ी संगतता के लिए यह आवश्यक है।

v1 (JAR signing) योजना Android 1.0 में दिखाई दी। यह META-INF/MANIFEST.MF में प्रविष्टियों का उपयोग करके APK संग्रह के अंदर अलग-अलग फ़ाइलों पर हस्ताक्षर करती है। कमी: हमलावर APK को संशोधित कर सकता है (फ़ाइलें जोड़ या हटा सकता है) और बाकी को छुए बिना केवल संशोधित फ़ाइलों पर फिर से हस्ताक्षर कर सकता है। यह v1 को कुछ हमलों के लिए असुरक्षित बनाता है। v2 (APK Signature Scheme), जो Android 7.0 में पेश की गई, पूरी APK फ़ाइल पर समग्र रूप से हस्ताक्षर करती है, जिसमें हस्ताक्षर को छोड़कर सभी बाइट्स शामिल हैं, जो चयनात्मक संशोधन की संभावना को समाप्त करती है।

योजनाAndroidविशेषताकुंजी रोटेशन
v1 (JAR)1.0+प्रति फ़ाइल हस्ताक्षरनहीं
v27.0+पूर्ण APK हस्ताक्षरनहीं
v39.0+हस्ताक्षर + रोटेशनहाँ
v411.0+स्ट्रीमिंग + ADBहाँ

v3: हस्ताक्षर कुंजी रोटेशन

योजना v3, जो Android 9.0 में पेश की गई, एक लंबे समय से चली आ रही समस्या को हल करती है: यदि हस्ताक्षर कुंजी से समझौता हो जाए या समाप्त हो जाए तो क्या करें? पहले, हस्ताक्षर कुंजी बदलने का मतलब था कि एप्लिकेशन को नया माना जाता था — इसे मौजूदा एप्लिकेशन के ऊपर स्थापित नहीं किया जा सकता था। v3 रोटेशन तंत्र जोड़ता है: APK में रोटेशन का प्रमाण (proof-of-rotation) शामिल किया जा सकता है, जो पुरानी कुंजी से हस्ताक्षरित होता है। सिस्टम श्रृंखला को सत्यापित करता है और नई कुंजी से हस्ताक्षरित एप्लिकेशन को अपडेट करने की अनुमति देता है।

Keystore और सर्टिफिकेट

Keystore — एक सुरक्षित कंटेनर जिसमें एप्लिकेशन पर हस्ताक्षर करने के लिए निजी कुंजियाँ और सर्टिफिकेट होते हैं। Android डेवलपमेंट में JKS (Java KeyStore) या PKCS12 प्रारूप का उपयोग किया जाता है। Keystore keytool उपयोगिता द्वारा बनाया जाता है, जो JDK का हिस्सा है। भंडार में प्रत्येक कुंजी एक उपनाम (alias) द्वारा पहचानी जाती है और पासवर्ड द्वारा सुरक्षित होती है।

Keystore में सर्टिफिकेट में सार्वजनिक कुंजी और मालिक की जानकारी होती है: संगठन का नाम, देश, वैधता अवधि। Android एप्लिकेशन के लिए, सर्टिफिकेट स्व-हस्ताक्षरित हो सकता है — Google को प्रमाणन प्राधिकरण (CA) की आवश्यकता नहीं है, जो Android को iOS से अलग करता है। हालाँकि, सर्टिफिकेट की वैधता कम से कम 25 वर्ष होनी चाहिए, क्योंकि एप्लिकेशन उसी कुंजी से अपडेट किया जाएगा।

bash
# हस्ताक्षर के लिए नया keystore बनाना
keytool -genkey -v -keystore my-release.keystore \
        -alias my-app-alias \
        -keyalg RSA \
        -keysize 2048 \
        -validity 10000

# keystore सामग्री देखना
keytool -list -v -keystore my-release.keystore

कुंजी प्रारूप

Android हस्ताक्षर कुंजियों के लिए दो एल्गोरिदम का समर्थन करता है: RSA और ECDSA। 2048 बिट कुंजी आकार वाला RSA — वास्तविक मानक, सभी Android संस्करणों द्वारा समर्थित। ECDSA (एलिप्टिक कर्व डिजिटल सिग्नेचर एल्गोरिदम) वक्र P-256 के साथ छोटे कुंजी आकार पर समान क्रिप्टोग्राफ़िक शक्ति प्रदान करता है। Android 9.0 से, ECDSA की सिफारिश की जाती है क्योंकि यह मोबाइल उपकरणों पर सत्यापन में तेज़ है।

बिल्ड में हस्ताक्षर कॉन्फ़िगरेशन

Android Gradle Plugin में, हस्ताक्षर मॉड्यूल-स्तरीय build.gradle में signingConfigs ब्लॉक के माध्यम से कॉन्फ़िगर किया जाता है। डीबग बिल्ड के लिए, Android Studio स्वचालित रूप से ज्ञात पासवर्ड के साथ एक डीबग keystore बनाता है। रिलीज़ बिल्ड के लिए, डेवलपर अपने keystore का पथ, कुंजी उपनाम और पासवर्ड निर्दिष्ट करता है। पासवर्ड को अलग कॉन्फ़िगरेशन फ़ाइलों में संग्रहीत करने की अनुशंसा की जाती है, जो संस्करण नियंत्रण से बाहर रखी जाती हैं।

आधुनिक अभ्यास — CI/CD के माध्यम से केंद्रीय हस्ताक्षर प्रबंधन। Jenkins, GitLab CI या GitHub Actions keystore को एक संरक्षित आर्टिफ़ैक्ट और पासवर्ड को पर्यावरण रहस्यों के रूप में संग्रहीत कर सकते हैं। यह रिपॉजिटरी के माध्यम से कुंजी रिसाव को रोकता है और आवश्यकता पड़ने पर कुंजी रोटेशन को सरल बनाता है।

groovy
// build.gradle (ऐप-स्तर) — हस्ताक्षर कॉन्फ़िगरेशन
android {
    signingConfigs {
        release {
            storeFile file("my-release.keystore")
            storePassword System.getenv("KEYSTORE_PASSWORD")
            keyAlias System.getenv("KEY_ALIAS")
            keyPassword System.getenv("KEY_PASSWORD")
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }
}

एकाधिक योजना हस्ताक्षर

अधिकतम संगतता के लिए, APK पर तीनों योजनाओं (v1 + v2 + v3) से हस्ताक्षर किया जाना चाहिए। Android Gradle Plugin डिफ़ॉल्ट रूप से सभी योजनाओं को शामिल करता है। केवल v2 से हस्ताक्षरित APK Android 6.0 और उससे नीचे स्थापित नहीं होगा। केवल v1 वाला APK Android 7.0+ पर v2 के अखंडता लाभ प्राप्त नहीं करेगा। सभी योजनाओं को शामिल करने से APK का आकार 1-2% से अधिक नहीं बढ़ता है और किसी भी डिवाइस के साथ संगतता सुनिश्चित करता है।

Play App Signing और कुंजी प्रबंधन

Play App Signing — Google Play सेवा जो एप्लिकेशन हस्ताक्षर कुंजियों का केंद्रीय रूप से प्रबंधन करती है। डेवलपर Google Play Console में अपलोड कुंजी (upload key) से हस्ताक्षरित APK अपलोड करता है, और Google Play उपयोगकर्ताओं को वितरित करने से पहले इसे वितरण कुंजी (distribution key) से पुनः हस्ताक्षरित करता है। यह वितरण कुंजी को हानि या समझौते से बचाता है।

Play App Signing के लाभ: सुरक्षा — वितरण कुंजी Google के सुरक्षित भंडारण में संग्रहीत होती है; रोटेशन — कंसोल के माध्यम से कुंजी परिवर्तन का अनुरोध किया जा सकता है; पुनर्प्राप्ति — अपलोड कुंजी खो जाने पर नई कुंजी उत्पन्न की जा सकती है। कमी: Play App Signing की शुरुआत से पहले मौजूद एप्लिकेशन के लिए, माइग्रेशन के लिए एक नया एप्लिकेशन बनाने की आवश्यकता होती है, क्योंकि पुरानी वितरण कुंजी पहले से उपयोग में है।

bash
# सर्टिफिकेट फिंगरप्रिंट प्राप्त करना (SHA-256)
keytool -list -v -keystore my-release.keystore \
        -alias my-app-alias | grep "SHA256"

# apksigner के साथ APK हस्ताक्षर सत्यापित करना
apksigner verify --verbose app-release.apk

कुंजी पुनर्प्राप्ति

यदि हस्ताक्षर कुंजी खो जाती है और Play App Signing का उपयोग नहीं किया जाता है, तो एप्लिकेशन को अपडेट करने की क्षमता बहाल करना असंभव है — एक नए पैकेज नाम के साथ एक नया एप्लिकेशन बनाना होगा। Play App Signing का उपयोग करने का यह एक मुख्य कारण है। Google keystore की बैकअप प्रतिलिपि सुरक्षित ऑफ़लाइन भंडारण (एन्क्रिप्टेड USB ड्राइव, बैंक सेफ डिपॉजिट बॉक्स) में रखने की अनुशंसा करता है।

डिवाइस पर हस्ताक्षर सत्यापन

APK स्थापित करते समय, Android कई चरणों में हस्ताक्षर सत्यापन करता है। पहला — सर्टिफिकेट जाँच: क्या वैधता समाप्त हो गई है, क्या प्रारूप सही है। दूसरा — हस्ताक्षर सत्यापन: क्या क्रिप्टोग्राफ़िक हस्ताक्षर APK सामग्री से मेल खाता है। तीसरा — स्थापित संस्करण के साथ सर्टिफिकेट तुलना: यदि एप्लिकेशन पहले से डिवाइस पर मौजूद है, तो सर्टिफिकेट मेल खाना चाहिए, अन्यथा स्थापना अवरुद्ध हो जाती है।

सत्यापन प्रणाली PackageManagerService में निर्मित है। इंस्टॉलेशन अनुरोध को संसाधित करते समय, PMS APK से हस्ताक्षर निकालता है, इसे android.util.PackageParser वर्ग का उपयोग करके सत्यापित करता है और स्थापित एप्लिकेशन (यदि मौजूद है) के संग्रहीत हस्ताक्षर से तुलना करता है। बेमेल होने पर, उपयोगकर्ता को “INSTALL_FAILED_UPDATE_INCOMPATIBLE” त्रुटि मिलती है। यह तंत्र प्रतिस्थापन हमलों को रोकता है (मैलवेयर एक वैध एप्लिकेशन को अपने संस्करण से बदल नहीं सकता)।

डेवलपर द्वारा सत्यापन

डेवलपर Android SDK Build Tools से apksigner उपयोगिता का उपयोग करके स्वतंत्र रूप से APK हस्ताक्षर सत्यापित कर सकता है। कमांड apksigner verify --verbose app.apk दिखाता है कि APK किन योजनाओं से हस्ताक्षरित है, क्या सर्टिफिकेट वैध हैं और क्या हस्ताक्षर सामग्री से मेल खाते हैं। स्थापित एप्लिकेशन के हस्ताक्षर के प्रोग्रामेटिक सत्यापन के लिए, GET_SIGNATURES फ़्लैग के साथ PackageManager.getPackageInfo() का उपयोग किया जाता है।

kotlin
// स्थापित एप्लिकेशन के हस्ताक्षर का प्रोग्रामेटिक सत्यापन
fun getAppSignature(context: Context, packageName: String): String? {
    val pm = context.packageManager
    val info = pm.getPackageInfo(
        packageName,
        PackageManager.GET_SIGNATURES
    )
    return info.signatures?.firstOrNull()?.toCharsString()
}

हस्ताक्षर सुरक्षा के सर्वोत्तम अभ्यास

हस्ताक्षर कुंजी सुरक्षा — Android डेवलपमेंट का एक महत्वपूर्ण पहलू। कुंजी से समझौता हमलावर को आपके एप्लिकेशन के अपडेट पर अपने कोड से हस्ताक्षर करने की अनुमति देता है। मुख्य नियम: कुंजी को कभी भी रिपॉजिटरी में संग्रहीत न करें, विभिन्न एप्लिकेशन के लिए एक कुंजी का उपयोग न करें, कुंजी को असुरक्षित चैनलों (ईमेल, मैसेंजर) के माध्यम से स्थानांतरित न करें।

अनुशंसित अभ्यास — कुंजी पृथक्करण। प्रत्येक एप्लिकेशन के लिए अलग कुंजी और Google Play (upload key) पर अपलोड करने के लिए अलग कुंजी का उपयोग करें। डीबग बिल्ड के लिए, Android Studio एक साझा debug.keystore बनाता है — इसका उपयोग रिलीज़ बिल्ड के लिए नहीं किया जा सकता। सर्टिफिकेट की वैधता 25-30 वर्ष होनी चाहिए (वर्तमान मानक, Google द्वारा पुष्टि की गई)।

अभ्यासअनुशंसा
कुंजी भंडारणएन्क्रिप्टेड मीडिया, CI/CD रहस्य
सर्टिफिकेट वैधताकम से कम 25 वर्ष
एल्गोरिदमRSA 2048+ या ECDSA P-256
पृथक्करणप्रति एप्लिकेशन अलग कुंजी
बैकअपkeystore की ऑफ़लाइन प्रतिलिपि

हस्ताक्षर ऑडिट

नियमित रूप से हस्ताक्षर श्रृंखला अखंडता की जाँच करें। जब कुंजियों तक पहुँच वाले कर्मचारी कंपनी छोड़ते हैं, तो Google Play Console के माध्यम से अपलोड कुंजी अपडेट करें। यह सत्यापित करने के लिए Google Play Integrity API जैसे टूल का उपयोग करें कि आपका एप्लिकेशन उपयोगकर्ताओं के डिवाइस पर छेड़छाड़ नहीं किया गया है। API हस्ताक्षर और अखंडता के बारे में डेटा लौटाता है, इसे सत्यापन के लिए सर्वर पर भेजता है।

अक्सर पूछे जाने वाले प्रश्न

Android में Code Signing क्या है?

Code Signing — APK फ़ाइल का डिजिटल हस्ताक्षर है जो पुष्टि करता है कि एप्लिकेशन किसी विशिष्ट डेवलपर द्वारा बनाया गया था और हस्ताक्षर करने के बाद संशोधित नहीं किया गया है। हस्ताक्षर के बिना, APK डिवाइस पर स्थापित नहीं होगा।

Android एप्लिकेशन पर हस्ताक्षर करने के लिए कुंजी कैसे बनाएँ?

JDK से keytool उपयोगिता का उपयोग करें: keytool -genkey -v -keystore my-release.keystore -alias my-alias -keyalg RSA -keysize 2048 -validity 10000. परिणामी keystore को build.gradle में signingConfigs ब्लॉक में निर्दिष्ट करें।

यदि हस्ताक्षर कुंजी खो जाए तो क्या होगा?

यदि कुंजी खो जाती है और आप Play App Signing का उपयोग नहीं करते हैं, तो एप्लिकेशन को अपडेट करना असंभव हो जाता है। Google Play में एक नए पैकेज नाम के साथ एक नया एप्लिकेशन बनाना होगा। कुंजी हानि से बचाव के लिए Play App Signing का उपयोग करें।

v1 और v2 हस्ताक्षर योजनाओं में क्या अंतर है?

v1 APK के अंदर प्रत्येक फ़ाइल पर अलग-अलग हस्ताक्षर करता है — हमलावर एक फ़ाइल को संशोधित कर सकता है और केवल उसी पर फिर से हस्ताक्षर कर सकता है। v2 पूरे APK पर समग्र रूप से हस्ताक्षर करता है — कोई भी बदलाव हस्ताक्षर को अमान्य कर देता है, जो उच्च स्तर की सुरक्षा प्रदान करता है।

Play App Signing क्या है?

Play App Signing — Google Play सेवा है जो केंद्रीय रूप से एप्लिकेशन वितरण कुंजी संग्रहीत करती है। डेवलपर अपलोड कुंजी से हस्ताक्षरित APK अपलोड करता है, और Google उपयोगकर्ताओं को वितरण से पहले इसे पुनः हस्ताक्षरित करता है, कुंजी को हानि या चोरी से बचाता है।

सारांश

  • Code Signing — APK के लिए अनिवार्य डिजिटल हस्ताक्षर, जो एप्लिकेशन की प्रामाणिकता और अखंडता सुनिश्चित करता है।
  • Android चार हस्ताक्षर योजनाओं का समर्थन करता है: v1 (JAR), v2 (APK Signature), v3 (कुंजी रोटेशन) और v4 (स्ट्रीमिंग)।
  • Keystore — RSA 2048+ एल्गोरिदम के साथ keytool के माध्यम से बनाया गया सुरक्षित कुंजी कंटेनर।
  • कुंजी रोटेशन (v3, Android 9.0+) एप्लिकेशन को हटाए बिना हस्ताक्षर कुंजी बदलने की अनुमति देता है।
  • Play App Signing Google Play Console के माध्यम से वितरण कुंजियों का केंद्रीय रूप से प्रबंधन करता है।
  • इंस्टॉलेशन के दौरान हस्ताक्षर सत्यापन प्रतिस्थापन हमलों को रोकता है: सर्टिफिकेट बेमेल = INSTALL_FAILED त्रुटि।
  • कुंजी सुरक्षा: प्रति एप्लिकेशन अलग कुंजी, 25+ वर्ष वैधता, ऑफ़लाइन प्रतिलिपि, रिपॉजिटरी में कोई कुंजी नहीं।

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें