Code Signing — mi ez, kód aláírása és hogyan működik

Szerző: IT Sectr Megjelenés: 2026-04-16 Olvasási idő: 9 perc

Code Signing (kód aláírása) — a futtatható állományok digitális aláírásának mechanizmusa, amely garantálja a fejlesztő hitelességét és az alkalmazás integritását. Az Androidban minden APK-fájlt alá kell írni tanúsítvánnyal az eszközre történő telepítés vagy a Google Play-ben történő közzététel előtt. A Google, 2024 adatai szerint az Android négy generációs aláírási sémát támogat: a JAR-alapú v1-től a streaming telepítéshez tervezett v4-ig.

Főbb pontok

  • Code Signing — a kód digitális aláírása, amely megerősíti az alkalmazás szerzőségét és integritását.
  • Androidban az aláírás a keystore — kulcsok és tanúsítványok tárhelye — segítségével történik.
  • A v2 (APK Signature Scheme) séma — az Android 7.0 óta érvényes fő szabvány, amely az APK összes bájtját védi.
  • A kulcsrotáció (v3, Android 9.0+) lehetővé teszi az aláírási kulcs megváltoztatását az alkalmazás eltávolítása nélkül.
  • A Google Play a Play App Signing szolgáltatást használja a központosított kulcskezeléshez.

Mi az a Code Signing?

Code Signing — kriptográfiai folyamat, melynek során a fejlesztő a futtatható kódot a saját digitális tanúsítványával írja alá. Az aláírás aszimmetrikus titkosítással történik: a fejlesztő magánkulcsával digitális aláírás jön létre, a nyilvános kulcs pedig a tanúsítványba van ágyazva. Bárki ellenőrizheti az aláírást a nyilvános kulcs segítségével, de a kód módosítása az aláírás megsértése nélkül lehetetlen.

A mobilfejlesztésben a kód aláírása három funkciót tölt be. Első — hitelesítés: a felhasználó és a platform azonosíthatja az alkalmazás fejlesztőjét. Második — integritás: az APK bármilyen módosítása az aláírás után érvényteleníti az aláírást. Harmadik — megbízható frissítés: a platform csak azokkal az APK-kkal engedi frissíteni az alkalmazást, amelyeket ugyanaz a tanúsítvány írt alá, mint a telepített verziót.

Jogi státusz

Az Android-alkalmazások digitális aláírása jogi jelentőséggel bír. Az Orosz Föderáció jogszabályainak (63-FZ) és az európai eIDAS-nak megfelelően a minősített elektronikus aláírás egyenértékű a kézzel írt aláírással. Az APK önaláírásos tanúsítvánnyal történő aláírása (az Androidban általános gyakorlat) azonban nem minősített — megerősíti az integritást, de nem igazolja a fejlesztő személyazonosságát jogi szempontból.

Android aláírási sémák: v1, v2, v3, v4

Android négy APK-aláírási sémát támogat, amelyek mindegyike megoldja az előző verzió problémáit és új lehetőségeket ad. Az összes séma együtt létezhet egy APK-ban — ez a régebbi Android-verziókkal való visszafelé kompatibilitás fenntartásához szükséges.

A v1 (JAR aláírás) séma az Android 1.0-ban jelent meg. Az APK archívumon belül egyes fájlokat a META-INF/MANIFEST.MF bejegyzésein keresztül ír alá. Hátránya: az APK módosítható (fájlok hozzáadhatók vagy eltávolíthatók), és csak a módosított fájlok írhatók alá újra, a többiek aláírásának érintése nélkül. Ez teszi a v1-et sebezhetővé bizonyos támadásokkal szemben. Az Android 7.0-ban bevezetett v2 (APK Signature Scheme) séma a teljes APK-fájlt írja alá teljes egészében, beleértve az összes bájtot, kivéve magát az aláírást, ami kiküszöböli a szelektív módosítás lehetőségét.

SémaAndroidJellemzőKulcsrotáció
v1 (JAR)1.0+Minden fájl aláírásaNem
v27.0+Teljes APK aláírásaNem
v39.0+Aláírás + rotációIgen
v411.0+Streaming + ADBIgen

v3: az aláírási kulcsok rotációja

Az Android 9.0-ban bemutatott v3 séma egy régi problémát old meg: mi történjen, ha az aláírási kulcs kompromittálódott vagy lejárt? Korábban az aláírási kulcs megváltoztatása azt jelentette, hogy az alkalmazás újnak számít — nem telepíthető a meglévőre. A v3 hozzáad egy rotációs mechanizmust: az APK-ba belefoglalható a kulcsváltás bizonyítéka (proof-of-rotation), amelyet a régi kulcs írt alá. A rendszer ellenőrzi a láncot, és lehetővé teszi az új kulccsal aláírt alkalmazás frissítését.

Keystore és tanúsítványok

Keystore — védett tároló, amely magánkulcsokat és tanúsítványokat tartalmaz az alkalmazások aláírásához. Az Android-fejlesztésben JKS (Java KeyStore) vagy PKCS12 formátumot használnak. A keystore a JDK részét képező keytool segédprogrammal jön létre. A tárban minden kulcsot egy alias azonosít és jelszó véd.

A keystore-ban lévő tanúsítvány tartalmazza a nyilvános kulcsot és a tulajdonosra vonatkozó információkat: szervezet nevét, országot, érvényességi időtartamot. Android-alkalmazások esetén a tanúsítvány önaláírásos lehet — a Google nem követeli meg tanúsítványkiadóhoz (CA) fordulást, ami megkülönbözteti az Androidot az iOS-től. A tanúsítvány érvényességi idejének azonban legalább 25 évnek kell lennie, mert az alkalmazást ugyanazzal a kulccsal frissítik.

bash
# Új keystore létrehozása aláíráshoz
keytool -genkey -v -keystore my-release.keystore \
        -alias my-app-alias \
        -keyalg RSA \
        -keysize 2048 \
        -validity 10000

# Keystore tartalmának megtekintése
keytool -list -v -keystore my-release.keystore

Kulcsformátumok

Az Android két algoritmust támogat az aláírási kulcsokhoz: RSA és ECDSA. RSA 2048 bites kulcsmérettel — tényleges szabvány, amelyet az Android összes verziója támogat. A P-256 görbéjű ECDSA (Elliptic Curve Digital Signature Algorithm) azonos kriptográfiai erősséget nyújt kisebb kulcsméret mellett. Android 9.0-tól kezdve az ECDSA használata ajánlott, mivel gyorsabb az ellenőrzésben mobil eszközökön.

Aláírás konfigurálása a fordításban

Az Android Gradle Plugin-ben az aláírás a signingConfigs blokkon keresztül konfigurálható a modul szintű build.gradle-ben. Debug fordításokhoz az Android Studio automatikusan létrehoz egy debug keystore-t ismert jelszavakkal. Release fordításokhoz a fejlesztő megadja a saját keystore elérési útját, a kulcs aliasát és a jelszavakat. Javasolt a jelszavakat külön konfigurációs fájlokban tárolni, amelyek ki vannak zárva a verziókezelő rendszerből.

A modern gyakorlat a központosított aláíráskezelés CI/CD-n keresztül. A Jenkins, GitLab CI vagy GitHub Actions tárolhatja a keystore-t védett artefaktként, a jelszavakat pedig környezeti titkokként. Ez megakadályozza a kulcsok szivárgását a repozitóriumon keresztül és leegyszerűsíti a kulcs cseréjét, ha szükséges.

groovy
// build.gradle (modul szint) — aláírás konfigurációja
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
        }
    }
}

Több séma aláírása

A maximális kompatibilitás érdekében az APK-t mindhárom sémával (v1 + v2 + v3) kell aláírni. Az Android Gradle Plugin alapértelmezés szerint az összes sémát tartalmazza. A csak v2-vel aláírt APK nem telepíthető Android 6.0 és régebbi verziókra. A csak v1-gyel rendelkező APK nem élvezi a v2 integritási előnyeit Android 7.0+-on. Az összes séma belefoglalása nem növeli az APK méretét több mint 1–2%-kal, és kompatibilitást biztosít bármely eszközzel.

Play App Signing és kulcskezelés

Play App Signing — Google Play szolgáltatás, amely központosítottan kezeli az alkalmazások aláírási kulcsait. A fejlesztő feltölti a Google Play Console-ba az upload key-jel aláírt APK-t, és a Google Play újraírja a distribution key-jel, mielőtt elküldené a felhasználóknak. Ez megvédi a distribution key-t az elvesztéstől vagy kompromittálódástól.

A Play App Signing előnyei: biztonság — a distribution key a Google védett tárában van; rotáció — a konzolon keresztül kérhető a kulcs cseréje; helyreállítás — az upload key elvesztése esetén új generálható. Hátránya: a Play App Signing bevezetése előtt létező alkalmazások esetén az áttérés új alkalmazás létrehozását igényli, mert a régi distribution key már használatban van.

bash
# Tanúsítvány ujjlenyomatának lekérése (SHA-256)
keytool -list -v -keystore my-release.keystore \
        -alias my-app-alias | grep "SHA256"

# APK aláírásának ellenőrzése apksigner segítségével
apksigner verify --verbose app-release.apk

Kulcs helyreállítása

Ha az aláírási kulcs elveszett és a Play App Signing nem használatos, az alkalmazás frissítési lehetőségének helyreállítása lehetetlen — új alkalmazást kell létrehozni a Google Play-ben új csomagnévvel. Ez az egyik fő oka a Play App Signing használatának. A Google a keystore biztonsági másolatának védett offline tárban (titkosított USB-meghajtó, banki széf) történő tárolását javasolja.

Aláírás ellenőrzése az eszközön

Az APK telepítésekor az Android több lépésben végzi el az aláírás ellenőrzését. Első — a tanúsítvány ellenőrzése: nem járt-e le, helyes-e a formátum. Második — az aláírás ellenőrzése: a kriptográfiai aláírás megegyezik-e az APK tartalmával. Harmadik — a tanúsítvány összehasonlítása a telepített verzióval: ha az alkalmazás már létezik az eszközön, a tanúsítványnak meg kell egyeznie, egyébként a telepítés blokkolva lesz.

Az ellenőrző rendszer a PackageManagerService-be van építve. A telepítési kérelem feldolgozásakor a PMS kivonja az aláírást az APK-ból, ellenőrzi az android.util.PackageParser osztállyal, és összehasonlítja a telepített alkalmazás eltárolt aláírásával (ha létezik). Eltérés esetén a felhasználó a „INSTALL_FAILED_UPDATE_INCOMPATIBLE” hibát kapja. Ez a mechanizmus megakadályozza a helyettesítéses támadásokat (a rosszindulatú szoftver nem frissítheti a legitim alkalmazást a saját verziójával).

Fejlesztő általi ellenőrzés

A fejlesztő önállóan ellenőrizheti az APK aláírását az Android SDK Build Tools-ból származó apksigner segédprogrammal. Az apksigner verify --verbose app.apk parancs megmutatja, hogy az APK-t milyen sémákkal írták alá, érvényesek-e a tanúsítványok és egyeznek-e az aláírások a tartalommal. A telepített alkalmazás aláírásának programozott ellenőrzéséhez a PackageManager.getPackageInfo() metódust használják a GET_SIGNATURES jelzővel.

kotlin
// Telepített alkalmazás aláírásának programozott ellenőrzése
fun getAppSignature(context: Context, packageName: String): String? {
    val pm = context.packageManager
    val info = pm.getPackageInfo(
        packageName,
        PackageManager.GET_SIGNATURES
    )
    return info.signatures?.firstOrNull()?.toCharsString()
}

Az aláírás biztonságának legjobb gyakorlatai

Az aláírási kulcs biztonsága — az Android-fejlesztés kritikus szempontja. A kulcs kompromittálódása lehetővé teszi a támadó számára, hogy a saját kódjával írja alá az alkalmazásának frissítéseit. Alapvető szabályok: soha ne tárolja a kulcsot a repozitóriumban, ne használja ugyanazt a kulcsot különböző alkalmazásokhoz, ne küldje a kulcsot nem biztonságos csatornákon (e-mail, üzenetküldők).

Ajánlott gyakorlat a kulcsok szétválasztása. Használjon külön kulcsot minden alkalmazáshoz és külön kulcsot a Google Play-be történő feltöltéshez (upload key). A debug fordításokhoz az Android Studio egy megosztott debug.keystore-t hoz létre — ezt nem szabad release fordításokhoz használni. A tanúsítvány érvényességi idejének 25–30 évnek kell lennie (jelenlegi szabvány, amelyet a Google is megerősített).

GyakorlatAjánlás
Kulcs tárolásaTitkosított adathordozó, CI/CD titkok
Tanúsítvány időtartamaLegalább 25 év
AlgoritmusRSA 2048+ vagy ECDSA P-256
SzétválasztásKülön kulcs alkalmazásonként
Biztonsági mentésKeystore offline másolata

Aláírások auditálása

Rendszeresen ellenőrizze az aláírási lánc integritását. A kulcsokhoz hozzáférő munkavállalók változásakor frissítse az upload key-t a Google Play Console-on keresztül. Használjon olyan eszközöket, mint a Google Play Integrity API annak ellenőrzésére, hogy az alkalmazását nem hamisították meg a felhasználók eszközein. Az API visszaadja az aláírással és integritással kapcsolatos adatokat, és elküldi azokat a szerverre ellenőrzésre.

Gyakran ismételt kérdések

Mi az a Code Signing Androidban?

Code Signing — az APK-fájl digitális aláírása, amely megerősíti, hogy az alkalmazást egy adott fejlesztő készítette és az aláírás után nem módosult. Aláírás nélkül az APK nem telepíthető az eszközre.

Hogyan hozhatok létre kulcsot Android-alkalmazás aláírásához?

Használja a JDK-ból származó keytool segédprogramot: keytool -genkey -v -keystore my-release.keystore -alias my-alias -keyalg RSA -keysize 2048 -validity 10000. A kapott keystore-t adja meg a build.gradle fájlban a signingConfigs blokkban.

Mi történik, ha elveszítem az aláírási kulcsot?

Ha a kulcs elveszett és nem használja a Play App Signing szolgáltatást, az alkalmazás frissítése lehetetlenné válik. Új alkalmazást kell létrehoznia a Google Play-ben új csomagnévvel. Használja a Play App Signing szolgáltatást a kulcs elvesztése elleni védelemhez.

Miben különbözik a v1 és v2 aláírási séma?

v1 az APK-n belül minden fájlt külön-külön ír alá — a támadó módosíthat egy fájlt és csak azt írhatja alá újra. v2 a teljes APK-t írja alá egészében — bármilyen módosítás érvényteleníti az aláírást, ami magasabb biztonsági szintet nyújt.

Mi az a Play App Signing?

Play App Signing — Google Play szolgáltatás, amely központosítottan tárolja az alkalmazások distribution key-jét. A fejlesztő feltölti az upload key-jel aláírt APK-t, és a Google újraírja azt, mielőtt elküldené a felhasználóknak, így védve a kulcsot az elvesztéstől vagy ellopástól.

Összefoglaló

  • Code Signing — az APK kötelező digitális aláírása, amely garantálja az alkalmazás hitelességét és integritását.
  • Az Android négy aláírási sémát támogat: v1 (JAR), v2 (APK Signature), v3 (kulcsrotáció) és v4 (streaming).
  • Keystore — védett tároló kulcsokkal, keytool segédprogrammal létrehozva RSA 2048+ algoritmussal.
  • Kulcsrotáció (v3, Android 9.0+) lehetővé teszi az aláírási kulcs megváltoztatását az alkalmazás eltávolítása nélkül.
  • Play App Signing központosítottan kezeli a distribution key-eket a Google Play Console-on keresztül.
  • Az aláírás ellenőrzése telepítéskor blokkolja a helyettesítéses támadásokat: a tanúsítvány eltérése = INSTALL_FAILED hiba.
  • Kulcsbiztonság: külön kulcs alkalmazásonként, 25+ év időtartam, offline másolat, nincs kulcs a repozitóriumban.

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is