
La mia risposta breve: Su iPhone moderni e dispositivi Android di fascia alta uso di solito AES-GCM. Su Android più vecchi, economici o misti spesso ChaCha20-Poly1305 è la scelta migliore. Non per “più sicurezza”, ma per velocità, carico CPU, calore e batteria.
Se devo ridurre il tema a una regola semplice, è questa:
Un punto chiave: senza hardware AES, il costo può essere fino a 10 volte più cicli CPU per byte. Su Android entry-level ChaCha20 può essere circa 3× più veloce. Lo si nota in upload foto, sync, messaggi e cache.
Ciò a cui faccio attenzione:
In breve: se sviluppo un’app per molte classi Android voglio prestazioni uniformi. Se punto a dispositivi nuovi con hardware AES, AES-GCM è spesso la mia prima scelta.
| Punto | AES-GCM | ChaCha20-Poly1305 |
|---|---|---|
| Sicurezza con uso corretto | Alta | Alta |
| Vicino all'hardware | Forte | Basso |
| Su iPhone nuovi / flagship | Spesso davanti | Bene |
| Su dispositivi Android vecchi / economici | Spesso più debole | Spesso davanti |
| Carico CPU senza hardware AES | Piuttosto alto | Piuttosto basso |
| Calore / batteria su dispositivi deboli | Può aumentare di più | Spesso più uniforme |
| Rischio principale | Nonce duplicato, dati prima del controllo | Nonce duplicato, dati prima del controllo |
| Tipici usi mobili | dati locali, backend con focus AES | Messaggi, upload, parco Android misto |
Riassumo l'articolo così: Non è "Quale algoritmo è migliore?" la domanda centrale, ma "Su quale dispositivo gira la mia app e dove sono i dati?"
Alla fine si tratta di tre cose: struttura, uso dell'hardware e errori nell'implementazione. Per le app mobili contano soprattutto l'hardware disponibile, il tempo di esecuzione nel software e cosa succede se qualcosa va storto nell'implementazione.
AES-GCM è un metodo AEAD basato su AES. Su dispositivi con accelerazione hardware funziona molto velocemente. Se manca questo supporto, le prestazioni spesso calano notevolmente.
ChaCha20-Poly1305 è un metodo AEAD basato su ChaCha20. È progettato per l'esecuzione in software e quindi spesso ha un vantaggio su dispositivi Android più vecchi o economici.
Entrambi i metodi hanno lo stesso punto critico: una Nonce non deve mai essere riutilizzata con la stessa chiave. Se succede, la sicurezza di entrambi i metodi viene compromessa. Con AES-GCM possono persino diventare possibili delle falsificazioni.
Ugualmente importante: i dati decrittati devono essere elaborati solo dopo un'autenticazione riuscita. In altre parole: prima controlla, poi tocca. Altrimenti è come chiudere la porta di casa solo dopo essere entrati.
| Caratteristica | AES-GCM | ChaCha20-Poly1305 |
|---|---|---|
| Tipo di cifratura | Metodo AEAD basato su AES | Metodo AEAD basato su ChaCha20 |
| Autenticazione | GCM | Poly1305 |
| Vantaggio pratico | Molto veloce con accelerazione hardware | Vantaggioso su dispositivi senza accelerazione AES |
| Rischi tipici di implementazione | Riutilizzo della Nonce, elaborazione prima dell'autenticazione | Riutilizzo della Nonce, elaborazione prima dell'autenticazione |
Come questo influisce su velocità e batteria lo mostra la sezione successiva.
AES-GCM vs. ChaCha20-Poly1305: Mobile Encryption Guide by Device Class
Su dispositivi mobili, la classe del dispositivo fa soprattutto la differenza. AES-GCM beneficia molto dell’accelerazione hardware, mentre ChaCha20-Poly1305 resta veloce anche quando tutto gira in software. Proprio qui si vede il divario tra dispositivi high-end, di fascia media e più vecchi.
Per app con foto, messaggi e aggiornamenti d’asta conta soprattutto una cosa: Quanto bene girano la sincronizzazione e la crittografia su smartphone più vecchi? Perché lì si notano subito ritardi, carico elevato della CPU e batterie scariche.
Su iPhone recenti e dispositivi Android high-end AES-GCM è di solito più veloce. Il motivo è semplice: l’hardware esegue direttamente le operazioni AES, raggiungendo throughput molto alti. Allo stesso tempo, il carico della CPU, il calore e il consumo della batteria restano bassi. Questo rende anche più prevedibile la performance su diversi dispositivi Android.
Molti dispositivi Android più vecchi o economici senza estensioni crittografiche ARMv8 devono eseguire AES completamente in software. Questo richiede molto più tempo di calcolo: AES in software può consumare fino a 10 volte più cicli CPU per byte rispetto ad AES accelerato hardware. Il dispositivo si scalda più rapidamente e la batteria si scarica visibilmente più in fretta.
ChaCha20-Poly1305 è progettato per l’esecuzione in software e qui spesso ha un netto vantaggio. Lo si nota subito nelle sincronizzazioni, upload di foto e dati locali crittografati.
La tabella mostra quanto la classe del dispositivo possa influire su velocità e batteria.
| Piattaforma | Classe dispositivo | Accelerazione AES | Prestazioni | Carico CPU | Calore | Consumo batteria |
|---|---|---|---|---|---|---|
| iOS | iPhone moderno (A14+) | Completa (hardware) | AES-GCM più veloce* | Molto basso | Minimo | Trascurabile |
| Android | Flagship | Completa (hardware) | AES-GCM più veloce* | Basso | Minimo | Basso |
| Android | Fascia media (es. serie SD 6) | Parziale / variabile | ChaCha20 spesso più veloce* | Medio | Moderato | Moderato |
| Android | Entry-level / dispositivi vecchi | Nessuna (software) | ChaCha20 ~3× più veloce* | Alto | Riscaldamento rapido | Alto (con AES) |
Tutti i dati dipendono dal benchmark e variano in base a SoC e implementazione della libreria.
Un singolo valore di velocità da un dispositivo di test recente ha poco senso nella pratica. È più utile testare appositamente su dispositivi più vecchi ancora in uso.
Misura per 5–10 minuti sotto carico:
Importante anche: usa su entrambe le piattaforme la stessa libreria. Altrimenti non confronterai gli algoritmi, ma solo differenze di implementazione.
Quanto questo si noti con dati locali, immagini e chiamate API lo mostra la sezione successiva.
Per Gunfinder conta soprattutto una cosa: I dati vengono salvati localmente o trasmessi? Da questo dipende il rischio e quale misura di protezione è più efficace.
I dati memorizzati localmente sono spesso sottovalutati. Ed è proprio lì che si nasconde parte del problema. I risultati di ricerca salvati, i contenuti del carrello e i dati di account e profilo si trovano direttamente sul dispositivo. Se un backup non è protetto o il dispositivo è compromesso, questi dati possono diventare accessibili.
Per i dati locali conta soprattutto il dispositivo di destinazione. Se il dispositivo ha una accelerazione AES, AES-GCM è una scelta solida. Se manca questo supporto, ChaCha20-Poly1305 spesso funziona in modo più efficiente. La chiave dovrebbe essere conservata in modo sicuro nel Android Keystore o nel Apple Keychain o Secure Enclave. E un punto è imprescindibile: ogni file necessita di una propria nonce a 96 bit. Se una nonce viene riutilizzata, la sicurezza e l’integrità vengono compromesse.
Lo stesso principio base vale anche per le trasmissioni. Qui però il focus è diverso: sui dati utente e sulla registrazione.
TLS protegge il percorso di trasporto. Ma questo non significa automaticamente che anche i dati utente siano protetti. Se messaggi privati tra acquirenti e venditori o dati di offerte nelle aste finiscono nei log del server, senza una crittografia aggiuntiva a livello app sono leggibili in chiaro. Qui entrano in gioco AES-GCM e ChaCha20-Poly1305. Integrano la crittografia di trasporto come secondo livello di protezione.
Il punto cruciale non è quindi primariamente l’algoritmo. Ciò che conta è se i dati risiedono sul dispositivo o viaggiano in rete.
Per i dati locali la classe del dispositivo è il punto principale. Per dati API, upload e messaggi conta soprattutto una gestione pulita di chiavi e nonce.
Per Gunfinder conta alla fine proprio questo: gestione pulita di chiavi e nonce. Quale variante si adatta meglio nella pratica lo mostra la sezione successiva.
Per Gunfinder è soprattutto importante: quale dispositivo usa l’app e quali dati vengono elaborati? Da questo deriva nella pratica la scelta del metodo. La tabella qui sotto riassume e classifica i workflow tipici di Gunfinder.
| Requisito app | Ambiente dispositivo | Priorità | Algoritmo consigliato |
|---|---|---|---|
| Bozze criptate | iOS / Android top di gamma | Sicurezza hardware | AES-GCM |
| Inserzioni in cache | Parco dispositivi Android misto | Consistenza prestazioni | ChaCha20-Poly1305 |
| Dati account e transazioni | Tutte le piattaforme | Integrità dati | AES-GCM |
| Upload foto | Dispositivi Android più vecchi o entry-level | Efficienza batteria | ChaCha20-Poly1305 |
| Messaggi marketplace | Parco dispositivi Android misto | Bassa latenza | ChaCha20-Poly1305 |
| Aggiornamenti aste | Traffico backend | Standard AES esistente | AES-GCM |
Per tutti i casi vale la stessa struttura di base: archivio sicuro delle chiavi tramite Android Keystore o Apple Keychain, nonce univoci per ogni operazione, TLS 1.3 per ogni trasmissione e una rotazione regolare delle chiavi. Senza questi punti anche il miglior algoritmo aiuta solo a metà.
AES-GCM si adatta bene agli iPhone moderni e ai dispositivi Android di fascia alta, se è presente hardware AES e il backend si basa già su questo. Allora il metodo mostra i suoi punti di forza proprio dove i dispositivi lo supportano direttamente.
Non appena entrano in gioco anche dispositivi Android più vecchi o economici, ChaCha20-Poly1305 è spesso la scelta più affidabile. Il motivo è semplice: le prestazioni su questi dispositivi rimangono di solito più costanti rispetto all’AES software.
Entrambi gli algoritmi sono sicuri se usati correttamente. In breve: AES-GCM si adatta bene ad ambienti con hardware dedicato, ChaCha20-Poly1305 piuttosto a flotte Android miste.
Se il tuo dispositivo target ha accelerazione hardware AES dipende dalla CPU installata. Molti processori più recenti supportano AES-NI. Questo rende la crittografia molto più efficiente.
Su dispositivi Android e iOS è meglio controllare nelle specifiche tecniche del processore. Su smartphone e tablet basati su ARM l’accelerazione hardware per operazioni crittografiche è spesso già integrata. Il sistema operativo la usa di solito automaticamente.
Se usi una nonce più di una volta, comprometti la sicurezza della crittografia.
Allora gli attaccanti possono vedere schemi nei dati cifrati o addirittura dedurre la chiave usata.
Questo colpisce la riservatezza dei tuoi dati in modo grave. Perciò vale: la nonce deve essere sempre nuova e univoca per ogni operazione di cifratura.
No. TLS 1.3 protegge i dati durante la trasmissione. Non copre i dati dell’app memorizzati localmente sul dispositivo.
Se vuoi proteggere i dati in modo completo, ti serve quindi anche una crittografia locale. Per transazioni sensibili può essere utile anche AES-256.
Solo la combinazione di trasmissione sicura e crittografia locale aiuta anche in caso di problemi tecnici o accessi non autorizzati al dispositivo finale.