Google 致力于为黑人社区推动种族平等。查看具体举措
Questa pagina è stata tradotta dall'API Cloud Translation.
Switch to English

Firma dell'applicazione

La firma dell'applicazione consente agli sviluppatori di identificare l'autore dell'applicazione e di aggiornare la loro applicazione senza creare interfacce e autorizzazioni complicate. Ogni applicazione eseguita sulla piattaforma Android deve essere firmata dallo sviluppatore . Le applicazioni che tentano di installarsi senza essere firmate verranno rifiutate da Google Play o dal programma di installazione del pacchetto sul dispositivo Android.

Su Google Play, la firma delle applicazioni collega la fiducia che Google ha con lo sviluppatore e la fiducia che lo sviluppatore ha con la sua applicazione. Gli sviluppatori sanno che la loro applicazione viene fornita, non modificata, al dispositivo Android; e gli sviluppatori possono essere ritenuti responsabili del comportamento della loro applicazione.

Su Android, la firma dell'applicazione è il primo passaggio per posizionare un'applicazione nella sua sandbox dell'applicazione. Il certificato dell'applicazione firmato definisce quale ID utente è associato a quale applicazione; applicazioni diverse vengono eseguite con ID utente diversi. La firma dell'applicazione garantisce che un'applicazione non possa accedere a nessun'altra applicazione se non tramite un IPC ben definito.

Quando un'applicazione (file APK) viene installata su un dispositivo Android, Package Manager verifica che l'APK sia stato firmato correttamente con il certificato incluso in tale APK. Se il certificato (o, più precisamente, la chiave pubblica nel certificato) corrisponde alla chiave utilizzata per firmare qualsiasi altro APK sul dispositivo, il nuovo APK ha la possibilità di specificare nel manifest che condividerà un UID con l'altro in modo simile APK firmati.

Le applicazioni possono essere firmate da terze parti (OEM, operatore, mercato alternativo) o autofirmate. Android fornisce la firma del codice utilizzando certificati autofirmati che gli sviluppatori possono generare senza assistenza o autorizzazione esterna. Le domande non devono essere firmate da un'autorità centrale. Android attualmente non esegue la verifica CA per i certificati dell'applicazione.

Le applicazioni sono anche in grado di dichiarare autorizzazioni di sicurezza a livello di protezione della firma, limitando l'accesso solo alle applicazioni firmate con la stessa chiave mantenendo al contempo UID e sandbox dell'applicazione distinti. Una relazione più stretta con una sandbox dell'applicazione condivisa è consentita tramite lafunzione UID condiviso in cui due o più applicazioni firmate con la stessa chiave sviluppatore possono dichiarare un UID condiviso nel loro manifest.

Schemi di firma APK

Android supporta tre schemi di firma delle applicazioni:

Per la massima compatibilità, firmare le applicazioni con tutti gli schemi, prima con v1, poi v2 e infine v3. I dispositivi Android 7.0 e successivi installano le app firmate con schemi v2 + più rapidamente di quelli firmati solo con schema v1. Le piattaforme Android meno recenti ignorano le firme v2 + e quindi hanno bisogno che le app contengano firme v1.

Firma JAR (schema v1)

La firma dell'APK fa parte di Android sin dall'inizio. Si basa su JAR firmato . Per i dettagli sull'utilizzo di questo schema, vedere la documentazione di Android Studio sulla firma dell'app .

Le firme v1 non proteggono alcune parti dell'APK, come i metadati ZIP. Il verificatore APK deve elaborare molte strutture di dati non attendibili (non ancora verificate) e quindi eliminare i dati non coperti dalle firme. Questo offre una superficie di attacco considerevole. Inoltre, il verificatore APK deve decomprimere tutte le voci compresse, consumando più tempo e memoria. Per risolvere questi problemi, Android 7.0 ha introdotto APK Signature Scheme v2.

Schema di firma APK v2 e v3 (schema v2 +)

I dispositivi che eseguono Android 7.0 e versioni successive supportano lo schema di firma APK v2 (schema v2) e versioni successive. (Lo schema v2 è stato aggiornato alla v3 in Android 9 per includere informazioni aggiuntive nel blocco di firma, ma per il resto funziona allo stesso modo.) Il contenuto dell'APK viene sottoposto ad hashing e firmato, quindi il blocco di firma APK risultante viene inserito nell'APK. Per i dettagli sull'applicazione dello schema v2 + a un'app, vedi APK Signature Scheme v2 .

Durante la convalida, lo schema v2 + considera il file APK come un BLOB ed esegue il controllo della firma sull'intero file. Qualsiasi modifica all'APK, comprese le modifiche ai metadati ZIP, invalida la firma dell'APK. Questa forma di verifica APK è sostanzialmente più veloce e consente il rilevamento di più classi di modifiche non autorizzate.

Il nuovo formato è retrocompatibile, quindi gli APK firmati con il nuovo formato di firma possono essere installati sui dispositivi Android meno recenti (che ignorano semplicemente i dati aggiuntivi aggiunti all'APK), purché anche questi APK siano firmati v1.

Processo di verifica della firma APK

Figura 1. Processo di verifica della firma APK

L'hash del file intero dell'APK viene verificato rispetto alla firma v2 + archiviata nel blocco firme APK. L'hash copre tutto tranne il blocco firma APK, che contiene la firma v2 +. Qualsiasi modifica all'APK al di fuori del blocco della firma dell'APK invalida la firma v2 + dell'APK. Anche gli APK con firma v2 + rimossa vengono rifiutati, perché la loro firma v1 specifica che l'APK era firmato v2, il che fa sì che Android 7.0 e versioni successive rifiutino di verificare gli APK utilizzando le loro firme v1.

Per i dettagli sul processo di verifica della firma APK, vedere la sezione Verifica dello schema di firma APK v2.