En los dispositivos con sensor de huellas dactilares, los usuarios pueden inscribir una o más huellas dactilares y usarlas para desbloquear el dispositivo y realizar otras tareas. Android usa el lenguaje de definición de interfaz de hardware (HIDL) de huellas digitales para conectarse a una biblioteca específica del proveedor y al hardware de huellas digitales (por ejemplo, un sensor de huellas digitales).
Para implementar el HIDL de Fingerprint, debes implementar IBiometricsFingerprint.hal
en una biblioteca específica del proveedor.
Coincidencia de huellas dactilares
Por lo general, el sensor de huellas dactilares de un dispositivo está inactivo. Sin embargo, en respuesta a una llamada a 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 general de la coincidencia de huellas digitales incluye los siguientes pasos:
- El usuario coloca un dedo en el sensor de huellas dactilares.
- La biblioteca específica del proveedor determina si hay una coincidencia de huella digital en el conjunto actual de plantillas de huellas digitales inscritas.
- Los resultados coincidentes se pasan a
FingerprintService
.
En este flujo, se supone que ya se inscribió una huella digital en el dispositivo, es decir, la biblioteca específica del proveedor inscribió una plantilla para la huella digital. Para obtener más detalles, consulta Autenticación.
Arquitectura
El HAL de Fingerprint interactúa con los siguientes componentes.
BiometricManager
interactúa directamente con una app en un proceso de app. Cada app tiene una instancia deIBiometricsFingerprint.hal
FingerprintService
opera en el proceso del sistema, que controla la comunicación con el HAL de huellas dactilares.- La HAL de huella dactilar es una implementación en 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 de la API de Keystore y KeyMint (anteriormente Keymaster) proporcionan criptografía respaldada por hardware para el almacenamiento seguro de claves en un entorno seguro, como el entorno de ejecución confiable (TEE).

Una implementación de HAL específica del proveedor debe usar el protocolo de comunicación que requiere un TEE. Las imágenes sin procesar y las características de huellas dactilares procesadas no deben pasarse a la memoria no confiable. Todos estos datos biométricos deben almacenarse en el hardware seguro, como el TEE. El acceso raíz no debe poder comprometer los datos biométricos.
FingerprintService
y fingerprintd
realizan llamadas a través del HAL de Fingerprint a la biblioteca específica del proveedor para inscribir huellas digitales y realizar otras operaciones.

Lineamientos de implementación
Los siguientes lineamientos del HAL de huellas dactilares están diseñados para garantizar que los datos de huellas dactilares no se filtren y se quiten cuando se quite un usuario de un dispositivo:
- Nunca se debe poder acceder a los datos de huellas digitales sin procesar ni a sus derivados (por ejemplo, plantillas) desde fuera del controlador del sensor o el TEE. Si el hardware admite un TEE, el acceso al hardware debe limitarse al TEE y debe estar protegido por una política de SELinux. El canal de la interfaz periférica en serie (SPI) solo debe ser accesible para el TEE, y debe haber una política de SELinux explícita en todos los archivos del dispositivo.
- La adquisición, el registro y el reconocimiento de huellas dactilares deben ocurrir dentro del TEE.
- Solo se puede almacenar la forma encriptada de los datos de huellas dactilares en el sistema de archivos, incluso si el sistema de archivos en sí está encriptado.
- Las plantillas de huellas dactilares deben firmarse con una clave privada específica del dispositivo. En el caso del Estándar de Encriptación Avanzada (AES), como mínimo, una plantilla debe firmarse con la ruta absoluta del sistema de archivos, el grupo y el ID de huella, de modo que los archivos de plantilla no funcionen en otro dispositivo ni para nadie más que el usuario que los inscribió en el mismo dispositivo. Por ejemplo, no debe funcionar la copia de datos de huellas dactilares de un usuario diferente en el mismo dispositivo o de otro dispositivo.
- Las implementaciones deben usar la ruta del sistema de archivos que proporciona la función
setActiveGroup()
o proporcionar una forma de borrar todos los datos de la plantilla del usuario cuando se quita al usuario. Se recomienda encarecidamente que los archivos de plantilla de huellas dactilares se almacenen de forma encriptada en la ruta proporcionada. Si esto no es factible debido a los requisitos de almacenamiento del TEE, el implementador debe agregar hooks para garantizar la eliminación de los datos cuando se quite al usuario.
Métodos de huellas dactilares
La interfaz HIDL de Fingerprint contiene los siguientes métodos principales en IBiometricsFingerprint.hal
.
Método | Descripción |
---|---|
enroll() |
Cambia la máquina de estados del HAL para iniciar la recopilación y el almacenamiento de una plantilla de huella dactilar. Cuando se completa la inscripción o después de un tiempo de espera, la máquina de estados del HAL vuelve al estado inactivo. |
preEnroll() |
Genera un token único para indicar el inicio de la inscripción de huellas digitales. Proporciona un token a la función enroll para garantizar que hubo una autenticación previa, por ejemplo, con una contraseña. Para evitar la manipulación, el token se encapsula después de que se confirma la credencial del dispositivo. El token se debe verificar durante la inscripción para comprobar que aún sea válido. |
getAuthenticatorId() |
Devuelve un token asociado con el conjunto de huellas digitales actual. |
cancel() |
Cancela las operaciones pendientes de inscripción o autenticación. La máquina de estados del HAL vuelve al estado inactivo. |
enumerate() |
Llamada síncrona para enumerar todas las plantillas de huellas dactilares conocidas. |
remove() |
Borra una plantilla de huella dactilar. |
setActiveGroup() |
Restringe una operación de HAL a un conjunto de huellas digitales que pertenecen a un grupo especificado, identificado por un identificador de grupo (GID). |
authenticate() |
Autentica una operación relacionada con la huella digital (identificada por un ID de operación). |
setNotify() |
Registra una función del usuario que recibe notificaciones del HAL. Si la máquina de estados del HAL está en un estado ocupado, la función se bloquea hasta que el HAL salga de ese estado. |
postEnroll() |
Finaliza la operación de inscripción y, luego, invalida el desafío preEnroll() generado. Se debe llamar a este método 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, consulta los comentarios en IBiometricsFingerprint.hal
.