Oggi i nostri dispositivi mobili sono praticamente un diario in cui memorizziamo tutto: dalle foto intime ai dati della nostra carta di credito. Ecco perché non possiamo lasciare la sicurezza al caso. Quando parliamo di proteggere i dati sensibili su Android, Sistema Keystore Android Diventa lo strumento principale per impedire a qualsiasi attore malintenzionato di rubare le nostre chiavi crittografiche, essendo un pilastro fondamentale della Sicurezza Android.
In pratica, questo sistema funziona come una cassaforte digitale. Invece di memorizzare le chiavi come semplici file di testo nella memoria del telefono (il che sarebbe un suicidio in termini di sicurezza), le blocca in un container blindatoLa parte migliore è che, una volta inserita la chiave, puoi usarla per crittografare o firmare documenti, ma Non può mai essere estratto del dispositivo, anche se il sistema operativo è stato compromesso.
Come funziona la sicurezza al centro del sistema?
Il Keystore non scherza e protegge i dati chiave in due modi molto chiari. In primo luogo, impedisce a qualcuno dall'esterno del dispositivo di rubare i dati chiave, poiché impedisce l'estrazione dai processi dell'applicazione. In secondo luogo, garantisce che anche se qualcuno ha ottenuto l'accesso al sistema, non può usare la password per quello che vuole; le app devono definire usi autorizzati che il sistema si applichi rigorosamente.
Per rendere questo veramente robusto, Android si affida all'hardware. I dati chiave non passano attraverso l'elaborazione dell'app; quando è necessario eseguire un'operazione, i dati vengono inviati a un processo di sistema specializzato. Inoltre, se il telefono cellulare è moderno, le password sono collegate al Ambiente di esecuzione attendibile (TEE) o all'elemento sicuro (SE). Se disponi di un dispositivo con CassaforteLa sicurezza raggiunge livelli superiori, poiché questo modulo è dotato di una propria CPU, di una memoria sicura e di un generatore di numeri casuali reale, in grado di resistere persino agli attacchi fisici.
Per determinare se una chiave è effettivamente protetta dall'hardware, gli sviluppatori possono utilizzare getSecurityLevel() su Android 10 o superiore. Se il risultato è AMBIENTE_AFFIDABILE o CASSAFORTEPossiamo tirare un sospiro di sollievo perché la chiave si trova in un'area isolata del processore principale.
Controllo degli accessi e autorizzazioni d'uso
Una delle cose migliori di questo sistema è che puoi assegnare delle "regole" a ogni chiave quando la crei. Queste regole sono immutabili; una volta impostate, Non possono essere modificatiAd esempio, puoi limitare una chiave in modo che funzioni solo per algoritmi specifici, come AES o RSA, oppure definire un intervallo di tempo preciso durante il quale la chiave è valida.
Ma la cosa più potente è la autenticazione utenteÈ possibile configurare la chiave in modo che funzioni solo se l'utente si è autenticato di recente utilizzando il PIN, la sequenza o dati biometrici (impronta digitale o riconoscimento facciale)), considerando che il Sblocco facciale 2D vs 3D Offre diversi livelli di protezione. Ci sono due modalità : una che autorizza tutte le chiavi per un certo periodo di tempo dopo l'autenticazione e un'altra più rigorosa in cui ogni operazione crittografica deve essere autorizzato individualmente tramite un BiometricPrompt.
Keychain vs. Android Keystore Provider
A volte sorge la domanda su quale scegliere. L'API di Portachiavi È l'opzione ideale quando hai bisogno di credenziali che funzionino su tutto il sistema. Qui, l'utente sceglie, tramite un'interfaccia di sistema, quali credenziali desidera condividere con l'app. È molto utile per credenziali condivise tra diverse applicazioni con il consenso esplicito del proprietario del telefono cellulare.
Inoltre, l' Provider di keystore Android È progettato in modo che ogni applicazione gestisca le proprie chiavi privatamente. È l'opzione preferita quando si desidera solo la tua app avere accesso ai propri segreti senza che l'utente debba selezionare manualmente le chiavi da un elenco. Per implementare ciò, vengono utilizzate classi Java standard, come KeyStore, KeyPairGenerator o KeyGenerator.
Implementazione tecnica: crittografia e firme

Per crittografare i dati in modo simmetrico, l'opzione migliore è utilizzare AES-GCMQuesto metodo non solo mantiene la segretezza ma garantisce anche l'integrità dei dati rilevando se qualcuno ha manomesso i byte crittografati. È fondamentale ricordare che ogni operazione genera un Vettore di inizializzazione (IV) l'unico che deve essere memorizzato insieme ai dati crittografati per poter annullare l'operazione.
Se ciò di cui hai bisogno è una firma digitale, il modo per procedere è utilizzare RSAAll'interno del keystore viene generata una coppia di chiavi (pubblica e privata). La chiave privata rimane bloccata in hardware sicuro per firmare le informazioni, mentre la chiave pubblica può essere distribuita per verificare che il messaggio non sia stato alterato e che provenga dalla fonte originale.
Architettura interna ed evoluzione del sistema
Sotto il cofano, il sistema è una macchina complessa. AndroidKeyStore È il volto visibile dell'app, ma comunica con l' demone del keystore tramite Binder. Questo demone gestisce il keyblobs (chiavi crittografate) e si basa su HAL di KeyMint (precedentemente Keymaster) per svolgere lavori pesanti nel mondo della sicurezza.
La strada è stata lunga: da Android 6.0, che ha introdotto il controllo degli accessi e le primitive AES/HMAC, attraverso Android 7.0 con il certificazione chiave e collegamento della versione (per impedire a un aggressore di effettuare il downgrade del sistema operativo a una versione vulnerabile), fino ad Android 12. In quest'ultima versione, il demone è stato riscritto in Ruggine Per migliorare la sicurezza, è stato introdotto l'HAL di KeyMint, che supporta gli accordi sulle chiavi. ECDH e limitazioni all'uso delle chiavi.
Prospettiva forense e rischi di estrazione
Sebbene il keystore sia molto robusto, nel mondo della computer forensics esistono metodi per tentare di estrarre le informazioni. Le chiavi sono memorizzate crittografate in /misc/keystore/ (o in un database SQLite da Android 12). Per proteggerli, un Chiave di crittografia (KEK) derivati ​​da valori fissi dell'hardware sicuro.
Alcuni esperti di informatica forense tentano di eseguire decrittografato offline estraendo valori hardware tramite vulnerabilità specifiche del processore (come MTK o Qualcomm). Se riescono a ottenere la KEK, possono decrittografare le chiavi di archiviazione e successivamente accedere a database di applicazioni crittografati come Segnale o standard, che in genere utilizzano il Keystore per proteggere la chiave master dei loro database Realm.