En dispositivos con sensor de huellas dactilares, los usuarios pueden registrar una o más huellas dactilares y usar esas huellas dactilares 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 digitales 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 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 registradas.
- Los resultados coincidentes se pasan a
FingerprintService
.
Este flujo supone que ya se registró una huella digital en el dispositivo, es decir, la biblioteca específica del proveedor registró 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 el entorno de ejecución de confianza (TEE).
![Flujo de datos para la autenticación de huellas dactilares](https://source.android.google.cn/static/docs/security/images/fingerprint-data-flow.png?authuser=7&hl=es-419)
Una implementación HAL específica del proveedor debe usar 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.google.cn/static/docs/security/images/fingerprint-daemon.png?authuser=7&hl=es-419)
Pautas de implementación
Las siguientes pautas HAL de huellas digitales están diseñadas para garantizar que los datos de huellas digitales no se filtren y se eliminen cuando se elimina a un usuario de un dispositivo:
- Los datos de huellas dactilares sin procesar o derivados (por ejemplo, plantillas) nunca deben ser accesibles desde fuera del controlador del sensor o TEE. Si el hardware es compatible con un TEE, el acceso al hardware debe estar limitado al TEE y protegido por una política de SELinux. El canal de interfaz periférica en 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, el registro y el reconocimiento de huellas dactilares deben ocurrir dentro del TEE.
- Solo la forma encriptada de los datos de huellas dactilares se puede almacenar en el sistema de archivos, incluso si el sistema de archivos en sí está encriptado.
- Las plantillas de huellas dactilares se deben firmar 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 del sistema de archivos, el grupo y el ID de dedo absolutos, de modo que los archivos de la plantilla no funcionen en otro dispositivo o para cualquier otra persona que no sea el usuario que los inscribió en el mismo dispositivo. Por ejemplo, la copia de datos de huellas dactilares de un usuario diferente en el mismo dispositivo o desde otro dispositivo no debe funcionar.
- Las implementaciones deben usar 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 ganchos para garantizar la eliminación de los datos cuando se elimine el 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 el registro, 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 dactilares. Proporciona un token a la función enroll para garantizar que haya una autenticación previa, por ejemplo, mediante una contraseña. Para evitar la manipulación, 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 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() | Elimina una plantilla de huella digital. |
setActiveGroup() | Restringe una operación HAL a un conjunto de huellas dactilares que pertenecen a un grupo específico, 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 de usuario que recibe notificaciones de la HAL. Si la máquina de estado HAL está ocupada, la función se bloquea hasta que HAL deja el estado ocupado. |
postEnroll() | Finaliza la operación de registro e invalida el desafío generado preEnroll() . Esto debe llamarse al final de una sesión de registro 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
.