SHARE THE PERSPECTIVE
Un checksum confronta i byte con un riferimento. Una firma lega l’integrità a una chiave. Nessuno dei due dimostra da solo che il software sia sicuro.

Prima di installare un APK Android, distingui tre controlli: Questo file corrisponde alla release prevista? È stato firmato con la chiave prevista? Soggetti indipendenti possono riprodurlo a partire dal codice sorgente dichiarato? Un checksum SHA-256, una firma APK e una build riproducibile rispondono a queste domande in modi diversi.

Nessuno dei tre, da solo, costituisce un verdetto sulla presenza di malware. Un programma correttamente firmato e riproducibile può comunque contenere una vulnerabilità di sicurezza o un comportamento intenzionalmente dannoso.

Che cosa accerta ciascun metodo di verifica

Controllo Risultato utile Limite importante
Hash SHA-256 del file I tuoi byte corrispondono a uno specifico hash attendibile Un attaccante che sostituisca sia il file sia l’hash può vanificare questo confronto
Verifica della firma APK La firma del pacchetto risulta verificata con il suo certificato di firma Devi stabilire quale chiave di firma sia prevista; la sola validità non identifica il soggetto che pubblica l’app
Confronto di build riproducibili L’artefatto specificato può essere ricreato a partire da input documentati La corrispondenza tra sorgente e binario non dimostra che il sorgente sia sicuro
Revisione di sicurezza Sono stati valutati specifici aspetti della progettazione o dell’implementazione Contano l’ambito, la versione, i risultati e i problemi irrisolti

Android richiede la firma degli APK per l’installazione e gli aggiornamenti. Con Play App Signing, Google può gestire la chiave di firma dell’app e generare gli APK da distribuire a partire da un App Bundle. Si tratta di rapporti di fiducia documentati, non della prova che intermediari qualsiasi possano alterare silenziosamente un pacchetto preservandone la firma valida. Guida Android alla firma delle app.

Passaggio 1: identifica l’artefatto esatto

Annota la versione dell’app, il canale di distribuzione, il nome del file e la variante di piattaforma prevista. Usa la pagina ufficiale di distribuzione di chi pubblica l’app, non un checksum copiato dallo stesso messaggio non richiesto che ti ha fornito l’APK.

Un APK scaricato direttamente da chi pubblica l’app può differire da un APK generato per un dispositivo da uno store. Versioni, architetture, modalità di confezionamento del pacchetto o accordi di firma diversi possono legittimamente produrre hash del file differenti. Confronta elementi equivalenti prima di considerare una mancata corrispondenza come prova di manomissione.

La domanda pratica è: Da dove proviene il valore atteso, e perché mi fido di quella fonte? Calcolare un hash offline non risolve il problema della fiducia in un hash di riferimento ottenuto online.

Passaggio 2: calcola lo SHA-256 in locale

Sostituisci messenger.apk con il nome del file che hai scaricato. Questi esempi leggono il file; non lo installano.

Linux:

sha256sum messenger.apk

macOS:

shasum -a 256 messenger.apk

Prompt dei comandi di Windows:

certutil -hashfile messenger.apk SHA256

Confronta l’hash completo, ignorando soltanto gli spazi di visualizzazione e le differenze tra maiuscole e minuscole. Non confrontare solo i primi o gli ultimi caratteri. Conserva l’hash atteso insieme alle informazioni sulla release e sulla versione, in modo da poter ripetere il confronto.

Se i valori differiscono, fermati prima dell’installazione. Controlla l’artefatto e la versione, scarica nuovamente il file dalla fonte attendibile se opportuno e chiedi spiegazioni a chi pubblica l’app se la mancata corrispondenza rimane inspiegata. Non «correggere» il checksum atteso per farlo coincidere con il file che ti è capitato di ricevere.

Passaggio 3: controlla la firma dell’APK

Per chi usa gli Android SDK Build Tools, la documentazione di apksigner di Google descrive la verifica della firma e la visualizzazione dei certificati:

apksigner verify --verbose --print-certs messenger.apk

La verifica dovrebbe riuscire per le piattaforme supportate dall’APK. Confronta le informazioni del suo certificato di firma con una registrazione attendibile della release o con la cronologia delle chiavi di firma documentata da chi pubblica l’app. Una firma creata con una chiave sconosciuta non diventa attendibile per la presenza della parola «verificata». Anche una rotazione legittima della chiave di firma richiede prove, anziché un’istruzione a ignorare una mancata corrispondenza.

L’hash SHA-256 del file APK e l’impronta SHA-256 del suo certificato di firma sono valori diversi. Non confrontare l’uno con l’altra.

Passaggio 4: cerca prove di build riproducibili

Per affermare che una build è riproducibile servono una revisione del sorgente, un ambiente di build, istruzioni e un artefatto di destinazione definiti. Soggetti indipendenti dovrebbero poter ricreare quell’artefatto e confrontare il risultato. La definizione del progetto Reproducible Builds include questi input nell’affermazione.

Per un’app di messaggistica, tra le prove utili relative a una release figurano un tag del sorgente, versioni fissate delle dipendenze e della toolchain, istruzioni di build e risultati di confronti indipendenti. Chiedi che cosa sia stato confrontato esattamente: un artefatto non firmato, un APK firmato o determinati contenuti del pacchetto. Non dedurre la riproducibilità soltanto perché vengono pubblicati il codice sorgente e un hash del download.

La riproducibilità rafforza il collegamento tra il codice sorgente esaminato e il codice distribuito. Non trasforma un’implementazione non esaminata in un protocollo sicuro, né dimostra che un telefono in esecuzione non sia compromesso.

Qual è il ruolo di Proof Lab di Livara

Proof Lab di Livara permette di calcolare in locale l’hash di un APK e confrontarlo con quello pubblicato. Le sue dimostrazioni crittografiche hanno un ambito più ristretto rispetto a un audit dell’intero protocollo di messaggistica. Usa il controllo dell’hash per lo scopo dichiarato, insieme alle informazioni sulla release attesa e sulla firma; non considerarlo una prova indipendente di build riproducibili o dell’assenza di backdoor.

Il modello delle minacce segnala esplicitamente il limite che si presenta quando è possibile sostituire sia un APK sia l’hash visualizzato. Ecco perché la provenienza del valore di riferimento conta quanto la corretta esecuzione del calcolo.

Domande frequenti

Un checksum corrispondente dimostra che un APK è sicuro?

No. Stabilisce una corrispondenza con l’hash di riferimento, presupponendo un riferimento attendibile e la validità delle proprietà di sicurezza della funzione hash. Non valuta il comportamento del programma.

La verifica della firma è ridondante se il checksum corrisponde?

No. I controlli forniscono prove diverse. Una firma lega l’integrità del pacchetto a una chiave; un hash del file identifica una specifica sequenza di byte.

Un download da uno store deve corrispondere all’hash dell’APK sul sito web?

Solo se devono essere lo stesso artefatto. Controlla prima il canale di distribuzione, la versione e il confezionamento del pacchetto. Una mancata corrispondenza inspiegata merita un’indagine, non un’accusa automatica né un’approvazione automatica.

Questi controlli possono rilevare spyware già presente sul mio telefono?

No. Valutano un artefatto di installazione, non ogni componente dello stato di esecuzione attuale del dispositivo.

Verifica la tua build in Proof Lab
CONTINUE THE THREADAndroid & device security ↗
YOU’VE REACHED THE ENDBack to the reading room ↗