La biometria offre un modo più conveniente, ma potenzialmente meno sicuro, per 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, sequenza e password) fornisce il massimo livello di sicurezza. La biometria si trova nel livello secondario di autenticazione e offre un equilibrio tra praticità e sicurezza. Il CDD di Android definisce tre classi di forza biometrica: Classe 3 (ex Forte), Classe 2 (ex Debole) e Classe 1 (ex Convenienza). Ogni classe ha una serie di prerequisiti, privilegi e vincoli: per maggiori dettagli consultare il CDD sopra. Tutte e tre le classi possono integrarsi con la schermata di blocco, ma solo gli autenticatori Strong e Weak possono integrarsi con le API android.hardware.biometrics. Questa tabella descrive ciascun autenticatore e le funzionalità che supporta.
Autenticatore | Blocca schermo | Integrazione di BiometricPrompt | Archivio chiavi (chiave basata sul tempo) | Archivio chiavi (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 |
DISPOSITIVO_CREDENTIAL | SÌ | SÌ | SÌ | SÌ |
Il framework Android include il supporto per l'autenticazione biometrica del volto e delle impronte digitali. 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 dello sblocco biometrico .
Fonte
Androide 12
- Introduce l'API BiometricManager.Strings , che fornisce stringhe localizzate per le app che utilizzano BiometricPrompt per l'autenticazione. Queste stringhe sono destinate a riconoscere il dispositivo e a 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 utilizzare per specificare i tipi di autenticazione accettati dalle loro app.
- Aggiunge l'azione di 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 di autenticazione per utilizzo all'interno della classe BiometricPrompt.
Androide 10
- Introduce la classe
BiometricManager
che gli sviluppatori possono utilizzare per interrogare la disponibilità dell'autenticazione biometrica. - Include l'integrazione dell'autenticazione delle impronte digitali e del volto per
BiometricPrompt
Androide 9
- 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 per utilizzare invece
BiometricPrompt
eBiometricManager
. - Aggiornati i test di verifica CTS
FingerprintManager
per testareBiometricPrompt
utilizzandoBiometricPromptBoundKeysTest
.
Implementazione
Per garantire che utenti e sviluppatori abbiano un'esperienza biometrica fluida, 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 CTS.
Per integrare il tuo stack biometrico con l'API ACTION_BIOMETRIC_ENROLL:
- Modifica BiometricEnrollActivity per presentare il flusso di registrazione. Tieni presente che i tuoi dati biometrici possono essere presentati solo se soddisfano 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
Seguire queste linee guida HAL biometriche per garantire 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 i derivati (come i modelli) non siano mai accessibili dall'esterno dell'ambiente isolato e sicuro (come il 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 e sicuro con una politica SELinux esplicita su tutti i file del dispositivo.
- L'acquisizione, la registrazione e il riconoscimento biometrico devono avvenire all'interno di un ambiente isolato e sicuro per prevenire violazioni dei dati e altri attacchi. Questo requisito si applica solo ai dati biometrici di Classe 3 (ex Forte) e Classe 2 (ex Debole) .
- Per proteggerti dagli attacchi di tipo replay, firma i modelli biometrici con una chiave privata specifica del dispositivo. Per Advanced Encryption Standard (AES), firmare 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 per chiunque diverso dall'utente che li ha registrati sullo stesso dispositivo . Ad esempio, impedire la copia dei dati biometrici di un utente diverso sullo stesso dispositivo o da un altro dispositivo.
- Se è necessario archiviare 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 perdita dei dati dell'utente. I dispositivi che non utilizzano questo percorso devono essere puliti dopo la rimozione dell'utente. È richiesto dal CDD che i dati biometrici e i file derivati siano 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 o il dispositivo vengono rimossi viene cancellato. Vedi LockSettingsService.removeBiometricsForUser()
Personalizzazione
Se il tuo dispositivo supporta più dati biometrici, l'utente dovrebbe essere in grado di specificare un valore predefinito nelle impostazioni. L'implementazione BiometricPrompt
dovrebbe preferire il valore biometrico di Classe 3 (in precedenza Strong) come predefinito, a meno che l'utente non lo ignori esplicitamente, quindi sarà necessario visualizzare un messaggio di avviso che spieghi i rischi associati al dato 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à siano preservate:
Metodo | Scopo della stringa | Tipi di autenticazione da includere | Se i dati biometrici e il blocco dello schermo sono entrambi possibili |
---|---|---|---|
getButtonLabel() | Etichetta per un pulsante che attiva BiometricPrompt | Solo tipi registrati (se possibile) che soddisfano i requisiti dell'autenticatore | Utilizza una stringa solo biometrica (ad esempio "Utilizza impronta digitale") |
getPromptMessage() | Messaggio mostrato su BiometricPrompt durante l'autenticazione | Solo tipi registrati (se possibile) che soddisfano i requisiti dell'autenticatore | Utilizza la stringa combinata biometrica e di blocco schermo (ad esempio "Utilizza l'impronta digitale o il PIN per continuare") |
getSettingName() | 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 schermo (ad esempio "Utilizza l'impronta digitale o il blocco 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 ciascuna combinazione di autenticatori consentiti e metodo BiometricManager.Strings richiamato:
Autenticatori consentiti | getButtonLabel() | getPromptMessage() | getSettingName() |
---|---|---|---|
Biometrico di classe 3 ( BIOMETRIC_STRONG ) | "Utilizza l'impronta digitale" (Solo l'impronta digitale soddisfa i requisiti dell'autenticatore) | "Utilizza la tua impronta digitale per continuare" (Solo l'impronta digitale soddisfa i requisiti dell'autenticatore) | "Utilizza l'impronta digitale" (Solo l'impronta digitale soddisfa i requisiti dell'autenticatore) |
Biometrico di classe 2 ( BIOMETRIC_WEAK ) | "Usa la faccia" (Il volto e l'impronta digitale soddisfano i requisiti; viene registrato solo il volto) | "Usa la tua faccia per continuare" (Il volto e l'impronta digitale soddisfano i requisiti; viene registrato solo il volto) | "Utilizza volto o impronta digitale" (Il volto e l'impronta digitale soddisfano i requisiti; il dispositivo li supporta entrambi) |
Blocco schermo ( DEVICE_CREDENTIAL ) | "Utilizza PIN" (Qualsiasi blocco schermo soddisfa i requisiti; il PIN è registrato) | "Inserisci il tuo PIN per continuare" (Qualsiasi blocco schermo soddisfa i requisiti; il PIN è registrato) | "Utilizza blocco schermo" (Qualsiasi blocco dello schermo soddisfa i requisiti) |
Blocco schermo OR biometrico di classe 3 | "Utilizza PIN" (L'impronta digitale e l'eventuale blocco dello schermo soddisfano i requisiti; è registrato solo il PIN) | "Inserisci il tuo PIN per continuare" (L'impronta digitale e l'eventuale blocco dello schermo soddisfano i requisiti; è registrato solo il PIN) | "Utilizza l'impronta digitale o il blocco schermo" (L'impronta digitale e l'eventuale blocco dello schermo soddisfano i requisiti) |
Blocco schermo OR biometrico di classe 2 | "Usa la faccia" (Il volto, l'impronta digitale e qualsiasi blocco schermo soddisfano i requisiti; il volto viene registrato e sostituisce il PIN) | "Utilizza il tuo volto o il PIN per continuare" (Il volto, l'impronta digitale e l'eventuale blocco dello schermo soddisfano i requisiti; il volto e il PIN sono registrati) | "Utilizza dati biometrici o blocco schermo" (Volto, impronta digitale e qualsiasi blocco schermo soddisfano i requisiti) |
Validazione
La tua implementazione biometrica deve superare i seguenti test:
- Gestore biometrico CTS
- CTS BiometricPrompt (salute mentale, test approfonditi si basano sul verificatore)
- Sezione Test biometrico CtsVerifier: deve essere superato individualmente con ciascuna modalità supportata dal dispositivo
Inoltre, se il tuo dispositivo supporta un sistema biometrico con AOSP HIDL ( impronta digitale@2.1 , impronta digitale@2.2 , faccia 1.0 ), deve superare il relativo test VTS ( impronta digitale , faccia )