HIDL za pomocą odcisku palca

Na urządzeniach z czytnikiem linii papilarnych użytkownicy mogą zarejestrować co najmniej 1 odcisku palca i używać ich do odblokowywania urządzenia oraz wykonywania innych zadań. Android używa języka definicji interfejsu sprzętowego do obsługi odcisków palców (HIDL) do łączenia się z biblioteką specyficzną dla danego dostawcy i sprzętem do obsługi odcisków palców (np. czytnikiem linii papilarnych).

Aby zaimplementować interfejs HIDL odcisku palca, musisz zaimplementować IBiometricsFingerprint.hal w bibliotece konkretnego dostawcy.

Dopasowywanie odcisków palców

Czytnik linii papilarnych urządzenia jest zazwyczaj nieaktywny. Jednak w odpowiedzi na wywołanie authenticate lub enroll czytnik linii papilarnych reaguje na dotyk (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:

  1. Użytkownik przykłada palec do czytnika linii papilarnych.
  2. Biblioteka dostawcy określa, czy istnieje dopasowanie odcisku w bieżącym zestawie zarejestrowanych szablonów odcisków.
  3. Pasujące wyniki są przekazywane do FingerprintService.

Ten proces zakłada, że odcisk palca został już zarejestrowany na urządzeniu, czyli biblioteka konkretnego dostawcy zarejestrowała szablon odcisku palca. Więcej informacji znajdziesz w sekcji Uwierzytelnianie.

Architektura

Interfejs HAL usługi rozpoznawania odcisków palców współpracuje z tymi komponentami.

  • BiometricManager wchodzi w bezpośrednią interakcję z aplikacją w ramach procesu aplikacji. Każda aplikacja ma instancję IBiometricsFingerprint.hal
  • FingerprintService działa w ramach procesu systemowego, który obsługuje komunikację z interfejsem HAL odcisku palca.
  • Fingerprint HAL to implementacja interfejsu HIDL IBiometricsFingerprint w języku C/C++. Zawiera bibliotekę dostawcy, która komunikuje się ze sprzętem związanym z danym urządzeniem.
  • Komponenty Keystore API i Keymaster zapewniają szyfrowanie sprzętowe umożliwiające bezpieczne przechowywanie kluczy w bezpiecznym środowisku, takim jak Trusted Execution Environment (TEE).
Przepływ danych w przypadku uwierzytelniania odciskiem palca
Rysunek 1. Przepływ danych na wysokim poziomie w przypadku uwierzytelniania odciskiem palca

Implementacja HAL firmy zewnętrznej musi używać protokołu komunikacyjnego wymaganego przez TEE. Obrazy w formacie RAW i przetworzone funkcje odcisku palca nie mogą być przekazywane w niezaufanej pamięci. Wszystkie takie dane biometryczne muszą być przechowywane na bezpiecznym sprzęcie, takim jak TEE. Odciski palców muszą pozostać niedostępne nawet wtedy, gdy na urządzeniu zostanie uzyskany dostęp do roota. Nie wolno ujawniać danych biometrycznych.

FingerprintServicefingerprintd wywołują interfejs Fingerprint HAL w bibliotece konkretnego dostawcy, aby rejestrować odciski palców i wykonywać inne operacje.

Interakcja z fingerprintd
Rysunek 2. Interakcja demona linii papilarnej z biblioteką dostawcy linii papilarnej

Wskazówki dotyczące implementacji

Poniższe wytyczne dotyczące interfejsu HAL usługi odcisku palca mają na celu zapewnienie, że nie dochodzi do wycieku danych odcisków palców i że są one usuwane, gdy użytkownik zostanie usunięty z urządzenia:

  • Dane odcisków palców w postaci nieprzetworzonej ani ich pochodne (np. szablony) nie mogą być dostępne poza sterownikiem 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ł interfejsu szeregowego (SPI) musi być dostępny tylko dla TEE, a w przypadku wszystkich plików na urządzeniu musi obowiązywać wyraźna zasada SELinux.
  • Pobieranie, rejestrowanie i rozpoznawanie odcisków palców 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 za pomocą prywatnego klucza powiązanego z urządzeniem. W przypadku standardu Advanced Encryption Standard (AES) szablon musi być co najmniej podpisany za pomocą bezwzględnej ścieżki w systemie plików, grupy i identyfikatora odcisku palca, aby pliki szablonów były nieczynne na innym urządzeniu lub dla kogokolwiek 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 usunięciu użytkownika. Zdecydowanie zalecamy przechowywanie plików szablonów odcisków palców w zaszyfrowanej formie na podanej ścieżce. Jeśli to nie jest możliwe ze względu na wymagania dotyczące pamięci TEE, implementator musi dodać elementy, które zapewnią usunięcie danych po usunięciu użytkownika.

Metody rozpoznawania odcisku palca

Interfejs Fingerprint HIDL zawiera te 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 upływie limitu czasu maszyna stanów HAL wraca do stanu bezczynności.
preEnroll() Generuje unikalny token, aby wskazać początek rejestracji odcisku palca. Przekazuje funkcji enroll token, aby zapewnić wcześniejsze uwierzytelnienie, na przykład za pomocą hasła. Aby zapobiec nieuprawnionej modyfikacji, token jest pakowany po potwierdzeniu danych logowania. 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() Wywołanie synchroniczne służące do wyliczenia 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 działanie związane z odczytem odcisku palca (identyfikowane przez identyfikator działania).
setNotify() Rejestruje funkcję użytkownika, która otrzymuje powiadomienia z HAL. Jeśli maszyna stanów HAL jest w stanie zajętości, funkcja jest blokowana, dopóki HAL nie przejdzie do stanu wolnego.
postEnroll() Zakończenie operacji rejestracji i unieważnienie wyzwania wygenerowanego przez preEnroll(). Funkcja ta musi zostać wywołana na końcu sesji rejestracji wielu palców, aby wskazać, że nie można dodawać więcej palców.

Więcej informacji znajdziesz w komentarzach w IBiometricsFingerprint.hal.