Ab dem 27. März 2025 empfehlen wir, android-latest-release anstelle von aosp-main zu verwenden, um AOSP zu erstellen und Beiträge dazu zu leisten. Weitere Informationen finden Sie unter Änderungen am AOSP.
Mit Sammlungen den Überblick behalten
Sie können Inhalte basierend auf Ihren Einstellungen speichern und kategorisieren.
Auf Geräten mit einem Fingerabdrucksensor können Nutzer einen oder mehrere Fingerabdrücke registrieren und damit das Gerät entsperren und andere Aufgaben ausführen. Android verwendet die Fingerprint Hardware Interface Definition Language (HIDL), um eine Verbindung zu einer anbieterspezifischen Bibliothek und Fingerabdruckhardware (z. B. einem Fingerabdrucksensor) herzustellen.
Um das Fingerprint-HIDL zu implementieren, müssen Sie IBiometricsFingerprint.hal in einer anbieterspezifischen Bibliothek implementieren.
Fingerabdruckvergleich
Der Fingerabdrucksensor eines Geräts ist in der Regel im Leerlauf. Als Reaktion auf einen Aufruf von authenticate oder enroll wartet der Fingerabdrucksensor jedoch auf eine Berührung. Das Display wird möglicherweise auch aktiviert, wenn ein Nutzer den Fingerabdrucksensor berührt. Der allgemeine Ablauf des Fingerabdruckabgleichs umfasst die folgenden Schritte:
Der Nutzer legt einen Finger auf den Fingerabdrucksensor.
Die anbieterspezifische Bibliothek bestimmt, ob es eine Fingerabdruckübereinstimmung in der aktuellen Gruppe der registrierten Fingerabdruckvorlagen gibt.
Passende Ergebnisse werden an FingerprintService übergeben.
Bei diesem Ablauf wird davon ausgegangen, dass auf dem Gerät bereits ein Fingerabdruck registriert wurde, d. h., dass in der anbieterspezifischen Bibliothek eine Vorlage für den Fingerabdruck registriert wurde. Weitere Informationen finden Sie unter Authentifizierung.
Architektur
Die Fingerprint HAL interagiert mit den folgenden Komponenten.
BiometricManager interagiert direkt mit einer App in einem App-Prozess.
Jede App hat eine Instanz von IBiometricsFingerprint.hal.
FingerprintService wird im Systemprozess ausgeführt, der die Kommunikation mit dem Fingerabdruck-HAL übernimmt.
Das Fingerprint-HAL ist eine C/C++-Implementierung der IBiometricsFingerprint-HIDL-Schnittstelle. Sie enthält die anbieterspezifische Bibliothek, die mit der gerätespezifischen Hardware kommuniziert.
Die Komponenten Keystore API und KeyMint (früher Keymaster) bieten hardwarebasierte Kryptografie für die sichere Speicherung von Schlüsseln in einer sicheren Umgebung wie der Trusted Execution Environment (TEE).
Abbildung 1. Allgemeiner Datenfluss für die Fingerabdruckauthentifizierung
Eine anbieterspezifische HAL-Implementierung muss das von einem TEE erforderliche Kommunikationsprotokoll verwenden. Rohbilder und verarbeitete Fingerabdruckmerkmale dürfen nicht in nicht vertrauenswürdigen Speicher übergeben werden. Alle biometrischen Daten müssen in der sicheren Hardware wie dem TEE gespeichert werden. Das Rooting darf keine Auswirkungen auf biometrische Daten haben.
FingerprintService und fingerprintd rufen über die Fingerprint-HAL die anbieterspezifische Bibliothek auf, um Fingerabdrücke zu registrieren und andere Vorgänge auszuführen.
Abbildung 2. Interaktion des Fingerabdruck-Daemons mit der anbieterspezifischen Fingerabdruckbibliothek
Implementierungsrichtlinien
Die folgenden Richtlinien für das Fingerprint HAL sollen sicherstellen, dass Fingerabdruckdaten nicht weitergegeben und entfernt werden, wenn ein Nutzer von einem Gerät entfernt wird:
Auf Fingerabdruck-Rohdaten oder Derivate (z. B. Vorlagen) darf niemals außerhalb des Sensortreibers oder der TEE zugegriffen werden. Wenn die Hardware eine TEE unterstützt, muss der Hardwarezugriff auf die TEE beschränkt und durch eine SELinux-Richtlinie geschützt sein. Der SPI-Kanal (Serial Peripheral Interface) darf nur für das TEE zugänglich sein und für alle Geräte muss eine explizite SELinux-Richtlinie vorhanden sein.
Die Erfassung, Registrierung und Erkennung von Fingerabdrücken muss innerhalb der TEE erfolgen.
Im Dateisystem darf nur die verschlüsselte Version der Fingerabdruckdaten abgespeichert werden, auch wenn das Dateisystem selbst verschlüsselt ist.
Fingerabdruckvorlagen müssen mit einem privaten, gerätespezifischen Schlüssel signiert werden.
Für den Advanced Encryption Standard (AES) muss eine Vorlage mindestens mit dem absoluten Dateisystempfad, der Gruppe und der Finger-ID signiert werden, sodass Vorlagendateien auf einem anderen Gerät oder für andere Personen als den Nutzer, der sie auf demselben Gerät registriert hat, nicht verwendet werden können. So ist es beispielsweise nicht möglich, die Fingerabdruckdaten eines anderen Nutzers desselben Geräts oder von einem anderen Gerät zu kopieren.
Bei Implementierungen muss entweder der vom setActiveGroup()-Befehl bereitgestellte Dateisystempfad verwendet werden oder es muss eine Möglichkeit geben, alle Vorlagendaten des Nutzers zu löschen, wenn der Nutzer entfernt wird. Es wird dringend empfohlen, Fingerabdruckvorlagendateien verschlüsselt im angegebenen Pfad zu speichern. Wenn dies aufgrund der TEE-Speicheranforderungen nicht möglich ist, muss der Implementierer Hooks hinzufügen, um das Entfernen der Daten zu gewährleisten, wenn der Nutzer entfernt wird.
Fingerabdruckmethoden
Die Fingerprint-HIDL-Schnittstelle enthält die folgenden wichtigen Methoden in IBiometricsFingerprint.hal.
Method
Beschreibung
enroll()
Schaltet die HAL-Zustandsmaschine um, um das Erfassen und Speichern einer Fingerabdruckvorlage zu starten. Nach Abschluss der Registrierung oder nach einer Zeitüberschreitung kehrt der HAL-Zustandsautomat in den Leerlaufzustand zurück.
preEnroll()
Generiert ein eindeutiges Token, um den Beginn einer Fingerabdruckregistrierung anzugeben. Stellt der enroll-Funktion ein Token zur Verfügung, um sicherzustellen, dass zuvor eine Authentifizierung erfolgt ist, z. B. mit einem Passwort. Um Manipulationen zu verhindern, wird das Token nach der Bestätigung der Geräteanmeldedaten umschlossen. Das Token muss bei der Registrierung geprüft werden, um sicherzustellen, dass es noch gültig ist.
getAuthenticatorId()
Gibt ein Token zurück, das mit dem aktuellen Fingerabdrucksatz verknüpft ist.
cancel()
Bricht ausstehende Registrierungs- oder Authentifizierungsvorgänge ab. Die HAL-Zustandsmaschine wird in den Leerlaufzustand zurückgesetzt.
enumerate()
Synchroner Aufruf zum Auflisten aller bekannten Fingerabdruckvorlagen.
remove()
Löscht eine Fingerabdruckvorlage.
setActiveGroup()
Beschränkt einen HAL-Vorgang auf eine Reihe von Fingerabdrücken, die zu einer bestimmten Gruppe gehören, die durch eine Gruppen-ID (GID) identifiziert wird.
authenticate()
Authentifiziert einen fingerabdruckbezogenen Vorgang (identifiziert durch eine Vorgangs-ID).
setNotify()
Registriert eine Nutzerfunktion, die Benachrichtigungen vom HAL empfängt. Wenn sich die HAL-Zustandsmaschine in einem „busy“-Zustand befindet, wird die Funktion blockiert, bis die HAL den „busy“-Zustand verlässt.
postEnroll()
Schließt den Registrierungsvorgang ab und macht die generierte preEnroll()-Challenge ungültig. Diese Funktion muss am Ende einer Registrierungssitzung mit mehreren Fingern aufgerufen werden, um anzugeben, dass keine weiteren Finger hinzugefügt werden dürfen.
Alle Inhalte und Codebeispiele auf dieser Seite unterliegen den Lizenzen wie im Abschnitt Inhaltslizenz beschrieben. Java und OpenJDK sind Marken oder eingetragene Marken von Oracle und/oder seinen Tochtergesellschaften.
Zuletzt aktualisiert: 2025-07-27 (UTC).
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Benötigte Informationen nicht gefunden","missingTheInformationINeed","thumb-down"],["Zu umständlich/zu viele Schritte","tooComplicatedTooManySteps","thumb-down"],["Nicht mehr aktuell","outOfDate","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Problem mit Beispielen/Code","samplesCodeIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 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)."]]