Na urządzeniach z czytnikiem linii papilarnych użytkownicy mogą zarejestrować jeden lub więcej odcisków palców i używać ich do odblokowywania urządzenia i wykonywania innych zadań. Android używa języka definicji interfejsu sprzętowego odcisków palców (HIDL) do łączenia się z biblioteką i sprzętem do odcisków palców specyficznym dla dostawcy (na przykład czytnikiem odcisków palców).
Aby zaimplementować identyfikator Fingerprint HIDL, należy zaimplementować IBiometricsFingerprint.hal
w bibliotece specyficznej dla dostawcy.
Dopasowywanie odcisków palców
Czytnik linii papilarnych urządzenia jest zwykle bezczynny. Jednak w odpowiedzi na wezwanie do authenticate
lub enroll
czujnik linii papilarnych nasłuchuje dotyku (ekran może się również obudzić, gdy użytkownik dotknie czytnika linii papilarnych). Przepływ wysokiego poziomu dopasowywania odcisków palców obejmuje następujące kroki:
- Użytkownik kładzie palec na czytniku linii papilarnych.
- Biblioteka specyficzna dla dostawcy określa, czy istnieje zgodność odcisków palców w bieżącym zestawie zarejestrowanych szablonów odcisków palców.
- Pasujące wyniki są przekazywane do
FingerprintService
.
W tym przepływie przyjęto założenie, że odcisk palca został już zarejestrowany na urządzeniu, czyli biblioteka specyficzna dla dostawcy zarejestrowała szablon odcisku palca. Aby uzyskać więcej informacji, zobacz Uwierzytelnianie .
Architektura
HAL linii papilarnych współdziała z następującymi komponentami.
-
BiometricManager
współdziała bezpośrednio z aplikacją w procesie aplikacji. Każda aplikacja ma instancjęIBiometricsFingerprint.hal
-
FingerprintService
działa w procesie systemowym, który obsługuje komunikację z odciskiem palca HAL. - Fingerprint HAL to implementacja C/C++ interfejsu IBiometricsFingerprint HIDL. Zawiera bibliotekę specyficzną dla dostawcy, która komunikuje się ze sprzętem specyficznym dla urządzenia.
- Komponenty Keystore API i Keymaster zapewniają sprzętową kryptografię do bezpiecznego przechowywania kluczy w bezpiecznym środowisku, takim jak Trusted Execution Environment (TEE).

Implementacja HAL specyficzna dla dostawcy musi wykorzystywać protokół komunikacyjny wymagany przez TEE. Surowe obrazy i przetworzone cechy odcisków palców nie mogą być przekazywane do niezaufanej pamięci. Wszystkie takie dane biometryczne muszą być przechowywane w bezpiecznym sprzęcie, takim jak TEE. Rootowanie nie może naruszać danych biometrycznych.
FingerprintService
i fingerprintd
wykonują wywołania za pośrednictwem warstwy HAL Fingerprint do biblioteki specyficznej dla dostawcy w celu zarejestrowania odcisków palców i wykonania innych operacji.

Wytyczne wdrożeniowe
Poniższe wytyczne HAL dotyczące odcisków palców mają na celu zapewnienie, że dane odcisków palców nie wyciekną i zostaną usunięte , gdy użytkownik zostanie usunięty z urządzenia:
- Surowe dane odcisków palców lub ich pochodne (na przykład szablony) nigdy nie mogą być dostępne spoza sterownika czujnika lub TEE. Jeśli sprzęt obsługuje TEE, dostęp do sprzętu musi być ograniczony do TEE i chroniony polityką SELinux. Kanał Serial Peripheral Interface (SPI) musi być dostępny tylko dla TEE i musi istnieć wyraźna polityka SELinux dla wszystkich plików urządzenia.
- Pobieranie, rejestracja i rozpoznawanie odcisków palców musi odbywać się wewnątrz TEE.
- W systemie plików można przechowywać tylko zaszyfrowaną postać danych odcisków palców, nawet jeśli sam system plików jest zaszyfrowany.
- Szablony odcisków palców muszą być podpisane prywatnym kluczem specyficznym dla urządzenia. W przypadku Advanced Encryption Standard (AES) szablon musi być podpisany co najmniej bezwzględną ścieżką systemu plików, grupą i identyfikatorem odcisku palca, tak aby pliki szablonów nie działały na innym urządzeniu lub dla kogokolwiek innego niż użytkownik, który zarejestrował je w to samo urządzenie. Na przykład kopiowanie danych odcisków palców od innego użytkownika na tym samym urządzeniu lub z innego urządzenia nie może działać.
- Implementacje muszą albo wykorzystywać ścieżkę systemu plików dostarczoną przez funkcję
setActiveGroup()
albo zapewniać sposób na usunięcie wszystkich danych szablonu użytkownika, gdy użytkownik zostanie usunięty. Zdecydowanie zaleca się, aby pliki szablonów odcisków palców były przechowywane jako zaszyfrowane i przechowywane w podanej ścieżce. Jeśli jest to niewykonalne ze względu na wymagania dotyczące przechowywania TEE, osoba wdrażająca musi dodać punkty zaczepienia, aby zapewnić usunięcie danych po usunięciu użytkownika.
Metody odcisków palców
Interfejs Fingerprint HIDL zawiera następujące główne metody w IBiometricsFingerprint.hal
.
metoda | Opis |
---|---|
enroll() | Przełącza maszynę stanu HAL, aby rozpocząć zbieranie i przechowywanie szablonu odcisku palca. Po zakończeniu rejestracji lub po przekroczeniu limitu czasu maszyna stanu HAL powraca do stanu bezczynności. |
preEnroll() | Generuje unikatowy token wskazujący początek rejestracji odcisku palca. Udostępnia token funkcji enroll , aby zapewnić wcześniejsze uwierzytelnienie, na przykład przy użyciu hasła. Aby zapobiec manipulowaniu, token jest opakowywany po potwierdzeniu poświadczeń urządzenia. Token należy sprawdzić podczas rejestracji, aby sprawdzić, czy 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. Maszyna stanu HAL powraca do stanu bezczynności. |
enumerate() | Synchroniczne wywołanie wyliczania wszystkich znanych szablonów linii papilarnych. |
remove() | Usuwa szablon odcisku palca. |
setActiveGroup() | Ogranicza operację HAL do zestawu odcisków palców należących do określonej grupy, identyfikowanej przez identyfikator grupy (GID). |
authenticate() | Uwierzytelnia operację związaną z odciskiem palca (identyfikowaną przez identyfikator operacji). |
setNotify() | Rejestruje funkcję użytkownika, która odbiera powiadomienia z warstwy HAL. Jeśli maszyna stanu HAL jest w stanie zajętości, funkcja jest zablokowana do momentu opuszczenia przez HAL stanu zajętości. |
postEnroll() | Kończy operację rejestracji i unieważnia wygenerowane wezwanie preEnroll() . Musi to zostać wywołane na końcu sesji rejestracji wielu palców, aby wskazać, że nie można dodać więcej palców. |
Więcej informacji na ten temat można znaleźć w komentarzach w IBiometricsFingerprint.hal
.