Semnarea aplicațiilor Android: cum funcționează și de ce contează
De fiecare dată când instalați o aplicație pe telefonul Android, în fundal are loc o verificare de securitate silențioasă, dar esențială. Telefonul dvs. verifică semnătura digitală a pachetului APK. Această strângere de mână criptografică împiedică hackerii rău intenționați să vă „otrăvească” aplicațiile cu programe malware, asigurându-vă în același timp că dezvoltatorii pot împinge actualizări fără a-și pierde identitatea.
Dacă scrieți aplicații, semnarea este ceva ce trebuie pur și simplu să înțelegi corect; dacă doar îți place să te chinuiești cu Android, este una dintre cele mai satisfăcătoare părți ale sistemului de înțeles. Oricum, cum funcționează semnarea aplicației merită timpul tău. Mai jos vom parcurge tehnologia, cum au evoluat schemele de semnare și cum puteți verifica manual certificatele online.
- De ce fiecare aplicație Android trebuie să fie semnată și ce criptografie este implicată (RSA / EC).
- Diferența dintre schemele de semnătură v1 (JAR), v2, v3 și v4 și care ar trebui să folosească aplicația dvs. astăzi.
- Cum decide Android dacă permite o actualizare pe baza continuității semnăturii.
- Modul în care rotația cheii îi permite unui dezvoltator să-și schimbe cheia de semnare fără a întrerupe instalările existente.
- Cum să verificați singur semnătura oricărui APK, pe linia de comandă sau cu verificator bazat pe browser.
Ce este semnarea aplicațiilor?
În esență, semnarea aplicației este un proces în care un dezvoltator folosește un Cheie privată pentru a genera un bloc de semnătură pentru fișierele aplicației sale. Cheie publică corespunzătoare este apoi încorporat în APK-ul din folderul META-INF. Când telefonul încearcă să instaleze aplicația, folosește cheia publică pentru a verifica dacă semnătura se potrivește cu conținutul fișierului.
Aceasta oferă două proprietăți principale:
- Imuabilitate: Dacă un singur octet din codul aplicației este modificat (de exemplu, de către un troian), semnătura nu se va mai potrivi cu fișierul, iar Android va refuza să îl instaleze.
- Dovada identității: Dacă o aplicație încearcă să actualizeze una existentă, semnăturile acesteia trebuie să se potrivească. Acesta este motivul pentru care nu puteți instala o aplicație Facebook manipulată peste cea oficială.
Evoluția schemelor de semnare
Google a îmbunătățit continuu mecanismul de semnare pentru a îmbunătăți atât viteza, cât și securitatea:
- V1 (semnare borcan): Semnează fișiere individuale în APK (ZIP). Acest lucru este lent, deoarece sistemul de operare trebuie să dezarhivească și să verifice fiecare fișier. De asemenea, este vulnerabil la anumite manipulări ZIP.
- V2 (Schema de semnătură APK): Semnează întregul bloc binar al APK-ului. Nu necesită dezarhivare pentru a verifica, ceea ce îl face incredibil de rapid. A fost introdus în Android 7.0 (Nougat).
- V3 (Rotatie taste): Extinde V2 prin adăugarea unei „linie” de chei. Permite unui dezvoltator să demonstreze că o cheie nouă este succesorul autorizat al uneia mai vechi. Introdus în Android 9.0 (Pie).
- V4 (semnare în flux): Proiectat special pentru instalări incrementale, permițând ca aplicațiile să fie verificate în timp ce sunt încă descărcate prin USB sau Wi-Fi.
De ce contează certificatele pentru încărcarea laterală
Când descărcați un APK dintr-o sursă neoficială, Hashing certificat este cel mai bun prieten al dvs. O amprentă de certificat (cum ar fi un hash SHA-256) identifică în mod unic cheia de semnare a dezvoltatorului. Fiecare aplicație păstrează aceeași cheie de semnare în toate actualizările sale, astfel încât să puteți compara amprenta unui APK cu valoarea publicată de dezvoltator pentru a confirma că este autentică.
Dacă bănuiți că un APK este fals, ar trebui să îl rulați prin Verificator APK online. Instrumentul nostru vă va arăta:
- Nume comun (CN) al semnatarului (de exemplu, „Android”).
- Perioada de valabilitate al certificatului.
- Amprentele digitale SHA-1/SHA-256.
Cum verifică Android o semnătură la momentul instalării
Pasul „verificați certificatul” este atât de des ignorat încât merită să parcurgeți ceea ce face de fapt sistemul de operare atunci când atingeți un APK și Android decide dacă îl instalează:
- Deschideți APK-ul ca fișier ZIP și localizați blocul de semnare. Pentru semnăturile v2/v3 care este un bloc structurat imediat înaintea directorului central; pentru schema moștenită v1 este conținutul META-INF/*.RSA, *.DSA sau *.EC.
- Calculați rezumatele SHA-256 pentru fiecare alt octet al APK-ului. Blocul de semnare este exclus din propriul său rezumat; totul este hashing în bucăți definite.
- Verificați rezumatul fiecărei bucăți față de rezumatele înregistrate în blocul de semnare. Dacă chiar și un singur octet a fost modificat de când dezvoltatorul a semnat fișierul, rezumatele nu se vor potrivi și instalarea este respinsă cu o eroare generică „Aplicația nu este instalată”.
- Verificați că blocul de semnare în sine a fost produs cu cheia privată a certificatului. Cheia publică a certificatului este utilizată pentru a verifica semnătura criptografică din bloc. O verificare reușită înseamnă că oricine a semnat fișierul deținea cheia privată asociată cu acest certificat.
- Comparați amprenta certificatului cu orice instalare existentă cu același nume de pachet. Dacă pachetul este deja instalat și noul APK este semnat cu un alt certificat, instalarea este respinsă cu INSTALL_FAILED_UPDATE_INCOMPATIBLE. Aceasta este principala apărare anti-uzurpare a sistemului de operare: un actor rău intenționat nu poate înlocui aplicația dvs. bancară cu propria copie decât dacă a furat și cheia de semnare a băncii.
Nimic din toate acestea nu dovedește că dezvoltatorul este de încredere, doar că fișierul pe care urmează să îl instalați este identic în octeți cu ceea ce au semnat și că nicio altă parte nu l-a modificat. Încrederea în dezvoltator este o decizie separată, pe care o luați alegând sursele din care instalați aplicațiile.
Ce înseamnă cu adevărat „nepotrivirea semnăturii”.
Cea mai obișnuită surpriză pe care oamenii o lovesc la încărcare laterală este eroarea „nepotrivire semnăturii” la actualizare. Iată ce se întâmplă de fapt:
- Aveți Aplicația X versiunea 1.0 instalat din Magazinul Play.
- Descărcați Aplicația X versiunea 1.1 dintr-o sursă non-Play.
- Sistemul de operare vede același nume de pachet (com.example.app), dar APK-ul este semnat cu un certificat diferit (cheia de semnare a sursei secundare, nu a editorului original). Refuză să se instaleze.
În practică, acest lucru se întâmplă în două moduri:
- APK-ul terță parte este cu adevărat de la un alt editor, de exemplu, o copie „modificată” sau „patchată”. Refuzul instalării este comportamentul corect; instalarea acestuia ar însemna să ai încredere unui străin cu aceleași date pe care aplicația băncii tale a atins deja.
- APK-ul terță parte este o reîncărcare a APK-ului oficial, dar sistemul Google Play App Signing semnează descărcarea fiecărui utilizator cu wrapper-ul cheie de încărcare al utilizatorului. Două dispozitive pot vedea uneori date de semnătură ușor diferite pentru aceeași versiune conceptuală a aplicației. În acest caz, amprenta certificatului de la rădăcină încă se potrivește; puteți verifica cu ajutorul nostru Verificator APK.
Dacă amprenta certificatului cu adevărat diferă de instalarea dvs. existentă, singura cale de urmat este să dezinstalați mai întâi copia curentă (pierzându-și datele) înainte de a încărca înlocuirea, fără să dezactivați niciodată verificarea semnăturii.
Generarea propriei chei de semnare (pentru dezvoltatori)
Dacă construiți aplicații Android, în cele din urmă va trebui să vă semnați propriile versiuni. Comanda standard pe o singură linie care utilizează keytool dintr-un SDK Java este:
keytool -genkeypair -v \
-keystore my-release.keystore \
-alias my-app -keyalg RSA -keysize 2048 \
-validity 10000
Două lucruri de știut:
- valabilitate contează: 10000 de zile (aproximativ 27 de ani) este valoarea convențională, deoarece sistemul de operare tratează actualizările semnate cu o cheie aproape expirată sau expirată ca fiind compromise. Generați o cheie cu durată lungă de viață și protejați-o.
- Odată publicată aplicația, nu puteți schimba cu ușurință cheile. Schema de semnare v3 adaugă cheia rotaţie ca o caracteristică explicită: un certificat vechi „binecuvântează” unul nou printr-o dovadă stocată, permițând sistemului de operare să accepte actualizări de la noua cheie, păstrând în același timp continuitatea identității. Fără schema v3, pierderea cheii originale înseamnă abandonarea tuturor instalărilor existente.
Pentru versiunile de testare cu încărcare laterală, un depozit de chei de depanare nesemnat este bine; pentru producție, utilizați un depozit de chei cu valabilitate lungă protejat prin parolă, stocat în backup offline.
Verificați identitatea aplicației ca un profesionist
Nu aveți încredere în numele generice de fișiere. Verificați inima criptografică a APK-urilor dvs. în câteva secunde.
Verificați certificatele acumCapcane comune de semnare
- Certificate autosemnate: Majoritatea aplicațiilor Android sunt autosemnate. Spre deosebire de SSL pentru site-uri web, nu există o autoritate centrală pentru semnarea aplicațiilor Android. Trebuie să aveți încredere direct în dezvoltator.
- Certificate de depanare: Aplicațiile create pentru testare folosesc o cheie generică de „depanare”. Aceste aplicații nu ar trebui să fie niciodată lansate publicului și sunt blocate de multe filtre de securitate.
- Pierderea cheii: Dacă un dezvoltator își pierde magazinul de chei private, își poate nu să își actualizeze aplicația din nou. Ar trebui să lanseze o aplicație „Nouă” cu un alt nume de pachet.
Alegerea schemei de semnare potrivite pentru SDK-ul dvs. țintă
Semnarea aplicațiilor susține în liniște o mulțime de securitate Android. Odată ce relația cheie privată/publică face clic, puteți evalua o aplicație cu încărcare laterală în funcție de meritele sale și puteți confirma că ceea ce instalați nu a fost modificat de când dezvoltatorul a semnat-o. Pentru mai multe despre elementele interne Android, consultați ghid pentru formatul XAPK.