La biometria offre un modo più conveniente, ma potenzialmente meno sicuro, di confermare la tua identità con un dispositivo. Nel modello di autenticazione a più livelli, l'autenticazione primaria (ovvero modalità basate su fattori di conoscenza come PIN, pattern e password) fornisce il massimo livello di sicurezza. La biometria è nel livello secondario dell'autenticazione, offrendo un equilibrio tra comodità e sicurezza. Il CDD Android definisce tre classi di forza biometrica: Classe 3 (precedentemente Forte), Classe 2 (precedentemente Debole) e Classe 1 (precedentemente Convenienza). Ogni classe ha una serie di prerequisiti, privilegi e vincoli: per ulteriori dettagli, consultare il CDD sopra. Tutte e tre le classi possono integrarsi con la schermata di blocco, ma solo gli autenticatori forti e deboli possono integrarsi con le API android.hardware.biometrics. Questa tabella descrive ogni autenticatore e la funzionalità che supporta.
Autenticatore | Blocca schermo | Integrazione BiometricPrompt | Keystore (chiave basata sul tempo) | Keystore (chiave basata sulle operazioni) |
---|---|---|---|---|
BIOMETRIC_STRONG (Classe 3) | SÌ | SÌ | SÌ | SÌ |
BIOMETRICO_DEBOLE (Classe 2) | SÌ | SÌ | NO | NO |
BIOMETRICO_CONVENIENZA (Classe 1) | SÌ | NO | NO | NO |
DEVICE_CREDENTIAL | SÌ | SÌ | SÌ | SÌ |
Il framework Android include il supporto per l'autenticazione biometrica del volto e dell'impronta digitale. Android può essere personalizzato per supportare altre modalità biometriche (come Iris). Tuttavia, l'integrazione biometrica dipenderà dalla sicurezza biometrica, non dalla modalità. Per ulteriori dettagli sulle specifiche di sicurezza biometrica, vedere Misurazione della sicurezza di sblocco biometrico .
Fonte
Androide 12
- Introduce l'API BiometricManager.Strings , che fornisce stringhe localizzate per le app che usano BiometricPrompt per l'autenticazione. Queste stringhe sono concepite per essere in grado di riconoscere il dispositivo e fornire maggiore specificità sui tipi di autenticazione che possono essere utilizzati.
- Include il supporto del sensore di impronte digitali sotto il display (UDFPS).
Androide 11
- Introduce l' interfaccia BiometricManager.Authenticators , che fornisce costanti che gli sviluppatori possono usare per specificare i tipi di autenticazione accettati dalle loro app.
- Aggiunge l'azione intent
ACTION_BIOMETRIC_ENROLL
, che gli sviluppatori possono utilizzare per indirizzare l'utente a registrare un metodo di autenticazione che soddisfi i requisiti delle loro app. - Aggiunge il metodo
AuthenticationResult #getAuthenticationType ()
, che gli sviluppatori possono utilizzare per verificare se l'utente si è autenticato utilizzando una credenziale biometrica o una credenziale del dispositivo. - Fornisce supporto aggiuntivo per le chiavi auth-per-use all'interno della classe BiometricPrompt.
Androide 10
- Introduce la classe
BiometricManager
che gli sviluppatori possono usare per eseguire query sulla disponibilità dell'autenticazione biometrica. - Include l'integrazione dell'impronta digitale e dell'autenticazione facciale per
BiometricPrompt
Android9
- Include l'integrazione delle impronte digitali solo per
BiometricPrompt
. - Depreca la classe FingerprintManager. Se le app in bundle e di sistema utilizzano questa classe, aggiornale in modo che utilizzino invece
BiometricPrompt
eBiometricManager
. - Aggiornati i test del verificatore CTS
FingerprintManager
per testareBiometricPrompt
utilizzandoBiometricPromptBoundKeysTest
.
Implementazione
Per garantire a utenti e sviluppatori un'esperienza biometrica senza problemi, integra il tuo stack biometrico con le API BiometricPrompt
, BiometricManager
e ACTION_BIOMETRIC_ENROLL
. I dispositivi con sensori biometrici devono rispettare questi requisiti di resistenza . 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 tuo flusso di registrazione. Nota che il tuo biometrico può essere presentato solo se soddisfa la forza richiesta. Se il tuo dispositivo ne supporta più di uno, questa azione dovrebbe presentare un elenco da cui l'utente può scegliere.

