Autenticazione sicura degli utenti

Per proteggere il tuo sistema di autenticazione in Android, ti consigliamo di abbandonare una basato su password, in particolare nel caso di account sensibili come quelli banca e account email. Ricorda che alcune app installate dagli utenti potrebbero non disporre le migliori intenzioni e potrebbe tentare di truffare gli utenti.

Inoltre, non dare per scontato che il dispositivo venga utilizzato solo da utenti autorizzati. Furto telefono è un problema comune e gli aggressori prendono di mira i dispositivi sbloccati per trarre direttamente profitto dai dati utente o dalle app finanziarie. Consigliamo a tutte le app sensibili di implementare un ragionevole (15 minuti?) con verifica biometrica e richiedono un'autenticazione aggiuntiva prima di azioni sensibili come denaro trasferimenti.

Finestra di dialogo Autenticazione biometrica

La libreria Biometrics offre una serie di funzioni per visualizzare un prompt in cui l'autenticazione biometrica, ad esempio il riconoscimento facciale o dell'impronta. Tuttavia, i prompt biometrici possono essere configurati in modo da ricorrere all'LSKF, che ha rischi noti di spallacci. Per le app sensibili, consigliamo non dispone di PIN biometrico e, dopo aver esaurito i nuovi tentativi biometrici, gli utenti possono attendere oppure effettuare nuovamente l'accesso con la password o reimpostare gli account. Reimpostazione dell'account deve richiedere fattori non facilmente accessibili sul dispositivo (best practice di seguito).

In che modo questo contribuisce a mitigare le attività fraudolente e i furti di telefono

Un caso d'uso particolare che può essere utile per prevenire attività fraudolente è la richiesta l'autenticazione biometrica all'interno dell'app prima di una transazione. Quando gli utenti vuoi effettuare una transazione finanziaria, viene visualizzata la finestra di dialogo biometrica per verificare che la transazione sia effettivamente l'utente di destinazione. Questo la best practice protegge dai malintenzionati che rubano un dispositivo, indipendentemente dal fatto che l'aggressore che conosca o meno la LSKF, in quanto dovrà verificare di essere il proprietario del dispositivo.

Per ulteriori livelli di sicurezza, consigliamo agli sviluppatori di app di richiedere la Classe 3 l'autenticazione biometrica e utilizzare CryptoObject per servizi bancari e transazioni finanziarie.

Implementazione

  1. Assicurati di includere la libreria androidx.biometric.
  2. Includi la finestra di dialogo di accesso biometrico nell'attività o nel frammento che contiene la logica con cui vuoi che l'utente venga autenticato.

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 practice

Ti consigliamo di iniziare con il codelab per saperne di più sulla biometria.

A seconda dei casi d'uso, puoi implementare la finestra di dialogo con o senza un'azione esplicita dell'utente. Per evitare attività fraudolente, ti consigliamo di aggiungere i dati biometrici una finestra di dialogo con un'azione esplicita dell'utente per ogni transazione. Siamo consapevoli che l'aggiunta dell'autenticazione può introdurre attriti nella UX, ma a causa della natura le informazioni gestite in una transazione bancaria e i dati biometrici l'autenticazione sia più fluida rispetto ad altri metodi di autenticazione, riteniamo necessarie per aggiungere questo livello di navigazione.

Scopri di più sull'autenticazione biometrica.

Passkey

Le passkey sono un'alternativa più sicura e semplice alle password. Le passkey usano crittografia a chiave pubblica per consentire agli utenti di accedere ad app e siti web. usando il meccanismo di blocco schermo del dispositivo, ad esempio un'impronta o un volto di riconoscimento dei volti delle celebrità basata su rigidi criteri di controllo. In questo modo l'utente non deve ricordare e gestire le password, e offre una sicurezza notevolmente migliorata.

Le passkey possono soddisfare i requisiti di autenticazione a più fattori in un solo passaggio, la sostituzione di una password e di un codice OTP per garantire una solida protezione attacchi di phishing ed evitare le difficoltà dell'utente legate all'uso di SMS o app password. Poiché le passkey sono standardizzate, una singola implementazione consente senza password per tutti gli utenti dispositivi, browser e sistemi operativi diversi.

Su Android, le passkey sono supportate utilizzando il Jetpack di Gestore delle credenziali libreria che unifica i principali metodi di autenticazione, tra cui passkey, password e accesso federato (come Accedi con Google).

In che modo questo contribuisce a mitigare le attività fraudolente

Le passkey ti proteggono dagli attacchi phishing perché funzionano solo sul tuo di app e siti web registrati.

