Odcisk palca HIDL

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Na urządzeniach z czujnikiem odcisków palców użytkownicy mogą zarejestrować jeden lub więcej odcisków palców i używać tych odcisków do odblokowywania urządzenia i wykonywania innych zadań. System Android używa języka definicji interfejsu sprzętowego odcisków palców (HIDL) do łączenia się z biblioteką specyficzną dla dostawcy i sprzętem odcisków palców (na przykład czujnik odcisków palców).

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

Dopasowywanie linii papilarnych

Czujnik odcisków palców urządzenia jest zwykle 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). Wysokopoziomowy przepływ 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 istnieje dopasowanie odcisku palca w bieżącym zestawie zarejestrowanych szablonów odcisków palców.
  3. Pasujące wyniki są przekazywane do FingerprintService .

Ten przepływ zakłada, ż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

HAL linii papilarnych współdziała z następującymi składnikami.

  • BiometricManager współdziała bezpośrednio z aplikacją w procesie aplikacji. Każda aplikacja ma instancję IBiometricsFingerprint.hal
  • W procesie systemowym działa FingerprintService , który obsługuje komunikację z HAL linii papilarnych.
  • Fingerprint HAL to implementacja interfejsu IBiometricsFingerprint HIDL w języku C/C++. Zawiera bibliotekę specyficzną dla dostawcy, która komunikuje się ze sprzętem specyficznym dla urządzenia.
  • Keystore API i Keymaster zapewniają kryptografię wspieraną sprzętowo do bezpiecznego przechowywania kluczy w bezpiecznym środowisku, takim jak Trusted Execution Environment (TEE).
Przepływ danych do uwierzytelniania odcisków palców
Rysunek 1. Przepływ danych wysokiego poziomu do uwierzytelniania odcisków palców

Implementacja warstwy HAL specyficzna dla dostawcy musi korzystać z protokołu komunikacyjnego wymaganego przez TEE. Nieprzetworzone obrazy i przetworzone cechy 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 naruszać danych biometrycznych.

FingerprintService i fingerprintd wykonują połączenia za pośrednictwem warstwy HAL odcisków palców do biblioteki specyficznej dla dostawcy w celu rejestrowania odcisków palców i wykonywania innych operacji.

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

Wytyczne wdrożeniowe

Poniższe wytyczne dotyczące linii papilarnych HAL mają na celu zapewnienie, że dane odcisków palców nie zostaną ujawnione i zostaną usunięte , gdy użytkownik zostanie usunięty z urządzenia:

  • Surowe dane o odciskach palców lub 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 przez 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ądzeń.
  • Pobieranie, rejestracja i rozpoznawanie odcisków palców musi odbywać się wewnątrz TEE.
  • W systemie plików można przechowywać tylko zaszyfrowaną formę danych linii papilarnych, 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ć co najmniej podpisany bezwzględną ścieżką systemu plików, grupą i identyfikatorem palca, tak aby pliki szablonów nie działały na innym urządzeniu lub dla kogokolwiek innego niż użytkownik, który je zarejestrował na 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 używać ścieżki systemu plików dostarczonej przez funkcję setActiveGroup() , albo zapewniać sposób na usunięcie wszystkich danych szablonu użytkownika po usunięciu użytkownika. 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, 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ę stanów warstwy HAL, aby rozpocząć zbieranie i przechowywanie szablonu odcisku palca. Po zakończeniu rejestracji lub po upływie limitu czasu automat stanu warstwy HAL powraca do stanu bezczynności.
preEnroll() Generuje unikalny token wskazujący początek rejestracji odcisku palca. Udostępnia token do funkcji enroll , aby zapewnić wcześniejsze uwierzytelnienie, na przykład przy użyciu hasła. Aby zapobiec manipulacji, token jest pakowany po potwierdzeniu poświadczeń urządzenia. Token należy sprawdzić podczas rejestracji, aby upewnić się, że jest nadal ważny.
getAuthenticatorId() Zwraca token skojarzony z bieżącym zestawem odcisków palców.
cancel() Anuluje oczekujące operacje rejestracji lub uwierzytelniania. Maszyna stanów HAL powraca do stanu bezczynności.
enumerate() Synchroniczne wezwanie do wyliczenia wszystkich znanych szablonów odcisków palców.
remove() Usuwa szablon odcisku palca.
setActiveGroup() Ogranicza operację warstwy 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 blokowana do momentu, gdy HAL opuści stan zajętości.
postEnroll() Kończy operację rejestracji i unieważnia wyzwanie wygenerowane przez funkcję preEnroll() . Musi to zostać wywołane na koniec sesji rejestracji wielu palców, aby wskazać, że nie można dodać więcej palców.

Aby uzyskać więcej informacji na ten temat, zapoznaj się z komentarzami w IBiometricsFingerprint.hal .