Authentification sécurisée des utilisateurs

Pour protéger votre système d'authentification sous Android, envisagez d'utiliser basé sur un mot de passe, surtout pour les comptes sensibles banque et des comptes de messagerie. N'oubliez pas que certaines applications installées par vos utilisateurs peuvent ne pas disposer et tenter d'hameçonner vos utilisateurs.

De plus, ne partez pas du principe que seuls les utilisateurs autorisés se serviront de l'appareil. Vol de téléphone est un problème courant, et les attaquants ciblent les appareils déverrouillés pour en tirer profit à partir des données utilisateur ou des applications financières. Nous suggérons à toutes les applications sensibles d'implémenter un délai d'authentification raisonnable (15 minutes ?) avec la vérification biométrique et Exiger une authentification supplémentaire avant d'effectuer des actions sensibles, comme l'argent transferts.

Boîte de dialogue d'authentification biométrique

La bibliothèque Biometrics propose un ensemble de fonctions permettant d'afficher une requête l'authentification biométrique (reconnaissance faciale ou empreinte digitale, par exemple). Cependant, les requêtes biométriques peuvent être configurées pour se rabattre sur LSKF, risques connus liés à la planche d'épaule. Pour les applications sensibles, nous vous recommandons l'absence de basculement biométrique sur le code PIN, et après avoir épuisé les tentatives les utilisateurs peuvent patienter, se reconnecter avec un mot de passe ou réinitialiser les comptes. Compte réinitialisé Nécessitent des facteurs auxquels il est difficile d'accéder sur l'appareil ci-dessous).

En quoi cela permet-il de limiter la fraude et le vol de téléphone ?

Un cas d'utilisation particulier qui peut aider à prévenir la fraude est de demander l'authentification biométrique dans votre application avant une transaction. Lorsque vos utilisateurs effectuer une transaction financière, la boîte de dialogue biométrique s'affiche vérifier que c'est bien l'utilisateur destiné à effectuer la transaction. Ce la meilleure pratique consisterait à protéger contre un attaquant qui vole un appareil, quel que soit si l’attaquant connaît ou non le LSKF, car il devra vérifier qu’il le propriétaire de l'appareil.

Pour renforcer la sécurité, nous recommandons aux développeurs d'applications de demander la classe 3. l'authentification biométrique, et d'utiliser CryptoObject pour les opérations bancaires et les transactions financières.

Implémentation

  1. Veillez à inclure la bibliothèque androidx.biometric.
  2. Inclure la boîte de dialogue de connexion biométrique dans l'activité ou le fragment contenant la logique avec laquelle vous souhaitez authentifier l'utilisateur.

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

Bonnes pratiques

Nous vous recommandons de commencer par l'atelier de programmation pour en savoir plus sur la biométrie.

Selon vos cas d'utilisation, vous pouvez implémenter la boîte de dialogue avec ou sans une action explicite de l'utilisateur. Pour éviter toute fraude, nous vous conseillons d'ajouter boîte de dialogue avec une action explicite de l'utilisateur pour chaque transaction. Nous savons que l'ajout d'une authentification peut créer des frictions dans l'UX, mais en raison de la nature de les informations traitées lors d'une transaction bancaire et que l'authentification biométrique est plus fluide que les autres méthodes d'authentification, pour ajouter ce niveau de navigation.

En savoir plus sur l'authentification biométrique

Clés d'accès

Les clés d'accès offrent une alternative aux mots de passe, à la fois plus sécurisée et plus simple. Utilisation des clés d'accès la cryptographie à clé publique pour permettre à vos utilisateurs de se connecter à des applications et à des sites Web En utilisant le mécanisme de verrouillage de l'écran de son appareil (empreinte digitale ou visage, par exemple) de la reconnaissance vocale. Cela évite à l'utilisateur d'avoir à mémoriser et à gérer des mots de passe, et améliore considérablement la sécurité.

