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 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:

  1. Użytkownik umieszcza palec na czytniku linii papilarnych.
  2. Biblioteka konkretnego dostawcy określa, czy w bieżącym zestawie zarejestrowanych szablonów odcisków palców występuje zgodność.
  3. 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).
Przepływ danych w przypadku uwierzytelniania odciskiem palca
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.

FingerprintServicefingerprintd 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.

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

Wskazówki dotyczące implementacji

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.

Metody odcisków cyfrowych

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

Metoda Opis
enroll() 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.

Więcej informacji o tych polach znajdziesz w komentarzach w IBiometricsFingerprint.hal.