Sui dispositivi con sensore di impronte digitali, gli utenti possono registrare una o più impronte e utilizzarle per sbloccare il dispositivo ed eseguire altre attività. Android utilizza il linguaggio di definizione dell'interfaccia hardware per le impronte (HIDL) per connettersi a una libreria specifica del fornitore e all'hardware per le impronte (ad esempio, un sensore di impronte).
Per implementare l'HIDL Fingerprint, devi implementare IBiometricsFingerprint.hal
in una libreria specifica del fornitore.
Corrispondenza dell'impronta
Il sensore di impronte digitali di un dispositivo è generalmente inattivo. Tuttavia, in risposta a
una chiamata a authenticate
o enroll
, il
sensore di impronte digitali rileva un tocco (lo schermo potrebbe anche riattivarsi quando un utente
tocca il sensore di impronte digitali). Il flusso generale della corrispondenza delle impronte
include i seguenti passaggi:
- L'utente appoggia un dito sul sensore di impronte digitali.
- La libreria specifica del fornitore determina se esiste una corrispondenza dell'impronta nell'insieme corrente di modelli di impronte registrati.
- I risultati corrispondenti vengono passati a
FingerprintService
.
Questo flusso presuppone che un'impronta sia già stata registrata sul dispositivo, ovvero la libreria specifica del fornitore abbia registrato un modello per l'impronta. Per maggiori dettagli, vedi Autenticazione.
Architettura
L'HAL Fingerprint interagisce con i seguenti componenti.
BiometricManager
interagisce direttamente con un'app in un processo dell'app. Ogni app ha un'istanza diIBiometricsFingerprint.hal
FingerprintService
opera nel processo di sistema, che gestisce la comunicazione con l'HAL delle impronte.- 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 API Keystore e KeyMint (in precedenza Keymaster) forniscono crittografia basata su hardware per l'archiviazione sicura delle chiavi in un ambiente sicuro, 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 funzionalità di impronta elaborate non devono essere trasmesse in una memoria non attendibile. Tutti questi dati biometrici devono essere archiviati nell'hardware sicuro, ad esempio il TEE. Il rooting non deve essere in grado di compromettere i dati biometrici.
FingerprintService
e fingerprintd
effettuano chiamate tramite l'HAL delle impronte all'interno della libreria specifica del fornitore per registrare le impronte ed eseguire altre operazioni.

Linee guida per l'implementazione
Le seguenti linee guida HAL per le impronte sono progettate per garantire che i dati delle impronte non vengano divulgati e vengano rimossi quando un utente viene rimosso da un dispositivo:
- I dati grezzi delle impronte o i derivati (ad esempio i 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 norme SELinux. Il canale Serial Peripheral Interface (SPI) deve essere accessibile solo al TEE e deve essere presente una norma SELinux esplicita su tutti i file del dispositivo.
- L'acquisizione, la registrazione e il riconoscimento delle impronte devono avvenire all'interno del TEE.
- I dati relativi alle impronte possono essere memorizzati nel file system solo in forma criptata, anche se il file system stesso è criptato.
- I modelli di impronta devono essere firmati con una chiave privata specifica del dispositivo. Per l'Advanced Encryption Standard (AES), un modello deve essere firmato almeno con il percorso assoluto del file system, il gruppo e l'ID impronta in modo che i file del 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, copiare i dati delle impronte di 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 dei modelli utente quando l'utente viene rimosso. È consigliabile che i file modello delle impronte vengano archiviati in formato criptato e 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 fingerprinting
L'interfaccia HIDL Fingerprint contiene i seguenti metodi principali in
IBiometricsFingerprint.hal
.
Metodo | Descrizione |
---|---|
enroll() |
Passa alla macchina a stati HAL per avviare la raccolta e l'archiviazione di un modello di impronta. 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 di una
registrazione dell'impronta. Fornisce un token alla funzione enroll per
assicurarsi che sia stata eseguita un'autenticazione precedente, ad esempio utilizzando una password. Per evitare
manomissioni, il token viene eseguito il wrapping 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 corrente. |
cancel() |
Annulla le operazioni di registrazione o autenticazione in attesa. La macchina a stati HAL torna allo stato di inattività. |
enumerate() |
Chiamata sincrona per enumerare tutti i modelli di impronte noti. |
remove() |
Elimina un modello di impronta. |
setActiveGroup() |
Limita un'operazione HAL a un insieme di impronte che appartengono a un gruppo specificato, identificato da un identificatore di gruppo (GID). |
authenticate() |
Autentica un'operazione correlata all'impronta (identificata da un ID operazione). |
setNotify() |
Registra una funzione utente che riceve le notifiche dall'HAL. Se la macchina a stati HAL è in uno stato occupato, la funzione viene bloccata finché HAL non esce dallo stato occupato. |
postEnroll() |
Termina l'operazione di registrazione e invalida la
sfida preEnroll() generata. Questo metodo deve essere chiamato alla fine di una
sessione di registrazione multifinger per indicare che non è possibile aggiungere altre dita. |
Per maggiori dettagli, consulta i commenti in IBiometricsFingerprint.hal
.