Les clés d'accès peuvent répondre aux exigences d'authentification multifacteur en une seule étape, en remplaçant à la fois un mot de passe et des codes OTP pour offrir une protection efficace contre les attaques par hameçonnage et évitent l'expérience utilisateur fastidieuse liée aux SMS ou aux applications mots de passe. Les clés d'accès étant standardisées, une seule implémentation permet sans mot de passe pour tous les utilisateurs appareils, navigateurs et systèmes d'exploitation.

Sur Android, les clés d'accès sont compatibles avec le Jetpack Gestionnaire d'identifiants. qui unifie les principales méthodes d'authentification, y compris les clés d'accès, mots de passe et connexion fédérée (par exemple, Se connecter avec Google).

En quoi cela permet-il de limiter la fraude ?

Les clés d'accès vous protègent des attaques d'hameçonnage, car elles ne fonctionnent applications et sites Web enregistrés.

Le composant principal d'une clé d'accès est une clé privée cryptographique. En général, cela la clé privée réside uniquement sur vos appareils, tels que les ordinateurs portables ou les téléphones mobiles, et sont synchronisées entre eux par les fournisseurs d'identifiants gestionnaires de mots de passe), tels que le Gestionnaire de mots de passe de Google. Seule la clé publique correspondante est enregistrées par le service en ligne lorsqu'une clé d'accès est créée. Lors de la connexion, le service utilise la clé privée pour signer un défi à partir de la clé publique. Cela ne peut proviennent de l'un de vos appareils. De plus, pour que cela se produise, vous devez déverrouiller votre appareil ou le magasin d'identifiants, ce qui empêche les connexions non autorisées (par exemple, à partir d'un téléphone volé).

Pour empêcher tout accès non autorisé en cas de vol et de déverrouillage d'appareil, Les clés d'accès doivent être associées à un délai d'expiration d'authentification raisonnable. Une un attaquant qui vole un appareil ne devrait pas pouvoir utiliser une application juste car l'utilisateur précédent était connecté. Les identifiants doivent plutôt expirent à intervalles réguliers (par exemple, toutes les 15 minutes) et les utilisateurs qu'il doit valider son identité en réauthentifiant le verrouillage de l'écran.

Si on vous vole votre téléphone, les clés d'accès vous protègent, car les voleurs ne peuvent pas voler votre mots de passe à utiliser sur d'autres appareils : les clés d'accès sont spécifiques à chaque appareil. Si vous utilisez le Gestionnaire de mots de passe de Google et votre téléphone sont volés, connectez-vous à votre compte à partir d'un autre appareil (un ordinateur, par exemple) et déconnectez-vous à distance du téléphone volé. Cela rend le Gestionnaire de mots de passe de Google sur le téléphone volé inutilisable, y compris les clés d'accès enregistrées.

Dans le pire des cas, si l’appareil volé n’est pas récupéré, les clés d’accès sont synchronisé avec le nouvel appareil par le fournisseur d'identifiants qui a créé et synchronisé la clé d'accès. Par exemple, l'utilisateur peut avoir choisi le Gestionnaire de mots de passe de Google pour créer la clé d'accès. Ils pourront alors y accéder sur un nouvel appareil à son compte Google et de fournir le verrouillage de l'écran appareil.

Pour en savoir plus, consultez le Article Sécurité des clés d'accès dans le Gestionnaire de mots de passe de Google.

Implémentation

