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 دستخط) اسکیم 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 ورژنز کے ذریعے سپورٹ۔ منحنی P-256 کے ساتھ ECDSA (بیضوی منحنی ڈیجیٹل دستخط الگورتھم) چھوٹے کلید سائز پر اسی خفیہ طاقت فراہم کرتا ہے۔ 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں