Firma delle app Android: come funziona e perché è importante

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

Ogni volta che installi un'app sul tuo telefono Android, in background viene eseguito un controllo di sicurezza silenzioso ma fondamentale. Il tuo telefono verifica il codice firma digitale del pacchetto APK. Questa stretta di mano crittografica è ciò che impedisce agli hacker malintenzionati di "avvelenare" le tue app con malware, garantendo allo stesso tempo agli sviluppatori di inviare aggiornamenti senza perdere la propria identità.

Se scrivi app, la firma è qualcosa che devi semplicemente fare bene; se ti piace armeggiare con Android, è una delle parti del sistema più soddisfacente da capire. In ogni caso, come funziona la firma dell'app vale il tuo tempo. Di seguito esamineremo la tecnologia, come si sono evoluti gli schemi di firma e come puoi verificare manualmente i certificati online.

Cosa imparerai in questo articolo
  • Perché ogni app Android deve essere firmata e quale crittografia è coinvolta (RSA/EC).
  • La differenza tra gli schemi di firma v1 (JAR), v2, v3 e v4 e quale dovrebbe essere utilizzato oggi dalla tua app.
  • Come Android decide se consentire un aggiornamento in base alla continuità della firma.
  • In che modo la rotazione delle chiavi consente a uno sviluppatore di modificare la propria chiave di firma senza interrompere le installazioni esistenti.
  • Come verificare tu stesso la firma di qualsiasi APK, dalla riga di comando o con il nostro verificatore basato su browser.

Che cos'è la firma dell'app?

Fondamentalmente, la firma dell'app è un processo in cui uno sviluppatore utilizza un Chiave privata per generare un blocco di firma per i file della propria app. Il corrispondente Chiave pubblica viene quindi incorporato nell'APK all'interno della cartella META-INF. Quando il telefono tenta di installare l'app, utilizza la chiave pubblica per verificare se la firma corrisponde al contenuto del file.

Ciò fornisce due proprietà principali:

  1. Immutabilità: Se un singolo byte del codice dell'app viene modificato (ad esempio da un Trojan), la firma non corrisponderà più al file e Android rifiuterà di installarlo.
  2. Prova di identità: Se un'app tenta di aggiornarne una esistente, le loro firme devono corrispondere. Questo è il motivo per cui non è possibile installare un'app Facebook manomessa su quella ufficiale.

Evoluzione degli schemi di firma

Google ha continuamente aggiornato il meccanismo di firma per migliorare sia la velocità che la sicurezza:

Perché i certificati sono importanti per il sideloading

Quando scarichi un APK da una fonte non ufficiale, Hashing del certificato è il tuo migliore amico. Un'impronta digitale del certificato (come un hash SHA-256) identifica in modo univoco la chiave di firma dello sviluppatore. Ogni app mantiene la stessa chiave di firma in tutti i suoi aggiornamenti, quindi puoi confrontare l'impronta digitale di un APK con il valore pubblicato dallo sviluppatore per confermare che sia autentico.

Se sospetti che un APK sia falso, dovresti eseguirlo tramite il nostro Verificatore APK online. Il nostro strumento ti mostrerà:

Come Android verifica una firma al momento dell'installazione

Il passaggio "verifica il certificato" è così spesso trascurato che vale la pena illustrare cosa fa effettivamente il sistema operativo quando si tocca un APK e Android decide se installarlo:

  1. Apri l'APK come ZIP e individua il blocco della firma. Per le firme v2/v3 si tratta di un blocco strutturato immediatamente prima della directory centrale; per lo schema legacy v1 è il contenuto di META-INF/*.RSA, *.DSA o *.EC.
  2. Calcola i digest SHA-256 di ogni altro byte dell'APK. Il blocco firma è escluso dal proprio digest; tutto il resto viene sottoposto ad hashing in blocchi definiti.
  3. Verifica il digest di ogni blocco rispetto ai digest registrati nel blocco di firma. Se anche un solo byte è stato alterato da quando lo sviluppatore ha firmato il file, i digest non corrisponderanno e l'installazione verrà rifiutata con un errore generico "App non installata".
  4. Verificare che il blocco della firma stesso sia stato prodotto con la chiave privata del certificato. La chiave pubblica del certificato viene utilizzata per verificare la firma crittografica nel blocco. Un controllo riuscito significa che chiunque abbia firmato il file possedeva la chiave privata abbinata a questo certificato.
  5. Confronta l'impronta digitale del certificato con qualsiasi installazione esistente con lo stesso nome di pacchetto. Se il pacchetto è già installato e il nuovo APK è firmato con un certificato diverso, l'installazione viene rifiutata con INSTALL_FAILED_UPDATE_INCOMPATIBLE. Questa è la principale difesa contro l'imitazione del sistema operativo: un utente malintenzionato non può sostituire l'app della tua banca con la propria copia a meno che non abbia rubato anche la chiave di firma della banca.

Niente di tutto ciò dimostra che lo sviluppatore è affidabile, solo che il file che stai per installare è identico in byte a quello che ha firmato e che nessun'altra parte lo ha manomesso. La fiducia nello sviluppatore è una decisione separata, che prendi decidendo da quali fonti installare.

Cosa significa veramente "mancata corrispondenza della firma"

La sorpresa più comune che le persone riscontrano durante il sideload è l'errore di "mancata corrispondenza della firma" durante l'aggiornamento. Ecco cosa sta realmente accadendo:

In pratica ciò avviene in due modi:

  1. L'APK di terze parti è veramente da un altro editore, ad esempio una copia "modificata" o "patchata". Rifiutare l'installazione è il comportamento corretto; installarlo significherebbe affidare a un estraneo gli stessi dati già toccati dall'app della tua banca.
  2. L'APK di terze parti è un ricaricamento dell'APK ufficiale, ma il sistema di firma dell'app Play di Google firma il download di ogni utente con il wrapper chiave di caricamento dell'utente. A volte due dispositivi possono visualizzare dati di firma leggermente diversi per la stessa versione concettuale dell'app. In tal caso l'impronta digitale del certificato alla radice corrisponde ancora; puoi verificare con il nostro Verificatore APK.

Se l'impronta digitale del certificato veramente differisce dall'installazione esistente, l'unico modo per procedere è disinstallare prima la copia corrente (perdendone i dati) prima di eseguire il sideload della sostituzione, senza mai disabilitare la verifica della firma.

Generazione della propria chiave di firma (per sviluppatori)

Se stai creando app Android, alla fine dovrai firmare le tue build. Il comando standard a riga singola che utilizza keytool da un SDK Java è:

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

Due cose da sapere:

Per le build di test trasferite localmente, un keystore di debug non firmato va bene; per la produzione, utilizzare un archivio chiavi a lunga validità protetto da password archiviato nel backup offline.

Verifica l'identità dell'app come un professionista

Non fidarti dei nomi di file generici. Controlla il cuore crittografico dei tuoi APK in pochi secondi.

Verifica i certificati adesso

Insidie ​​comuni nella firma

  1. Certificati autofirmati: La maggior parte delle app Android sono autofirmate. A differenza di SSL per i siti Web, non esiste un’autorità centrale per la firma delle app Android. Devi fidarti direttamente dello sviluppatore.
  2. Certificati di debug: Le app create per i test utilizzano una chiave di "debug" generica. Queste app non dovrebbero mai essere rese pubbliche e sono bloccate da molti filtri di sicurezza.
  3. Perdita chiave: Se uno sviluppatore perde il proprio archivio di chiavi private, può Mai aggiornare nuovamente la propria app. Dovrebbero rilasciare un'app "Nuova" con un nome di pacchetto diverso.

Scegliere lo schema di firma giusto per il tuo SDK di destinazione

La firma delle app è alla base di gran parte della sicurezza di Android. Una volta stabilita la relazione chiave privata/pubblica, puoi giudicare un'app trasferita lateralmente in base ai suoi meriti e confermare che ciò che stai installando non è stato modificato da quando lo sviluppatore l'ha firmata. Per ulteriori informazioni sui componenti interni di Android, consulta il nostro guida al formato XAPK.

Progettato e documentato dal signor Shaefale Sviluppatore capo e architetto di pacchetti Android • Verificato su Android 12-15

Mst Shaefale mantiene la fusione XAPK/APKS lato client, il parser del manifest binario e gli strumenti di firma APK v1+v2 su xapktoapk.com. Hai notato un comando obsoleto o una modifica del sistema operativo? Invia una nota editoriale.