Code Signing — nədir, kodun imzalanması və necə işləyir

Müəllif: IT Sectr Dərc olunub: 2026-04-16 Oxuma vaxtı: 9 dəq

Code Signing (kodun imzalanması) — icra olunan faylların rəqəmsal imzalanması mexanizmi, tərtibatçının həqiqiliyini və tətbiqin bütövlüyünü təmin edir. Android-də hər bir APK faylı cihazda quraşdırılmadan və ya Google Play-də dərc edilməzdən əvvəl sertifikatla imzalanmalıdır. Google, 2024 məlumatlarına görə, Android dörd nəsil imzalama sxemini dəstəkləyir: JAR əsaslı v1-dən axın quraşdırma üçün v4-ə qədər.

Başlıca

  • Code Signing — kodun rəqəmsal imzası, tətbiqin müəllifliyini və bütövlüyünü təsdiq edir.
  • Android-də imzalama keystore — açarlar və sertifikatlar anbarı vasitəsilə həyata keçirilir.
  • v2 (APK Signature Scheme) sxemi — Android 7.0-dən etibarən APK-nın bütün baytlarını qoruyan əsas standart.
  • Açar rotasiyası (v3, Android 9.0+) tətbiqi silmədən imzalama açarını dəyişməyə imkan verir.
  • Google Play mərkəzləşdirilmiş açar idarəetməsi üçün Play App Signing istifadə edir.

Code Signing nədir?

Code Signing — kriptoqrafik prosesdir, bu zaman tərtibatçı icra olunan kodu öz rəqəmsal sertifikatı ilə imzalayır. Imza asimmetrik şifrələmə istifadə edilərək yaradılır: tərtibatçının şəxsi açarı ilə rəqəmsal imza yaranır, açıq açar isə sertifikata daxil edilir. Hər kəs açıq açardan istifadə edərək imzanı yoxlaya bilər, lakin imzanı pozmadan kodu dəyişmək mümkün deyil.

Mobil inkişafda kodun imzalanması üç funksiya yerinə yetirir. Birincisi — autentifikasiya: istifadəçi və platforma tətbiqin tərtibatçısını müyən edə bilər. Ikincisi — bütövlük: imzalamadan sonra APK-dəki hər hansı dəyişiklik imzanı etibarsız edir. Üçüncüsü — etibarlı yeniləmə: platforma tətbiqi yalnız quraşdırılmış versiya ilə eyni sertifikatla imzalanmış APK-larla yeniləməyə imkan verir.

Hüquqi status

Android tətbiqlərinin rəqəmsal imzası hüquqi əhəmiyyətə malikdir. Rusiya Federasiyasının qanunvericiliyinə (63-FZ) və Avropa eIDAS-a uyğun olaraq, ixtisaslı elektron imza əl imzasına bərabər tutulur. Lakin özözünə imzalanmış sertifikatdan istifadə edərək APK imzası (Android-də adi təcrübə) ixtisaslı deyil — o, bütövlüyü təsdiq edir, lakin hüquqi nöqteyi-nəzərdən tərtibatçının şəxsiyyətini təsdiq etmir.

Android imzalama sxemləri: v1, v2, v3, v4

Android dörd APK imzalama sxemini dəstəkləyir, onların hər biri əvvəlki versiyanın problemlərini həll edir və yeni imkanlar əlavə edir. Bütün sxemlər bir APK-da birgə mövcud ola bilər — bu, köhnə Android versiyaları ilə geriyə uyğumluğu qorumaq üçün lazımdır.

v1 (JAR imzalama) sxemi Android 1.0-da ortaya çıxdı. O, APK arxivinin içərisindəki ayrı-ayrı faylları META-INF/MANIFEST.MF qeydləri vasitəsilə imzalayır. Çatışmazlıq: APK dəyişdirilə bilər (fayllar əlavə oluna və ya silinə bilər) və yalnız dəyişdirilmiş fayllar yenidən imzalana bilər, qalanlarının imzasına toxunulmaz. Bu, v1-i bəzi hücumlara qarşı həssas edir. Android 7.0-da təqdim edilmiş v2 (APK Signature Scheme) sxemi bütün APK faylını tamamilə, imzanın özü istisna olmaqla bütün baytları ilə imzalayır ki, bu da seçmə dəyişiklik imkanını aradan qaldırır.

SxemAndroidXüsusiyyətAçar rotasiyası
v1 (JAR)1.0+Hər bir faylın imzasıXeyr
v27.0+Bütün APK-nın imzasıXeyr
v39.0+Imza + rotasiyaBəli
v411.0+Axın + ADBBəli

