En los dispositivos con un 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 la interfaz de hardware (HIDL) de huellas dactilares para conectarse a una biblioteca específica del proveedor y al hardware de huellas dactilares (por ejemplo, un sensor de huellas dactilares).
Para implementar el HIDL de huellas dactilares, debes implementar IBiometricsFingerprint.hal
en una biblioteca específica del proveedor.
Coincidencia de huellas dactilares
El sensor de huellas dactilares de un dispositivo suele estar 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 de alto nivel de la coincidencia de huellas dactilares 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 huellas dactilares en el conjunto actual de plantillas de huellas dactilares inscritas.
- Los resultados de la coincidencia se pasan a
FingerprintService.
Este flujo supone que ya se inscribió una huella dactilar en el dispositivo, es decir, que la biblioteca específica del proveedor inscribió una plantilla para la huella dactilar. Para obtener más detalles, consulta Autenticación.
Arquitectura
El HAL de huellas dactilares interactúa con los siguientes componentes.
BiometricManagerinteractúa directamente con una app en un proceso de app. Cada app tiene una instancia deIBiometricsFingerprint.hal.FingerprintServiceopera en el proceso del sistema, que controla la comunicación con el HAL de huellas dactilares.- El HAL de huellas dactilares es una implementación de 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 funciones de huellas dactilares procesadas no deben pasar a la memoria no confiable. Todos esos datos biométricos deben almacenarse en el hardware seguro, como el TEE. El rooting no debe poder vulnerar los datos biométricos.
FingerprintService y fingerprintd realizan llamadas a través del HAL de huellas dactilares a la biblioteca específica del proveedor para inscribir huellas dactilares 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 quita un usuario de un dispositivo:
- Nunca se debe poder acceder a los datos de huellas dactilares sin procesar ni a los derivados (por ejemplo, plantillas) nunca se debe poder acceder 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 SELinux El canal de la interfaz periférica serial (SPI) solo debe ser accesible para el TEE, y debe haber una política SELinux explícita en todos los archivos del dispositivo.
- La adquisición, la inscripción 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 está encriptado.
- Las plantillas de huellas dactilares deben firmarse con una clave privada específica del dispositivo. Para el 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 del dedo, de modo que los archivos de plantilla no puedan funcionar 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
setActiveGroup()función o proporcionar una forma de borrar todos los datos de la plantilla del usuario cuando se quita el usuario. Se recomienda almacenar los archivos de plantilla de huellas dactilares encriptados y almacenados en la ruta proporcionada. Si esto es inviable debido a los requisitos de almacenamiento de TEE, el implementador debe agregar hooks para garantizar la eliminación de los datos cuando se elimine el usuario.
Métodos de huellas dactilares
La interfaz HIDL de huellas dactilares 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 una
inscripción de huellas dactilares. Proporciona un token a la función enroll para
garantizar que haya 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() |
Muestra un token asociado con el conjunto de huellas dactilares actual. |
cancel() |
Cancela las operaciones de inscripción o autenticación pendientes. La máquina de estado HAL vuelve al estado inactivo. |
enumerate() |
Llamada síncrona para enumerar todas las plantillas de huellas dactilares conocidas. |
remove() |
Borra una plantilla de huellas dactilares. |
setActiveGroup() |
Restringe una operación HAL a un conjunto de huellas dactilares que pertenecen a un grupo especificado, 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 del HAL. Si la máquina de estado HAL está en un estado ocupado, la función se bloquea hasta que el HAL abandone el estado ocupado. |
postEnroll() |
Finaliza la operación de inscripción y anula el
preEnroll() desafío generado. Se debe llamar al final de una
sesión de inscripción de varias huellas dactilares para indicar que no se pueden agregar más dedos. |
Para obtener más detalles, consulta los comentarios en IBiometricsFingerprint.hal.