Odcisk palca HIDL

Na urządzeniach wyposażonych w czujnik odcisków palców 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 linii papilarnych (HIDL) do łączenia się z biblioteką dostawcy i sprzętem obsługującym odciski palców (na przykład czujnikiem linii papilarnych).

Aby zaimplementować Fingerprint HIDL, należy zaimplementować IBiometricsFingerprint.hal w bibliotece specyficznej dla dostawcy.

Dopasowanie odcisków palców

Czujnik odcisków palców w urządzeniu jest zazwyczaj bezczynny. Jednak w odpowiedzi na wezwanie do authenticate lub enroll czujnik odcisków palców nasłuchuje dotyku (ekran może się również obudzić, gdy użytkownik dotknie czujnika odcisków palców). Zaawansowany proces dopasowywania odcisków palców obejmuje następujące kroki:

  1. Użytkownik kładzie palec na czytniku linii papilarnych.
  2. Biblioteka specyficzna dla dostawcy określa, czy w bieżącym zestawie zarejestrowanych szablonów odcisków palców znajduje się odpowiedni odcisk palca.
  3. Pasujące wyniki są przesyłane do FingerprintService .

W tym przepływie zakłada się, że odcisk palca został już zarejestrowany na urządzeniu, co oznacza, że ​​biblioteka specyficzna dla dostawcy zarejestrowała szablon odcisku palca. Aby uzyskać więcej informacji, zobacz Uwierzytelnianie .

Architektura

Fingerprint HAL 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 czytnikiem linii papilarnych 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).
Przepływ danych w celu uwierzytelnienia odcisków palców
Rysunek 1. Wysoki poziom przepływu danych do uwierzytelniania odcisków palców

Implementacja HAL specyficzna dla dostawcy musi korzystać z protokołu komunikacyjnego wymaganego przez TEE. Surowe obrazy i przetworzone funkcje odcisków palców nie mogą być przekazywane do niezaufanej pamięci. Wszystkie takie dane biometryczne muszą być przechowywane na bezpiecznym sprzęcie, takim jak TEE. Rootowanie nie może powodować naruszenia danych biometrycznych.

FingerprintService i fingerprintd wykonują wywołania poprzez warstwę Fingerprint HAL do biblioteki specyficznej dla dostawcy w celu zarejestrowania odcisków palców i wykonania innych operacji.

Interakcja z odciskami palców
Rysunek 2. Interakcja demona odcisków palców z biblioteką specyficzną dla dostawcy odcisków palców

Wytyczne wdrożeniowe

Poniższe wytyczne HAL dotyczące linii papilarnych mają na celu zapewnienie, że dane odcisków palców nie wyciekną i zostaną usunięte po usunięciu użytkownika z urządzenia:

  • Surowe dane odcisków palców lub ich pochodne (na przykład szablony) nie mogą być nigdy 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ł szeregowego interfejsu peryferyjnego (SPI) musi być dostępny tylko dla TEE i musi istnieć wyraźna polityka SELinux dotycząca wszystkich plików urządzenia.
  • Pobieranie, rejestracja i rozpoznawanie odcisków palców musi nastąpić wewnątrz TEE.
  • W systemie plików można przechowywać wyłącznie 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 standardu Advanced Encryption Standard (AES) szablon musi być podpisany co najmniej bezwzględną ścieżką systemu plików, grupą i identyfikatorem palca, tak aby pliki szablonów nie mogły działać na innym urządzeniu ani dla nikogo 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 korzystać ze ścieżki systemu plików dostarczonej przez funkcję setActiveGroup() , albo zapewniać możliwość usunięcia wszystkich danych szablonu użytkownika po usunięciu użytkownika. Zdecydowanie zaleca się, aby pliki szablonów odcisków palców były przechowywane w postaci zaszyfrowanej i przechowywane w podanej ścieżce. Jeśli jest to niewykonalne ze względu na wymagania dotyczące przechowywania TEE, wdrażający musi dodać haki, 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 w celu rozpoczęcia gromadzenia i przechowywania szablonu odcisku palca. Po zakończeniu rejestracji lub po upływie limitu czasu maszyna stanu HAL powraca do stanu bezczynności.
preEnroll() Generuje unikalny token wskazujący rozpoczęcie rejestracji odcisku palca. Udostępnia token funkcji enroll , aby upewnić się, że nastąpiło wcześniejsze uwierzytelnienie, na przykład przy użyciu hasła. Aby zapobiec manipulacji, token jest pakowany po potwierdzeniu danych uwierzytelniających urządzenia. Token należy sprawdzić podczas rejestracji, aby upewnić się, że jest on nadal ważny.
getAuthenticatorId() Zwraca token powiązany z bieżącym zestawem odcisków palców.
cancel() Anuluje oczekujące operacje rejestracji lub uwierzytelnienia. 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, identyfikowanych za pomocą identyfikatora grupy (GID).
authenticate() Uwierzytelnia operację związaną z odciskiem palca (identyfikowaną poprzez identyfikator operacji).
setNotify() Rejestruje funkcję użytkownika odbierającą powiadomienia z warstwy HAL. Jeśli maszyna stanu HAL jest w stanie zajętości, funkcja jest blokowana do momentu opuszczenia przez HAL stanu zajętości.
postEnroll() Kończy operację rejestracji i unieważnia wyzwanie wygenerowane przez preEnroll() . Należy to wywołać na koniec sesji rejestrowania wielu palców, aby wskazać, że nie można dodać więcej palców.

Więcej szczegółów na ten temat można znaleźć w komentarzach na stronie IBiometricsFingerprint.hal .