Biometria to wygodniejszy, ale potencjalnie mniej bezpieczny sposób potwierdzania tożsamości na urządzeniu. W modelu uwierzytelniania warstwowego najwyższy poziom bezpieczeństwa zapewnia uwierzytelnianie podstawowe (czyli metody oparte na czynniku wiedzy, takie jak kod PIN, wzór i hasło). Biometria należy do drugiego poziomu uwierzytelniania, zapewniając równowagę między wygodą a bezpieczeństwem. Dokument CDD Androida definiuje 3 klasy siły zabezpieczeń biometrycznych: klasę 3 (wcześniej silna), klasę 2 (wcześniej słaba) i klasę 1 (wcześniej wygodna). Każda klasa ma zestaw wymagań wstępnych, uprawnień i ograniczeń. Więcej informacji znajdziesz w dokumencie CDD powyżej. Wszystkie 3 klasy mogą być zintegrowane z ekranem blokady, ale tylko uwierzytelnianie silne i słabe mogą być zintegrowane z interfejsami API android.hardware.biometrics. Ta tabela zawiera opis każdego uwierzytelniania i obsługiwanych przez nie funkcji.
| Mechanizm uwierzytelniający | Ekran blokady | Integracja BiometricPrompt | Magazyn kluczy (klucz oparty na czasie) | Magazyn kluczy (klucz oparty na 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ą rozpoznawania twarzy i odcisków palców. Androida można dostosować do obsługi innych metod biometrycznych (np. skanowania tęczówki). Integracja biometryczna będzie jednak zależeć od zabezpieczeń biometrycznych, a nie od sposobu uwierzytelniania. Więcej informacji o specyfikacjach zabezpieczeń biometrycznych znajdziesz w artykule Pomiar bezpieczeństwa odblokowywania biometrycznego.
Źródło
Android 12
- Wprowadza interfejs BiometricManager.Strings, który udostępnia zlokalizowane ciągi znaków dla aplikacji korzystających z interfejsu BiometricPrompt na potrzeby uwierzytelniania. Te ciągi znaków mają być dostosowane do urządzenia i zawierać bardziej szczegółowe informacje o tym, jakich typów uwierzytelniania można używać.
- Obejmuje obsługę 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_ENROLLintent action, którego deweloperzy mogą używać, aby kierować użytkowników do rejestracji metody uwierzytelniania spełniającej wymagania ich aplikacji. - Dodaje
AuthenticationResult#getAuthenticationType()metodę, z której programiści mogą korzystać, aby sprawdzić, czy użytkownik uwierzytelnił się za pomocą danych biometrycznych czy danych urządzenia. - Zapewnia dodatkową obsługę kluczy auth-per-use w klasie BiometricPrompt.
Android 10
- Wprowadza
BiometricManagerklasę, której deweloperzy mogą używać do sprawdzania dostępności uwierzytelniania biometrycznego. - Obejmuje integrację uwierzytelniania odciskiem palca i rozpoznawania twarzy w przypadku
BiometricPrompt
Android 9
- Obejmuje integrację z odciskiem palca tylko w przypadku
BiometricPrompt. - Wycofuje klasę FingerprintManager. Jeśli aplikacje w pakiecie i aplikacje systemowe korzystają z tej klasy, zaktualizuj je, aby zamiast niej używały
BiometricPromptiBiometricManager. - Zaktualizowano
FingerprintManagertesty weryfikacyjne CTS, aby testowaćBiometricPromptza pomocąBiometricPromptBoundKeysTest.
Implementacja
Aby zapewnić użytkownikom i programistom bezproblemowe korzystanie z biometrii, 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 siły.Dodatkowo wszystkie implementacje muszą przejść moduł CTS CtsBiometricsTestCases.
Aby zintegrować stos biometryczny z interfejsem ACTION_BIOMETRIC_ENROLL API:
- Zmodyfikuj BiometricEnrollActivity, aby wyświetlać proces rejestracji. Pamiętaj, że dane biometryczne mogą być przedstawione tylko wtedy, gdy spełniają wymagane kryteria. 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ć odpowiednią opcję.
Wskazówki dotyczące implementacji HAL
Postępuj zgodnie z tymi wytycznymi dotyczącymi interfejsu HAL danych biometrycznych, aby mieć pewność, że dane biometryczne nie wyciekną i zostaną usunięte, gdy użytkownik zostanie usunięty z urządzenia:
- Upewnij się, że surowe dane biometryczne ani ich pochodne (np. szablony) nie są nigdy dostępne spoza bezpiecznego, odizolowanego środowiska (np. TEE lub Secure Element). Wszystkie przechowywane dane muszą być szyfrowane za pomocą klucza specyficznego dla urządzenia, który jest znany tylko zaufanemu środowisku wykonawczemu (TEE). Jeśli sprzęt to umożliwia, ogranicz dostęp do sprzętu do bezpiecznego, odizolowanego środowiska i chroń go za pomocą zasad SELinux. Udostępnij kanał komunikacji (np. SPI, I2C) tylko bezpiecznemu, odizolowanemu środowisku z wyraźnymi zasadami SELinux dotyczącymi wszystkich plików na urządzeniu.
- Proces pozyskiwania, rejestracji i rozpoznawania danych biometrycznych musi odbywać się w bezpiecznym, odizolowanym środowisku, aby zapobiec wyciekom danych i innym atakom. Ten wymóg dotyczy tylko danych biometrycznych klasy 3 (wcześniej silnych) i klasy 2 (wcześniej słabych).
- Aby chronić się przed atakami typu replay, podpisuj szablony biometryczne kluczem prywatnym przypisanym do urządzenia. W przypadku standardu Advanced Encryption Standard (AES) podpisz co najmniej szablon z bezwzględną ścieżką systemu plików, grupą i identyfikatorem biometrycznym, 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. Na przykład zapobiegaj kopiowaniu 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 systemu plików podanej przez
setActiveUser() HIDL methodlub podaj inny sposób na usunięcie wszystkich danych szablonu użytkownika po jego usunięciu. Ma to na celu ochronę przed wyciekiem danych użytkownika. Urządzenia, które nie korzystają z tej ścieżki, muszą posprzątać po usunięciu użytkownika. Wymagania CDD nakładają obowiązek przechowywania danych biometrycznych i plików pochodnych w postaci zaszyfrowanej, zwłaszcza jeśli nie znajdują się one w TEE. Jeśli jest to niemożliwe ze względu na wymagania dotyczące pamięci bezpiecznego, odizolowanego środowiska, dodaj punkty zaczepienia, aby zapewnić usunięcie danych, gdy użytkownik zostanie usunięty lub urządzenie zostanie wyczyszczone. Zobacz LockSettingsService.removeBiometricsForUser()
Dostosowywanie
Jeśli urządzenie obsługuje wiele rodzajów danych biometrycznych, użytkownik powinien mieć możliwość określenia domyślnego w ustawieniach. W BiometricPromptimplementacji należy domyślnie stosować biometrię klasy 3 (dawniej silną), chyba że użytkownik wyraźnie ją zastąpi. W takim przypadku należy wyświetlić komunikat ostrzegawczy wyjaśniający ryzyko związane z biometrią (np. zdjęcie może odblokować urządzenie).
Ciągi uwierzytelniające dotyczące konkretnych urządzeń
Od Androida 12 ciągi uwierzytelniania kontekstowego są udostępniane deweloperom za pomocą interfejsu BiometricManager.Strings. Możesz dostosować wartości zasobów zwracane przez ten interfejs API, aby wdrożyć ciągi znaków specyficzne dla urządzenia. Jeśli tak, upewnij się, że wszystkie nowe ciągi znaków są przetłumaczone na wszystkie języki, które obsługuje urządzenie. Sprawdź też, czy te właściwości są zachowane:
Metoda |
Cel ciągu znaków |
Typy uwierzytelniania do uwzględnienia |
Jeśli możliwe jest odblokowywanie biometryczne i blokada ekranu |
|---|---|---|---|
getButtonLabel() |
Etykieta przycisku, który wywołuje BiometricPrompt |
Tylko zarejestrowane typy (jeśli to możliwe), które spełniają wymagania dotyczące uwierzytelniania. |
Użyj ciągu znaków biometric-only (np. „Użyj odcisku palca”) |
getPromptMessage() |
Komunikat wyświetlany w BiometricPrompt podczas uwierzytelniania |
Tylko zarejestrowane typy (jeśli to możliwe), które spełniają wymagania dotyczące uwierzytelniania. |
Użyj połączonego ciągu znaków biometrycznych i blokady ekranu (np. „Aby kontynuować, użyj odcisku palca lub kodu PIN”). |
getSettingName() |
Nazwa ustawienia, które włącza BiometricPrompt na potrzeby uwierzytelniania |
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 biometrycznego i blokady ekranu (np. „Użyj odcisku palca lub blokady ekranu”). |
Rozważmy na przykład urządzenie, które ma czujnik twarzy klasy 2 z zarejestrowaną twarzą, zarejestrowany kod PIN i czytnik linii papilarnych klasy 3, w którym nie ma zarejestrowanych odcisków palców. W tabeli poniżej znajdziesz przykładowe ciągi znaków dla każdej kombinacji dozwolonych uwierzytelniaczy i wywoływanej metody BiometricManager.Strings:
Dozwolone uwierzytelnianie |
getButtonLabel() |
getPromptMessage() |
getSettingName() |
|---|---|---|---|
Biometria klasy 3 (BIOMETRIC_STRONG) |
„Użyj odcisku palca” (Tylko odcisk palca spełnia wymagania uwierzytelniania) |
„Użyj odcisku palca, aby kontynuować” (tylko odcisk palca spełnia wymagania uwierzytelniania) |
„Użyj odcisku palca” (Tylko odcisk palca spełnia wymagania uwierzytelniania) |
Biometria klasy 2 (BIOMETRIC_WEAK) |
„Użyj twarzy” (Twarz i odcisk palca spełniają wymagania; zarejestrowana jest tylko twarz) |
„Użyj twarzy, aby kontynuować” (Wymagania spełnione przez rozpoznawanie twarzy i odcisków palców; zarejestrowano tylko rozpoznawanie twarzy) |
„Używaj rozpoznawania twarzy lub odcisku palca” (Rozpoznawanie twarzy i odcisk palca spełniają wymagania; urządzenie obsługuje obie te funkcje) |
Blokada ekranu (DEVICE_CREDENTIAL) |
„Użyj kodu PIN” (Wymagania spełnia dowolna blokada ekranu; kod PIN jest zarejestrowany) |
„Wpisz kod PIN, aby kontynuować” (Każda blokada ekranu spełnia wymagania; kod PIN jest zarejestrowany) |
„Używaj blokady ekranu” (Każda blokada ekranu spełnia wymagania) |
Biometria klasy 3 LUB blokada ekranu |
„Użyj kodu PIN” (odcisk palca i dowolna blokada ekranu spełniają wymagania; zarejestrowany jest tylko kod PIN) |
„Wpisz kod PIN, aby kontynuować” (Wymagania spełnia odcisk palca i dowolna blokada ekranu; zarejestrowany jest tylko kod PIN) |
„Użyj odcisku palca lub blokady ekranu” (Wymagania spełnia odcisk palca i dowolna blokada ekranu) |
Biometria klasy 2 LUB blokada ekranu |
„Używaj twarzy” (Wymagania spełniają rozpoznawanie twarzy, odcisk palca i dowolna blokada ekranu; twarz jest zarejestrowana i zastępuje kod PIN) |
„Aby kontynuować, użyj rozpoznawania twarzy lub kodu PIN” (Wymagania spełniają rozpoznawanie twarzy, odcisk palca i dowolna blokada ekranu; rozpoznawanie twarzy i kod PIN są zarejestrowane) |
„Użyj biometrii lub blokady ekranu” (Wymagania spełnia rozpoznawanie twarzy, odcisk palca i każda blokada ekranu) |
Weryfikacja
Wdrożenie biometryczne musi przejść te testy:
- CTS BiometricManager
- CTS BiometricPrompt (sanity, in-depth testing relies on verifier)
- Sekcja CtsVerifier Biometric Test: musi przejść test osobno w przypadku każdego obsługiwanego przez urządzenie rodzaju danych biometrycznych.
Dodatkowo, jeśli urządzenie obsługuje dane biometryczne, które mają interfejs HIDL AOSP (fingerprint@2.1, fingerprint@2.2, face1.0), musi przejść odpowiedni test VTS (fingerprint, face).