Sichere Nutzerauthentifizierung

Zum Schutz Ihres Authentifizierungssystems in Android sollten Sie sich von einem passwortbasiertes Modell, insbesondere bei vertraulichen Konten wie dem Bank und E-Mail-Konten. Einige Apps, die Ihre Nutzer installieren, verfügen möglicherweise nicht über die und versuchen Sie, Ihre Nutzer durch Phishing zu bringen.

Gehen Sie außerdem nicht davon aus, dass nur autorisierte Nutzer das Gerät verwenden. Telefondiebstahl ist ein häufiges Problem und Angreifer zielen auf entsperrte Geräte ab, um direkt davon zu profitieren. von Nutzerdaten oder Finanz-Apps. Wir empfehlen, für alle sensiblen Apps eine angemessene Zeitüberschreitung bei der Authentifizierung (15 Minuten?) mit biometrischer Überprüfung und vor vertraulichen Aktionen wie Geldbeträgen eine zusätzliche Authentifizierung erfordern Übertragungen.

Dialogfeld für biometrische Authentifizierung

Die Biometrics-Bibliothek bietet eine Reihe von Funktionen, um einen Prompt anzuzeigen, der die biometrische Authentifizierung wie Gesichtserkennung oder Fingerabdruckerkennung. Biometrische Aufforderungen können jedoch so konfiguriert werden, dass sie auf das LSKF zurückgreifen. bekannte Risiken beim Surfen auf der Schulter sollten. Für sensible Apps empfehlen wir ohne biometrischen Fallback auf PINs zu arbeiten, und nach Nutzer können warten, sich mit einem Passwort neu anmelden oder Konten zurücksetzen. Konto wurde zurückgesetzt Faktoren, die auf dem Gerät nicht leicht zugänglich sind (Best Practice) unten).

So trägt dies zum Schutz vor Betrug und Smartphone-Diebstahl bei

Ein bestimmter Anwendungsfall, der bei der Betrugsprävention hilfreich sein kann, ist, biometrische Authentifizierung in Ihrer App vor einer Transaktion. Wenn Ihre Nutzer eine Finanztransaktion tätigen möchten, wird das biometrische Dialogfeld angezeigt, Prüfen Sie, ob es sich tatsächlich um den vorgesehenen Nutzer handelt, der die Transaktion durchführt. Dieses Best Practice verhindern, dass ein Angreifer ein Gerät stiehlt, ob der Angreifer den LSKF kennt oder nicht, da er prüfen muss, ob er des Geräteeigentümers.

Für zusätzliche Sicherheitsebenen empfehlen wir App-Entwicklern, Klasse 3 anzufordern Biometrische Authentifizierung und CryptoObject für Banking und Finanztransaktionen.

Implementierung

  1. Achte darauf, die androidx.biometric-Bibliothek anzugeben.
  2. Dialogfeld für biometrische Anmeldung in die Aktivität oder das Fragment einschließen, die bzw. das enthält die Logik für die Nutzerauthentifizierung.

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);
    });
}

Best Practices

Wir empfehlen Ihnen, mit dem Codelab zu beginnen, um mehr über biometrische Verfahren zu erfahren.

Je nach Anwendungsfall können Sie den Dialog mit oder ohne eine explizite Nutzeraktion. Um Betrug zu vermeiden, sollten Sie das biometrische Verfahren Dialogfeld mit expliziter Nutzeraktion für jede Transaktion. Uns ist bewusst, dass Authentifizierung hinzufügen, kann zu Reibung im UX-Design führen, aber aufgrund der Beschaffenheit des die bei einer Banktransaktion verarbeiteten Informationen und die biometrischen ist die Authentifizierung einfacher als andere Authentifizierungsmethoden, notwendig, um diese Navigationsebene hinzuzufügen.

Weitere Informationen zur biometrischen Authentifizierung

Passkeys

Passkeys sind eine sichere und einfache Alternative zu Passwörtern. Passkeys verwenden Public-Key-Kryptografie, mit der sich Ihre Nutzer in Apps und Websites anmelden können die Displaysperre ihres Geräts, z. B. einen Fingerabdruck oder ein Gesicht, zu verwenden Anerkennung. So müssen sie sich keine Passwörter mehr merken und und bietet eine deutlich verbesserte Sicherheit.

Passkeys erfüllen die Anforderungen für die Multi-Faktor-Authentifizierung in nur einem Schritt ein Passwort und OTP-Codes ersetzen, um einen zuverlässigen Schutz Phishing-Angriffe zu verhindern und die Nutzer mühsam durch SMS- oder App-basierte Passwörter. Da Passkeys standardisiert sind, ermöglicht eine einzige Implementierung eine ohne Passwort für alle Nutzer Geräten, Browsern und Betriebssysteme.

Auf Android-Geräten werden Passkeys über den Credential Manager Jetpack unterstützt die die wichtigsten Authentifizierungsmethoden vereinheitlicht, darunter Passkeys, Passwörter und die Anmeldung im zusammengeschlossenen Netzwerk (z. B. „Über Google anmelden“).

So trägt dies zur Eindämmung von Betrug bei

Passkeys schützen Sie vor Phishing-Angriffen, da sie nur auf Ihren registrierten Apps und Websites.

Die Hauptkomponente eines Passkeys ist ein kryptografischer privater Schlüssel. In der Regel der private Schlüssel ausschließlich auf Ihren Geräten wie Laptops oder Mobiltelefonen gespeichert ist, und wird von Anmeldedaten-Anbietern (auch bekannt als Passwort z. B. den Google Passwortmanager. Nur der entsprechende öffentliche Schlüssel wird werden vom Onlinedienst gespeichert, wenn ein Passkey erstellt wird. Während der Anmeldung verwendet den privaten Schlüssel, um eine Identitätsbestätigung über den öffentlichen Schlüssel zu signieren. Dies kann nur von einem Ihrer Geräte stammen. Damit dies geschieht, müssen Sie Gerät oder Anmeldedatenspeicher entsperren, um nicht autorisierte Anmeldungen zu verhindern (z. B. von einem gestohlenen Smartphone).

Um unbefugten Zugriff im Falle eines gestohlenen, entsperrten Geräts zu verhindern, Passkeys müssen mit einem sinnvollen Zeitlimit für die Authentifizierung gekoppelt sein. Eine Angreifer, die ein Gerät stehlen, sollten nicht in der Lage sein, eine Anwendung nur zu nutzen, da der vorherige Nutzer angemeldet war. Stattdessen sollten die Anmeldedaten in regelmäßigen Abständen (z. B. alle 15 Minuten) ablaufen. Nutzer sollten müssen ihre Identität durch erneutes Authentifizieren der Displaysperre bestätigen.

Wenn Ihr Smartphone gestohlen wird, schützen Sie sich mit Passkeys, denn Diebe können Ihr Smartphone nicht stehlen Passwörter, die auf anderen Geräten verwendet werden können – Passkeys sind gerätespezifisch. Wenn Sie Google Passwortmanager verwendet und dein Smartphone gestohlen wurde, kannst du dich in deinem Google Passwortmanager Über ein anderes Gerät (z. B. einen Computer) ein Konto erstellen und sich per Remote-Zugriff vom gestohlenes Smartphone. Dadurch wird der Google Passwortmanager auf dem gestohlenen Smartphone nicht verwendbar, einschließlich gespeicherter Passkeys.

Im schlimmsten Fall werden Passkeys nur verwendet, wenn das gestohlene Gerät wiederhergestellt wird. der Anmeldedatenanbieter erstellt und synchronisiert hat, werden mit dem neuen Gerät synchronisiert. den Passkey. Beispiel: Der Nutzer hat den Google Passwortmanager erstellen Sie den Passkey. Dann können sie auf einem neuen Gerät darauf zugreifen, indem sie Zugriff auf ihr Google-Konto mit der Displaysperre aus der vorherigen .

Weitere Informationen finden Sie in der Sicherheit von Passkeys im Google Passwortmanager.

Implementierung

Passkeys werden auf Geräten mit Android 9 (API-Level 28) oder höher unterstützt. Passwörter und die Funktion „Über Google anmelden“ werden ab Android 4.4 unterstützt. Bis So richten Sie Passkeys ein:

  1. Im Codelab für Anmeldedaten-Manager kannst du dich mit der Implementierung von Passkeys vertraut machen.
  2. Lies dir die Designrichtlinien für Passkeys durch. In diesem Dokument erfahren Sie, welche Abläufe für Ihren Anwendungsfall empfohlen werden.
  3. Lies dir die Informationen zum Credential Manager durch. Eine Anleitung dazu findest du in diesem Leitfaden.
  4. Plane die Implementierung des Anmeldedaten-Managers und der Passkeys für deine App. Planen Sie, die Unterstützung für Digital Asset Links hinzuzufügen.

In unserer Entwicklerdokumentation finden Sie weitere Informationen zum Erstellen, Registrieren und mit Passkeys authentifizieren.

Zurücksetzen des sicheren Kontos

Ein nicht autorisierter Angreifer, der Zugriff auf ein entsperrtes Gerät hat, beispielsweise wenn ein Smartphone versuchen, auf sensible Apps zuzugreifen, insbesondere auf Banking- oder Bargeld-Apps. Wenn die App eine biometrische Verifizierung implementiert, würde der Angreifer versuchen, die App zurückzusetzen das Konto, auf das Sie zugreifen möchten. Es ist wichtig, dass Sie sich nicht nur Informationen, die auf dem Gerät leicht zugänglich sind, z. B. ein OTP per E-Mail oder SMS Links zurücksetzen.

Im Folgenden finden Sie gängige Best Practices, die Sie beim Zurücksetzen Ihrer App anwenden können. Ablauf:

  • Gesichtserkennung und OTP
  • Sicherheitsfragen
  • Wissensfaktor (z. B. Mädchenname der Mutter, Geburtsort oder Favorit Song)
  • Bestätigung per Ausweis

SMS Retriever-API

Mit der SMS Retriever API können Sie SMS-basierte Nutzerbestätigungen in Ihrem Android-App automatisch. Auf diese Weise müssen die Nutzenden nicht Bestätigungscodes manuell eingeben. Außerdem fragt diese API den Nutzer nicht nach für zusätzliche, potenziell gefährliche App-Berechtigungen wie RECEIVE_SMS oder READ_SMS. SMS sollten jedoch nicht als einzige Nutzerbestätigung verwendet werden, und vor unbefugtem lokalen Zugriff auf das Gerät zu schützen.

So trägt dies zur Eindämmung von Betrug bei

Einige Nutzer verwenden SMS-Codes als einzigen Authentifizierungsfaktor, der eine einen einfachen Einstiegspunkt für Betrugsversuche zu finden.

Mit der SMS Retriever API kann die App den SMS-Code direkt abrufen, ohne Nutzerinteraktionen und können einen Schutz vor Betrug bieten.

Implementierung

Die Implementierung der SMS Retriever API besteht aus zwei Teilen: Android und Server.

Android: (Anleitung)

  1. Ermitteln Sie die Telefonnummer des Nutzers.
  2. Starten Sie den SMS-Abrufclient.
  3. Senden Sie die Telefonnummer an Ihren Server.
  4. Bestätigungs-E-Mails erhalten.
  5. Senden Sie das OTP an Ihren Server.

Server: (Anleitung)

  1. Erstellen Sie eine Bestätigungsnachricht.
  2. Senden Sie die Bestätigungsnachricht per SMS.
  3. Prüfen Sie das OTP, wenn es zurückgegeben wird.

Best Practices

Sobald die App integriert ist und die Telefonnummer des Nutzers mit der SMS Retriever API versucht, das OTP abzurufen. Wenn sie erfolgreich ist, ist das eine starke signalisiert, dass die SMS automatisch auf dem Gerät empfangen wurde. Falls nicht, und der Nutzer das OTP manuell eingeben muss, dass der Nutzer möglicherweise in betrügerischer Absicht gerät.

SMS sollten nicht als einziger Mechanismus zur Nutzerbestätigung verwendet werden, da dadurch Platz bleibt vor lokalen Angriffen, z. B. wenn ein Angreifer ein entsperrtes Gerät raubt oder SIM Klonangriffen. Es wird empfohlen, nach Möglichkeit das biometrische Verfahren zu verwenden. An auf denen keine biometrischen Sensoren verfügbar sind, sich auf mindestens einen Faktor beziehen, der sich nicht ohne Weiteres vom aktuellen Gerät abrufen lässt.

Weitere Informationen

Weitere Informationen zu den Best Practices finden Sie in den folgenden Ressourcen: