La biometria offre un modo più pratico, ma potenzialmente meno sicuro, per confermare la tua identità con un dispositivo. Nel modello di autenticazione a più livelli, l'autenticazione principale (ovvero le modalità basate su fattori di conoscenza come PIN, sequenza e password) offre il massimo livello di sicurezza. La biometria si trova nel livello secondario di autenticazione e offre un equilibrio tra praticità e sicurezza. La CDD di Android definisce tre classi di robustezza biometrica: classe 3 (precedentemente Forte), classe 2 (precedentemente Debole) e classe 1 (precedentemente Comodità). Ogni classe ha un insieme di prerequisiti, privilegi e vincoli. Per ulteriori dettagli, consulta il CDD riportato sopra. Tutte e tre le classi possono essere integrate con la schermata di blocco, ma solo gli autenticatori Strong e Weak possono essere integrati con le API android.hardware.biometrics. Questa tabella descrive ogni autenticatore e la funzionalità che supporta.
| Authenticator | Schermata di blocco | Integrazione di BiometricPrompt | Archivio chiavi (chiave basata sul tempo) | Archivio chiavi (chiave basata sull'operazione) |
|---|---|---|---|---|
| BIOMETRIC_STRONG (classe 3) | Sì | Sì | Sì | Sì |
| BIOMETRIC_WEAK (Classe 2) | Sì | Sì | No | No |
| BIOMETRIC_CONVENIENCE (Classe 1) |
Sì | No | No | No |
| DEVICE_CREDENTIAL | Sì | Sì | Sì | Sì |
Il framework Android include il supporto per l'autenticazione biometrica con impronta e riconoscimento facciale. Android può essere personalizzato per supportare altre modalità biometriche (ad esempio l'iride). Tuttavia, l'integrazione biometrica dipenderà dalla sicurezza biometrica, non dalla modalità. Per maggiori dettagli sulle specifiche di sicurezza biometrica, vedi Misurazione della sicurezza dello sblocco biometrico.
Fonte
Android 12
- Introduce l'API BiometricManager.Strings, che fornisce stringhe localizzate per le app che utilizzano BiometricPrompt per l'autenticazione. Queste stringhe sono pensate per essere specifiche per il dispositivo e fornire maggiori dettagli sui tipi di autenticazione che possono essere utilizzati.
- Include il supporto del sensore di impronte digitali integrato nel display (UDFPS).
Android 11
- Introduce l'interfaccia BiometricManager.Authenticators, che fornisce costanti che gli sviluppatori possono utilizzare per specificare i tipi di autenticazione accettati dalle loro app.
- Aggiunge l'
ACTION_BIOMETRIC_ENROLLintent action, che gli sviluppatori possono utilizzare per indirizzare l'utente a registrare un metodo di autenticazione che soddisfi i requisiti delle loro app. - Aggiunge il
AuthenticationResult#getAuthenticationType()metodo, che gli sviluppatori possono utilizzare per verificare se l'utente ha eseguito l'autenticazione utilizzando una credenziale biometrica o una credenziale del dispositivo. - Fornisce ulteriore supporto per le chiavi auth-per-use all'interno della classe BiometricPrompt.
Android 10
- Introduce la
BiometricManagerclasse che gli sviluppatori possono utilizzare per eseguire query sulla disponibilità dell'autenticazione biometrica. - Include l'integrazione dell'autenticazione tramite impronta e volto per
BiometricPrompt
Android 9
- Include l'integrazione dell'impronta solo per
BiometricPrompt. - Depreca la classe FingerprintManager. Se le app di sistema e in bundle utilizzano
questa classe, aggiornale in modo che utilizzino
BiometricPrompteBiometricManager. - Sono stati aggiornati i test di verifica CTS
FingerprintManagerper testareBiometricPromptutilizzandoBiometricPromptBoundKeysTest.
Implementazione
Per garantire agli utenti e agli sviluppatori un'esperienza biometrica ottimale,
integra il tuo stack biometrico con le API
BiometricPrompt,
BiometricManager
e ACTION_BIOMETRIC_ENROLL. I dispositivi con sensori biometrici devono rispettare questi requisiti
di robustezza.Inoltre, tutte le implementazioni devono superare il modulo CTS CtsBiometricsTestCases.
Per integrare il tuo stack biometrico con l'API ACTION_BIOMETRIC_ENROLL:
- Modifica BiometricEnrollActivity per presentare il flusso di registrazione. Tieni presente che la tua biometria può essere presentata solo se soddisfa il livello di sicurezza richiesto. Se il dispositivo ne supporta più di uno, questa azione dovrebbe presentare un elenco tra cui l'utente può scegliere.
Linee guida per l'implementazione dell'HAL
Segui queste linee guida per l'HAL biometrico per assicurarti che i dati biometrici non vengano divulgati e vengano rimossi quando un utente viene rimosso da un dispositivo:
- Assicurati che i dati biometrici grezzi o i derivati (come i modelli) non siano mai accessibili dall'esterno dell'ambiente sicuro e isolato (come il TEE o Secure Element). Tutti i dati archiviati devono essere criptati con una chiave specifica del dispositivo nota solo al Trusted Execution Environment (TEE). Se l'hardware lo supporta, limita l'accesso all'ambiente isolato sicuro e proteggilo con una norma SELinux. Rendi il canale di comunicazione (ad esempio SPI, I2C) accessibile solo all'ambiente isolato sicuro con una policy SELinux esplicita su tutti i file del dispositivo.
- L'acquisizione, la registrazione e il riconoscimento biometrici devono avvenire all'interno dell'ambiente sicuro e isolato per prevenire violazioni dei dati e altri attacchi. Questo requisito si applica solo alle biometrie di classe 3 (precedentemente forte) e classe 2 (precedentemente debole).
- Per proteggere dagli attacchi di riproduzione, firma i modelli biometrici con una chiave privata specifica per il dispositivo. Per l'Advanced Encryption Standard (AES), firma almeno un modello con il percorso assoluto del file system, il gruppo e l'ID biometrico in modo che i file modello non siano utilizzabili su un altro dispositivo o da chiunque altro che non sia l'utente che li ha registrati sullo stesso dispositivo. Ad esempio, impedire la copia dei dati biometrici di un utente diverso sullo stesso dispositivo o di un altro dispositivo.
- Se devi archiviare i dati al di fuori del TEE, utilizza il percorso del file system
fornito da
setActiveUser() HIDL methodo fornisci un altro modo per cancellare tutti i dati dei modelli utente quando l'utente viene rimosso. Il motivo è proteggere la divulgazione dei dati utente. I dispositivi che non utilizzano questo percorso devono eseguire la pulizia dopo la rimozione dell'utente. È richiesto dal CDD che i dati biometrici e i file derivati vengano archiviati in forma criptata, soprattutto se non si trovano in TEE. Se ciò non è fattibile a causa dei requisiti di archiviazione dell'ambiente isolato sicuro, aggiungi hook per garantire la rimozione dei dati quando l'utente viene rimosso o il dispositivo viene resettato. Vedi LockSettingsService.removeBiometricsForUser()
Personalizzazione
Se il tuo dispositivo supporta più dati biometrici, l'utente dovrebbe essere in grado di
specificarne uno predefinito nelle impostazioni. L'implementazione di BiometricPrompt
deve preferire la biometria di classe 3 (precedentemente forte) come
impostazione predefinita, a meno che l'utente non la sostituisca esplicitamente, nel qual caso deve
essere visualizzato un messaggio di avviso che spieghi i rischi associati alla biometria (ad esempio,
Una tua foto potrebbe sbloccare il dispositivo)
Stringhe di autenticazione specifiche per dispositivo
A partire da Android 12, le stringhe di autenticazione contestuale vengono rese disponibili agli sviluppatori tramite l'API BiometricManager.Strings. Puoi personalizzare i valori delle risorse restituiti da questa API per implementare stringhe specifiche del dispositivo. In questo caso, assicurati che le nuove stringhe vengano tradotte per tutte le impostazioni internazionali supportate dal dispositivo. Inoltre, assicurati che le seguenti proprietà vengano mantenute:
Metodo |
Scopo della stringa |
Tipi di autenticazione da includere |
Se sono possibili sia la biometria sia il blocco schermo |
|---|---|---|---|
getButtonLabel() |
Etichetta di un pulsante che attiva BiometricPrompt |
Solo i tipi Registrato (se possibile) che soddisfano i requisiti dell'autenticatore |
Utilizza la stringa solo biometrica (ad esempio, "Usa l'impronta") |
getPromptMessage() |
Messaggio mostrato in BiometricPrompt durante l'autenticazione |
Solo i tipi Registrato (se possibile) che soddisfano i requisiti dell'autenticatore |
Utilizza la stringa combinata di dati biometrici e blocco schermo (ad es. "Usa la tua impronta o il tuo PIN per continuare") |
getSettingName() |
Nome di un'impostazione che attiva BiometricPrompt per l'autenticazione |
Tutti i tipi supportati dal dispositivo (anche se non registrati) che soddisfano i requisiti dell'autenticatore |
Utilizza la stringa combinata per i dati biometrici e il blocco schermo (ad esempio, "Usa l'impronta o il blocco schermo") |
Ad esempio, considera un dispositivo con un sensore del volto di Classe 2 con un volto registrato, un PIN registrato e un sensore di impronte di Classe 3 senza impronte registrate. La tabella seguente fornisce stringhe di esempio per ogni combinazione di autenticatori consentiti e metodo BiometricManager.Strings richiamato:
Autenticatori consentiti |
getButtonLabel() |
getPromptMessage() |
getSettingName() |
|---|---|---|---|
Biometria di classe 3 (BIOMETRIC_STRONG) |
"Usa l'impronta" (Solo l'impronta soddisfa i requisiti dell'autenticatore) |
"Usa l'impronta per continuare" (Solo l'impronta soddisfa i requisiti dell'autenticatore) |
"Usa l'impronta" (Solo l'impronta soddisfa i requisiti dell'autenticatore) |
Biometria di classe 2 (BIOMETRIC_WEAK) |
"Usa il volto" (Il volto e l'impronta soddisfano i requisiti; è registrato solo il volto) |
"Usa il tuo volto per continuare" (Il volto e l'impronta soddisfano i requisiti; è registrato solo il volto) |
"Usa il volto o l'impronta" (Il volto e l'impronta soddisfano i requisiti; il dispositivo supporta entrambi) |
Blocco schermo (DEVICE_CREDENTIAL) |
"Utilizza PIN" (Qualsiasi blocco schermo soddisfa i requisiti; il PIN è registrato) |
"Inserisci il PIN per continuare" (Qualsiasi blocco schermo soddisfa i requisiti; il PIN è registrato) |
"Usa blocco schermo" (Qualsiasi blocco schermo soddisfa i requisiti) |
Biometria di Classe 3 O blocco schermo |
"Utilizza PIN" (L'impronta e qualsiasi blocco schermo soddisfano i requisiti; è registrato solo il PIN) |
"Inserisci il PIN per continuare" (L'impronta e qualsiasi blocco schermo soddisfano i requisiti; è registrato solo il PIN) |
"Usa l'impronta o il blocco schermo" (l'impronta e qualsiasi blocco schermo soddisfano i requisiti) |
Biometria di Classe 2 O blocco schermo |
"Usa il volto" (Il volto, l'impronta e qualsiasi blocco schermo soddisfano i requisiti; il volto è registrato e sostituisce il PIN) |
"Per continuare, usa il tuo volto o il PIN" (Il volto, l'impronta e qualsiasi blocco schermo soddisfano i requisiti; il volto e il PIN sono registrati) |
"Usa i dati biometrici o il blocco schermo" (il volto, l'impronta e qualsiasi blocco schermo soddisfano i requisiti) |
Convalida
L'implementazione biometrica deve superare i seguenti test:
- CTS BiometricManager
- CTS BiometricPrompt (sanity, in-depth testing relies on verifier)
- Sezione CtsVerifier Biometric Test : Deve essere superata singolarmente con ogni modalità supportata dal dispositivo
Inoltre, se il tuo dispositivo supporta una biometria con un'interfaccia HIDL AOSP ([email protected], [email protected], face1.0), deve superare il test VTS pertinente (fingerprint, face)