Linee guida per l'implementazione dell'HAL
Segui queste linee guida biometriche HAL per assicurarti che i dati biometrici non vengano divulgati e vengano rimossi quando un utente viene rimosso da un dispositivo:
- Assicurarsi che i dati biometrici grezzi o derivati (come i modelli) non siano mai accessibili dall'esterno dell'ambiente isolato sicuro (come TEE o Secure Element). Tutti i dati memorizzati devono essere crittografati con una chiave specifica del dispositivo nota solo al TEE (Trusted Execution Environment). Se l'hardware lo supporta, limita l'accesso hardware all'ambiente isolato sicuro e proteggilo con una policy SELinux. Rendi il canale di comunicazione (ad esempio, SPI, I2C) accessibile solo all'ambiente isolato sicuro con una politica SELinux esplicita su tutti i file del dispositivo.
- L'acquisizione, la registrazione e il riconoscimento biometrici devono avvenire all'interno dell'ambiente isolato sicuro per prevenire violazioni dei dati e altri attacchi. Questo requisito si applica solo ai dati biometrici di Classe 3 (precedentemente Forte) e Classe 2 (precedentemente Debole) .
- Per proteggerti dagli attacchi di riproduzione, firma i modelli biometrici con una chiave privata specifica del dispositivo. Per Advanced Encryption Standard (AES), come minimo firmare un modello con il percorso del file system assoluto, il gruppo e l'ID biometrico in modo tale che i file del modello non siano utilizzabili su un altro dispositivo o per chiunque non sia l'utente che li ha registrati sullo stesso dispositivo . Ad esempio, impedire la copia dei dati biometrici da un altro utente sullo stesso dispositivo o da un altro dispositivo.
- Se è necessario archiviare i dati all'esterno del TEE, utilizzare il percorso del file system fornito dal
setActiveUser() HIDL method
o fornire un altro modo per cancellare tutti i dati del modello utente quando l'utente viene rimosso. Il motivo è proteggere la fuga di dati dell'utente. I dispositivi che non utilizzano questo percorso devono essere ripuliti dopo la rimozione dell'utente. CDD richiede che i dati biometrici e i file derivati vengano archiviati crittografati, soprattutto se non in TEE Se ciò non è fattibile a causa dei requisiti di archiviazione dell'ambiente isolato sicuro, aggiungere hook per garantire la rimozione dei dati quando l'utente viene rimosso o il dispositivo viene cancellato. Vedere LockSettingsService.removeBiometricsForUser()
Personalizzazione
Se il tuo dispositivo supporta più dati biometrici, l'utente dovrebbe essere in grado di specificare un valore predefinito nelle impostazioni. La tua implementazione BiometricPrompt
dovrebbe preferire il biometrico di Classe 3 (precedentemente Strong) come predefinito a meno che l'utente non lo sovrascriva esplicitamente, quindi deve essere visualizzato un messaggio di avviso che spieghi i rischi associati al biometrico (ad esempio, una tua foto potrebbe sbloccare il tuo dispositivo )
Stringhe di autenticazione specifiche del 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 tal caso, assicurati che tutte le nuove stringhe vengano tradotte per tutte le impostazioni locali supportate dal dispositivo. Inoltre, assicurati che le seguenti proprietà vengano mantenute:
Metodo | Scopo della stringa | Tipi di autenticazione da includere | Se la biometria e il blocco dello schermo sono entrambi possibili |
---|---|---|---|
getButtonLabel() | Etichetta per un pulsante che attiva BiometricPrompt | Solo i tipi registrati (se possibile) che soddisfano i requisiti dell'autenticatore | Utilizza una stringa solo biometrica (ad esempio "Usa impronta digitale") |
getPromptMessage() | Messaggio visualizzato su BiometricPrompt durante l'autenticazione | Solo i tipi registrati (se possibile) che soddisfano i requisiti dell'autenticatore | Utilizza una stringa combinata di blocco biometrico e dello schermo (ad es. "Utilizza l'impronta digitale o il PIN per continuare") |
getNomeImpostazione() | Nome di un'impostazione che abilita BiometricPrompt per l'autenticazione | Tutti i tipi supportati dal dispositivo (anche se non registrati) che soddisfano i requisiti dell'autenticatore | Utilizza una stringa combinata biometrica e di blocco dello schermo (ad esempio "Utilizza l'impronta digitale o il blocco dello schermo") |
Ad esempio, considera un dispositivo dotato di un sensore facciale di Classe 2 con un volto registrato , un PIN registrato e un sensore di impronte digitali di Classe 3 senza impronte digitali registrate . La tabella seguente fornisce stringhe di esempio per ogni combinazione di autenticatori consentiti e metodo BiometricManager.Strings richiamato:
Autenticatori consentiti | getButtonLabel() | getPromptMessage() | getNomeImpostazione() |
---|---|---|---|
Dati biometrici di classe 3 ( BIOMETRIC_STRONG ) | "Usa impronta digitale" (Solo l'impronta digitale soddisfa i requisiti dell'autenticatore) | "Usa l'impronta digitale per continuare" (Solo l'impronta digitale soddisfa i requisiti dell'autenticatore) | "Usa impronta digitale" (Solo l'impronta digitale soddisfa i requisiti dell'autenticatore) |
Dati biometrici di classe 2 ( BIOMETRIC_WEAK ) | "Usa la faccia" (Viso e impronta digitale soddisfano i requisiti; viene registrato solo il volto) | "Usa la tua faccia per continuare" (Viso e impronta digitale soddisfano i requisiti; viene registrato solo il volto) | "Usa il volto o l'impronta digitale" (Il viso e l'impronta digitale soddisfano i requisiti; il dispositivo li supporta entrambi) |
Blocco schermo ( DEVICE_CREDENTIAL ) | "Usa 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) |
Blocco schermo OPPURE biometrico di classe 3 | "Usa PIN" (L'impronta digitale e qualsiasi blocco dello schermo soddisfano i requisiti; viene registrato solo il PIN) | "Inserisci il PIN per continuare" (L'impronta digitale e qualsiasi blocco dello schermo soddisfano i requisiti; viene registrato solo il PIN) | "Utilizza impronta digitale o blocco schermo" (L'impronta digitale e qualsiasi blocco dello schermo soddisfano i requisiti) |
Blocco schermo OPPURE biometrico di classe 2 | "Usa la faccia" (Il volto, l'impronta digitale e qualsiasi blocco dello schermo soddisfano i requisiti; il volto è registrato e sostituisce il PIN) | "Usa il tuo volto o il PIN per continuare" (Viso, impronta digitale e qualsiasi blocco dello schermo soddisfano i requisiti; volto e PIN sono registrati) | "Utilizza dati biometrici o blocco schermo" (Viso, impronta digitale e qualsiasi blocco dello schermo soddisfano i requisiti) |
Convalida
La tua implementazione biometrica deve superare i seguenti test:
- Gestore biometrico CTS
- CTS BiometricPrompt (salute mentale, test approfonditi si basano sul verificatore)
- Sezione del test biometrico CtsVerifier: deve essere superato individualmente con ciascuna modalità supportata dal dispositivo
Inoltre, se il tuo dispositivo supporta un biometrico con AOSP HIDL ( fingerprint@2.1 , fingerprint@2.2 , face1.0 ), deve superare il relativo test VTS ( fingerprint , face )
,La biometria offre un modo più conveniente, ma potenzialmente meno sicuro, di confermare la tua identità con un dispositivo. Nel modello di autenticazione a più livelli, l'autenticazione primaria (ovvero modalità basate su fattori di conoscenza come PIN, pattern e password) fornisce il massimo livello di sicurezza. La biometria è nel livello secondario dell'autenticazione, offrendo un equilibrio tra praticità e sicurezza. Il CDD Android definisce tre classi di forza biometrica: Classe 3 (precedentemente Forte), Classe 2 (precedentemente Debole) e Classe 1 (precedentemente Convenienza). Ogni classe ha una serie di prerequisiti, privilegi e vincoli: per ulteriori dettagli, consultare il CDD sopra. Tutte e tre le classi possono integrarsi con la schermata di blocco, ma solo gli autenticatori forti e deboli possono integrarsi con le API android.hardware.biometrics. Questa tabella descrive ogni autenticatore e la funzionalità che supporta.
Autenticatore | Blocca schermo | Integrazione BiometricPrompt | Keystore (chiave basata sul tempo) | Keystore (chiave basata sulle operazioni) |
---|---|---|---|---|
BIOMETRIC_STRONG (Classe 3) | SÌ | SÌ | SÌ | SÌ |
BIOMETRICO_DEBOLE (Classe 2) | SÌ | SÌ | NO | NO |
BIOMETRICO_CONVENIENZA (Classe 1) | SÌ | NO | NO | NO |
DEVICE_CREDENTIAL | SÌ | SÌ | SÌ | SÌ |
Il framework Android include il supporto per l'autenticazione biometrica del volto e dell'impronta digitale. Android può essere personalizzato per supportare altre modalità biometriche (come Iris). Tuttavia, l'integrazione biometrica dipenderà dalla sicurezza biometrica, non dalla modalità. Per ulteriori dettagli sulle specifiche di sicurezza biometrica, vedere Misurazione della sicurezza di sblocco biometrico .
Fonte
Androide 12
- Introduce l'API BiometricManager.Strings , che fornisce stringhe localizzate per le app che usano BiometricPrompt per l'autenticazione. Queste stringhe sono concepite per essere in grado di riconoscere il dispositivo e fornire maggiore specificità sui tipi di autenticazione che possono essere utilizzati.
- Include il supporto del sensore di impronte digitali sotto il display (UDFPS).
Androide 11
- Introduce l' interfaccia BiometricManager.Authenticators , che fornisce costanti che gli sviluppatori possono usare per specificare i tipi di autenticazione accettati dalle loro app.
- Aggiunge l'azione intent
ACTION_BIOMETRIC_ENROLL
, che gli sviluppatori possono utilizzare per indirizzare l'utente a registrare un metodo di autenticazione che soddisfi i requisiti delle loro app. - Aggiunge il metodo
AuthenticationResult #getAuthenticationType ()
, che gli sviluppatori possono utilizzare per verificare se l'utente si è autenticato utilizzando una credenziale biometrica o una credenziale del dispositivo. - Fornisce supporto aggiuntivo per le chiavi auth-per-use all'interno della classe BiometricPrompt.
Androide 10
- Introduce la classe
BiometricManager
che gli sviluppatori possono usare per eseguire query sulla disponibilità dell'autenticazione biometrica. - Include l'integrazione dell'impronta digitale e dell'autenticazione facciale per
BiometricPrompt
Android9
- Include l'integrazione delle impronte digitali solo per
BiometricPrompt
. - Depreca la classe FingerprintManager. Se le app in bundle e di sistema utilizzano questa classe, aggiornale in modo che utilizzino invece
BiometricPrompt
eBiometricManager
. - Aggiornati i test del verificatore CTS
FingerprintManager
per testareBiometricPrompt
utilizzandoBiometricPromptBoundKeysTest
.
Implementazione
Per garantire a utenti e sviluppatori un'esperienza biometrica senza problemi, integra il tuo stack biometrico con le API BiometricPrompt
, BiometricManager
e ACTION_BIOMETRIC_ENROLL
. I dispositivi con sensori biometrici devono rispettare questi requisiti di resistenza . 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 tuo flusso di registrazione. Nota che il tuo biometrico può essere presentato solo se soddisfa la forza richiesta. Se il tuo dispositivo ne supporta più di uno, questa azione dovrebbe presentare un elenco da cui l'utente può scegliere.

Linee guida per l'implementazione dell'HAL
Segui queste linee guida biometriche HAL per assicurarti che i dati biometrici non vengano divulgati e vengano rimossi quando un utente viene rimosso da un dispositivo:
- Assicurarsi che i dati biometrici grezzi o derivati (come i modelli) non siano mai accessibili dall'esterno dell'ambiente isolato sicuro (come TEE o Secure Element). Tutti i dati memorizzati devono essere crittografati con una chiave specifica del dispositivo nota solo al TEE (Trusted Execution Environment). Se l'hardware lo supporta, limita l'accesso hardware all'ambiente isolato sicuro e proteggilo con una policy SELinux. Rendi il canale di comunicazione (ad esempio, SPI, I2C) accessibile solo all'ambiente isolato sicuro con una politica SELinux esplicita su tutti i file del dispositivo.
- L'acquisizione, la registrazione e il riconoscimento biometrici devono avvenire all'interno dell'ambiente isolato sicuro per prevenire violazioni dei dati e altri attacchi. Questo requisito si applica solo ai dati biometrici di Classe 3 (precedentemente Forte) e Classe 2 (precedentemente Debole) .
- Per proteggerti dagli attacchi di riproduzione, firma i modelli biometrici con una chiave privata specifica del dispositivo. Per Advanced Encryption Standard (AES), come minimo firmare un modello con il percorso del file system assoluto, il gruppo e l'ID biometrico in modo tale che i file del modello non siano utilizzabili su un altro dispositivo o per chiunque non sia l'utente che li ha registrati sullo stesso dispositivo . Ad esempio, impedire la copia dei dati biometrici da un altro utente sullo stesso dispositivo o da un altro dispositivo.
- Se è necessario archiviare i dati all'esterno del TEE, utilizzare il percorso del file system fornito dal
setActiveUser() HIDL method
o fornire un altro modo per cancellare tutti i dati del modello utente quando l'utente viene rimosso. Il motivo è proteggere la fuga di dati dell'utente. I dispositivi che non utilizzano questo percorso devono essere ripuliti dopo la rimozione dell'utente. CDD richiede che i dati biometrici e i file derivati vengano archiviati crittografati, soprattutto se non in TEE Se ciò non è fattibile a causa dei requisiti di archiviazione dell'ambiente isolato sicuro, aggiungere hook per garantire la rimozione dei dati quando l'utente viene rimosso o il dispositivo viene cancellato. Vedere LockSettingsService.removeBiometricsForUser()
Personalizzazione
Se il tuo dispositivo supporta più dati biometrici, l'utente dovrebbe essere in grado di specificare un valore predefinito nelle impostazioni. La tua implementazione BiometricPrompt
dovrebbe preferire il biometrico di Classe 3 (precedentemente Strong) come predefinito a meno che l'utente non lo sovrascriva esplicitamente, quindi deve essere visualizzato un messaggio di avviso che spieghi i rischi associati al biometrico (ad esempio, una tua foto potrebbe sbloccare il tuo dispositivo )
Stringhe di autenticazione specifiche del 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 tal caso, assicurati che tutte le nuove stringhe vengano tradotte per tutte le impostazioni locali supportate dal dispositivo. Inoltre, assicurati che le seguenti proprietà vengano mantenute:
Metodo | Scopo della stringa | Tipi di autenticazione da includere | Se la biometria e il blocco dello schermo sono entrambi possibili |
---|---|---|---|
getButtonLabel() | Etichetta per un pulsante che attiva BiometricPrompt | Solo i tipi registrati (se possibile) che soddisfano i requisiti dell'autenticatore | Utilizza una stringa solo biometrica (ad esempio "Usa impronta digitale") |
getPromptMessage() | Messaggio visualizzato su BiometricPrompt durante l'autenticazione | Solo i tipi registrati (se possibile) che soddisfano i requisiti dell'autenticatore | Utilizza una stringa combinata di blocco biometrico e dello schermo (ad es. "Utilizza l'impronta digitale o il PIN per continuare") |
getNomeImpostazione() | Nome di un'impostazione che abilita BiometricPrompt per l'autenticazione | Tutti i tipi supportati dal dispositivo (anche se non registrati) che soddisfano i requisiti dell'autenticatore | Utilizza una stringa combinata biometrica e di blocco dello schermo (ad esempio "Utilizza l'impronta digitale o il blocco dello schermo") |
Ad esempio, considera un dispositivo dotato di un sensore facciale di Classe 2 con un volto registrato , un PIN registrato e un sensore di impronte digitali di Classe 3 senza impronte digitali registrate . La tabella seguente fornisce stringhe di esempio per ogni combinazione di autenticatori consentiti e metodo BiometricManager.Strings richiamato:
Autenticatori consentiti | getButtonLabel() | getPromptMessage() | getNomeImpostazione() |
---|---|---|---|
Dati biometrici di classe 3 ( BIOMETRIC_STRONG ) | "Usa impronta digitale" (Solo l'impronta digitale soddisfa i requisiti dell'autenticatore) | "Usa l'impronta digitale per continuare" (Solo l'impronta digitale soddisfa i requisiti dell'autenticatore) | "Usa impronta digitale" (Solo l'impronta digitale soddisfa i requisiti dell'autenticatore) |
Dati biometrici di classe 2 ( BIOMETRIC_WEAK ) | "Usa la faccia" (Viso e impronta digitale soddisfano i requisiti; viene registrato solo il volto) | "Usa la tua faccia per continuare" (Viso e impronta digitale soddisfano i requisiti; viene registrato solo il volto) | "Usa il volto o l'impronta digitale" (Il viso e l'impronta digitale soddisfano i requisiti; il dispositivo li supporta entrambi) |
Blocco schermo ( DEVICE_CREDENTIAL ) | "Usa 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) |
Blocco schermo OPPURE biometrico di classe 3 | "Usa PIN" (L'impronta digitale e qualsiasi blocco dello schermo soddisfano i requisiti; viene registrato solo il PIN) | "Inserisci il PIN per continuare" (L'impronta digitale e qualsiasi blocco dello schermo soddisfano i requisiti; viene registrato solo il PIN) | "Utilizza impronta digitale o blocco schermo" (L'impronta digitale e qualsiasi blocco dello schermo soddisfano i requisiti) |
Blocco schermo OPPURE biometrico di classe 2 | "Usa la faccia" (Il volto, l'impronta digitale e qualsiasi blocco dello schermo soddisfano i requisiti; il volto è registrato e sostituisce il PIN) | "Usa il tuo volto o il PIN per continuare" (Viso, impronta digitale e qualsiasi blocco dello schermo soddisfano i requisiti; volto e PIN sono registrati) | "Utilizza dati biometrici o blocco schermo" (Viso, impronta digitale e qualsiasi blocco dello schermo soddisfano i requisiti) |
Convalida
La tua implementazione biometrica deve superare i seguenti test:
- Gestore biometrico CTS
- CTS BiometricPrompt (salute mentale, test approfonditi si basano sul verificatore)
- Sezione del test biometrico CtsVerifier: deve essere superato individualmente con ciascuna modalità supportata dal dispositivo
Inoltre, se il tuo dispositivo supporta un biometrico con AOSP HIDL ( fingerprint@2.1 , fingerprint@2.2 , face1.0 ), deve superare il relativo test VTS ( fingerprint , face )