Uso del KeyStore respaldado por hardware de Android

8

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?

    
pregunta user1118764 24.03.2017 - 08:51
fuente

1 respuesta

1

setEncryptionRequired () : se utiliza para cifrar el par de claves en reposo y la clave de cifrado se deriva de la credencial de pantalla de bloqueo seguro (por ejemplo, contraseña, PIN, o patrón).

Almacén de claves respaldado por hardware : los archivos de entrada de clave generados por el almacenamiento de claves respaldado por hardware se cifran mediante claves específicas del dispositivo a las que solo pueden acceder los trustlets que se ejecutan en el TEE. .

De las Fuentes de Android

  

Los procesadores TEE se han convertido en un pilar de los dispositivos móviles de hoy en día. los   El procesador principal en estos dispositivos se considera "no confiable" y no puede   Acceda a ciertas áreas de la RAM, registros de hardware y fusibles en secreto.   Los datos (como claves criptográficas específicas del dispositivo ) se almacenan en la   fabricante.

Estas son las dos implementaciones de cifrado diferentes que utilizan claves de cifrado diferentes. Los archivos de entrada de clave generados por el almacén de claves respaldado por hardware se cifran utilizando claves específicas del dispositivo.

Para implementar otra capa de seguridad, Android permite a los desarrolladores cifrar aún más las claves mediante la clave de encriptación derivada del bloqueo de pantalla a través de la opción setEncryptionRequired (). Es claramente una relación de compromiso entre la funcionalidad y la seguridad.

Personalmente, creo que setEncryptionRequired () debe estar habilitado para los dispositivos que no son compatibles con el almacén de claves respaldado por hardware.

    
respondido por el Shiv Sahni 20.02.2018 - 09:03
fuente

Lea otras preguntas en las etiquetas