Desidero utilizzare il KeyStore supportato da hardware Android, ma sono preoccupato per la sicurezza e l'usabilità. Da quello che ho letto qui , KeyStore viene cancellato quando il l'utente cambia il blocco del dispositivo, a meno che setEncryptionRequired () non venga omesso. Per motivi di usabilità, sembra che questo debba essere fatto, altrimenti tutte le chiavi supportate da hardware verrebbero cancellate una volta che il blocco del dispositivo è stato modificato.
Tuttavia, ho letto anche qui che le chiavi supportate dall'hardware non sono in realtà memorizzato nel TEE, ma piuttosto memorizzato come file chiave in / data / misc / keystore / user_0 /, crittografato da una chiave specifica del dispositivo che è memorizzata all'interno del TEE. Poiché una modifica del blocco del dispositivo cancella il KeyStore, sembra che la chiave specifica del dispositivo sia derivata dal blocco del dispositivo.
Per motivi di sicurezza, ha senso crittografare il file chiave, altrimenti qualsiasi utente root sarebbe in grado di leggere i file chiave ed estrarre la chiave privata, dal momento che presumibilmente si troverebbero a loro a posto.
Quindi sono un po 'in un dilemma. Per motivi di usabilità, dovrei omettere setEncryptionRequired (), ma per motivi di sicurezza, dovrei impostare setEncryptionRequired ().
Infine, è possibile importare una chiave privata nel KeyStore supportato da hardware usando setKeyEntry ()? Sono in grado di farlo senza errori, ma non sono sicuro che sia supportato da hardware.
La mia comprensione è corretta?