Biometria to wygodniejsza, ale potencjalnie mniej bezpieczna metoda potwierdzania tożsamości na urządzeniu. W ramach modelu uwierzytelniania wielopoziomowego uwierzytelnianie główne (czyli metody oparte na czynniku wiedzy, takie jak kod PIN, wzór i hasło) zapewnia najwyższy poziom bezpieczeństwa. Biometria należy do drugiego poziomu uwierzytelniania, który zapewnia równowagę między wygodą a bezpieczeństwem. CDD Androida definiuje 3 poziomy siły zabezpieczeń biometrycznych: 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. Ta tabela opisuje poszczególne uwierzytelniacze i obsługiwane przez nie funkcje.
Authenticator | Ekran blokady | Integracja z BiometricPrompt | Magazyn kluczy (klucz oparty na czasie) | Magazyn kluczy (klucz na podstawie operacji) |
---|---|---|---|---|
BIOMETRIC_STRONG (klasa 3) | Tak | Tak | Tak | Tak |
BIOMETRIC_WEAK (klasa 2) | Tak | Tak | Nie | Nie |
BIOMETRIC_CONVENIENCE (klasa 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 z biometrią będzie jednak zależeć od zabezpieczeń biometrycznych, a nie od modalności. Więcej informacji o specyfikacji 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 służą do określania, których typów uwierzytelniania można używać.
- Obsługa czytnika linii papilarnych pod wyświetlaczem.
Android 11
- Wprowadza interfejs BiometricManager.Authenticators, który udostępnia stałe wartości, których deweloperzy mogą używać do określania typów uwierzytelniania akceptowanych przez ich aplikacje.
- Dodaje
ACTION_BIOMETRIC_ENROLL
działanie intencyjne, które deweloperzy mogą wykorzystać do przekierowania użytkownika do rejestracji metody uwierzytelniania, która spełnia wymagania ich aplikacji. - Dodaje
AuthenticationResult#getAuthenticationType()
method, które programiści mogą wykorzystać 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
- Wprowadza
BiometricManager
klasę, 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
. - Usuwa klasę FingerprintManager. Jeśli aplikacje w pakiecie i aplikacje systemowe korzystają z tej klasy, zaktualizuj je, aby zamiast niej używać klasy
BiometricPrompt
iBiometricManager
. - Zaktualizowano testy weryfikacyjne
FingerprintManager
CTS, aby testowałyBiometricPrompt
za pomocąBiometricPromptBoundKeysTest
.
Implementacja
Aby zapewnić użytkownikom i programistom płynne działanie funkcji biometrycznych, zintegruj pakiet 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 akcja 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 specyficznego dla urządzenia, znanego tylko środowisku TEE (Trusted Execution Environment). 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.
- Pobieranie, 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ą prywatnego klucza powiązanego z danym 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 środowisku odizolowanym, dodaj elementy, które zapewnią usunięcie danych po usunięciu użytkownika lub wyczyszczeniu urządzenia. Zobacz LockSettingsService.removeBiometricsForUser()
Dostosowywanie
Jeśli Twoje urządzenie obsługuje kilka metod biometrycznych, użytkownik powinien mieć możliwość wybrania domyślnej metody 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 kontekstowego 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 tak, upewnij się, że nowe ciągi znaków są przetłumaczone na wszystkie obsługiwane przez urządzenie języki. 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 uwierzytelniania. |
Użyj połączonego ciągu znaków biometrii i blokady ekranu (np. „Użyj odcisku palca lub blokady ekranu”). |
Weźmy na przykład urządzenie z czujnikiem twarzy klasy 2 z zarejestrowaną twarzą, zarejestrowanym kodem PIN i czytnikiem linii papilarnych klasy 3 bez 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() |
---|---|---|---|
Identyfikacja biometryczna klasy 3 (BIOMETRIC_STRONG) |
"Użyj odcisku palca" (tylko odcisk palca spełnia wymagania dotyczące uwierzytelniania) |
"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 oba te sposoby) |
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 z funkcją biometryczną klasy 3 LUB |
"Użyj kodu PIN" (odcisk palca i dowolna blokada ekranu spełniają wymagania; tylko kod PIN jest zarejestrowany) |
„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żyj biometrii lub blokady ekranu” (rozpoznawanie twarzy, odcisk palca i dowolna blokada ekranu spełnia wymagania) |
Weryfikacja
Twoje rozwiązanie biometryczne musi przejść te testy:
- CTS BiometricManager
- CTS BiometricPrompt (sprawdzanie poprawności, szczegółowe testy oparte na weryfikatorze)
- sekcja testu biometrycznego CtsVerifier: Musi być pomyślnie ukończona w przypadku każdej obsługiwanej przez urządzenie metody.
Jeśli Twoje urządzenie obsługuje dane biometryczne z AOSP HIDL (fingerprint@2.1, fingerprint@2.2, face1.0), musi przejść odpowiedni test VTS (fingerprint, face).