Android-alkalmazások aláírása: hogyan működik és miért számít

A brass key on a smartphone showing a verified checkmark, illustrating Android app signing

Minden alkalommal, amikor telepít egy alkalmazást Android telefonjára, egy csendes, de kritikus biztonsági ellenőrzés történik a háttérben. Telefonja ellenőrzi az APK-csomag digitális aláírás kódját. Ez a kriptográfiai kézfogás megakadályozza, hogy a rosszindulatú hackerek „megmérgezzék” az alkalmazásait rosszindulatú programokkal, miközben biztosítja a fejlesztők számára, hogy identitásuk elvesztése nélkül küldhessenek frissítéseket.

Ha alkalmazásokat ír, az aláírást egyszerűen meg kell oldania; ha csak szeret az Androiddal bütykölni, ez a rendszer egyik legkielégítőbb része. Akárhogy is, a hogyan működik az alkalmazás-aláírás megéri az idejét. Az alábbiakban végigjárjuk a technológiát, hogyan fejlődtek az aláírási sémák, és hogyan teheti meg a manuálisan ellenőrizze a tanúsítványokat-t online.

Amit ebből a cikkből megtudhat
  • Miért kell minden Android-alkalmazást aláírni, és milyen titkosításról van szó (RSA / EC).
  • A különbség a v1 (JAR), v2, v3 és v4 aláírási sémák között, és azt, hogy melyiket kell használnia az alkalmazásnak ma.
  • Hogyan dönti el az Android, hogy engedélyezi-e a frissítést az aláírás folytonossága alapján.
  • A kulcsrotáció hogyan teszi lehetővé a fejlesztő számára az aláírási kulcs megváltoztatását a meglévő telepítések megszakítása nélkül.
  • Hogyan ellenőrizheti saját maga az APK aláírását a parancssorban vagy a böngésző alapú ellenőrző segítségével.

Mi az az alkalmazás-aláírás?

Lényegében az alkalmazás-aláírás egy olyan folyamat, amelyben a fejlesztő Privát kulcs segítségével aláírási blokkot hoz létre az alkalmazás fájljaihoz. A megfelelő Nyilvános kulcs ezután beágyazódik az APK-ba a META-INF mappában. Amikor a telefon megpróbálja telepíteni az alkalmazást, a nyilvános kulcsot használja annak ellenőrzésére, hogy az aláírás egyezik-e a fájl tartalmával.

Ez két fő tulajdonságot biztosít:

  1. Állandóság: Ha az alkalmazás kódjának egyetlen bájtja megváltozik (például egy trójai), az aláírás többé nem fog megegyezni a fájllal, és az Android megtagadja annak telepítését.
  2. Személyazonosság igazolása: Ha egy alkalmazás frissíteni próbál egy meglévőt, akkor az aláírásának egyeznie kell. Ez az oka annak, hogy nem telepíthet manipulált Facebook-alkalmazást a hivatalos alkalmazás fölé.

Aláírási sémák fejlődése

A Google folyamatosan frissítette az aláírási mechanizmust a sebesség és a biztonság javítása érdekében:

Miért fontosak a tanúsítványok az oldalbetöltésnél?

Amikor letölt egy APK-t egy nem hivatalos forrásból, a Tanúsítvány kivonatolás a legjobb barátod. A tanúsítvány ujjlenyomata (például egy SHA-256 hash) egyedileg azonosítja a fejlesztő aláíró kulcsát. Minden alkalmazás ugyanazt az aláíró kulcsot használja az összes frissítésben, így összehasonlíthatod az APK ujjlenyomatát a fejlesztő közzétett értékével, hogy megbizonyosodj arról, hogy az eredeti.

Ha azt gyanítja, hogy egy APK hamis, futtassa le a Online APK-ellenőrző-n keresztül. Eszközünk megmutatja:

Hogyan ellenőrzi az Android az aláírást telepítéskor

A „tanúsítvány ellenőrzése” lépést olyan gyakran elhallgatják, hogy érdemes végigjárni, mit csinál az operációs rendszer, amikor megérinti az APK-t, és az Android eldönti, hogy telepíti-e:

  1. Nyissa meg az APK-t ZIP-fájlként, és keresse meg az aláíró blokkot. V2/v3 aláírásokhoz, amelyek egy strukturált blokk közvetlenül a központi könyvtár előtt; az örökölt v1 séma esetében ez a META-INF/*.RSA, *.DSA vagy *.EC tartalma.
  2. Számítsa ki az APK minden második bájtjának SHA-256 kivonatát. Az aláíró blokk ki van zárva a saját kivonatából; minden más meghatározott darabokban van kivonatolva.
  3. Ellenőrizze az egyes darabok kivonatait az aláíró blokkban rögzített kivonatokkal összehasonlítva. Ha csak egy bájt is megváltozott azóta, hogy a fejlesztő aláírta a fájlt, a kivonatok nem egyeznek meg, és a telepítés elutasításra kerül egy általános „Alkalmazás nincs telepítve” hibaüzenettel.
  4. Ellenőrizze, hogy maga az aláíró blokk a tanúsítvány privát kulcsával készült. A tanúsítvány nyilvános kulcsa a blokkban lévő kriptográfiai aláírás ellenőrzésére szolgál. A sikeres ellenőrzés azt jelenti, hogy aki aláírta a fájlt, az rendelkezik a tanúsítvánnyal párosított privát kulccsal.
  5. Hasonlítsa össze a tanúsítvány ujjlenyomatát az azonos csomagnévvel rendelkező bármely meglévő telepítéssel. Ha a csomag már telepítve van, és az új APK egy másik tanúsítvánnyal van aláírva, a telepítést a INSTALL_FAILED_UPDATE_INCOMPATIBLE elutasítja. Ez az operációs rendszer fő védelme a megszemélyesítéssel szemben: egy rosszindulatú szereplő nem cserélheti le a banki alkalmazást saját példányára, hacsak el nem lopta a bank aláírási kulcsát is.

Mindezek egyike sem bizonyítja önmagában, hogy a fejlesztő megbízható, csupán azt, hogy a telepítendő fájl bájtról bájtra megegyezik azzal, amit aláírtak, és harmadik fél nem módosította. A fejlesztőbe vetett bizalom egy külön döntés, amelyet azzal hoz meg, hogy megválasztja, milyen forrásból telepít.

Mit jelent valójában az "aláírási eltérés"?

A külső forrásból történő telepítés (sideloading) során a leggyakoribb meglepetés az „aláírás-eltérés” (signature mismatch) hiba frissítéskor. Íme, mi történik valójában:

Ez a gyakorlatban kétféleképpen történik:

  1. A harmadik féltől származó APK valóban egy másik kiadótól származik, például egy „módosított” vagy „patchelt” másolat. A telepítés megtagadása a helyes viselkedés; a telepítése azt jelentené, hogy egy idegenre bízza ugyanazokat az adatokat, amelyeket a banki alkalmazása már kezelt.
  2. A harmadik féltől származó APK a a hivatalos APK újrafeltöltése, de a Google Play App Signing rendszere minden egyes felhasználó letöltését aláírja a felhasználó feltöltési kulcs burkolójával. Két eszköz néha kissé eltérő aláírási adatokat láthat ugyanahhoz az alkalmazásverzióhoz. Ebben az esetben a tanúsítvány gyökérben lévő ujjlenyomata továbbra is megegyezik; ellenőrizheti a APK-ellenőrző termékünkkel.

Ha a valóban tanúsítvány ujjlenyomata eltér a meglévő telepítésétől, akkor az egyetlen lehetőség az, ha először eltávolítja az aktuális másolatot (az adatok elvesztése), mielőtt a csere oldalbetöltését elvégezné, és soha nem tiltja le az aláírás ellenőrzését.

Saját aláíró kulcs létrehozása (fejlesztőknek)

Ha Android-alkalmazásokat készít, végül alá kell írnia saját buildjeit. A Java SDK-ból származó keytool szabványú egysoros parancs a következő:

keytool -genkeypair -v \
        -keystore my-release.keystore \
        -alias my-app -keyalg RSA -keysize 2048 \
        -validity 10000

Két dolgot kell tudni:

Oldalról betöltött teszt buildekhez az aláíratlan hibakeresési kulcstároló megfelelő; termeléshez használjon jelszóval védett, hosszú érvényességű kulcstárolót, amelyet offline biztonsági mentésben tárolnak.

Ellenőrizze az alkalmazás identitását, mint egy profi

Ne bízzon az általános fájlnevekben. Nézze meg az APK-k kriptográfiai szívét másodpercek alatt.

Igazolja a tanúsítványokat most

Gyakori aláírási buktatók

  1. Önaláírt tanúsítványok: A legtöbb Android-alkalmazás önaláírt. A webhelyek SSL-jével ellentétben az Android-alkalmazások aláírására nincs központi hatóság. Közvetlenül a fejlesztőben kell megbíznia.
  2. Hibakeresési tanúsítványok: A tesztelésre készült alkalmazások általános „hibakereső” kulcsot használnak. Ezeket az alkalmazásokat soha nem szabad nyilvánosságra hozni, és számos biztonsági szűrő blokkolja őket.
  3. Kulcsvesztés: Ha egy fejlesztő elveszíti privát kulcstárát, a soha újra frissítheti az alkalmazását. Egy "Új" alkalmazást kellene kiadniuk más csomagnévvel.

A megfelelő aláírási séma kiválasztása a cél SDK-hoz

Az alkalmazás-aláírás csendesen alátámasztja az Android biztonságát. Amint a privát/nyilvános kulcs kapcsolat kattan, az oldalról betöltött alkalmazást érdemei alapján ítélheti meg, és megerősítheti, hogy a telepített tartalmat nem változtatták meg azóta, hogy a fejlesztő aláírta. Ha többet szeretne megtudni az Android belső részeiről, tekintse meg a útmutató az XAPK formátumhoz oldalunkat.

Mst Shaefale tervezte és dokumentálta Vezető fejlesztő és Android Package Architect • Ellenőrizve Android 12–15

Az Mst Shaefale karbantartja az ügyféloldali XAPK/APKS egyesítést, bináris jegyzékelemzőt és APK v1+v2 aláíró eszközöket a xapktoapk.com-nél. Elavult parancsot vagy operációs rendszerváltozást észlel? Szerkesztői megjegyzés küldése.