v3: imzalama açarlarının rotasiyası

Android 9.0-da təqdim edilmiş v3 sxemi köhnə bir problemi həll edir: imzalama açarı kompromiz olunarsa və ya müddəti bitərsə nə etməli? Əvvəllər imzalama açarının dəyişdirilməsi o demək idi ki, tətbiq yeni kimi qəbul edilir — onu mövcud tətbiqin üzərinə quraşdırmaq olmaz. v3 rotasiya mexanizmini əlavə edir: APK-ya köhnə açarla imzalanmış açar dəyişikliyi sübutu (proof-of-rotation) daxil edilə bilər. Sistem zənciri yoxlayır və yeni açarla imzalanmış tətbiqi yeniləməyə imkan verir.

Keystore və sertifikatlar

Keystore — tətbiqlərin imzalanması üçün şəxsi açarlar və sertifikatları ehtiva eden qorunan konteyner. Android inkişafında JKS (Java KeyStore) və ya PKCS12 formatı istifadə olunur. Keystore JDK-nın tərkibinə daxil olan keytool vasitəsi ilə yaradılır. Anbarda hər bir açar alias (ləqəb) ilə müyənləşdirilir və şifrə ilə qorunur.

Keystore-dəki sertifikat açıq açarı və sahibi haqqında məlumatları: təşkilatın adını, ölkəni, etibarlılıq müddətini ehtiva edir. Android tətbiqləri üçün sertifikat özözünə imzalanmış ola bilər — Google sertifikat mərkəzinə (CA) müraciət tələb etmir, bu da Android-i iOS-dan fərqləndirir. Lakin sertifikatın etibarlılıq müddəti ən azı 25 il olmalıdır, çünki tətbiq eyni açarla yenilənəcəkdir.

bash
# Imzalama üçün yeni keystore yaradılması
keytool -genkey -v -keystore my-release.keystore \
        -alias my-app-alias \
        -keyalg RSA \
        -keysize 2048 \
        -validity 10000

# Keystore-un məzmununa baxılması
keytool -list -v -keystore my-release.keystore

Açar formatları

Android imzalama açarları üçün iki alqoritmi dəstəkləyir: RSAECDSA. 2048 bit açar ölçüsü ilə RSA — Android-in bütün versiyaları tərəfindən dəstəklənən de-fakto standartdır. P-256 əyrisi ilə ECDSA (Elliptic Curve Digital Signature Algorithm) daha kiçik açar ölçüsündə eyni kriptoqrafik gücü təmin edir. Android 9.0-dan başlayaraq ECDSA-dan istifadə etmək tövsiyə olunur, çünki mobil cihazlarda yoxlamada daha sürətlidir.

Yığmada imzalamanın konfiqurasiyası

Android Gradle Plugin-də imzalama modul səviyyəsində build.gradle daxilində signingConfigs bloku vasitəsilə konfiqurasiya edilir. Debug yığmaları üçün Android Studio avtomatik olaraq məlum şifrələrlə debug keystore yaradır. Release yığmaları üçün tərtibatçı öz keystore yolunu, açar alias və şifrələrini göstərir. Şifrələrin versiya nəzarət sistemindən çıxarılmış ayrıca konfiqurasiya fayllarında saxlanması tövsiyə olunur.

Müasir təcrübə CI/CD vasitəsilə mərkəzləşdirilmiş imzalama idarəetməsidir. Jenkins, GitLab CI və ya GitHub Actions keystore-u qorunan artefakt kimi, şifrələri isə mühit sirlərində saxlaya bilər. Bu, açarların repozitoriya vasitəsilə sızmasının qarşısını alır və zərurət olduqda açarın dəyişdirilməsini asanlaşdırır.

groovy
// build.gradle (modul səviyyəsi) — imzalama konfiqurasiyası
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 neçə sxemin imzalanması

Maksimal uyğumluq üçün APK hər üç sxemlə (v1 + v2 + v3) imzalanmalıdır. Android Gradle Plugin standart olaraq bütün sxemləri daxil edir. Yalnız v2 ilə imzalanmış APK Android 6.0 və daha köhnə versiyalarında quraşdırılmayacaq. Yalnız v1 ilə APK Android 7.0+-da v2-nin bütövlük üstünlüyünə malik olmayacaq. Bütün sxemlərin daxil edilməsi APK ölçüsünü 1–2%-dən çox artırmır və istənilən cihazla uyğumluluğu təmin edir.