Il componente principale di una passkey è una chiave privata di crittografia. In genere, chiave privata si trova esclusivamente sui tuoi dispositivi, ad esempio computer portatili o cellulari, e viene sincronizzato tra loro dai provider di credenziali (noti anche come password come Gestore delle password di Google. Solo la chiave pubblica corrispondente è salvato dal servizio online quando viene creata una passkey. Durante l'accesso, il servizio utilizza la chiave privata per firmare una richiesta dalla chiave pubblica. È possibile eseguire questa operazione proviene da uno dei tuoi dispositivi. Inoltre, affinché ciò si verifichi, devi Sbloccare il dispositivo o l'archivio di credenziali, che impedisce gli accessi non autorizzati (ad es. da un telefono rubato).

Per impedire l'accesso non autorizzato in caso di furto o sblocco del dispositivo, le passkey devono essere associate a una finestra di timeout di autenticazione ragionevole. Un un utente malintenzionato che ruba un dispositivo non dovrebbe essere in grado di usare un'applicazione perché l'utente precedente aveva eseguito l'accesso. Le credenziali devono invece scadono a intervalli regolari (ad esempio, ogni 15 minuti) e gli utenti devono necessari per verificare la propria identità mediante la riautenticazione mediante blocco schermo.

In caso di furto dello smartphone, le passkey ti proteggono perché i ladri non possono rubarti password da usare su altri dispositivi. Le passkey sono specifiche per il dispositivo. Se utilizzi Gestore delle password di Google e il tuo telefono viene rubato, puoi accedere al tuo da un altro dispositivo (ad esempio un computer) ed eseguire la disconnessione da remoto il telefono rubato. Questo fa sì che Gestore delle password di Google sul telefono rubato inutilizzabili, incluse eventuali passkey salvate.

Nel caso peggiore, se il dispositivo rubato non viene recuperato, le passkey vengono sincronizzati con il nuovo dispositivo dal fornitore di credenziali che ha creato e sincronizzato la passkey. Ad esempio, l'utente potrebbe aver scelto Gestore delle password di Google per creano la passkey, che potrà accedere su un nuovo dispositivo firmando al proprio Account Google e fornendo il blocco schermo della precedente dispositivo.

Scopri di più nel Articolo Sicurezza delle passkey nel Gestore delle password di Google.

Implementazione

Le passkey sono supportate sui dispositivi con Android 9 (livello API 28) o versioni successive. Le password e Accedi con Google sono supportati a partire da Android 4.4. A Per iniziare a usare le passkey, segui questi passaggi:

  1. Segui il codelab sul Gestore delle credenziali per acquisire una prima conoscenza su come implementare le passkey.
  2. Consulta le linee guida per la progettazione dell'esperienza utente relative alle passkey. Questo documento mostra quali flussi sono consigliati per il tuo caso d'uso.
  3. Segui la guida per imparare a utilizzare Gestore delle credenziali.
  4. Pianifica l'implementazione di Gestore delle credenziali e delle passkey per la tua app. Prevedi l'aggiunta del supporto per Digital Asset Links.

Consulta la documentazione per gli sviluppatori per maggiori dettagli su come creare, registrare e con l'autenticazione tramite passkey.

Reimpostazione account sicuro

Un utente malintenzionato non autorizzato con accesso a un dispositivo sbloccato (ad esempio quando un telefono viene intercettato) tenteranno di accedere ad app sensibili, in particolare ad app di online banking o di contanti. Se l'app implementa la verifica biometrica, l'aggressore proverà a reimpostare l'account per accedervi. È essenziale che il flusso di reimpostazione dell'account non si basi su informazioni facilmente accessibili sul dispositivo, ad esempio OTP via email o SMS di reimpostazione dei link.

Di seguito sono riportate alcune best practice comuni che puoi incorporare nella procedura di reimpostazione dell'app :

  • Riconoscimento facciale oltre a OTP
  • Domande di sicurezza
  • Fattore di conoscenza (come il cognome da nubile di una madre, la città di nascita o il brano)
  • Verifica dell'identità

API SMS Retriever

L'API SMS Retriever ti consente di eseguire la verifica utente basata su SMS nel tuo App Android automaticamente. In questo modo all'utente non sarà necessario digita manualmente i codici di verifica. Inoltre, questa API non chiede all'utente per richiedere autorizzazioni app aggiuntive e potenzialmente pericolose, come RECEIVE_SMS oppure READ_SMS. Tuttavia, gli SMS non devono essere utilizzati come unica verifica dell'utente per Proteggere il dispositivo da accessi locali non autorizzati.

In che modo questo contribuisce a mitigare le attività fraudolente

Alcuni utenti utilizzano i codici SMS come unico fattore di autenticazione, che fornisce una punto di accesso facile per le frodi.

L'API SMS Retriever consente all'app di recuperare direttamente il codice SMS senza interazione dell'utente e può fornire un livello di protezione contro le attività fraudolente.

Implementazione

L'implementazione dell'API SMS Retriever prevede due parti: Android e Server.

Android: (guida)

  1. Procurati il numero di telefono dell'utente.
  2. Avvia il client SMS retriever.
  3. Invia il numero di telefono al server.
  4. Ricevere messaggi di verifica.
  5. Invia l'OTP al tuo server.

Server: (guida)

  1. Costruire un messaggio di verifica.
  2. Invia il messaggio di verifica via SMS.
  3. Verifica l'OTP quando viene restituita.

Best practice

Dopo l'integrazione dell'app e la verifica del numero di telefono dell'utente l'API SMS Retriever, prova a recuperare l'OTP. Se ha successo, si tratta di un'ottima segnale che l'SMS è stato ricevuto automaticamente sul dispositivo. In caso contrario riuscito e l'utente deve digitare manualmente la OTP, potrebbe essere un segnale di avviso che l'utente potrebbe essere oggetto di attività fraudolente.

Gli SMS non devono essere utilizzati come unico meccanismo di verifica dell'utente quando escono dalla stanza virtuale. agli attacchi locali, ad esempio a un aggressore che ruba un dispositivo sbloccato; o SIM clonazione degli attacchi. È consigliabile utilizzare la biometria quando possibile. Attivato dispositivi in cui i sensori biometrici non sono disponibili, l'autenticazione utente deve fare affidamento su almeno un fattore che non si può ottenere facilmente dal dispositivo corrente.

Scopri di più

Per ulteriori informazioni sulle best practice, consulta le seguenti risorse: