Sto creando un'app per Android che deve essere molto sicura. Per l'autenticazione sul server, utilizzerà l'autenticazione a 2 fattori che include:
- username / password
- verifica sms
Non posso usare certificati client (con chiavi private), perché nel mio caso non sarebbe pratico.
La password verrà memorizzata in modo sicuro su un server (probabilmente hash e salt). Tuttavia, ho difficoltà a trovare il modo migliore per inserire la password nell'app per Android che verrà utilizzata come client.
Attualmente sto considerando 2 opzioni:
- Chiedi all'utente la password ogni volta che usa il servizio
- Salva la password nel DB del telefono e riutilizzala ogni volta che un utente utilizza il servizio
La prima opzione è buona perché la password non viene mai memorizzata sul telefono (eccetto la memoria temporanea nella RAM), ma la password può essere rubata se un dispositivo viene compromesso da un keylogger .
Ho letto dei modi per installare un keylogger su un dispositivo Android e ho scoperto che il modo più comune è quello di installare la vittima su una tastiera personalizzata che verrà utilizzata per tutte le app.
Questo è spiegato da D.W. qui: Keylogger su smartphone?
La seconda opzione è immune ai keylogger (tranne che la prima volta che l'utente inserisce una password), ma ha il rischio che alcuni malware danneggino il database. Non ho trovato molte informazioni sulla sicurezza di SQLite su Android.
Inoltre, la seconda opzione aumenta il rischio se qualcuno ottiene l'accesso fisico al dispositivo. Tuttavia, questo rischio può essere ridotto utilizzando una sorta di codice pin per proteggere l'accesso all'app.
E anche il secondo fattore di autenticazione (SMS nel mio caso) può essere compromesso, sia dal malware al telefono o intercettando l'SMS al provider.
Quindi, la mia domanda è: esiste un modo noto di scaricare un database di un'app su un dispositivo Android non root e qual è la probabilità che ciò accada?