Podpisovanie aplikácií pre Android: Ako to funguje a prečo na tom záleží
Zakaždým, keď si do telefónu s Androidom nainštalujete aplikáciu, na pozadí prebehne tichá, ale dôležitá bezpečnostná kontrola. Váš telefón overí digitálny podpis balíka APK. Tento kryptografický handshake zabraňuje škodlivým hackerom „otráviť“ vaše aplikácie škodlivým softvérom a zároveň zaisťuje, že vývojári môžu tlačiť aktualizácie bez straty identity.
Ak píšete aplikácie, podpisovanie je niečo, čo jednoducho musíte urobiť správne; ak sa len radi pohrávate s Androidom, je to jedna z najuspokojivejších častí systému na pochopenie. Tak či onak, ako funguje podpisovanie aplikácií stojí za váš čas. Nižšie uvádzame technológiu, ako sa vyvíjali schémy podpisovania a ako môžete manuálne overiť certifikáty online.
- Prečo musí byť každá aplikácia pre Android podpísaná a o akú kryptografiu ide (RSA / EC).
- Rozdiel medzi schémami podpisov v1 (JAR), v2, v3 a v4 a ktorú by mala vaša aplikácia používať dnes.
- Ako sa Android rozhoduje, či povolí aktualizáciu na základe kontinuity podpisov.
- Ako rotácia kľúčov umožňuje vývojárom zmeniť ich podpisový kľúč bez narušenia existujúcich inštalácií.
- Ako si sami overiť podpis akéhokoľvek súboru APK, na príkazovom riadku alebo pomocou nášho overovač založený na prehliadači.
Čo je to podpisovanie aplikácií?
Podpisovanie aplikácií je vo svojej podstate proces, pri ktorom vývojár používa Súkromný kľúč na generovanie bloku podpisov pre súbory svojej aplikácie. Príslušný Verejný kľúč je potom vložený do súboru APK v priečinku META-INF. Keď sa váš telefón pokúsi nainštalovať aplikáciu, použije verejný kľúč na kontrolu, či sa podpis zhoduje s obsahom súboru.
To poskytuje dve hlavné vlastnosti:
- Nemennosť: Ak sa zmení jeden bajt kódu aplikácie (napr. trójskym koňom), podpis sa už nebude zhodovať so súborom a Android ho odmietne nainštalovať.
- Dôkaz totožnosti: Ak sa aplikácia pokúsi aktualizovať existujúcu, jej podpisy sa musia zhodovať. To je dôvod, prečo nemôžete nainštalovať sfalšovanú aplikáciu Facebook cez oficiálnu aplikáciu.
Vývoj podpisových schém
Spoločnosť Google neustále inovuje mechanizmus podpisovania, aby zlepšila rýchlosť aj bezpečnosť:
- V1 (podpisovanie pohárov): Podpíše jednotlivé súbory v rámci súboru APK (ZIP). Je to pomalé, pretože operačný systém musí rozbaliť a skontrolovať každý súbor. Je tiež zraniteľný voči určitým manipuláciám so ZIP.
- V2 (Schéma podpisu APK): Podpíše celý binárny blok súboru APK. Na overenie nevyžaduje rozbalenie, vďaka čomu je neuveriteľne rýchly. Bol predstavený v systéme Android 7.0 (Nougat).
- V3 (otočenie kľúča): Rozširuje V2 pridaním "rodiny" kľúčov. Umožňuje vývojárovi dokázať, že nový kľúč je autorizovaným nástupcom staršieho kľúča. Zavedené v systéme Android 9.0 (Pie).
- V4 (podpisovanie streamovaním): Navrhnuté špeciálne pre prírastkové inštalácie, ktoré umožňujú overenie aplikácií, kým sa stále sťahujú cez USB alebo Wi-Fi.
Prečo sú certifikáty dôležité pre bočné načítanie
Keď si stiahnete súbor APK z neoficiálneho zdroja, Hašovanie certifikátov je váš najlepší priateľ. Odtlačok certifikátu (napríklad hash SHA-256) jedinečne identifikuje podpisový kľúč vývojára. Každá aplikácia má vo všetkých svojich aktualizáciách rovnaký podpisový kľúč, takže môžete porovnať odtlačok súboru APK s hodnotou zverejnenou vývojárom a potvrdiť, že je pravý.
Ak máte podozrenie, že súbor APK je falošný, mali by ste ho spustiť prostredníctvom nášho Online overovač súborov APK. Náš nástroj vám ukáže:
- Bežný názov (CN) podpisovateľa (napr. „Android“).
- Doba platnosti certifikátu.
- Model odtlačky prstov SHA-1/SHA-256.
Ako Android overuje podpis v čase inštalácie
Krok „overiť certifikát“ je tak často prehliadaný, že stojí za to prejsť si, čo OS skutočne robí, keď klepnete na súbor APK a Android sa rozhodne, či ho nainštaluje:
- Otvorte súbor APK ako súbor ZIP a nájdite blok podpisu. Pre podpisy v2/v3, ktoré sú štruktúrovaným blokom bezprostredne pred centrálnym adresárom; pre starú schému v1 je to obsah META-INF/*.RSA, *.DSA alebo *.EC.
- Vypočítajte súhrny SHA-256 každého druhého bajtu súboru APK. Blok podpisu je vylúčený z vlastného súhrnu; všetko ostatné je hašované v definovaných častiach.
- Overte súhrn každého kúsku oproti súhrnom zaznamenaným v podpisovom bloku. Ak sa od podpísania súboru vývojárom zmenil čo i len jeden bajt, súhrny sa nebudú zhodovať a inštalácia bude odmietnutá so všeobecnou chybou „Aplikácia nie je nainštalovaná“.
- Overte, či bol samotný podpisový blok vytvorený pomocou súkromného kľúča certifikátu. Verejný kľúč certifikátu sa používa na kontrolu kryptografického podpisu v bloku. Úspešná kontrola znamená, že ktokoľvek podpísal súbor, vlastnil súkromný kľúč spárovaný s týmto certifikátom.
- Porovnajte odtlačok certifikátu s akoukoľvek existujúcou inštaláciou s rovnakým názvom balíka. Ak je balík už nainštalovaný a nový súbor APK je podpísaný iným certifikátom, inštalácia sa odmietne pomocou INSTALL_FAILED_UPDATE_INCOMPATIBLE. Toto je hlavná obrana OS proti napodobňovaniu: zákerný činiteľ nemôže nahradiť vašu bankovú aplikáciu vlastnou kópiou, pokiaľ neukradol aj podpisový kľúč banky.
Nič z toho nedokazuje, že vývojár je dôveryhodný, iba to, že súbor, ktorý sa chystáte nainštalovať, je bajtovo identický s tým, čo podpísal a že s ním žiadna iná strana nemanipulovala. Dôvera vo vývojára je samostatným rozhodnutím a rozhodujete sa o tom, z ktorých zdrojov budete inštalovať.
Čo skutočne znamená „nesúlad podpisov“.
Jediným najčastejším prekvapením, ktoré ľudia zasiahli pri načítaní z boku, je chyba „nesúlad podpisu“ pri aktualizácii. Tu je to, čo sa v skutočnosti deje:
- Aplikácia X verzia 1.0 máte nainštalovaný z Obchodu Play.
- Aplikácia X verzia 1.1 stiahnete zo zdroja mimo služby Play.
- OS vidí rovnaký názov balíka (com.example.app), ale súbor APK je podpísaný iným certifikátom (podpisový kľúč bočného zdroja, nie pôvodný vydavateľ). Odmieta inštaláciu.
V praxi sa to deje dvoma spôsobmi:
- Súbor APK tretej strany je skutočne od iného vydavateľa, napríklad „upravená“ alebo „opravená“ kópia. Odmietnutie inštalácie je správne správanie; jeho nainštalovanie by znamenalo dôverovať cudzincovi s rovnakými údajmi, ktorých sa už dotkla aplikácia vašej banky.
- Súbor APK tretej strany je opätovné nahranie oficiálneho súboru APK, ale systém podpisovania aplikácií Google Play podpíše sťahovanie každého používateľa pomocou obalu kľúč nahrávania používateľa. Dve zariadenia môžu niekedy vidieť mierne odlišné údaje podpisu pre rovnakú koncepčnú verziu aplikácie. V takom prípade sa odtlačok certifikátu v koreňovom adresári stále zhoduje; môžete overiť pomocou nášho Verifikátor súboru APK.
Ak sa odtlačok certifikátu skutočne líši od vašej existujúcej inštalácie, jediný spôsob, ako postupovať, je najprv odinštalovať aktuálnu kópiu (stratíte jej údaje) pred vložením náhradnej verzie, nikdy nezakázať overovanie podpisu.
Generovanie vlastného podpisového kľúča (pre vývojárov)
Ak vytvárate aplikácie pre Android, nakoniec budete musieť podpísať svoje vlastné zostavy. Štandardný jednoriadkový príkaz používajúci keytool z Java SDK je:
keytool -genkeypair -v \
-keystore my-release.keystore \
-alias my-app -keyalg RSA -keysize 2048 \
-validity 10000
Treba vedieť dve veci:
- Na platnosť záleží: 10 000 dní (približne 27 rokov) je konvenčná hodnota, pretože operačný systém považuje aktualizácie podpísané kľúčom, ktorého platnosť už vypršala alebo ktorej platnosť vypršala, za napadnuté. Raz vygenerujte kľúč s dlhou životnosťou a chráňte ho.
- Po zverejnení nemôžete jednoducho prepínať kľúče. Schéma podpisovania v3 pridáva kľúč rotácia ako explicitnú funkciu: starý certifikát „požehnáva“ nový prostredníctvom uloženého dôkazu, čo umožňuje OS prijímať aktualizácie z nového kľúča pri zachovaní kontinuity identity. Bez verzie 3 znamená strata pôvodného kľúča osirotenie všetkých existujúcich inštalácií.
Pre testovacie zostavy s bočným zaťažením je v poriadku nepodpísaný sklad kľúčov na ladenie; na výrobu použite heslom chránené úložisko kľúčov s dlhou platnosťou uložené v offline zálohe.
Overte identitu aplikácie ako profesionál
Neverte všeobecným názvom súborov. Skontrolujte kryptografické jadro svojich súborov APK v priebehu niekoľkých sekúnd.
Overte certifikátyBežné úskalia podpisovania
- Certifikáty s vlastným podpisom: Väčšina aplikácií pre Android má vlastný podpis. Na rozdiel od SSL pre webové stránky neexistuje centrálna autorita na podpisovanie aplikácií pre Android. Musíte dôverovať priamo vývojárovi.
- Certifikáty ladenia: Aplikácie vytvorené na testovanie používajú všeobecný kľúč „ladenia“. Tieto aplikácie by nikdy nemali byť zverejnené a sú blokované mnohými bezpečnostnými filtrami.
- Strata kľúča: Ak vývojár stratí svoje súkromné úložisko kľúčov, môže nikdy znova aktualizovať svoju aplikáciu. Museli by vydať „Novú“ aplikáciu s iným názvom balíka.
Výber správnej schémy podpisovania pre vašu cieľovú súpravu SDK
Podpisovanie aplikácií ticho podporuje veľkú časť bezpečnosti Androidu. Po kliknutí na vzťah medzi súkromným a verejným kľúčom môžete posúdiť kvalitu aplikácie stiahnutej z druhej strany a potvrdiť, že to, čo inštalujete, nebolo zmenené, odkedy ju vývojár podpísal. Ďalšie informácie o interných prvkoch systému Android nájdete v našom sprievodca formátom XAPK.