Biometria to wygodniejsza, ale potencjalnie mniej bezpieczna metoda potwierdzania tożsamości na urządzeniu. W ramach modelu uwierzytelniania warstwowego uwierzytelnianie podstawowe (czyli modalności oparte na czynnikach wiedzy, takie jak kod PIN, wzór i hasło) zapewnia najwyższy poziom bezpieczeństwa. Biometria to dodatkowy poziom uwierzytelniania, który zapewnia równowagę między wygodą i bezpieczeństwem. CDD Androida definiuje 3 klasy siły biometrycznej: klasa 3 (dawniej silna), klasa 2 (dawniej słaba) i klasa 1 (dawniej wygodna). Każda klasa ma zestaw wymagań wstępnych, uprawnień i ograniczeń. Więcej informacji znajdziesz w dokumencie CDD. Wszystkie 3 klasy mogą być integrowane z ekranem blokady, ale tylko silne i słabe uwierzytelniacze mogą być integrowane z interfejsami API android.hardware.biometrics. W tej tabeli opisujemy poszczególne aplikacje uwierzytelniające i obsługiwane przez nie funkcje.
Authenticator | Ekran blokady | Integracja z BiometricPrompt | Magazyn kluczy (klucz czasowy) | Magazyn kluczy (klucz na podstawie operacji) |
---|---|---|---|---|
BIOMETRIC_STRONG (klasa 3) | Tak | Tak | Tak | Tak |
BIOMETRIC_WEAK (klasa 2) | Tak | Tak | Nie | Nie |
BIOMETRIC_CONVENIENCE (Class 1) |
Tak | Nie | Nie | Nie |
DEVICE_CREDENTIAL | Tak | Tak | Tak | Tak |
Platforma Androida obsługuje uwierzytelnianie biometryczne za pomocą twarzy i odcisków palców. Androida można dostosować do obsługi innych metod biometrycznych (np. tęczówki). Integracja biometryczna będzie jednak zależeć od zabezpieczeń biometrycznych, a nie od modalności. Więcej informacji o specyfikacjach zabezpieczeń biometrycznych znajdziesz w artykule Pomiar bezpieczeństwa odblokowywania biometrycznego.
Źródło
Android 12
- Wprowadza interfejs API BiometricManager.Strings, który udostępnia zlokalizowane ciągi znaków dla aplikacji używających BiometricPrompt do uwierzytelniania. Te ciągi znaków są przeznaczone do urządzeń i zawierają więcej informacji o tym, które typy uwierzytelniania można używać.
- Obsługuje czytnik linii papilarnych pod wyświetlaczem.
Android 11
- Wprowadza interfejs BiometricManager.Authenticators, w którym znajdują się stałe, których programiści mogą używać do określania typów uwierzytelniania akceptowanych w aplikacjach.
- Dodaje działanie intencji, za pomocą którego deweloperzy mogą poprosić użytkownika o zarejestrowanie metody uwierzytelniania, która spełnia wymagania aplikacji.
ACTION_BIOMETRIC_ENROLL
- Dodaje metodę
AuthenticationResult#getAuthenticationType()
method, której deweloperzy mogą użyć do sprawdzenia, czy użytkownik uwierzytelnił się za pomocą danych uwierzytelniających biometrycznych lub danych uwierzytelniających urządzenia. - Udostępnia dodatkową obsługę kluczy auth-per-use w klasie BiometricPrompt.
Android 10
- Udostępnia
klasę
BiometricManager
, której deweloperzy mogą używać do wysyłania zapytań o dostępność uwierzytelniania biometrycznego. - Obejmuje integrację uwierzytelniania odciskiem palca i twarzą w przypadku
BiometricPrompt
Android 9
- Obejmuje integrację odcisku palca tylko w przypadku
BiometricPrompt
. - Wycofuje klasę FingerprintManager. Jeśli z tej klasy korzystają aplikacje zawarte w pakietach i aplikacje systemowe, zaktualizuj je, aby używały zamiast nich
BiometricPrompt
iBiometricManager
. - Zaktualizowano testy weryfikacyjne
FingerprintManager
CTS, aby testowałyBiometricPrompt
za pomocąBiometricPromptBoundKeysTest
.
Implementacja
Aby zapewnić użytkownikom i deweloperom bezproblemową obsługę biometryczną, zintegruj swój stos biometryczny z interfejsami API BiometricPrompt
, BiometricManager
i ACTION_BIOMETRIC_ENROLL
. Urządzenia z czujnikami biometrycznymi muszą spełniać te wymagania dotyczące bezpieczeństwa.Ponadto wszystkie implementacje muszą przejść testy modułu CTS CtsBiometricsTestCases.
Aby zintegrować pakiet funkcji biometrycznych z interfejsem ACTION_BIOMETRIC_ENROLL API:
- Zmodyfikuj działanie BiometricEnrollActivity, aby wyświetlić proces rejestracji. Pamiętaj, że dane biometryczne mogą być prezentowane tylko wtedy, gdy spełniają wymagania dotyczące siły. Jeśli urządzenie obsługuje więcej niż 1 metodę, ta czynność powinna wyświetlić listę, z której użytkownik może wybrać.
Wskazówki dotyczące implementacji HAL
Aby zapewnić nieujawnienie danych biometrycznych i ich usunięcie po usunięciu użytkownika z urządzenia, postępuj zgodnie z tymi wytycznymi dotyczącymi HAL biometrycznego:
- Zadbaj o to, aby surowe dane biometryczne lub ich pochodne (np. szablony) nigdy nie były dostępne poza bezpiecznym, odizolowanym środowiskiem (np. TEE lub Secure Element). Wszystkie przechowywane dane muszą być zaszyfrowane za pomocą klucza szyfrującego, który jest znany tylko środowisku TEE (zaufane środowisko wykonawcze). Jeśli sprzęt na to pozwala, ogranicz dostęp sprzętowy do bezpiecznego odizolowanego środowiska i zabezpiecz je za pomocą zasad SELinux. Upewnij się, że kanał komunikacji (np. SPI, I2C) jest dostępny tylko dla bezpiecznego środowiska odizolowanego z wyraźną polityką SELinux dotyczącą wszystkich plików na urządzeniu.
- Pozyskiwanie, rejestrowanie i rozpoznawanie danych biometrycznych musi odbywać się w bezpiecznym, odizolowanym środowisku, aby zapobiec wyciekom danych i innym atakom. To wymaganie dotyczy tylko danych biometrycznych klasy 3 (wcześniej silnych) i klasy 2 (wcześniej słabych).
- Aby chronić się przed atakami polegającymi na odtwarzaniu, podpisuj szablony biometryczne za pomocą klucza prywatnego powiązanego z konkretnym urządzeniem. W przypadku standardu Advanced Encryption Standard (AES) należy co najmniej podpisać szablon za pomocą bezwzględnej ścieżki do systemu plików, grupy i identyfikatora biometrycznego, aby pliki szablonów nie mogły być używane na innym urządzeniu ani przez osoby inne niż użytkownik, który zarejestrował je na tym samym urządzeniu. Możesz na przykład uniemożliwić kopiowanie danych biometrycznych od innego użytkownika na tym samym urządzeniu lub z innego urządzenia.
- Jeśli musisz przechowywać dane poza TEE, użyj ścieżki do systemu plików udostępnionej przez
setActiveUser() HIDL method
lub podaj inny sposób na wymazanie wszystkich danych szablonu użytkownika po usunięciu użytkownika. Ma to na celu ochronę przed wyciekiem danych użytkownika. Urządzenia, które nie korzystają z tej ścieżki, muszą usunąć dane po usunięciu użytkownika. Zgodnie z CDD dane biometryczne i pochodne muszą być przechowywane w zaszyfrowanej formie, zwłaszcza jeśli nie są w TEE. Jeśli nie jest to możliwe ze względu na wymagania dotyczące przechowywania w bezpiecznym, odizolowanym środowisku, dodaj elementy, które zapewnią usunięcie danych po usunięciu użytkownika lub wyczyszczeniu urządzenia. Więcej informacji: LockSettingsService.removeBiometricsForUser()
Dostosowywanie
Jeśli Twoje urządzenie obsługuje wiele biometrii, użytkownik powinien mieć możliwość określenia wartości domyślnej w ustawieniach. Implementacja BiometricPrompt
powinna preferować klasę 3 (dawniej silne) jako domyślną, chyba że użytkownik wyraźnie ją zastąpi. W takim przypadku należy wyświetlić komunikat ostrzegawczy wyjaśniający zagrożenia związane z danymi biometrycznymi (np. zdjęcie użytkownika może odblokować urządzenie).
Ciągi znaków uwierzytelniania na potrzeby konkretnego urządzenia
Od Androida 12 deweloperzy mogą korzystać z ciągów tekstowych do uwierzytelniania w kontekście za pomocą interfejsu API BiometricManager.Strings. Możesz dostosować wartości zasobów zwracane przez ten interfejs API, aby zaimplementować ciągi znaków specyficzne dla urządzenia. Jeśli to zrobisz, upewnij się, że wszystkie nowe ciągi są przetłumaczone na wszystkie języki obsługiwane przez urządzenie. Upewnij się też, że te właściwości są zachowane:
Metoda |
Cel ciągu znaków |
Typy uwierzytelniania do uwzględnienia |
Jeśli możliwe są zarówno blokada biometryczna, jak i blokada ekranu |
---|---|---|---|
getButtonLabel() |
Etykieta przycisku, który uruchamia BiometricPrompt |
Zarejestrowane typy (jeśli to możliwe) spełniające wymagania dotyczące uwierzytelniania |
Użyj ciągu znaków tylko do biometrii (np. „Użyj odcisku palca”) |
getPromptMessage() |
Komunikat wyświetlany na ekranie podczas uwierzytelniania za pomocą BiometricPrompt |
Zarejestrowane typy (jeśli to możliwe) spełniające wymagania dotyczące uwierzytelniania |
Użyj połączonego ciągu znaków biometrii i blokady ekranu (np. „Aby kontynuować, użyj odcisku palca lub kodu PIN”). |
getSettingName() |
Nazwa ustawienia, które umożliwia uwierzytelnianie za pomocą BiometricPrompt |
Wszystkie typy obsługiwane przez urządzenie (nawet jeśli nie są zarejestrowane), które spełniają wymagania dotyczące uwierzytelniania |
Użyj połączonego ciągu znaków dotyczącego biometrii i blokady ekranu (np. „Użyj odcisku palca lub blokady ekranu”). |
Przykładem może być urządzenie z czujnikiem twarzy klasy 2 z zarejestrowaną twarzą, zarejestrowanym kodem PIN i czytnikiem linii papilarnych klasy 3, który nie ma zarejestrowanych odcisków palców. Poniższa tabela zawiera przykładowe ciągi znaków dla każdej kombinacji dozwolonych uwierzytelniających i wywoływanych metod BiometricManager.Strings:
Dozwolone metody uwierzytelniania |
getButtonLabel() |
getPromptMessage() |
getSettingName() |
---|---|---|---|
Dane biometryczne klasy 3 (BIOMETRIC_STRONG) |
„Użyj odcisku palca” (Tylko odcisk palca spełnia wymagania programu uwierzytelniającego) |
"Użyj odcisku palca, aby kontynuować" (Tylko odcisk palca spełnia wymagania dotyczące uwierzytelniania) |
"Użyj odcisku palca" (tylko odcisk palca spełnia wymagania dotyczące uwierzytelniania) |
Identyfikator biometryczny klasy 2 (BIOMETRIC_WEAK) |
"Użyj twarzy" (wymagania spełniają twarz i odcisk palca; tylko twarz jest zarejestrowana) |
"Użyj twarzy, aby kontynuować" (Twarz i odcisk palca spełniają wymagania; zarejestrowana jest tylko twarz) |
„Używaj rozpoznawania twarzy lub odcisku palca” (Rozpoznawanie twarzy i odcisk palca spełniają wymagania – urządzenie obsługuje obie te opcje) |
Blokada ekranu (DEVICE_CREDENTIAL) |
"Użyj kodu PIN" (dowolna blokada ekranu spełnia wymagania; kod PIN jest zarejestrowany) |
„Wpisz kod PIN, aby kontynuować” (dowolna blokada ekranu spełnia wymagania; kod PIN jest zarejestrowany) |
„Użyj blokady ekranu” (dowolna blokada ekranu spełnia wymagania) |
Blokada ekranu LUB biometryczna klasy 3 |
„Użyj kodu PIN” (odcisk palca i dowolna blokada ekranu spełniają wymagania – zarejestrowany jest tylko kod PIN) |
„Wpisz kod PIN, aby kontynuować” (odcisk palca i dowolna blokada ekranu spełniają wymagania; tylko kod PIN jest zarejestrowany) |
"Użyj odcisku palca lub blokady ekranu" (odcisk palca i dowolna blokada ekranu spełniają wymagania) |
Blokada ekranu LUB biometryczna klasy 2 |
„Użyj twarzy” (rozpoznawanie twarzy, odcisk palca i dowolna blokada ekranu spełniają wymagania; twarz jest zarejestrowana i zastępuje kod PIN) |
„Aby kontynuować, użyj rozpoznawania twarzy lub kodu PIN” (rozpoznawanie twarzy, odcisk palca i dowolna blokada ekranu spełniają wymagania; rozpoznawanie twarzy i kod PIN są zarejestrowane) |
„Używaj biometrii lub blokady ekranu” (Rozpoznawanie twarzy, odcisk palca i dowolna blokada ekranu spełniają wymagania) |
Weryfikacja
Twoje rozwiązanie biometryczne musi przejść te testy:
- CTS BiometricManager
- CTS BiometricPrompt (zrozumiałość, szczegółowe testy wymagają weryfikatora)
- Sekcja Test biometryczny CtsVerifier: przekazana z osobna w przypadku każdej modalności obsługiwanej przez urządzenie.
Jeśli Twoje urządzenie obsługuje dane biometryczne z interfejsem AOSP HIDL (fingerprint@2.1, fingerprint@2.2, face1.0), musi przejść odpowiedni test VTS (fingerprint, face).