Les clés d'accès sont compatibles avec les appareils équipés d'Android 9 (niveau d'API 28) ou version ultérieure. Les mots de passe et la fonctionnalité Se connecter avec Google sont compatibles à partir d'Android 4.4. À commencer à utiliser des clés d'accès, procédez comme suit:

  1. Suivez l'atelier de programmation sur le Gestionnaire d'identifiants pour découvrir comment implémenter des clés d'accès.
  2. Consultez les consignes de conception de l'expérience utilisateur pour les clés d'accès. Ce document présente les flux recommandés pour votre cas d'utilisation.
  3. Étudiez le Gestionnaire d'identifiants en suivant ce guide.
  4. Planifiez l'implémentation du Gestionnaire d'identifiants et des clés d'accès pour votre application. Prévoyez d'ajouter la prise en charge des liens vers des ressources numériques.

Consultez notre documentation destinée aux développeurs pour savoir comment créer, enregistrer et s'authentifier à l'aide de clés d'accès.

Réinitialisation sécurisée du compte

Un pirate informatique non autorisé ayant accès à un appareil déverrouillé (par exemple, lorsqu'un téléphone est dérobé) essaient d'accéder à des applications sensibles, en particulier des applications bancaires ou de trésorerie. Si l'application met en œuvre la vérification biométrique, le pirate informatique tenterait de réinitialiser le compte à accéder. Il est essentiel que le processus de réinitialisation du compte ne se base pas uniquement à partir d'informations facilement accessibles sur l'appareil, telles qu'un mot de passe à usage unique envoyé par e-mail ou par SMS les liens de réinitialisation.

Voici quelques bonnes pratiques courantes que vous pouvez intégrer lors de la réinitialisation de votre application flux:

  • Reconnaissance faciale, en plus de l'OTP
  • Questions secrètes
  • Facteur de connaissance (nom de jeune fille de la mère, ville de naissance ou favori, par exemple) chanson)
  • Validation de l'identité

API SMS Retriever

L'API SMS Retriever vous permet d'effectuer une vérification des utilisateurs par SMS dans votre l'application Android. Ainsi, l'utilisateur n'aura pas besoin de saisir manuellement les codes de validation. De plus, cette API ne demande pas à l'utilisateur pour obtenir des autorisations d'applications supplémentaires potentiellement dangereuses, comme RECEIVE_SMS ou READ_SMS Cependant, les SMS ne doivent pas être utilisés comme seule vérification d'utilisateur pour à protéger contre tout accès local non autorisé à l’appareil.

En quoi cela permet-il de limiter la fraude ?

Certains utilisateurs utilisent les codes reçus par SMS comme seul facteur d'authentification, ce qui leur permet un point d'entrée facile pour les fraudes.

L'API SMS Retriever permet à l'application de récupérer directement le code SMS sans les interactions avec les utilisateurs et peuvent offrir un niveau de protection contre la fraude.

Implémentation

L'implémentation de l'API SMS Retriever s'effectue en deux parties: Android et Server.

Android: (guide)

  1. Obtenez le numéro de téléphone de l'utilisateur.
  2. Démarrez le client SMS Retriever.
  3. Envoyez le numéro de téléphone à votre serveur.
  4. Recevoir des messages de validation.
  5. Envoyez l'OTP à votre serveur.

Server (Serveur) : (guide)

  1. Rédigez un message de validation.
  2. Envoyez le message de vérification par SMS.
  3. Vérifiez l'OTP lorsqu'il vous est renvoyé.

Bonnes pratiques

Une fois l'intégration de l'application effectuée et la validation du numéro de téléphone de l'utilisateur auprès de l'API SMS Retriever, elle essaie d'obtenir l'OTP. Si l'opération réussit, signale que le SMS a été reçu automatiquement sur l'appareil. Si ce n'est pas le cas si l'opération réussit et que l'utilisateur doit saisir manuellement le mot de passe à usage unique, il peut s'agir d'un signe d'avertissement que l'utilisateur est peut-être victime de fraude.

Le SMS ne doit pas être utilisé comme seul mécanisme de validation de l'utilisateur s'il laisse de la place à des attaques locales, comme un attaquant qui vole un appareil déverrouillé ; ou SIM les attaques par clonage. Il est recommandé d'utiliser la biométrie autant que possible. Activé appareils où les capteurs biométriques ne sont pas disponibles, l'authentification de l'utilisateur s'appuient sur au moins un facteur difficile à obtenir avec l'appareil actuel.

En savoir plus

Pour en savoir plus sur les bonnes pratiques, consultez les ressources suivantes: