En dispositivos con sensor de huellas digitales, los usuarios pueden registrar una o más huellas digitales y usarlas para desbloquear el dispositivo y realizar otras tareas. Android utiliza el lenguaje de definición de interfaz de hardware de huellas dactilares (HIDL) para conectarse a una biblioteca específica del proveedor y al hardware de huellas dactilares (por ejemplo, un sensor de huellas dactilares).
Para implementar Fingerprint HIDL, debe implementar IBiometricsFingerprint.hal
en una biblioteca específica del proveedor.
Coincidencia de huellas dactilares
El sensor de huellas dactilares de un dispositivo generalmente está inactivo. Sin embargo, en respuesta a una llamada para authenticate
o enroll
, el sensor de huellas dactilares escucha un toque (la pantalla también puede activarse cuando un usuario toca el sensor de huellas dactilares). El flujo de alto nivel de comparación de huellas dactilares incluye los siguientes pasos:
- El usuario coloca un dedo sobre el sensor de huellas dactilares.
- La biblioteca específica del proveedor determina si hay una coincidencia de huellas dactilares en el conjunto actual de plantillas de huellas dactilares registradas.
- Los resultados coincidentes se pasan a
FingerprintService
.
Este flujo supone que ya se ha registrado una huella digital en el dispositivo, es decir, la biblioteca específica del proveedor ha registrado una plantilla para la huella digital. Para obtener más detalles, consulte Autenticación .
Arquitectura
El Fingerprint HAL interactúa con los siguientes componentes.
-
BiometricManager
interactúa directamente con una aplicación en un proceso de aplicación. Cada aplicación tiene una instancia deIBiometricsFingerprint.hal
-
FingerprintService
opera en el proceso del sistema, que maneja la comunicación con la huella digital HAL. - Fingerprint HAL es una implementación C/C++ de la interfaz IBiometricsFingerprint HIDL. Contiene la biblioteca específica del proveedor que se comunica con el hardware específico del dispositivo.
- Los componentes Keystore API y Keymaster proporcionan criptografía respaldada por hardware para el almacenamiento seguro de claves en un entorno seguro, como Trusted Execution Environment (TEE).
![Flujo de datos para la autenticación de huellas dactilares](https://source.android.com/static/docs/security/images/fingerprint-data-flow.png?authuser=0&hl=es)
Una implementación HAL específica del proveedor debe utilizar el protocolo de comunicación requerido por un TEE. Las imágenes sin procesar y las características de huellas dactilares procesadas no deben pasarse a una memoria que no sea de confianza. Todos estos datos biométricos deben almacenarse en un hardware seguro, como el TEE. El enraizamiento no debe poder comprometer los datos biométricos.
FingerprintService
y fingerprintd
realizan llamadas a través de Fingerprint HAL a la biblioteca específica del proveedor para registrar huellas digitales y realizar otras operaciones.
![Interacción con huellas dactilares](https://source.android.com/static/docs/security/images/fingerprint-daemon.png?authuser=0&hl=es)
Directrices de implementación
Las siguientes pautas de Fingerprint HAL están diseñadas para garantizar que los datos de huellas dactilares no se filtren y se eliminen cuando se elimina a un usuario de un dispositivo:
- Los datos de huellas dactilares sin procesar o sus derivados (por ejemplo, plantillas) nunca deben ser accesibles desde fuera del controlador del sensor o del TEE. Si el hardware admite un TEE, el acceso al hardware debe limitarse al TEE y protegerse mediante una política SELinux. El canal de interfaz periférica serie (SPI) debe ser accesible solo para el TEE y debe haber una política SELinux explícita en todos los archivos del dispositivo.
- La adquisición, inscripción y reconocimiento de huellas dactilares deben realizarse dentro del TEE.
- Sólo la forma cifrada de los datos de las huellas dactilares se puede almacenar en el sistema de archivos, incluso si el propio sistema de archivos está cifrado.
- Las plantillas de huellas dactilares deben firmarse con una clave privada específica del dispositivo. Para el Estándar de cifrado avanzado (AES), como mínimo, una plantilla debe estar firmada con la ruta absoluta del sistema de archivos, el grupo y el identificador de dedo, de modo que los archivos de plantilla no puedan utilizarse en otro dispositivo o para cualquier otra persona que no sea el usuario que los registró en el mismo dispositivo. Por ejemplo, copiar datos de huellas dactilares de un usuario diferente en el mismo dispositivo o desde otro dispositivo no debería funcionar.
- Las implementaciones deben utilizar la ruta del sistema de archivos proporcionada por la función
setActiveGroup()
o proporcionar una forma de borrar todos los datos de la plantilla de usuario cuando se elimina el usuario. Se recomienda encarecidamente que los archivos de plantilla de huellas dactilares se almacenen cifrados y en la ruta proporcionada. Si esto no es factible debido a los requisitos de almacenamiento de TEE, el implementador debe agregar enlaces para garantizar la eliminación de los datos cuando se elimine al usuario.
Métodos de huellas dactilares
La interfaz Fingerprint HIDL contiene los siguientes métodos principales en IBiometricsFingerprint.hal
.
Método | Descripción |
---|---|
enroll() | Cambia la máquina de estado HAL para iniciar la recopilación y el almacenamiento de una plantilla de huellas dactilares. Cuando se completa la inscripción, o después de un tiempo de espera, la máquina de estado HAL vuelve al estado inactivo. |
preEnroll() | Genera un token único para indicar el inicio de un registro de huellas digitales. Proporciona un token a la función enroll para garantizar que hubo autenticación previa, por ejemplo, mediante una contraseña. Para evitar manipulaciones, el token se empaqueta después de que se confirma la credencial del dispositivo. El token debe verificarse durante la inscripción para verificar que aún sea válido. |
getAuthenticatorId() | Devuelve un token asociado con el conjunto de huellas digitales actual. |
cancel() | Cancela operaciones pendientes de inscripción o autenticación. La máquina de estado HAL vuelve al estado inactivo. |
enumerate() | Llamada sincrónica para enumerar todas las plantillas de huellas dactilares conocidas. |
remove() | Elimina una plantilla de huellas digitales. |
setActiveGroup() | Restringe una operación HAL a un conjunto de huellas digitales que pertenecen a un grupo específico, identificado por un identificador de grupo (GID). |
authenticate() | Autentica una operación relacionada con huellas dactilares (identificada por un ID de operación). |
setNotify() | Registra una función de usuario que recibe notificaciones de HAL. Si la máquina de estado HAL está en un estado ocupado, la función se bloquea hasta que HAL abandona el estado ocupado. |
postEnroll() | Finaliza la operación de inscripción e invalida el desafío generado preEnroll() . Esto debe llamarse al final de una sesión de inscripción de varios dedos para indicar que no se pueden agregar más dedos. |
Para obtener más detalles sobre estos, consulte los comentarios en IBiometricsFingerprint.hal
.