Bezpieczne uwierzytelnianie użytkowników

Aby chronić swój system uwierzytelniania na Androidzie, rozważ rezygnację z oparty na haśle, zwłaszcza w przypadku kont poufnych, takich jak z banku i konta e-mail. Pamiętaj, że niektóre aplikacje instalowane przez użytkowników mogą nie mieć użytkowników w dobrej wierze i mogą próbować wyłudzić od nich informacje.

Nie zakładaj też, że z urządzenia będą korzystać tylko autoryzowani użytkownicy. Kradzież telefonu to częsty problem, a hakerzy wycelują w nie odblokowane urządzenia, aby bezpośrednio zyskać zyski. z danych użytkownika lub aplikacji finansowych. W przypadku wszystkich poufnych aplikacji zalecamy stosowanie rozsądnego limitu czasu uwierzytelniania (15 minut) za pomocą weryfikacji biometrycznej, wymagają dodatkowego uwierzytelniania przed podjęciem działań związanych z poufnymi danymi, takich jak przekazanie pieniędzy transfery danych.

Okno uwierzytelniania biometrycznego

Biblioteka danych biometrycznych udostępnia zestaw funkcji do wyświetlania promptu uwierzytelnieniem biometrycznym, takim jak rozpoznawanie twarzy czy odcisku palca. Prompty biometryczne można jednak skonfigurować w taki sposób, aby korzystały z formatu LSKF, znanych zagrożeń związanych z surfowaniem po barku. W przypadku aplikacji poufnych zalecamy że system biometryczny nie przełącza się na kod PIN ani nie wyczerpuje się użytkownicy mogą poczekać albo zalogować się ponownie za pomocą hasła lub zresetować konta. Resetowanie konta należy wymagać elementów, które nie są łatwo dostępne na urządzeniu (sprawdzone metody poniżej).

Jak pomaga to zapobiegać oszustwom i kradzieżom telefonu

Szczególnym przypadkiem użycia, który może pomóc w zapobieganiu oszustwom, jest żądanie uwierzytelniania biometrycznego w aplikacji przed transakcją. Gdy użytkownicy chcą dokonać transakcji finansowej, wyświetla się okno biometryczne, zweryfikować, czy to rzeczywiście zamierzony użytkownik dokonuje transakcji. Ten która zapewni ochronę przed kradzieżą urządzenia, niezależnie atakujący wie, czy nie ma informacji o LSKF, ponieważ będzie musiał sprawdzić, czy do właściciela urządzenia.

W celu zwiększenia bezpieczeństwa zalecamy, aby deweloperzy aplikacji korzystali z klasy 3. uwierzytelniania biometrycznego i używać CryptoObject w usługach bankowych i transakcje finansowe.

Implementacja

  1. Pamiętaj, aby dodać bibliotekę androidx.biometric.
  2. Uwzględnij okno logowania biometrycznego we aktywności lub fragmencie, który zawiera które mają być uwierzytelniane.

Kotlin


private var executor: Executor? = null
private var biometricPrompt: BiometricPrompt? = null
private var promptInfo: BiometricPrompt.PromptInfo? = null

fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)
  setContentView(R.layout.activity_login)
  executor = ContextCompat.getMainExecutor(this)
  biometricPrompt = BiometricPrompt(this@MainActivity,
    executor, object : AuthenticationCallback() {
      fun onAuthenticationError(
        errorCode: Int,
        @NonNull errString: CharSequence
      ) {
        super.onAuthenticationError(errorCode, errString)
        Toast.makeText(
          getApplicationContext(),
          "Authentication error: $errString", Toast.LENGTH_SHORT
        )
          .show()
      }

      fun onAuthenticationSucceeded(
        @NonNull result: BiometricPrompt.AuthenticationResult?
      ) {
        super.onAuthenticationSucceeded(result)
        Toast.makeText(
          getApplicationContext(),
          "Authentication succeeded!", Toast.LENGTH_SHORT
        ).show()
      }

      fun onAuthenticationFailed() {
        super.onAuthenticationFailed()
        Toast.makeText(
          getApplicationContext(), "Authentication failed",
          Toast.LENGTH_SHORT
        )
          .show()
      }
    })
  promptInfo = Builder()
    .setTitle("Biometric login for my app")
    .setSubtitle("Log in using your biometric credential")
    .setNegativeButtonText("Use account password")
    .build()

  // Prompt appears when user clicks "Log in".
  // Consider integrating with the keystore to unlock cryptographic operations,
  // if needed by your app.
  val biometricLoginButton: Button = findViewById(R.id.biometric_login)
  biometricLoginButton.setOnClickListener { view ->
    biometricPrompt.authenticate(
      promptInfo
    )
  }
}

