Biometrica

La biometria offre un modo più conveniente, ma potenzialmente meno sicuro, per confermare la tua identità con un dispositivo. Con il modello di autenticazione a più livelli, l'autenticazione primaria (ovvero modalità basate su fattori di conoscenza come PIN, sequenza e password) fornisce il livello di sicurezza più elevato. I dati biometrici sono nel livello secondario di autenticazione, offrendo un equilibrio tra praticità e sicurezza. L' Android CDD 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: consulta il CDD sopra per maggiori dettagli. 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 ogni autenticatore e le funzionalità che supportano.

Autenticatore Blocca schermo Integrazione BiometricPrompt Keystore (chiave basata sul tempo) Keystore (chiave basata sull'operazione)
BIOMETRIC_STRONG (Classe 3)
BIOMETRIC_WEAK (Classe 2) No No
BIOMETRICO_CONVENIENZA
(Classe 1)
No No No
DEVICE_CREDENTIAL Sì (1)
  1. Questa funzionalità è stata aggiunta in Android 11, vedere questo per i dettagli

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 maggiori dettagli sulle specifiche di sicurezza biometrica, vedere Misurazione della sicurezza di sblocco biometrico .

Fonte

Android 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 dell'intento ACTION_BIOMETRIC_ENROLL , che gli sviluppatori possono utilizzare per indirizzare l'utente a registrare un metodo di autenticazione che soddisfi i requisiti delle proprie 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 chiavi auth-per-use all'interno della classe BiometricPrompt.

Android 10

  • Introduce la classe BiometricManager che gli sviluppatori possono usare per interrogare la disponibilità dell'autenticazione biometrica.
  • Include l'integrazione dell'autenticazione dell'impronta digitale e del volto per BiometricPrompt

Android 9

  • Include l'integrazione dell'impronta digitale solo per BiometricPrompt .
  • Depreca la classe FingerprintManager. Se le tue app in bundle e di sistema utilizzano questa classe, aggiornale per utilizzare invece BiometricPrompt e BiometricManager .
  • Aggiornati i test del verificatore CTS FingerprintManager per testare BiometricPrompt usando BiometricPromptBoundKeysTest .

Implementazione

Per garantire che utenti e sviluppatori abbiano un'esperienza biometrica senza interruzioni, 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 .
Per integrare il tuo stack biometrico con le BiometricManager APIs BiometricPrompt e BiometricManager:

  1. Assicurati che il tuo <Modality>Service sia registrato correttamente con BiometricService tramite il metodo IBiometricService#registerAuthenticator e implementi l'interfaccia IBiometricAuthenticator . Le modalità comuni (impronta digitale, viso) si estendono da una superclasse comune. Se è necessario integrare una modalità non supportata, seguire l'esempio di impronte digitali / faccia e le linee guida CDD per la biometria.
  2. Assicurati che la tua nuova modalità sia supportata correttamente in SystemUI . Esistono interfacce utente BiometricPrompt predefinite per l'impronta digitale e il viso. Ciò dovrebbe includere eventuali modifiche al layout o al tema richieste per il tuo dispositivo. Cioè le modifiche al layout corrispondenti per un sensore di impronte digitali in-display.

Per integrare il tuo stack biometrico con l'API ACTION_BIOMETRIC_ENROLL:

  1. Modifica BiometricEnrollActivity per presentare il 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.
Architettura biometrica del prompt
Figura 1. Architettura BiometricPrompt

Linee guida di attuazione HAL

Segui queste linee guida HAL biometriche per assicurarti che i dati biometrici non vengano trapelati e vengano rimossi quando un utente viene rimosso da un dispositivo:

  • Assicurati 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 archiviati devono essere crittografati con una chiave specifica del dispositivo nota solo al TEE (Trusted Execution Environment). Se l'hardware lo supporta, limitare l'accesso hardware all'ambiente isolato sicuro e proteggerlo con una politica 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 di un ambiente isolato 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 riproduzione, firma i modelli biometrici con una chiave privata specifica per il dispositivo. Per Advanced Encryption Standard (AES), firmare almeno 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 utente diverso sullo stesso dispositivo o da un altro dispositivo.
  • Se è necessario archiviare dati al di fuori 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 degli utenti. 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 ​​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 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 di BiometricPrompt dovrebbe preferire la classe 3 (ex Strong) biometrica come impostazione predefinita a meno che l'utente non la ignori esplicitamente, quindi deve essere visualizzato un messaggio di avviso che spieghi i rischi associati alla biometria (ad esempio, una tua foto potrebbe sbloccare il tuo dispositivo )

Convalida

La tua implementazione biometrica deve superare i seguenti test:

  • Responsabile biometrico CTS
  • CTS BiometricPrompt (sanità 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 dispositivo biometrico che ha un HIDL AOSP ( fingerprint@2.1 , fingerprint@2.2 , face1.0 ), deve superare il relativo test VTS ( fingerprint , face )