Od 27 marca 2025 r. zalecamy używanie android-latest-release zamiast aosp-main do kompilowania i wspołtworzenia AOSP. Więcej informacji znajdziesz w artykule o zmianach w AOSP.
Zadbaj o dobrą organizację dzięki kolekcji
Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.
Na urządzeniach z czytnikiem linii papilarnych użytkownicy mogą zarejestrować co najmniej 1 odcisk palca i używać go do odblokowywania urządzenia oraz wykonywania innych zadań. Android używa języka definicji interfejsu sprzętowego czytnika linii papilarnych (HIDL) do łączenia się z biblioteką konkretnego dostawcy i sprzętem czytnika linii papilarnych (np. czujnikiem linii papilarnych).
Aby zaimplementować interfejs HIDL odcisków palców, musisz zaimplementować IBiometricsFingerprint.hal w bibliotece dostawcy.
Dopasowywanie odcisków palców
Czytnik linii papilarnych urządzenia jest zwykle w stanie bezczynności. Jednak w odpowiedzi na wywołanie authenticate lub enroll czytnik linii papilarnych nasłuchuje dotknięcia (ekran może się też włączyć, gdy użytkownik dotknie czytnika linii papilarnych). Ogólny proces dopasowywania odcisków palców obejmuje te kroki:
Użytkownik umieszcza palec na czytniku linii papilarnych.
Biblioteka konkretnego dostawcy określa, czy w bieżącym zestawie zarejestrowanych szablonów odcisków palców występuje zgodność.
Pasujące wyniki są przekazywane do FingerprintService.
Ten proces zakłada, że odcisk palca został już zarejestrowany na urządzeniu, tzn. biblioteka konkretnego dostawcy zarejestrowała szablon odcisku palca. Więcej informacji znajdziesz w sekcji Uwierzytelnianie.
Architektura
Warstwa HAL odcisku palca współpracuje z tymi komponentami:
BiometricManagerbezpośrednio wchodzi w interakcję z aplikacją w procesie aplikacji.
Każda aplikacja ma instancję IBiometricsFingerprint.hal
FingerprintService działa w procesie systemowym, który obsługuje komunikację z warstwą HAL czytnika linii papilarnych.
Fingerprint HAL to implementacja w języku C/C++ interfejsu HIDL IBiometricsFingerprint. Zawiera bibliotekę dostawcy, która komunikuje się ze sprzętem konkretnego urządzenia.
Interfejs Keystore API i komponenty KeyMint (wcześniej Keymaster) zapewniają szyfrowanie sprzętowe na potrzeby bezpiecznego przechowywania kluczy w bezpiecznym środowisku, takim jak zaufane środowisko wykonawcze (TEE).
Rysunek 1. Przepływ danych wysokiego poziomu w przypadku uwierzytelniania odciskiem palca
Implementacja HAL specyficzna dla dostawcy musi używać protokołu komunikacyjnego wymaganego przez TEE. Obrazy w formacie RAW i przetworzone cechy odcisku palca nie mogą być przekazywane w niezaufanej pamięci. Wszystkie takie dane biometryczne muszą być przechowywane
w bezpiecznym sprzęcie, takim jak TEE. Uzyskanie dostępu do roota nie może
umożliwiać naruszenia bezpieczeństwa danych biometrycznych.
FingerprintService i fingerprintd nawiązują połączenia za pomocą interfejsu HAL odcisków palców z biblioteką konkretnego dostawcy, aby rejestrować odciski palców i wykonywać inne operacje.
Poniższe wytyczne dotyczące interfejsu HAL odcisku palca mają na celu zapewnienie, że dane dotyczące odcisku palca nie wyciekną i zostaną usunięte, gdy użytkownik zostanie usunięty z urządzenia:
Surowe dane odcisków palców ani ich pochodne (np. szablony) nie mogą być dostępne spoza sterownika czujnika ani TEE. Jeśli sprzęt obsługuje środowisko TEE, dostęp sprzętowy musi być ograniczony do tego środowiska i chroniony przez zasady SELinux. Kanał SPI (Serial Peripheral Interface) musi być dostępny tylko dla środowiska TEE, a wszystkie pliki urządzenia muszą mieć wyraźne zasady SELinux.
Rejestrowanie, zapisywanie i rozpoznawanie odcisku palca musi odbywać się w zaufanym środowisku wykonawczym.
W systemie plików może być przechowywana jedynie zaszyfrowana wersja odcisku palca, nawet jeśli sam system plików również jest szyfrowany.
Szablony odcisków palców muszą być podpisane prywatnym kluczem przypisanym do urządzenia.
W przypadku standardu Advanced Encryption Standard (AES) szablon musi być podpisany co najmniej za pomocą bezwzględnej ścieżki systemu plików, grupy i identyfikatora palca, tak aby pliki szablonu nie działały na innym urządzeniu ani dla nikogo innego niż użytkownik, który zarejestrował je na tym samym urządzeniu. Oznacza to na przykład, że skopiowanie odcisków palców od innego użytkownika na tym samym urządzeniu lub z innego urządzenia nie będzie działać.
Implementacje muszą używać ścieżki systemu plików podanej przez funkcję setActiveGroup() lub zapewniać sposób na wymazanie wszystkich danych szablonu użytkownika po jego usunięciu. Zdecydowanie zalecamy, aby pliki szablonów odcisków palców były przechowywane w zaszyfrowanej formie w podanej ścieżce. Jeśli jest to niemożliwe ze względu na wymagania dotyczące pamięci TEE, implementujący musi dodać punkty zaczepienia, aby zapewnić usunięcie danych po usunięciu użytkownika.
Przełącza automat stanu HAL, aby rozpocząć zbieranie i przechowywanie szablonu odcisku palca. Po zakończeniu rejestracji lub po upływie limitu czasu automat stanu HAL wraca do stanu bezczynności.
preEnroll()
Generuje unikalny token wskazujący początek rejestracji odcisku palca. Przekazuje token do funkcji enroll, aby mieć pewność, że wcześniej przeprowadzono uwierzytelnianie, np. za pomocą hasła. Aby zapobiec manipulacjom, token jest opakowywany po potwierdzeniu danych logowania urządzenia. Podczas rejestracji token musi zostać sprawdzony, aby potwierdzić, że jest nadal ważny.
getAuthenticatorId()
Zwraca token powiązany z bieżącym zestawem odcisków palców.
cancel()
Anuluje oczekujące operacje rejestracji lub uwierzytelniania. Automat stanów HAL wraca do stanu bezczynności.
enumerate()
Synchroniczne wywołanie służące do wyliczania wszystkich znanych szablonów odcisków palców.
remove()
Usuwa szablon odcisku palca.
setActiveGroup()
Ogranicza działanie HAL do zestawu odcisków palców należących do określonej grupy, zidentyfikowanej za pomocą identyfikatora grupy (GID).
authenticate()
Uwierzytelnia operację związaną z odciskiem palca (określoną przez identyfikator operacji).
setNotify()
Rejestruje funkcję użytkownika, która otrzymuje powiadomienia z HAL. Jeśli automat stanu HAL jest w stanie zajętości, funkcja jest blokowana, dopóki nie opuści tego stanu.
postEnroll()
Kończy operację rejestracji i unieważnia wygenerowany challenge preEnroll(). Tę funkcję należy wywołać na końcu sesji rejestracji wielu palców, aby wskazać, że nie można dodać więcej palców.
Treść strony i umieszczone na niej fragmenty kodu podlegają licencjom opisanym w Licencji na treści. Java i OpenJDK są znakami towarowymi lub zastrzeżonymi znakami towarowymi należącymi do firmy Oracle lub jej podmiotów stowarzyszonych.
Ostatnia aktualizacja: 2025-07-27 UTC.
[[["Łatwo zrozumieć","easyToUnderstand","thumb-up"],["Rozwiązało to mój problem","solvedMyProblem","thumb-up"],["Inne","otherUp","thumb-up"]],[["Brak potrzebnych mi informacji","missingTheInformationINeed","thumb-down"],["Zbyt skomplikowane / zbyt wiele czynności do wykonania","tooComplicatedTooManySteps","thumb-down"],["Nieaktualne treści","outOfDate","thumb-down"],["Problem z tłumaczeniem","translationIssue","thumb-down"],["Problem z przykładami/kodem","samplesCodeIssue","thumb-down"],["Inne","otherDown","thumb-down"]],["Ostatnia aktualizacja: 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)."]]