Crittografia nelle applicazioni mobili — fondamenti, algoritmi e principio di funzionamento

Autore: IT Sectr Pubblicato: 2026-04-02 Tempo di lettura: 8 min

La crittografia (encryption) è il processo di conversione dei dati in una forma illeggibile senza una chiave speciale. Nelle applicazioni mobili, la crittografia protegge i dati personali degli utenti, le informazioni di pagamento e la logica di business da intercettazioni e fughe di dati. Secondo Statista (2024), il numero di violazioni dei dati provenienti da applicazioni mobili è aumentato del 38% in due anni e nel 72% dei casi la causa è stata l'assenza o l'uso errato della crittografia. Le piattaforme mobili moderne forniscono API integrate per la crittografia e il loro utilizzo è uno standard di sicurezza obbligatorio. Statista, 2024

Punti chiave

  • Crittografia — conversione dei dati in una forma illeggibile, reversibile solo con una chiave di decrittografia.
  • Crittografia simmetrica utilizza una sola chiave per crittografare e decrittografare — veloce, ma richiede una trasmissione sicura della chiave.
  • Crittografia asimmetrica utilizza una coppia di chiavi (pubblica e privata) — più sicura, ma più lenta di quella simmetrica.
  • AES-256 — lo standard aureo della crittografia simmetrica, raccomandato dal NIST e utilizzato in Android e iOS.
  • Crittografia end-to-end garantisce che i dati siano inaccessibili anche al server — solo mittente e destinatario possono leggerli.

Cos'è la crittografia nelle applicazioni mobili?

La crittografia nel contesto delle applicazioni mobili è l'applicazione di algoritmi crittografici per proteggere i dati memorizzati sul dispositivo (data at rest) e trasmessi sulla rete (data in transit). A livello di dispositivo, viene crittografata l'archiviazione locale: file, database, SharedPreferences e cache. A livello di rete, il traffico tra l'app e il server viene crittografato tramite i protocolli TLS/HTTPS. L'obiettivo finale è garantire che, anche con accesso fisico al dispositivo o intercettazione del traffico, un utente malintenzionato non possa leggere i dati protetti senza la chiave crittografica.

Perché la crittografia è necessaria nelle applicazioni mobili

I dispositivi mobili sono particolarmente vulnerabili alla perdita di dati: un telefono può essere facilmente perso, rubato o infettato da malware. Secondo il Ponemon Institute (2023), il 42% delle aziende colpite da violazioni dei dati attribuisce gli incidenti ai dispositivi mobili. Senza crittografia, un utente malintenzionato può connettersi al dispositivo tramite USB, estrarre il database SQLite e leggere tutti i dati memorizzati. La crittografia risolve questo problema: anche se il database viene estratto, il suo contenuto rimane crittografato. Inoltre, negli Stati Uniti e nell'UE esistono leggi (GDPR, CCPA) che richiedono la crittografia dei dati personali e impongono multe fino al 4% del fatturato annuale per le violazioni. L'uso della crittografia non è solo una necessità tecnica, ma anche legale per qualsiasi applicazione mobile che gestisca dati degli utenti.

Crittografia simmetrica e asimmetrica

Tutti gli algoritmi di crittografia si dividono in due tipi principali: simmetrici (una chiave per crittografare e decrittografare) e asimmetrici (una coppia di chiavi — pubblica e privata). La scelta del tipo dipende dallo scenario d'uso: per crittografare i dati locali si utilizzano spesso algoritmi simmetrici per la loro velocità, mentre per lo scambio di chiavi e l'autenticazione si utilizzano algoritmi asimmetrici.

CaratteristicaSimmetricaAsimmetrica
Numero di chiavi1 (segreta)2 (pubblica + privata)
VelocitàElevata (1–10 GB/s)Bassa (1–10 MB/s)
Distribuzione delle chiaviProblematica — la chiave deve essere trasmessaSemplice — la chiave pubblica viene pubblicata
EsempiAES, ChaCha20RSA, ECDH, ECIES
Utilizzo nello sviluppo mobileCrittografia dei dati localiScambio di chiavi, firme digitali

In pratica, nelle applicazioni mobili viene utilizzata la crittografia ibrida: con un algoritmo asimmetrico (ad esempio ECDH) le parti si scambiano una chiave di sessione, e tutti i dati successivi vengono crittografati con un algoritmo simmetrico (AES o ChaCha20). Questo approccio combina la velocità della crittografia simmetrica con la sicurezza dello scambio asimmetrico di chiavi. Questo metodo è alla base di TLS 1.3, Signal Protocol e Apple iMessage.

Principali algoritmi di crittografia

Lo sviluppo mobile moderno utilizza diversi algoritmi di crittografia standardizzati, ciascuno progettato per attività specifiche con il proprio ambito di applicazione.

  • AES (Advanced Encryption Standard) — cifrario a blocchi simmetrico certificato dal NIST nel 2001. Utilizza chiavi da 128, 192 o 256 bit. La modalità consigliata è GCM (Galois/Counter Mode), che fornisce crittografia autenticata. AES-256 è utilizzato in Android Keystore, iOS Keychain e tutti i protocolli TLS moderni.
  • ChaCha20-Poly1305 — cifrario a flusso simmetrico sviluppato da Daniel Bernstein. Fornisce lo stesso livello di sicurezza di AES-256 ma funziona più velocemente su dispositivi senza accelerazione hardware AES (tipico per smartphone Android economici). ChaCha20 è utilizzato in TLS 1.3 come alternativa a AES-GCM ed è il cifrario principale in Signal Protocol.
  • RSA (Rivest-Shamir-Adleman) — algoritmo asimmetrico utilizzato per la crittografia delle chiavi e le firme digitali. La dimensione minima consigliata della chiave è di 2048 bit. RSA è più lento di ECDH, quindi nelle applicazioni mobili moderne viene sostituito dalla crittografia a curva ellittica (ECC).
  • ECDH (Elliptic Curve Diffie-Hellman) — protocollo asimmetrico di scambio di chiavi basato su curve ellittiche. Fornisce Perfect Forward Secrecy ed è utilizzato per impostazione predefinita in TLS 1.3. La curva Curve25519 (X25519) è la più comune nelle applicazioni mobili.

Come la crittografia protegge i dati degli utenti

La crittografia protegge i dati in tre scenari chiave: perdita del dispositivo (crittografia del disco e dei contenitori dell'app), intercettazione del traffico (protocolli di rete TLS/HTTPS) e fuga dal server (crittografia end-to-end). Ogni scenario richiede il proprio approccio e i propri strumenti.

Dati inattivi e in transito

I dati inattivi — dati sul dispositivo — vengono crittografati tramite Android Keystore e iOS Keychain. Su Android a partire dalla versione 7.0 viene utilizzata la crittografia basata su file (File-Based Encryption) e le app possono crittografare ulteriormente i propri dati tramite EncryptedSharedPreferences ed EncryptedFile della libreria AndroidX Security. Su iOS, tutte le app funzionano per impostazione predefinita con Data Protection API, che crittografa i file a livello di filesystem con una chiave legata al codice del dispositivo. Per i dati in transito, viene utilizzato TLS 1.2/1.3 con Certificate Pinning obbligatorio.

Crittografia end-to-end

La crittografia end-to-end (E2E) è il più alto livello di protezione dei dati, in cui un messaggio viene crittografato sul dispositivo del mittente e decrittografato solo sul dispositivo del destinatario. Il server di archiviazione e trasmissione non ha accesso al contenuto — gestisce solo blob crittografati. L'implementazione E2E più nota per applicazioni mobili è Signal Protocol, che utilizza l'algoritmo Double Ratchet in combinazione con X3DH (Extended Triple Diffie-Hellman) per lo scambio iniziale di chiavi. Signal Protocol fornisce Perfect Forward Secrecy e future secrecy: la compromissione di una chiave non rivela i messaggi precedenti o successivi. Secondo uno studio della Carnegie Mellon University (2023), la crittografia E2E nelle app di messaggistica riduce il rischio di fuga di comunicazioni del 99,7% rispetto alla sola crittografia TLS. L'uso di E2E è obbligatorio per le app delle categorie Health & Fitness e Finance secondo i requisiti di GDPR e HIPAA. Per implementare E2E nel proprio progetto, si consiglia di utilizzare la libreria Signal Protocol (Java/Swift) o basata su Olm (Matrix protocol). Quando si sceglie una soluzione E2E, valutare la compatibilità con la piattaforma: Signal Protocol richiede il supporto per l'invio asincrono e l'archiviazione delle chiavi sul client, il che complica gli scenari multi-dispositivo — per tali casi, Matrix Protocol con il suo modello di stanze potrebbe essere una scelta migliore.

Implementazione della crittografia nelle applicazioni mobili

Vediamo un esempio di crittografia e decrittografia dei dati su Android utilizzando Jetpack Security (AndroidX Security). La libreria fornisce EncryptedFile per la crittografia dei file ed EncryptedSharedPreferences per le impostazioni.

kotlin
val masterKey = MasterKey.Builder(context)
    .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
    .build()

val encryptedFile = EncryptedFile.Builder(
    context,
    File(context.filesDir, "secret.dat"),
    masterKey,
    EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB
).build()

encryptedFile.openFileOutput(applicationContext).use { outputStream ->
    outputStream.write("Sensitive user data".toByteArray(Charsets.UTF_8))
}

MasterKey viene creato utilizzando AES256-GCM — la modalità di crittografia simmetrica più sicura. La chiave viene memorizzata in Android Keystore, isolato dal processo principale: anche se l'app viene compromessa, un utente malintenzionato non può estrarre la chiave. EncryptedFile utilizza lo schema AES-256-GCM con HKDF per la derivazione della chiave e una dimensione di pagina di 4KB, offrendo un buon equilibrio tra velocità e sicurezza. Per leggere i dati, viene utilizzato openFileInput con gli stessi parametri: la libreria decrittografa automaticamente i dati durante la lettura.

Su iOS, funzionalità simili sono fornite tramite CryptoKit (Swift) utilizzando AES.GCM o ChaChaPoly. La chiave viene memorizzata nel Secure Enclave tramite Keychain Services. Il principio è lo stesso: le chiavi non lasciano mai l'archiviazione hardware sicura e i dati vengono crittografati prima di essere scritti sul disco. Questa architettura è conforme alle raccomandazioni OWASP MASVS (Mobile Application Security Verification Standard) di livello L2 per le applicazioni che gestiscono dati sensibili. Nei progetti reali, la combinazione di EncryptedSharedPreferences per i token ed EncryptedFile per i dati utente copre il 100% degli scenari di crittografia locale. Inoltre, per lavorare con chiavi ricevute dal server (ad esempio, chiavi di sessione ECDH), Android KeyStore viene utilizzato con il parametro purpose = KeyProperties.PURPOSE_ENCRYPT, che garantisce che la chiave possa essere utilizzata solo per operazioni crittografiche autorizzate e non venga mai esportata dall'archiviazione hardware alla RAM in testo normale.

Domande frequenti

Quale crittografia è considerata la più affidabile per le applicazioni mobili?

AES-256 in modalità GCM con archiviazione della chiave in memoria hardware (Android Keystore / iOS Keychain) è considerato lo standard aureo. Per il traffico di rete — TLS 1.3 con la curva ellittica Curve25519. ChaCha20-Poly1305 viene utilizzato come alternativa sui dispositivi senza AES hardware.

Qual è la differenza tra AES e RSA?

AES è un algoritmo simmetrico (una chiave), veloce, adatto per crittografare grandi volumi di dati. RSA è asimmetrico (una coppia di chiavi), lento, utilizzato per la crittografia delle chiavi e le firme, non per i dati. Nelle applicazioni mobili, AES crittografa i dati, RSA protegge le chiavi.

Bisogna crittografare tutti i dati nell'applicazione?

Bisogna crittografare i dati sensibili: token di accesso, password, informazioni personali, dati di pagamento, cartelle cliniche. I dati pubblici (immagini, contenuti) possono rimanere non crittografati, ma è meglio conservarli in un contenitore protetto dell'app.

Come funziona la crittografia end-to-end sui dispositivi mobili?

Con la crittografia end-to-end, i dati vengono crittografati sul dispositivo del mittente prima dell'invio e decrittografati solo sul dispositivo del destinatario. Il server vede solo dati crittografati. Il protocollo Double Ratchet, implementato in Signal Protocol, è il meccanismo E2E più comune nei messaggeri mobili.

Posso usare la stessa crittografia per i dati sul dispositivo e per la rete?

Tecnicamente possibile, ma sconsigliato. Per i dati sul dispositivo, utilizzare la crittografia simmetrica (AES-GCM) con una chiave dal Keystore. Per la rete, utilizzare TLS 1.3 con un set separato di chiavi e Certificate Pinning. La separazione impedisce che entrambi i canali vengano compromessi in caso di fuga di una chiave.

Riepilogo

  • La crittografia è un elemento di sicurezza obbligatorio per le applicazioni mobili, che protegge i dati inattivi e in transito.
  • AES-256 GCM è lo standard di crittografia simmetrica raccomandato dal NIST per tutti i tipi di dati.
  • La crittografia ibrida (ECDH + AES) combina la velocità dell'approccio simmetrico con la sicurezza di quello asimmetrico.
  • Android Keystore e iOS Keychain sono archivi di chiavi hardware che isolano il materiale crittografico dall'applicazione.
  • I dati inattivi vengono crittografati tramite EncryptedSharedPreferences ed EncryptedFile (Android) o Data Protection API (iOS).
  • I dati in transito sono protetti da TLS 1.3 con Certificate Pinning e Perfect Forward Secrecy.
  • Raccomandazione: crittografare tutti i dati sensibili tramite Jetpack Security (Android) o CryptoKit (iOS) con chiavi nell'archiviazione hardware.

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche