Deseo utilizar el KeyStore respaldado por hardware de Android, pero me preocupa la seguridad y la facilidad de uso. Por lo que he leído aquí , KeyStore se borra cuando el usuario cambia el bloqueo del dispositivo, a menos que se omita setEncryptionRequired (). Por razones de facilidad de uso, parece que se debe hacer, de lo contrario, se borrarán todas las claves respaldadas por hardware una vez que se modifique el bloqueo del dispositivo.
Sin embargo, también he leído aquí que las claves respaldadas por hardware no son realmente almacenados en el TEE, pero más bien, almacenados como archivos de claves en / data / misc / keystore / user_0 /, cifrados por una clave específica del dispositivo que se almacena dentro del TEE. Dado que un cambio en el bloqueo del dispositivo borra el KeyStore, parece que la clave específica del dispositivo se deriva del bloqueo del dispositivo.
Por razones de seguridad, tiene sentido cifrar el archivo de clave, de lo contrario, cualquier usuario root podría leer los archivos de clave y extraer la clave privada, ya que presumiblemente estarían en su estado.
Así que estoy en un dilema. Por motivos de utilidad, debería omitir setEncryptionRequired (), pero por motivos de seguridad, debería establecer setEncryptionRequired ().
Por último, ¿es posible importar una clave privada en el KeyStore respaldado por hardware usando setKeyEntry ()? Puedo hacerlo sin errores, pero no estoy seguro de si está respaldado por hardware.
¿Mi entendimiento es correcto?