Java


private Executor executor;
private BiometricPrompt biometricPrompt;
private BiometricPrompt.PromptInfo promptInfo;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_login);
    executor = ContextCompat.getMainExecutor(this);
    biometricPrompt = new BiometricPrompt(MainActivity.this,
            executor, new BiometricPrompt.AuthenticationCallback() {
        @Override
        public void onAuthenticationError(int errorCode,
                @NonNull CharSequence errString) {
            super.onAuthenticationError(errorCode, errString);
            Toast.makeText(getApplicationContext(),
                "Authentication error: " + errString, Toast.LENGTH_SHORT)
                .show();
        }

        @Override
        public void onAuthenticationSucceeded(
                @NonNull BiometricPrompt.AuthenticationResult result) {
            super.onAuthenticationSucceeded(result);
            Toast.makeText(getApplicationContext(),
                "Authentication succeeded!", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onAuthenticationFailed() {
            super.onAuthenticationFailed();
            Toast.makeText(getApplicationContext(), "Authentication failed",
                Toast.LENGTH_SHORT)
                .show();
        }
    });

    promptInfo = new BiometricPrompt.PromptInfo.Builder()
            .setTitle("Biometric login for my app")
            .setSubtitle("Log in using your biometric credential")
            .setNegativeButtonText("Use account password")
            .build();

    // Prompt appears when the user clicks "Log in".
    // Consider integrating with the keystore to unlock cryptographic operations,
    // if needed by your app.
    Button biometricLoginButton = findViewById(R.id.biometric_login);
    biometricLoginButton.setOnClickListener(view -> {
            biometricPrompt.authenticate(promptInfo);
    });
}

Sprawdzone metody

Zalecamy zacząć od ćwiczeń z programowania, aby dowiedzieć się więcej o biometrii.

W zależności od przypadków użycia możesz wdrożyć to okno z zastosowaniem lub bez konkretne działanie użytkownika. Aby uniknąć oszustw, zalecamy dodanie biometrii z jednoznacznym działaniem użytkownika w przypadku każdej transakcji. Zdajemy sobie sprawę, że dodanie uwierzytelniania może wprowadzić niekorzystny wpływ na UX, ale ze względu na charakter informacje przetwarzane w ramach transakcji bankowej oraz dane biometryczne, jest wygodniejsze niż inne metody. niezbędne do dodania tego poziomu nawigacji.

Więcej informacji o uwierzytelnianiu biometrycznym

Klucze dostępu

Klucze dostępu to bezpieczniejsza i łatwiejsza w obsłudze alternatywa dla haseł. Użycie kluczy dostępu kryptografia klucza publicznego umożliwiająca użytkownikom logowanie się w aplikacjach i na stronach internetowych. używając funkcji blokady ekranu urządzenia, np. odcisku palca lub skanu twarzy i rozpoznawanie obiektów. Dzięki temu użytkownik nie musi zapamiętywać haseł ani nimi zarządzać. i zapewnia znacznie wyższy poziom bezpieczeństwa.

Klucze dostępu mogą spełniać wymagania dotyczące uwierzytelniania wielopoziomowego w jednym kroku. zastępując zarówno hasło, jak i kody hasła jednorazowego, zapewniając solidną ochronę przed ataków phishingowych i uniknięcia problemów użytkowników związanych z jednorazowym SMS-em lub użyciem aplikacji. haseł. Ponieważ klucze dostępu są ustandaryzowane, pojedyncza implementacja umożliwia i bez haseł na całym świecie urządzeń, przeglądarek systemów operacyjnych.

Na Androidzie klucze dostępu są obsługiwane przez usługę Credential Manager Jetpack ujednolica główne metody uwierzytelniania, w tym klucze dostępu, haseł i logowania sfederowanego (np. w ramach funkcji Zaloguj się przez Google).

Jak pomaga to zapobiegać oszustwom

Klucze dostępu chronią Cię przed atakami phishingowymi, ponieważ działają tylko na Twoim urządzeniu zarejestrowanych aplikacji i witryn.

Podstawowym komponentem klucza dostępu jest kryptograficzny klucz prywatny. Zwykle Klucz prywatny jest przechowywany wyłącznie na Twoich urządzeniach, takich jak laptopy czy telefony komórkowe. i jest synchronizowane między nimi przez dostawców danych uwierzytelniających (zwanych też hasłami Menedżerami haseł Google), np. Menedżera haseł Google. Tylko odpowiedni klucz publiczny jest zapisane przez usługę online po utworzeniu klucza dostępu. Podczas logowania usługa używa klucza prywatnego do podpisania testu zabezpieczającego za pomocą klucza publicznego. Może to być pochodzi z jednego z Twoich urządzeń. Aby tak się stało, musisz również odblokować urządzenie lub magazyn danych logowania, aby zapobiec nieautoryzowanym logowaniu (na przykład ze skradzionego telefonu).

Aby zapobiec nieautoryzowanemu dostępowi w przypadku kradzieży, odblokowanego urządzenia, klucze dostępu muszą być połączone z racjonalnym czasem oczekiwania na uwierzytelnianie. An osoba przeprowadzająca atak, która ukradnie urządzenie, nie powinna mieć możliwości korzystania z aplikacji ponieważ zalogował się poprzedni użytkownik. Dane logowania powinny wygasają w regularnych odstępach czasu (np. co 15 minut), a użytkownicy powinni być muszą potwierdzić swoją tożsamość przez ponowne uwierzytelnienie za pomocą blokady ekranu.

Jeśli Twój telefon zostanie skradziony, klucze dostępu będą Cię chronić, ponieważ złodziej nie może ukraść haseł do używania na innych urządzeniach – klucze dostępu są powiązane z konkretnymi urządzeniami. Jeśli używasz Menedżer haseł Google lub Twój telefon zostaną skradzione, możesz zalogować się na swoje konto Google zalogować się na inne urządzenie (np. na komputerze) i zdalnie wylogować się z skradzionego telefonu. Dzięki temu Menedżer haseł Google może działać na skradzionym telefonie bez możliwości użycia, łącznie z zapisanymi kluczami dostępu.

W najgorszym przypadku, jeśli skradzione urządzenie nie zostanie przywrócone, klucze dostępu zostaną zsynchronizowane z nowym urządzeniem przez dostawcę danych logowania, który utworzył i zsynchronizował klucz. Na przykład użytkownik mógł wybrać Menedżera haseł Google, klucz dostępu i będzie mógł uzyskać dostęp do klucza na nowym urządzeniu, podpisując się z powrotem na konto Google i ustawić blokadę ekranu z poprzedniego urządzenia.

Więcej informacji: Artykuł Bezpieczeństwo kluczy dostępu w Menedżerze haseł Google

Implementacja

Klucze dostępu są obsługiwane na urządzeniach z Androidem 9 (poziom interfejsu API 28) lub nowszym. Hasła i funkcja Zaloguj się przez Google są obsługiwane od Androida 4.4. Do aby zacząć korzystać z kluczy dostępu, wykonaj te czynności:

  1. Wykonaj ćwiczenie z programowania Menedżera danych logowania, aby dowiedzieć się, jak wdrażać klucze dostępu.
  2. Zapoznaj się ze wskazówkami na temat wygody użytkowników kluczy dostępu. Ten dokument przedstawia przepływy, które są zalecane w Twoim przypadku użycia.
  3. Zapoznaj się z dokumentem Credential Manager, postępując zgodnie z tym przewodnikiem.
  4. Zaplanuj implementację Menedżera danych logowania i kluczy dostępu w swojej aplikacji. Zaplanuj dodanie obsługi linków do zasobów cyfrowych.

Zapoznaj się z naszą dokumentacją dla deweloperów, aby dowiedzieć się więcej o tworzeniu, rejestrowaniu uwierzytelniać za pomocą kluczy dostępu.

Resetowanie bezpiecznego konta

Nieupoważniona osoba mająca dostęp do odblokowanego urządzenia (np. gdy telefon próbuje uzyskać dostęp do poufnych aplikacji, szczególnie bankowych lub finansowo. Jeśli w aplikacji jest wdrażana weryfikacja biometryczna, atakujący spróbuje zresetować urządzenie konto, do którego chcesz uzyskać dostęp. Procedura resetowania konta musi być kluczowa, aby nie polegać wyłącznie na tym, o informacjach, które są łatwo dostępne na urządzeniu, takich jak e-maile lub SMS-y z hasłem jednorazowym linków resetowania.

Oto sprawdzone metody, które możesz zastosować podczas resetowania aplikacji. przepływ:

  • Rozpoznawanie twarzy oprócz hasła jednorazowego
  • Pytania zabezpieczające
  • Czynnik wiedzy (np. nazwisko panieńskie matki, miasto urodzenia lub ulubione) utwór)
  • Weryfikacja za pomocą dokumentu tożsamości

Interfejs API SMS retriever

SMS retriever API pozwala na weryfikację użytkowników za pomocą SMS-ów automatycznie. Dzięki temu użytkownik nie będzie musiał ręcznie wpisać kody weryfikacyjne. Dodatkowo ten interfejs API nie pyta użytkownika uzyskać dodatkowe, potencjalnie niebezpieczne uprawnienia aplikacji, takie jak RECEIVE_SMS lub READ_SMS Jednak SMS nie może być jedynym sposobem weryfikacji użytkownika chronią przed nieautoryzowanym dostępem do urządzenia lokalnego.

Jak pomaga to zapobiegać oszustwom

Niektórzy użytkownicy używają kodów SMS jako jedynego czynnika uwierzytelniania, który pozwala że jest to łatwy punkt wyjścia do oszustwa.

Interfejs API SMS retriever umożliwia aplikacji bezpośrednie pobieranie kodu SMS bez interakcji użytkowników i może zapewnić poziom ochrony przed oszustwami.

Implementacja

Implementacja interfejsu SMS retriever API składa się z 2 etapów: Android i serwer.

Android: (przewodnik)

  1. Uzyskaj numer telefonu użytkownika.
  2. Uruchom klienta aplikacji do pobierania SMS-ów.
  3. Wyślij numer telefonu na swój serwer.
  4. odbieranie wiadomości weryfikacyjnych,
  5. Wyślij hasło jednorazowe na swój serwer.

Serwer: (przewodnik)

  1. Utwórz wiadomość weryfikacyjną.
  2. Wyślij wiadomość weryfikacyjną SMS-em.
  3. Sprawdź, czy hasło jednorazowe zostało zwrócone.

Sprawdzone metody

Po zintegrowaniu aplikacji i weryfikacji numeru telefonu użytkownika interfejsu API SMS retriever, próbuje uzyskać hasło jednorazowe, Jeśli nam się uda, zasygnalizuje automatyczne odebranie SMS-a na urządzeniu. Jeśli nie użytkownik musi ręcznie wpisać hasło jednorazowe. Może to być znak ostrzegawczy. że użytkownik może być oszustem.

SMS nie powinien być używany jako jedyny mechanizm weryfikacji użytkownika, ponieważ pozostawia w nim miejsce. ataki lokalne, np. kradzież odblokowanego urządzenia; lub karta SIM ataki klonowania. Zalecamy, aby w miarę możliwości korzystać z systemu biometrycznego. Wł. urządzeń, w których czujniki biometryczne nie są dostępne, należy uwierzytelnianie użytkownika polegać na co najmniej jednym czynniku, którego nie można łatwo uzyskać z bieżącego urządzenia.

Więcej informacji

Więcej informacji o sprawdzonych metodach znajdziesz w tych materiałach: