Code Signing — co to je, podepisování kódu a jak funguje

Autor: IT Sectr Publikováno: 2026-04-16 Doba čtení: 9 min

Code Signing (podepisování kódu) — mechanismus digitálního podepisování spustitelných souborů, který zaručuje pravost vývojáře a integritu aplikace. V Androidu musí být každý APK soubor podepsán certifikátem před instalací na zařízení nebo publikováním v Google Play. Podle Google, 2024, Android podporuje čtyři generace schémat podepisování: od v1 založeného na JAR až po v4 pro streamovanou instalaci.

Hlavní

  • Code Signing — digitální podpis kódu, potvrzující autorství a integritu aplikace.
  • V Androidu se podepisování provádí prostřednictvím keystore — úložiště klíčů a certifikátů.
  • Schéma v2 (APK Signature Scheme) — hlavní standard od Androidu 7.0, chranící všechny bajty APK.
  • Rotace klíčů (v3, Android 9.0+) umožňuje změnit klíč podpisu bez odstranění aplikace.
  • Google Play používá Play App Signing pro centralizovanou správu klíčů.

Co je Code Signing?

Code Signing — kryptografický proces, během kterého vývojář podepisuje spustitelný kód svým digitálním certifikátem. Podpis je vytvářen pomocí asymetrického šifrování: soukromým klíčem vývojáře je generován digitální podpis a veřejný klíč je vložen do certifikátu. Každý může ověřit podpis pomocí veřejného klíče, ale změna kódu bez porušení podpisu je nemožná.

V mobilním vývoji plní podepisování kódu tři funkce. První — autentizace: uživatel a platforma mohou identifikovat vývojáře aplikace. Druhá — integrita: jakákoli změna APK po podepsání činí podpis neplatným. Třetí — důvěryhodná aktualizace: platforma povoluje aktualizaci aplikace pouze těmi APK, které jsou podepsány stejným certifikátem jako nainstalovaná verze.

Právní status

Digitální podpis Android aplikací má právní význam. V souladu s právními předpisy Ruské federace (63-FZ) a evropským eIDAS je kvalifikovaný elektronický podpis rovnocenný vlastnoručnímu. Podepisování APK pomocí samopodepsaného certifikátu (běžná praxe v Androidu) však není kvalifikované — potvrzuje integritu, ale ne identitu vývojáře z právního hlediska.

Schémata podepisování Androidu: v1, v2, v3, v4

Android podporuje čtyři schémata podepisování APK, z nichž každé řeší problémy předchozí verze a přidává nové možnosti. Všechna schémata mohou existovat současně v jednom APK — to je nezbytné pro zpětnou kompatibilitu se staršími verzemi Androidu.

Schéma v1 (JAR signing) se objevilo v Androidu 1.0. Podepisuje jednotlivé soubory uvnitř archivu APK pomocí záznamů v META-INF/MANIFEST.MF. Nevýhoda: lze změnit APK (přidat nebo odebrat soubory) a znovu podepsat pouze změněné, aniž by byl dotčen podpis ostatních. To činí v1 zranitelnou vůči některým útokům. Schéma v2 (APK Signature Scheme), zavedené v Androidu 7.0, podepisuje celý APK soubor úplně, včetně všech bajtů kromě samotného podpisu, což eliminuje možnost selektivní modifikace.

SchémaAndroidVlastnostRotace klíče
v1 (JAR)1.0+Podpis každého souboruNe
v27.0+Podpis celého APKNe
v39.0+Podpis + rotaceAno
v411.0+Streamování + ADBAno

v3: rotace klíčů podpisu

Schéma v3, představené v Androidu 9.0, řeší dlouholetý problém: co dělat, pokud je klíč podpisu kompromitován nebo vypršel? Dříve změna klíče podpisu znamenala, že aplikace je vnímána jako nová — nelze ji nainstalovat na stávající. v3 přidává mechanismus rotace: do APK lze zahrnout důkaz změny klíče (proof-of-rotation), podepsaný starým klíčem. Systém ověří řetězec a umožní aktualizaci aplikace podepsané novým klíčem.

Keystore a certifikáty

Keystore — chráněný kontejner obsahující soukromé klíče a certifikáty pro podepisování aplikací. Vývoji Androidu se používá formát JKS (Java KeyStore) nebo PKCS12. Keystore se vytváří nástrojem keytool, který je součástí JDK. Každý klíč v úložišti je identifikován aliasem a chráněn heslem.

Certifikát v keystore obsahuje veřejný klíč a informace o vlastníkovi: název organizace, zemi, dobu platnosti. Pro aplikace pro Android může být certifikát samopodepsaný — Google nevyžaduje obrácení na certifikační autoritu (CA), což odlišuje Android od iOS. Doba platnosti certifikátu však musí být alespoň 25 let, protože aplikace bude aktualizována stejným klíčem.