Play App Signing və açar idarəetməsi

Play App Signing — tətbiqlərin imzalama açarlarını mərkəzləşdirilmiş şəkildə idarə edən Google Play xidmətidir. Tərtibatçı Google Play Console-a upload key (yükləmə açarı) ilə imzalanmış APK yükləyir, Google Play isə istifadəçilərə çatdırılmazdan əvvəl onu distribution key (yayım açarı) ilə yenidən imzalayır. Bu, yayım açarını itki və ya kompromizasiyadan qoruyur.

Play App Signing-in üstünlükləri: təhlükəsizlik — yayım açarı Google-un qorunan anbarında saxlanılır; rotasiya — konsol vasitəsilə açarın dəyişdirilməsi tələb oluna bilər; bərpa — yükləmə açarı itirildikdə yenisi yaradıla bilər. Çatışmazlıq: Play App Signing tətbiq edilməzdən əvvəl mövcud olan tətbiqlər üçün keçid yeni tətbiq yaratmağı tələb edir, çünki köhnə yayım açarı artıq istifadə olunur.

bash
# Sertifikat əlamətinin alınması (SHA-256)
keytool -list -v -keystore my-release.keystore \
        -alias my-app-alias | grep "SHA256"

# APK imzasının apksigner vasitəsilə yoxlanması
apksigner verify --verbose app-release.apk

Açarın bərpası

Imzalama açarı itirilərsə və Play App Signing istifadə edilmirsə, tətbiqi yeniləmə qabiliyyətini bərpa etmək mümkün deyil — yeni paket adı ilə yeni tətbiq yaratmalı olacaqsınız. Bu, Play App Signing istifadə etməyin əsas səbəblərindən biridir. Google keystore-un ehtiyat nüsxəsini qorunan oflayn anbarda (şifrələnmiş USB daşıyıcı, bank seyfi) saxlamağı tövsiyə edir.

Cihazda imzanın yoxlanması

APK quraşdırılarkən Android bir neçə mərhələdə imza yoxlaması həyata keçirir. Birinci — sertifikatın yoxlanması: müddəti bitibmi, format düzgündürmü. Ikinci — imzanın yoxlanması: kriptoqrafik imza APK-nın məzmunu ilə üst-üstə düşürmü. Üçüncü — sertifikatın quraşdırılmış versiya ilə müqayisəsi: əgər tətbiq artıq cihazda varsa, sertifikat uyğun olmalıdır, əks halda quraşdırma bloklanır.

Yoxlama sistemi PackageManagerService-də qurulmuşdur. Quraşdırma sorğusu emal edilərkən PMS APK-dan imzanı çıxarır, android.util.PackageParser sinfi ilə yoxlayır və quraşdırılmış tətbiqin saxlanmış imzası ilə müqayisə edir (varsa). Uyğunsuzluq halında istifadəçi „INSTALL_FAILED_UPDATE_INCOMPATIBLE” xətası alır. Bu mexanizm əvəzetmə hücumlarının qarşısını alır (zərərli proqram qanuni tətbiqi öz versiyası ilə yeniləyə bilməz).

Tərtibatçı tərəfindən yoxlama

Tərtibatçı Android SDK Build Tools dəstindən apksigner vasitəsi ilə APK imzasını özü yoxlaya bilər. apksigner verify --verbose app.apk əmri APK-nın hansı sxemlərlə imzalandığını, sertifikatların etibarlı olub-olmadığını və imzaların məzmunla uyğunluğunu göstərir. Quraşdırılmış tətbiqin imzasının proqram yoxlanması üçün PackageManager.getPackageInfo() GET_SIGNATURES bayrağı ilə istifadə olunur.

kotlin
// Quraşdırılmış tətbiqin imzasının proqram yoxlanması
fun getAppSignature(context: Context, packageName: String): String? {
    val pm = context.packageManager
    val info = pm.getPackageInfo(
        packageName,
        PackageManager.GET_SIGNATURES
    )
    return info.signatures?.firstOrNull()?.toCharsString()
}

Imzalama təhlükəsizliyinin ən yaxşı təcrübələri

Imzalama açarının təhlükəsizliyi — Android inkişafının kritik aspektidir. Açarın kompromizasiyası təcavüzkərə tətbiqinizin yeniləmələrini öz kodu ilə imzalamağa imkan verir. Əsas qaydalar: açarı heç vaxt repozitoriyada saxlamayın, eyni açarı müxtəlif tətbiqlər üçün istifadə etməyin, açarı qorunmayan kanallar (email, mesajlaşma) vasitəsilə ötürməyin.

