Come utilizzare Android Keystore per archiviare password e altre informazioni sensibili
CasaCasa > Blog > Come utilizzare Android Keystore per archiviare password e altre informazioni sensibili

Come utilizzare Android Keystore per archiviare password e altre informazioni sensibili

Jun 03, 2024

I link di affiliazione su Android Authority possono farci guadagnare una commissione. Saperne di più.

Prima di iniziare a scrivere codice, è utile comprendere un po' il Keystore Android e le sue funzionalità. Il Keystore non viene utilizzato direttamente per archiviare i segreti dell'applicazione come la password, tuttavia fornisce un contenitore sicuro, che può essere utilizzato dalle app per archiviare le proprie chiavi private, in un modo che è piuttosto difficile da recuperare per utenti e app malintenzionati (non autorizzati) .

Come suggerisce il nome, un'app può archiviare più chiavi nel Keystore, ma un'app può solo visualizzare ed eseguire query sulle proprie chiavi. Idealmente, con il keystore, un'app genererebbe/o riceverebbe una coppia di chiavi privata/pubblica, che verrebbe archiviata nel keystore. La chiave pubblica può quindi essere utilizzata per crittografare i segreti dell'applicazione, prima di essere archiviata nelle cartelle specifiche dell'app, con la chiave privata utilizzata per decrittografare le stesse informazioni quando necessario.

Sebbene il provider Android Keystore sia stato introdotto nel livello API 18 (Android 4.3), il Keystore stesso è disponibile a partire dall'API 1, limitato all'uso da parte di sistemi VPN e WiFi.

Il Keystore stesso viene crittografato utilizzando il PIN/password della schermata di blocco dell'utente, pertanto, quando lo schermo del dispositivo è bloccato, il Keystore non è disponibile. Tienilo presente se disponi di un servizio in background che potrebbe aver bisogno di accedere ai segreti della tua applicazione.

Il layout principale della nostra app di esempio è ListView, con elementi costituiti da un elenco di tutte le chiavi (in realtà gli alias/nomi delle chiavi) create dall'app. Questo viene salvato come layout/activity_main.xml.

Ogni elemento nell'elenco contiene un TextView che rappresenta l'alias della chiave, un pulsante per eliminare la chiave e pulsanti ciascuno per crittografare e decrittografare il testo. Questo layout/list_item.xml nel nostro progetto.

L'intestazione List viene aggiunta a ListView utilizzando il metodo

Come per qualsiasi attività, iniziamo con il metodo onCreate(). La prima cosa che facciamo è ottenere un riferimento ad AndroidKeyStore e quindi inizializzarlo, utilizzando:

Chiamiamo quindi il nostro metodo refreshKeys() (discusso di seguito) per elencare tutte le chiavi che la nostra app ha archiviato nel Keystore. Ciò garantisce che tutte le chiavi nel Keystore verranno visualizzate immediatamente quando ListView viene inizializzato.

Per generare una coppia di chiavi pubblica/privata, abbiamo bisogno di un oggetto KeyPairGenerator. Otteniamo un'istanza di KeyPairGenerator impostata per utilizzare l'algoritmo RSA con "AndroidKeyStore". La chiamata a generateKeyPair() crea la nuova coppia di chiavi (chiave privata e chiave pubblica corrispondente) e la aggiunge al Keystore.

La decrittografia è fondamentalmente il processo di crittografia al contrario. La decrittografia viene eseguita utilizzando la chiave privata della coppia di chiavi. Quindi inizializziamo un Cipher con lo stesso algoritmo di trasformazione utilizzato per la crittografia, ma impostato su Cipher.DECRYPT_MODE. La stringa Base64 viene decodificata in un byte[], che viene quindi inserito in un ByteArrayInputStream. Utilizziamo quindi un CipherInputStream per decrittografare i dati in un byte[]. Questo viene quindi visualizzato come una stringa.

Android Keystore semplifica la creazione e la gestione delle chiavi delle app e fornisce un deposito sicuro e relativamente protetto in cui le applicazioni archiviano le chiavi di crittografia. Naturalmente la chiave pubblica può anche essere inviata al tuo server e la chiave pubblica del server inviata alle tue app, per garantire comunicazioni sicure tra la tua applicazione e il tuo server. Come al solito, il codice sorgente completo è disponibile su github per l'uso che preferisci. Per aggiunte, correzioni e/o discussioni, lascia un commento qui sotto, siamo ansiosi di sentire la tua opinione.