bash
# Vytvoření nového keystore pro podepisování
keytool -genkey -v -keystore my-release.keystore \
        -alias my-app-alias \
        -keyalg RSA \
        -keysize 2048 \
        -validity 10000

# Zobrazení obsahu keystore
keytool -list -v -keystore my-release.keystore

Formáty klíčů

Android podporuje dva algoritmy pro klíče podpisu: RSA a ECDSA. RSA s velikostí klíče 2048 bitů — de facto standard podporovaný všemi verzemi Androidu. ECDSA (Elliptic Curve Digital Signature Algorithm) s křivkou P-256 poskytuje stejnou kryptografickou sílu při menší velikosti klíče. Počínaje Androidem 9.0 se doporučuje používat ECDSA, protože je rychlejší v ověřování na mobilních zařízeních.

Konfigurace podepisování v sestavení

V Android Gradle Plugin se podepisování konfiguruje prostřednictvím bloku signingConfigs v build.gradle na úrovni modulu. Pro debug sestavení Android Studio automaticky vytváří debug keystore se známými hesly. Pro release sestavení vývojář zadává cestu ke svému keystore, alias klíče a hesla. Doporučuje se ukládat hesla v samostatných konfiguračních souborech, vyloučených ze systému pro správu verzí.

Moderní praxí je centralizovaná správa podepisování prostřednictvím CI/CD. Jenkins, GitLab CI nebo GitHub Actions mohou ukládat keystore jako chráněný artefakt a hesla jako tajemství prostředí. To zabraňuje úniku klíčů prostřednictvím repozitáře a zjednodušuje výměnu klíče v případě potřeby.

groovy
// build.gradle (úroveň modulu) — konfigurace podepisování
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
        }
    }
}

Podepisování více schématy

Pro maximální kompatibilitu by měl být APK podepsán všemi třemi schématy (v1 + v2 + v3). Android Gradle Plugin standardně zahrnuje všechna schémata. APK podepsaný pouze v2 se nenainstaluje na Android 6.0 a nižší. APK pouze s v1 nebude mít výhody integrity v2 na Androidu 7.0+. Zahrnutí všech schémat nezvyšuje velikost APK o více než 1–2% a zajišťuje kompatibilitu s jakýmkoli zařízením.

Play App Signing a správa klíčů

Play App Signing — služba Google Play, která centralizovaně spravuje klíče podepisování aplikací. Vývojář nahraje do Google Play Console APK podepsaný upload key (klíčem pro nahrávání) a Google Play jej znovu podepíše distribution key (klíčem pro distribuci) před doručením uživatelům. To chraní distribution key před ztrátou nebo kompromitací.

Výhody Play App Signing: bezpečnost — distribution key je uložen v chráněném úložišti Google; rotace — lze požádat o změnu klíče prostřednictvím konzole; obnova — při ztrátě upload key lze vygenerovat nový. Nevýhoda: pro aplikace, které existovaly před zavedením Play App Signing, vyžaduje přechod vytvoření nové aplikace, protože starý distribution key je již používán.

bash
# Získání otisku certifikátu (SHA-256)
keytool -list -v -keystore my-release.keystore \
        -alias my-app-alias | grep "SHA256"

# Kontrola podpisu APK pomocí apksigner
apksigner verify --verbose app-release.apk

Obnova klíče

Pokud je klíč podpisu ztracen a Play App Signing není používáno, obnova možnosti aktualizace aplikace je nemožná — budete muset vytvořit novou aplikaci v Google Play s novým názvem balíčku. To je jeden z hlavních důvodů pro použití Play App Signing. Google doporučuje uchovávat zálohu keystore v chráněném offline úložišti (šifrované USB médium, bankovní sejf).

Ověření podpisu na zařízení

Při instalaci APK provádí Android ověření podpisu v několika fázích. První — kontrola certifikátu: nevypršel, formát je správný. Druhá — kontrola podpisu: shoduje se kryptografický podpis s obsahem APK. Třetí — porovnání certifikátu s nainstalovanou verzí: pokud aplikace již na zařízení existuje, certifikát se musí shodovat, jinak je instalace blokována.

Systém ověřování je integrován do PackageManagerService. Při zpracování požadavku na instalaci PMS extrahuje podpis z APK, ověří jej pomocí třídy android.util.PackageParser a porovná jej s uloženým podpisem nainstalované aplikace (pokud existuje). Při neshodě uživatel obdrží chybu „INSTALL_FAILED_UPDATE_INCOMPATIBLE”. Tento mechanismus zabraňuje útokům náhradou (škodlivý software nemůže aktualizovat legitimní aplikaci svou verzí).

Kontrola vývojářem

Vývojář může samostatně ověřit podpis APK pomocí nástroje apksigner z Android SDK Build Tools. Příkaz apksigner verify --verbose app.apk ukazuje, jakými schématy je APK podepsán, zda jsou certifikáty platné a zda se podpisy shodují s obsahem. Pro programové ověření podpisu nainstalované aplikace se používá PackageManager.getPackageInfo() s příznakem GET_SIGNATURES.

kotlin
// Programové ověření podpisu nainstalované aplikace
fun getAppSignature(context: Context, packageName: String): String? {
    val pm = context.packageManager
    val info = pm.getPackageInfo(
        packageName,
        PackageManager.GET_SIGNATURES
    )
    return info.signatures?.firstOrNull()?.toCharsString()
}

Nejlepší postupy bezpečnosti podepisování

Bezpečnost klíče podpisu — kritický aspekt vývoje pro Android. Kompromitace klíče umožňuje útočníkovi podepisovat aktualizace vaší aplikace vlastním kódem. Základní pravidla: nikdy neukládejte klíč v repozitáři, nepoužívejte stejný klíč pro různé aplikace, nepřenášejte klíč nezabezpečenými kanály (email, messenger).

Doporučenou praxí je oddělení klíčů. Používejte samostatný klíč pro každou aplikaci a samostatný klíč pro nahrávání do Google Play (upload key). Pro debug sestavení Android Studio vytváří sdílený debug.keystore — ten nelze použít pro release sestavení. Doba platnosti certifikátu by měla být 25–30 let (aktuální standard potvrzený Googlem).

PraxeDoporučení
Ukládání klíčeŠifrované médium, CI/CD tajemství
Doba certifikátuAlespoň 25 let
AlgoritmusRSA 2048+ nebo ECDSA P-256
OdděleníSamostatný klíč na aplikaci
ZálohováníOffline kopie keystore

Audit podpisů

Pravidelně kontrolujte integritu řetězce podepisování. Při změně zaměstnanců, kteří mají přístup ke klíčům, aktualizujte upload key prostřednictvím Google Play Console. Používejte nástroje jako Google Play Integrity API pro kontrolu, zda vaše aplikace nebyla na zařízeních uživatelů padělána. API vrací údaje o podpisu a integritě a odesílá je na server k ověření.

Často kladené otázky

Co je Code Signing v Androidu?

Code Signing — je digitální podpis APK souboru, který potvrzuje, že aplikace byla vytvořena konkrétním vývojářem a nebyla po podepsání změněna. Bez podpisu se APK neinstaluje na zařízení.

Jak vytvořit klíč pro podepisování Android aplikace?

Použijte nástroj keytool z JDK: keytool -genkey -v -keystore my-release.keystore -alias my-alias -keyalg RSA -keysize 2048 -validity 10000. Získaný keystore uveďte v build.gradle v bloku signingConfigs.

Co se stane, když ztratím klíč podpisu?

Pokud je klíč ztracen a nepoužíváte Play App Signing, aktualizace aplikace bude nemožná. Budete muset vytvořit novou aplikaci v Google Play s novým názvem balíčku. Používejte Play App Signing pro ochranu před ztrátou klíče.

Čím se liší schémata podpisu v1 a v2?

v1 podepisuje každý soubor uvnitř APK samostatně — útočník může změnit jeden soubor a znovu podepsat pouze jej. v2 podepisuje celý APK úplně — jakákoli změna činí podpis neplatným, což poskytuje vyšší úroveň bezpečnosti.

Co je Play App Signing?

Play App Signing — služba Google Play, která centralizovaně ukládá distribution key aplikací. Vývojář nahraje APK podepsaný upload key a Google jej znovu podepíše před doručením uživatelům, čímž chraní klíč před ztrátou nebo krádeží.

Shrnutí

  • Code Signing — povinný digitální podpis APK, který zaručuje pravost a integritu aplikace.
  • Android podporuje čtyři schémata podpisu: v1 (JAR), v2 (APK Signature), v3 (rotace klíčů) a v4 (streamování).
  • Keystore — chráněný kontejner s klíči, vytvořený pomocí keytool s algoritmem RSA 2048+.
  • Rotace klíčů (v3, Android 9.0+) umožňuje změnit klíč podpisu bez odstranění aplikace.
  • Play App Signing centralizovaně spravuje distribution key prostřednictvím Google Play Console.
  • Ověření podpisu při instalaci blokuje útoky náhradou: neshoda certifikátu = chyba INSTALL_FAILED.
  • Bezpečnost klíče: samostatný klíč na aplikaci, doba 25+ let, offline kopie, žádné klíče v repozitáři.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také