Code Signing — bu nima, kodni imzalash va qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-04-16 O'qish vaqti: 9 daq

Code Signing (kodni imzalash) — bajariladigan fayllarni raqamli imzolash mexanizmi bo‘lib, dasturchining haqiqiyligi va ilova yaxlitligini kafolatlaydi. Android-da har bir APK-fayl qurilmaga o‘rnatish yoki Google Play-da nashr etishdan oldin sertifikat bilan imzolanishi shart. Google, 2024 ma‘lumotlariga ko‘ra, Android to‘rt avlod imzolash sxemalarini qo‘llab-quvvatlaydi: JAR asosidagi v1 dan streaming o‘rnatish uchun v4 gacha.

Asosiy

  • Code Signing — kodning raqamli imzosi, ilovaning muallifligi va yaxlitligini tasdiqlaydi.
  • Android-da imzolash keystore — kalitlar va sertifikatlar ombori orqali amalga oshiriladi.
  • v2 (APK Signature Scheme) sxemasi — Android 7.0 dan boshlab APK ning barcha baytlarini himoya qiluvchi asosiy standart.
  • Kalit rotatsiyasi (v3, Android 9.0+) ilovani o‘chirmasdan imzolash kalitini o‘zgartirishga imkon beradi.
  • Google Play markazlashtirilgan kalit boshqaruvi uchun Play App Signing dan foydalanadi.

Code Signing nima?

Code Signing — kriptografik jarayon bo‘lib, unda dasturchi bajariladigan kodni o‘zining raqamli sertifikati bilan imzolaydi. Imzo assimetrik shifrlash yordamida yaratiladi: dasturchining shaxsiy kaliti bilan raqamli imzo hosil qilinadi, ochiq kalit esa sertifikatga joylashtiriladi. Har kim ochiq kalit yordamida imzoni tekshirishi mumkin, ammo imzoni buzmasdan kodni o‘zgartirish mumkin emas.

Mobil ishlanmada kodni imzolash uchta funktsiyani bajaradi. Birinchisi — autentifikatsiya: foydalanuvchi va platforma ilova dasturchisini aniqlashi mumkin. Ikkinchisi — yaxlitlik: imzolashdan keyin APK dagi har qanday o‘zgarish imzoni bekor qiladi. Uchinchisi — ishonchli yangilash: platforma ilovani faqat o‘rnatilgan versiya bilan bir xil sertifikat bilan imzolangan APK-lar bilan yangilashga ruxsat beradi.

Huquqiy maqom

Android ilovalarining raqamli imzosi huquqiy ahamiyatga ega. Rossiya Federatsiyasi qonunchiligiga (63-FZ) va Yevropa eIDAS ga muvofiq, malakali elektron imzo qo‘l imzosiga tenglashtiriladi. Ammo o‘z-o‘zidan imzolangan sertifikat bilan APK imzolash (Android-da odatiy amaliyot) malakali emas — u yaxlitlikni tasdiqlaydi, lekin dasturchining shaxsini huquqiy nuqtayi nazardan tasdiqlamaydi.

Android imzolash sxemalari: v1, v2, v3, v4

Android to‘rtta APK imzolash sxemasini qo‘llab-quvvatlaydi, ularning har biri oldingi versiyaning muammolarini hal qiladi va yangi imkoniyatlar qo‘shadi. Barcha sxemalar bir APK-da birga mavjud bo‘lishi mumkin — bu eski Android versiyalari bilan orqaga qarab moslikni saqlash uchun kerak.

v1 (JAR imzolash) sxemasi Android 1.0 da paydo bo‘ldi. U APK arxivining ichidagi alohida fayllarni META-INF/MANIFEST.MF yozuvlari orqali imzolaydi. Kamchilik: APK ni o‘zgartirish (fayllarni qo‘shish yoki o‘chirish) va faqat o‘zgartirilgan fayllarni qayta imzolash mumkin, qolganlarining imzosiga tegmasdan. Bu v1 ni ba‘zi hujumlarga zaif qiladi. Android 7.0 da joriy qilingan v2 (APK Signature Scheme) sxemasi butun APK faylini to‘liq imzolaydi, imzoning o‘zidan tashqari barcha baytlarni o‘z ichiga oladi, bu esa tanlab o‘zgartirish imkoniyatini yo‘qotadi.

SxemaAndroidXususiyatKalit rotatsiyasi
v1 (JAR)1.0+Har bir faylning imzosiYo‘q
v27.0+Butun APK imzosiYo‘q
v39.0+Imzo + rotatsiyaHa
v411.0+Streaming + ADBHa

v3: imzolash kalitlari rotatsiyasi

Android 9.0 da taqdim etilgan v3 sxemasi qadimiy muammoni hal qiladi: imzolash kaliti buzilgan yoki muddati tugagan bo‘lsa nima qilish kerak? Ilgari imzolash kalitini o‘zgartirish ilova yangi deb qabul qilinishini anglatardi — uni mavjud ilova ustiga o‘rnatib bo‘lmasdi. v3 rotatsiya mexanizmini qo‘shadi: APK ga eski kalit bilan imzolangan kalit o‘zgarishi isboti (proof-of-rotation) kiritilishi mumkin. Tizim zanjirni tekshiradi va yangi kalit bilan imzolangan ilovani yangilashga ruxsat beradi.

Keystore va sertifikatlar

Keystore — ilovalarni imzolash uchun shaxsiy kalitlar va sertifikatlarni o‘z ichiga olgan himoyalangan konteyner. Android ishlanmasida JKS (Java KeyStore) yoki PKCS12 formatidan foydalaniladi. Keystore JDK tarkibidagi keytool yordam dasturi bilan yaratiladi. Ombordagi har bir kalit taxallus (alias) bilan aniqlanadi va parol bilan himoyalanadi.

Keystoredagi sertifikat ochiq kalitni va egasi haqida ma‘lumotlarni: tashkilot nomi, davlat, amal qilish muddatini o‘z ichiga oladi. Android ilovalari uchun sertifikat o‘z-o‘zidan imzolangan bo‘lishi mumkin — Google sertifikatlashtirish markaziga (CA) murojaat qilishni talab qilmaydi, bu Android ni iOS dan farqlaydi. Biroq sertifikatning amal qilish muddati kamida 25 yil bo‘lishi kerak, chunki ilova xuddi shu kalit bilan yangilanadi.

bash
# Imzolash uchun yangi keystore yaratish
keytool -genkey -v -keystore my-release.keystore \
        -alias my-app-alias \
        -keyalg RSA \
        -keysize 2048 \
        -validity 10000

# Keystore mazmunini ko‘rish
keytool -list -v -keystore my-release.keystore

Kalit formatlari

Android imzolash kalitlari uchun ikkita algoritmni qo‘llab-quvvatlaydi: RSA va ECDSA. 2048 bit kalit o‘lchami bilan RSA — Android ning barcha versiyalari tomonidan qo‘llab-quvvatlanadigan de-fakto standart. P-256 egri chizig‘i bilan ECDSA (Elliptic Curve Digital Signature Algorithm) kichikroq kalit o‘lchamida bir xil kriptografik quvvatni ta‘minlaydi. Android 9.0 dan boshlab ECDSA dan foydalanish tavsiya etiladi, chunki mobil qurilmalarda tekshirishda tezroq.

Yig‘mada imzolashni sozlash

Android Gradle Plugin da imzolash modul darajasidagi build.gradle ichida signingConfigs bloki orqali sozlanadi. Debug yig‘malari uchun Android Studio avtomatik ravishda ma‘lum parollar bilan debug keystore yaratadi. Release yig‘malari uchun dasturchi o‘z keystore yo‘lini, kalit taxallusini va parollarni ko‘rsatadi. Parollarni versiya nazorat tizimidan chiqarib tashlangan alohida konfiguratsiya fayllarida saqlash tavsiya etiladi.

Zamonaviy amaliyot CI/CD orqali markazlashtirilgan imzolash boshqaruvidir. Jenkins, GitLab CI yoki GitHub Actions keystore ni himoyalangan artefakt sifatida, parollarni esa muhit sirlarida saqlashi mumkin. Bu kalitlarning repozitoriya orqali sizib chiqishining oldini oladi va kerak bo‘lganda kalitni o‘zgartirishni soddalashtiradi.

groovy
// build.gradle (modul darajasi) — imzolash sozlamalari
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
        }
    }
}

Bir necha sxema bilan imzolash

Maksimal moslik uchun APK uchala sxema bilan (v1 + v2 + v3) imzolanishi kerak. Android Gradle Plugin sukut bo‘yicha barcha sxemalarni qo‘shadi. Faqat v2 bilan imzolangan APK Android 6.0 va undan eski versiyalarida o‘rnatilmaydi. Faqat v1 bilan APK Android 7.0+ da v2 ning yaxlitlik afzalliklariga ega bo‘lmaydi. Barcha sxemalarni qo‘shish APK hajmini 1–2% dan ko‘p oshirmaydi va istalgan qurilma bilan moslikni ta‘minlaydi.

Play App Signing va kalit boshqaruvi

Play App Signing — ilovalarning imzolash kalitlarini markazlashtirilgan holda boshqaradigan Google Play xizmati. Dasturchi Google Play Console ga upload key (yuklash kaliti) bilan imzolangan APK yuklaydi, Google Play esa foydalanuvchilarga yetkazishdan oldin uni distribution key (tarqatish kaliti) bilan qayta imzolaydi. Bu tarqatish kalitini yo‘qotish yoki buzilishdan himoya qiladi.

Play App Signing ning afzalliklari: xavfsizlik — tarqatish kaliti Google ning himoyalangan omborida saqlanadi; rotatsiya — konsol orqali kalitni o‘zgartirish so‘ralishi mumkin; tiklash — yuklash kaliti yo‘qolsa, yangisini yaratish mumkin. Kamchilik: Play App Signing joriy qilinishidan oldin mavjud bo‘lgan ilovalar uchun o‘tish yangi ilova yaratishni talab qiladi, chunki eski tarqatish kaliti allaqachon ishlatilmoqda.

bash
# Sertifikat barmoq izini olish (SHA-256)
keytool -list -v -keystore my-release.keystore \
        -alias my-app-alias | grep "SHA256"

# APK imzosini apksigner orqali tekshirish
apksigner verify --verbose app-release.apk

Kalitni tiklash

Agar imzolash kaliti yo‘qolsa va Play App Signing ishlatilmasa, ilovani yangilash imkoniyatini tiklash mumkin emas — yangi paket nomi bilan yangi ilova yaratishga to‘g‘ri keladi. Bu Play App Signing dan foydalanishning asosiy sabablaridan biridir. Google keystore ning zaxira nusxasini himoyalangan oflayn omborda (shifrlangan USB tashuvchi, bank seyfi) saqlashni tavsiya qiladi.

Qurilmada imzoni tekshirish

APK o‘rnatilayotganda Android bir necha bosqichda imzoni tekshirishni amalga oshiradi. Birinchi — sertifikatni tekshirish: muddati tugamaganmi, format to‘g‘rimi. Ikkinchi — imzoni tekshirish: kriptografik imzo APK mazmuniga mos keladimi. Uchinchi — sertifikatni o‘rnatilgan versiya bilan solishtirish: agar ilova allaqachon qurilmada mavjud bo‘lsa, sertifikat mos kelishi kerak, aks holda o‘rnatish bloklanadi.

Tekshirish tizimi PackageManagerService ga o‘rnatilgan. O‘rnatish so‘rovi qayta ishlanayotganda PMS APK dan imzoni chiqaradi, uni android.util.PackageParser sinfi bilan tekshiradi va o‘rnatilgan ilovaning saqlangan imzosi bilan solishtiradi (agar mavjud bo‘lsa). Mos kelmasa, foydalanuvchi „INSTALL_FAILED_UPDATE_INCOMPATIBLE” xatosini oladi. Bu mexanizm almashtirish hujumlarining oldini oladi (zararli dastur qonuniy ilovani o‘z versiyasi bilan yangilay olmaydi).

Dasturchi tomonidan tekshirish

Dasturchi Android SDK Build Tools dan apksigner yordam dasturi bilan APK imzosini mustaqil tekshirishi mumkin. apksigner verify --verbose app.apk buyrug‘i APK qaysi sxemalar bilan imzolanganini, sertifikatlar haqiqiymi va imzolar mazmunga mos kelishini ko‘rsatadi. O‘rnatilgan ilova imzosini dasturiy tekshirish uchun PackageManager.getPackageInfo() GET_SIGNATURES bayrog‘i bilan ishlatiladi.

kotlin
// O‘rnatilgan ilova imzosini dasturiy tekshirish
fun getAppSignature(context: Context, packageName: String): String? {
    val pm = context.packageManager
    val info = pm.getPackageInfo(
        packageName,
        PackageManager.GET_SIGNATURES
    )
    return info.signatures?.firstOrNull()?.toCharsString()
}

Imzolash xavfsizligining eng yaxshi amaliyotlari

Imzolash kaliti xavfsizligi — Android ishlanmasining muhim jihati. Kalitning buzilishi tajovuzkorga ilovangizning yangilanishlarini o‘z kodi bilan imzolashga imkon beradi. Asosiy qoidalar: kalitni hech qachon repozitoriyada saqlamang, bir kalitni turli ilovalar uchun ishlatmang, kalitni himoyalanmagan kanallar (email, messenjerlar) orqali uzatmang.

Tavsiya etilgan amaliyot kalitlarni ajratishdir. Har bir ilova uchun alohida kalit va Google Play ga yuklash uchun alohida kalit (upload key) dan foydalaning. Debug yig‘malari uchun Android Studio umumiy debug.keystore yaratadi — uni release yig‘malari uchun ishlatib bo‘lmaydi. Sertifikatning amal qilish muddati 25–30 yil bo‘lishi kerak (Google tomonidan tasdiqlangan joriy standart).

AmaliyotTavsiya
Kalitni saqlashShifrlangan tashuvchi, CI/CD sirlari
Sertifikat muddatiKamida 25 yil
AlgoritmRSA 2048+ yoki ECDSA P-256
AjratishHar bir ilova uchun alohida kalit
ZaxiralashKeystore ning oflayn nusxasi

Imzolar auditi

Muntazam ravishda imzolash zanjiri yaxlitligini tekshiring. Kalitlarga kirish huquqiga ega xodimlar o‘zgarganda, Google Play Console orqali upload key ni yangilang. Ilovangiz foydalanuvchi qurilmalarida soxtalashtirilmaganligini tekshirish uchun Google Play Integrity API kabi vositalardan foydalaning. API imzo, yaxlitlik haqidagi ma‘lumotlarni qaytaradi va tekshirish uchun serverga yuboradi.

Ko‘p so‘raladigan savollar

Android da Code Signing nima?

Code Signing — APK faylining raqamli imzosi bo‘lib, ilova ma‘lum bir dasturchi tomonidan yaratilganini va imzolashdan keyin o‘zgartirilmaganini tasdiqlaydi. Imzosiz APK qurilmada o‘rnatilmaydi.

Android ilovasini imzolash uchun kalitni qanday yaratish mumkin?

JDK dan keytool yordam dasturidan foydalaning: keytool -genkey -v -keystore my-release.keystore -alias my-alias -keyalg RSA -keysize 2048 -validity 10000. Olingan keystore ni build.gradle da signingConfigs blokida ko‘rsating.

Imzolash kaliti yo‘qolsa nima bo‘ladi?

Agar kalit yo‘qolsa va Play App Signing ishlatilmasa, ilovani yangilash imkonsiz bo‘ladi. Google Play da yangi paket nomi bilan yangi ilova yaratishga to‘g‘ri keladi. Kalit yo‘qolishidan himoyalanish uchun Play App Signing dan foydalaning.

v1 va v2 imzolash sxemalari qanday farq qiladi?

v1 APK ichidagi har bir faylni alohida imzolaydi — tajovuzkor bir faylni o‘zgartirib, faqat uni qayta imzolashi mumkin. v2 butun APK ni to‘liq imzolaydi — har qanday o‘zgarish imzoni bekor qiladi, bu yuqoriroq xavfsizlik darajasini ta‘minlaydi.

Play App Signing nima?

Play App Signing — ilovalarning tarqatish kalitini markazlashtirilgan holda saqlaydigan Google Play xizmati. Dasturchi upload key bilan imzolangan APK yuklaydi, Google esa foydalanuvchilarga yetkazishdan oldin uni qayta imzolaydi, kalitni yo‘qotish yoki o‘g‘irlikdan himoya qiladi.

Xulosa

  • Code Signing — ilovaning haqiqiyligi va yaxlitligini kafolatlaydigan majburiy raqamli APK imzosi.
  • Android to‘rtta imzolash sxemasini qo‘llab-quvvatlaydi: v1 (JAR), v2 (APK Signature), v3 (kalit rotatsiyasi) va v4 (streaming).
  • Keystore — RSA 2048+ algoritmi bilan keytool orqali yaratiladigan kalitlar bilan himoyalangan konteyner.
  • Kalit rotatsiyasi (v3, Android 9.0+) imzolash kalitini ilovani o‘chirmasdan o‘zgartirishga imkon beradi.
  • Play App Signing Google Play Console orqali tarqatish kalitlarini markazlashtirilgan holda boshqaradi.
  • O‘rnatish vaqtida imzoni tekshirish almashtirish hujumlarini bloklaydi: sertifikat mos kelmasligi = INSTALL_FAILED xatosi.
  • Kalit xavfsizligi: har bir ilova uchun alohida kalit, 25+ yil muddat, oflayn nusxa, repozitoriyada kalit yo‘q.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing