Fingerprint HIDL

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 (HIDL) do łączenia się z biblioteką specyficzną dla dostawcy i sprzętem do obsługi odcisków palców (np. czytnikiem linii papilarnych).

Aby zaimplementować HIDL odcisków palców, musisz zaimplementować IBiometricsFingerprint.hal w bibliotece specyficznej dla 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 dotyku (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 specyficzna dla dostawcy sprawdza, czy w bieżącym zbiorze zarejestrowanych wzorców odcisków palców znajduje się pasujący odcisk.
  3. Wyniki dopasowania są przekazywane do FingerprintService.

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

Architektura

HAL odcisków palców współpracuje z tymi komponentami:

  • BiometricManager wchodzi w bezpośrednią 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 HAL odcisków palców.
  • HAL odcisków palców to implementacja w języku 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 KeyMint (wcześniej Keymaster) zapewniają kryptografię opartą na sprzęcie do bezpiecznego przechowywania kluczy w bezpiecznym środowisku, takim jak zaufane środowisko wykonawcze (TEE).
Przepływ danych w przypadku uwierzytelniania odciskiem palca
Rysunek 1. Ogólny przepływ danych na potrzeby uwierzytelniania za pomocą odcisku palca

Implementacja HAL specyficzna dla dostawcy musi używać protokołu komunikacji wymaganego przez TEE. Nieprzetworzone obrazy i przetworzone cechy odcisków palców 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 naruszać danych biometrycznych.

FingerprintService i fingerprintd wywołują bibliotekę specyficzną dla dostawcy za pomocą HAL odcisków palców, aby rejestrować odciski palców i wykonywać inne operacje.

Interakcja z usługą fingerprintd
Rysunek 2. Interakcja demona odcisków palców z biblioteką specyficzną dla dostawcy odcisków palców

Wytyczne dotyczące implementacji

Te wytyczne dotyczące HAL odcisków palców mają zapewnić, że dane dotyczące odcisków palców nie wyciekną i zostaną usunięte po usunięciu użytkownika z urządzenia:

  • Nieprzetworzone dane dotyczące odcisków palców ani ich pochodne (np. wzorce) nie mogą być dostępne spoza sterownika czujnika ani TEE. Jeśli sprzęt obsługuje a TEE, dostęp sprzętowy musi być ograniczony do TEE i chroniony przez zasady SELinux policy. Kanał SPI musi być dostępny tylko dla TEE, a wszystkie pliki urządzenia muszą być objęte wyraźnymi zasadami SELinux.
  • Pobieranie, rejestrowanie i rozpoznawanie odcisków palców musi odbywać się w TEE.
  • W systemie plików może być przechowywana jedynie zaszyfrowana wersja odcisku palca, nawet jeśli sam system plików również jest szyfrowany.
  • Wzorce odcisków palców muszą być podpisane prywatnym kluczem powiązanym z urządzeniem. W przypadku standardu AES wzorzec musi być podpisany co najmniej bezwzględną ścieżką systemu plików, grupą i identyfikatorem palca. Dzięki temu pliki wzorców nie będą działać na innym urządzeniu ani w przypadku żadnej osoby niż ta, która zarejestrowała je na tym urządzeniu. Na przykład kopiowanie danych dotyczących odcisków palców innego użytkownika na tym samym urządzeniu lub z innego urządzenia nie może działać.
  • Implementacje muszą używać ścieżki systemu plików podanej przez funkcję setActiveGroup() lub zapewniać sposób na wymazanie wszystkich danych wzorców użytkownika po usunięciu użytkownika. Zdecydowanie zalecamy przechowywanie plików wzorców odcisków palców w zaszyfrowanej postaci i w podanej ścieżce. Jeśli to jest niemożliwe ze względu na wymagania dotyczące miejsca na TEE, implementujący musi dodać haki, które zapewnią usunięcie danych po usunięciu użytkownika.

Metody odcisków palców

Interfejs HIDL odcisków palców zawiera te główne metody w IBiometricsFingerprint.hal.

Metoda Opis
enroll() Przełącza automat stanów HAL, aby rozpocząć zbieranie i przechowywanie wzorca odcisku palca. Po zakończeniu rejestracji, lub po upływie limitu czasu automat stanów HAL wraca do stanu bezczynności.
preEnroll() Generuje unikalny token wskazujący początek rejestracji odcisku palca. Przekazuje token do funkcji enroll, aby zapewnić wcześniejsze uwierzytelnienie, np. za pomocą hasła. Aby zapobiec manipulacjom, token jest opakowywany po potwierdzeniu danych uwierzytelniających urządzenia. Podczas rejestracji należy sprawdzić, czy token 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 wzorców odcisków palców.
remove() Usuwa wzorzec odcisku palca.
setActiveGroup() Ogranicza operację HAL do zbioru odcisków palców należących do określonej grupy, zidentyfikowanej za pomocą identyfikatora grupy (GID).
authenticate() Uwierzytelnia operację związaną z odciskiem palca (identyfikowaną za pomocą identyfikatora operacji).
setNotify() Rejestruje funkcję użytkownika, która otrzymuje powiadomienia z HAL. Jeśli automat stanów HAL jest w stanie zajętości, funkcja jest blokowana do momentu, aż HAL opuści ten stan.
postEnroll() Kończy operację rejestracji i unieważnia preEnroll() wygenerowane wyzwanie. Tę metodę należy wywołać na końcu sesji rejestracji wielu odcisków palców, aby wskazać, że nie można dodać więcej palców.

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