Tövsiyə olunan təcrübə açarların ayrılmasıdır. Hər tətbiq üçün ayrı açar və Google Play-ə yükləmə üçün ayrı açar (upload key) istifadə edin. Debug yığmaları üçün Android Studio ümumi debug.keystore yaradır — onu release yığmaları üçün istifadə etmək olmaz. Sertifikatın etibarlılıq müddəti 25–30 il olmalıdır (Google tərəfindən təsdiqlənmiş cari standart).

TəcrübəTövsiyə
Açarın saxlanmasıŞifrələnmiş daşıyıcı, CI/CD sirləri
Sertifikat müddətiƏn azı 25 il
AlqoritmRSA 2048+ və ya ECDSA P-256
AyrılmaHər tətbiq üçün ayrı açar
Ehtiyat nüsxəKeystore-un oflayn surəti

Imzaların auditi

Müztərən imzalama zəncirinin bütövlüyünü yoxlayın. Açarlara çıxışı olan işçilər dəyişərkən, Google Play Console vasitəsilə upload key-i yeniləyin. Tətbiqinizin istifadəçi cihazlarında saxtalaşdırılmadığını yoxlamaq üçün Google Play Integrity API kimi alətlərdən istifadə edin. API imza, bütövlük haqqında məlumatları qaytarır və yoxlama üçün serverə göndərir.

Tez-tez verilən suallar

Android-də Code Signing nədir?

Code Signing — APK faylının rəqəmsal imzasıdır, tətbiqin müəyyən tərtibatçı tərəfindən yaradıldığını və imzalamadan sonra dəyişdirilmədiyini təsdiq edir. Imza olmadan APK cihazda quraşdırılmayacaq.

Android tətbiqi üçün imzalama açarını necə yaratmaq olar?

JDK-dan keytool vasitəsindən istifadə edin: keytool -genkey -v -keystore my-release.keystore -alias my-alias -keyalg RSA -keysize 2048 -validity 10000. Yaranan keystore-u build.gradle daxilində signingConfigs blokunda göstərin.

Imzalama açarı itirilərsə nə olar?

Əgər açar itirilibsə və Play App Signing istifadə edilmirsə, tətbiqin yenilənməsi mümkün olmayacaq. Google Play-də yeni paket adı ilə yeni tətbiq yaratmalı olacaqsınız. Açar itkisindən qorunmaq üçün Play App Signing istifadə edin.

v1 və v2 imzalama sxemləri nə ilə fərqlənir?

v1 APK daxilindəki hər bir faylı ayrıca imzalayır — təcavüzkər bir faylı dəyişə və yalnız onu yenidən imzalaya bilər. v2 bütün APK-nı tamamilə imzalayır — hər hansı dəyişiklik imzanı etibarsız edir, bu da daha yüksək təhlükəsizlik səviyyəsi təmin edir.

Play App Signing nədir?

Play App Signing — tətbiqlərin yayım açarını mərkəzləşdirilmiş şəkildə saxlayan Google Play xidmətidir. Tərtibatçı upload key ilə imzalanmış APK yükləyir, Google isə istifadəçilərə çatdırılmazdan əvvəl onu yenidən imzalayaraq açarı itki və ya oğurluqdan qoruyur.

Nəticə

  • Code Signing — tətbiqin həqiqiliyini və bütövlüyünü təmin edən məcburi rəqəmsal APK imzasıdır.
  • Android dörd imzalama sxemini dəstəkləyir: v1 (JAR), v2 (APK Signature), v3 (açar rotasiyası) və v4 (axın).
  • Keystore — RSA 2048+ alqoritmi ilə keytool vasitəsilə yaradılan açarlarla qorunan konteynerdir.
  • Açar rotasiyası (v3, Android 9.0+) tətbiqi silmədən imzalama açarını dəyişməyə imkan verir.
  • Play App Signing Google Play Console vasitəsilə yayım açarlarını mərkəzləşdirilmiş şəkildə idarə edir.
  • Quraşdırma zamanı imzanın yoxlanması əvəzetmə hücumlarını bloklayır: sertifikat uyğunsuzluğu = INSTALL_FAILED xətası.
  • Açar təhlükəsizliyi: hər tətbiq üçün ayrı açar, 25+ il müddət, oflayn surət, repozitoriyada açar yoxdur.

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun