A partir del 27 de marzo de 2025, te recomendamos que uses android-latest-release en lugar de aosp-main para compilar y contribuir a AOSP. Para obtener más información, consulta Cambios en AOSP.
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
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 de IBiometricsFingerprint.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).
Figura 1: Flujo de datos de alto nivel para la autenticación con huella digital
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.
Figura 2: Interacción del daemon de huellas dactilares con la biblioteca específica del proveedor de huellas dactilares
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.
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2025-07-27 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-07-27 (UTC)"],[],[],null,["# Fingerprint HIDL\n\nOn devices with a fingerprint sensor, users can enroll one or more\nfingerprints and use those fingerprints to unlock the device and perform other\ntasks. Android uses the Fingerprint Hardware Interface Definition Language\n(HIDL) to connect to a vendor-specific library and fingerprint hardware (for\nexample, a fingerprint sensor).\n\nTo implement the Fingerprint HIDL, you must implement [`IBiometricsFingerprint.hal`](https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/android16-release/biometrics/fingerprint/2.1/IBiometricsFingerprint.hal)\nin a vendor-specific library.\n\nFingerprint matching\n--------------------\n\nThe fingerprint sensor of a device is generally idle. However, in response to\na call to `authenticate` or `enroll`, the\nfingerprint sensor listens for a touch (the screen might also wake when a user\ntouches the fingerprint sensor). The high-level flow of fingerprint matching\nincludes the following steps:\n\n1. User places a finger on the fingerprint sensor.\n2. The vendor-specific library determines if there is a fingerprint match in the current set of enrolled fingerprint templates.\n3. Matching results are passed to `FingerprintService`.\n\nThis flow assumes that a fingerprint has already been enrolled on the device, that is,\nthe vendor-specific library has enrolled a template for the fingerprint. For more\ndetails, see [Authentication](/docs/security/features/authentication).\n| **Note:** The more fingerprint templates stored on a device, the more time required for fingerprint matching.\n\nArchitecture\n------------\n\nThe Fingerprint HAL interacts with the following components.\n\n- `BiometricManager` interacts directly with an app in an app process. Each app has an instance of `IBiometricsFingerprint.hal`\n- `FingerprintService` operates in the system process, which handles communication with fingerprint HAL.\n- **Fingerprint HAL** is a C/C++ implementation of the IBiometricsFingerprint HIDL interface. This contains the vendor-specific library that communicates with the device-specific hardware.\n- **Keystore API and KeyMint (previously Keymaster)** components provide hardware-backed cryptography for secure key storage in a secure environment, such as the Trusted Execution Environment (TEE).\n\n**Figure 1.** High-level data flow for fingerprint authentication\n\nA vendor-specific HAL implementation must use the communication protocol\nrequired by a TEE. Raw images and processed fingerprint features must not\nbe passed in untrusted memory. All such biometric data needs to be stored\nin the secure hardware such as the TEE. Rooting **must not**\nbe able to compromise biometric data.\n\n`FingerprintService` and `fingerprintd` make calls through the Fingerprint HAL to\nthe vendor-specific library to enroll fingerprints and perform other\noperations.\n**Figure 2.** Interaction of the fingerprint daemon with the fingerprint vendor-specific library\n\nImplementation guidelines\n-------------------------\n\nThe following Fingerprint HAL guidelines are designed to ensure that\nfingerprint data is **not leaked** and is **removed**\nwhen a user is removed from a device:\n\n- Raw fingerprint data or derivatives (for example, templates) must never be accessible from outside the sensor driver or TEE. If the hardware supports a TEE, hardware access must be limited to the TEE and protected by an SELinux policy. The Serial Peripheral Interface (SPI) channel must be accessible only to the TEE and there must be an explicit SELinux policy on all device files.\n- Fingerprint acquisition, enrollment, and recognition must occur inside the TEE.\n- Only the encrypted form of the fingerprint data can be stored on the file system, even if the file system itself is encrypted.\n- Fingerprint templates must be signed with a private, device-specific key. For Advanced Encryption Standard (AES), at a minimum a template must be signed with the absolute file-system path, group, and finger ID such that template files are inoperable on another device or for anyone other than the user that enrolled them on the same device. For example, copying fingerprint data from a different user on the same device or from another device must not work.\n- Implementations must either use the file-system path provided by the `setActiveGroup()` function or provide a way to erase all user template data when the user is removed. It's strongly recommended that fingerprint template files be stored as encrypted and stored in the path provided. If this is infeasible due to TEE storage requirements, the implementer must add hooks to ensure removal of the data when the user is removed.\n\nFingerprint methods\n-------------------\n\nThe Fingerprint HIDL interface contains the following major methods in\n[`IBiometricsFingerprint.hal`](https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/android16-release/biometrics/fingerprint/2.1/IBiometricsFingerprint.hal).\n\n| Method | Description |\n|------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| `enroll()` | Switches the HAL state machine to start the collection and storage of a fingerprint template. When enrollment is complete, or after a timeout, the HAL state machine returns to the idle state. |\n| `preEnroll()` | Generates a unique token to indicate the start of a fingerprint enrollment. Provides a token to the `enroll` function to ensure there was prior authentication, for example, using a password. To prevent tampering, the token is wrapped after the device credential is confirmed. The token must be checked during enrollment to verify that it's still valid. |\n| `getAuthenticatorId()` | Returns a token associated with the current fingerprint set. |\n| `cancel()` | Cancels pending enroll or authenticate operations. The HAL state machine is returned to the idle state. |\n| `enumerate()` | Synchronous call for enumerating all known fingerprint templates. |\n| `remove()` | Deletes a fingerprint template. |\n| `setActiveGroup()` | Restricts a HAL operation to a set of fingerprints that belong to a specified group, identified by a group identifier (GID). |\n| `authenticate()` | Authenticates a fingerprint-related operation (identified by an operation ID). |\n| `setNotify()` | Registers a user function that receives notifications from the HAL. If the HAL state machine is in a busy state, the function is blocked until the HAL leaves the busy state. |\n| `postEnroll()` | Finishes the enroll operation and invalidates the `preEnroll()` generated challenge. This must be called at the end of a multifinger enrollment session to indicate that no more fingers may be added. |\n\nFor more details on these, refer to the comments in [`IBiometricsFingerprint.hal`](https://android.googlesource.com/platform/hardware/interfaces/+/refs/heads/android16-release/biometrics/fingerprint/2.1/IBiometricsFingerprint.hal)."]]