Sui dispositivi con un sensore di impronte digitali, gli utenti possono registrare una o più impronte digitali e utilizzarle per sbloccare il dispositivo ed eseguire altre attività. Android utilizza il Fingerprint Hardware Interface Definition Language (HIDL) per connettersi a una libreria specifica del fornitore e all'hardware delle impronte digitali (ad esempio, un sensore di impronte digitali).
Per implementare Fingerprint HIDL, è necessario implementare IBiometricsFingerprint.hal
in una libreria specifica del fornitore.
Corrispondenza delle impronte digitali
Il sensore di impronte digitali di un dispositivo è generalmente inattivo. Tuttavia, in risposta a una chiamata di authenticate
o enroll
, il sensore di impronte digitali resta in ascolto di un tocco (lo schermo potrebbe anche riattivarsi quando un utente tocca il sensore di impronte digitali). Il flusso ad alto livello di corrispondenza delle impronte digitali include i seguenti passaggi:
- L'utente posiziona un dito sul sensore di impronte digitali.
- La libreria specifica del fornitore determina se esiste una corrispondenza di impronte digitali nel set corrente di modelli di impronte digitali registrati.
- I risultati corrispondenti vengono passati a
FingerprintService
.
Questo flusso presuppone che un'impronta digitale sia già stata registrata sul dispositivo, ovvero che la libreria specifica del fornitore abbia registrato un modello per l'impronta digitale. Per maggiori dettagli, vedere Autenticazione .
Architettura
Il Fingerprint HAL interagisce con i seguenti componenti.
-
BiometricManager
interagisce direttamente con un'app in un processo di app. Ogni app ha un'istanza diIBiometricsFingerprint.hal
-
FingerprintService
opera nel processo di sistema, che gestisce la comunicazione con l'impronta digitale HAL. - Fingerprint HAL è un'implementazione C/C++ dell'interfaccia IBiometricsFingerprint HIDL. Contiene la libreria specifica del fornitore che comunica con l'hardware specifico del dispositivo.
- I componenti Keystore API e Keymaster forniscono crittografia supportata da hardware per l'archiviazione sicura delle chiavi in un ambiente protetto, come il Trusted Execution Environment (TEE).

Un'implementazione HAL specifica del fornitore deve utilizzare il protocollo di comunicazione richiesto da un TEE. Le immagini non elaborate e le funzioni delle impronte digitali elaborate non devono essere trasferite in una memoria non attendibile. Tutti questi dati biometrici devono essere archiviati nell'hardware sicuro come il TEE. Il rooting non deve essere in grado di compromettere i dati biometrici.
FingerprintService
e fingerprintd
effettuano chiamate tramite Fingerprint HAL alla libreria specifica del fornitore per registrare le impronte ed eseguire altre operazioni.

Linee guida per l'attuazione
Le seguenti linee guida HAL per impronte digitali sono progettate per garantire che i dati delle impronte digitali non vengano trapelati e vengano rimossi quando un utente viene rimosso da un dispositivo:
- I dati grezzi delle impronte digitali o derivati (ad esempio modelli) non devono mai essere accessibili dall'esterno del driver del sensore o del TEE. Se l'hardware supporta un TEE, l'accesso all'hardware deve essere limitato al TEE e protetto da una politica SELinux. Il canale Serial Peripheral Interface (SPI) deve essere accessibile solo al TEE e deve esserci una politica SELinux esplicita su tutti i file del dispositivo.
- L'acquisizione, la registrazione e il riconoscimento dell'impronta digitale devono avvenire all'interno del TEE.
- Solo la forma crittografata dei dati dell'impronta digitale può essere archiviata nel file system, anche se il file system stesso è crittografato.
- I modelli di impronte digitali devono essere firmati con una chiave privata specifica del dispositivo. Per Advanced Encryption Standard (AES), almeno un modello deve essere firmato con il percorso assoluto del file system, il gruppo e l'ID finger 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 sul stesso dispositivo. Ad esempio, la copia dei dati dell'impronta digitale da un utente diverso sullo stesso dispositivo o da un altro dispositivo non deve funzionare.
- Le implementazioni devono utilizzare il percorso del file system fornito dalla funzione
setActiveGroup()
o fornire un modo per cancellare tutti i dati del modello utente quando l'utente viene rimosso. Si consiglia vivamente di archiviare i file del modello di impronta digitale come crittografati e archiviati nel percorso fornito. Se ciò non è fattibile a causa dei requisiti di archiviazione TEE, l'implementatore deve aggiungere hook per garantire la rimozione dei dati quando l'utente viene rimosso.
Metodi di impronte digitali
L'interfaccia Fingerprint HIDL contiene i seguenti metodi principali in IBiometricsFingerprint.hal
.
Metodo | Descrizione |
---|---|
enroll() | Cambia la macchina a stati HAL per avviare la raccolta e l'archiviazione di un modello di impronta digitale. Al termine della registrazione o dopo un timeout, la macchina a stati HAL torna allo stato inattivo. |
preEnroll() | Genera un token univoco per indicare l'inizio della registrazione di un'impronta digitale. Fornisce un token alla funzione di enroll per garantire che sia stata eseguita un'autenticazione precedente, ad esempio utilizzando una password. Per evitare manomissioni, il token viene avvolto dopo la conferma delle credenziali del dispositivo. Il token deve essere controllato durante la registrazione per verificare che sia ancora valido. |
getAuthenticatorId() | Restituisce un token associato al set di impronte digitali corrente. |
cancel() | Annulla le operazioni di registrazione o autenticazione in sospeso. La macchina a stati HAL viene riportata allo stato inattivo. |
enumerate() | Chiamata sincrona per enumerare tutti i modelli di impronte digitali conosciuti. |
remove() | Elimina un modello di impronta digitale. |
setActiveGroup() | Limita un'operazione HAL a un insieme di impronte digitali che appartengono a un gruppo specifico, identificato da un identificatore di gruppo (GID). |
authenticate() | Autentica un'operazione relativa all'impronta digitale (identificata da un ID operazione). |
setNotify() | Registra una funzione utente che riceve le notifiche dall'HAL. Se la macchina a stati HAL è occupata, la funzione viene bloccata finché l'HAL non lascia lo stato occupato. |
postEnroll() | Termina l'operazione di registrazione e invalida la sfida generata preEnroll() . Deve essere chiamato al termine di una sessione di registrazione con più dita per indicare che non è possibile aggiungere altre dita. |
Per maggiori dettagli su questi, fare riferimento ai commenti in IBiometricsFingerprint.hal
.