Sur les appareils dotés d'un capteur d'empreintes digitales, les utilisateurs peuvent enregistrer une ou plusieurs empreintes digitales et utiliser ces empreintes digitales pour déverrouiller l'appareil et effectuer d'autres tâches. Android utilise le langage HIDL (Fingerprint Hardware Interface Definition Language) pour se connecter à une bibliothèque spécifique au fournisseur et au matériel d'empreintes digitales (par exemple, un capteur d'empreintes digitales).
Pour implémenter le Fingerprint HIDL, vous devez implémenter IBiometricsFingerprint.hal
dans une bibliothèque spécifique au fournisseur.
Correspondance d'empreintes digitales
Le capteur d'empreintes digitales d'un appareil est généralement inactif. Cependant, en réponse à un appel pour authenticate
ou enroll
, le capteur d'empreintes digitales attend un contact (l'écran peut également se réveiller lorsqu'un utilisateur touche le capteur d'empreintes digitales). Le flux de haut niveau de la correspondance des empreintes digitales comprend les étapes suivantes :
- L'utilisateur place un doigt sur le capteur d'empreintes digitales.
- La bibliothèque spécifique au fournisseur détermine s'il existe une correspondance d'empreintes digitales dans l'ensemble actuel de modèles d'empreintes digitales inscrits.
- Les résultats correspondants sont transmis à
FingerprintService
.
Ce flux suppose qu'une empreinte digitale a déjà été inscrite sur l'appareil, c'est-à-dire que la bibliothèque spécifique au fournisseur a inscrit un modèle pour l'empreinte digitale. Pour plus de détails, voir Authentification .
Architecture
Le Fingerprint HAL interagit avec les composants suivants.
-
BiometricManager
interagit directement avec une application dans un processus d'application. Chaque application a une instance deIBiometricsFingerprint.hal
-
FingerprintService
fonctionne dans le processus système, qui gère la communication avec l'empreinte digitale HAL. - Fingerprint HAL est une implémentation C/C++ de l'interface IBiometricsFingerprint HIDL. Celui-ci contient la bibliothèque spécifique au fournisseur qui communique avec le matériel spécifique au périphérique.
- L'API Keystore et les composants Keymaster fournissent une cryptographie basée sur le matériel pour le stockage sécurisé des clés dans un environnement sécurisé, tel que l'environnement d'exécution sécurisé (TEE).

Une implémentation HAL spécifique au fournisseur doit utiliser le protocole de communication requis par un TEE. Les images brutes et les caractéristiques d'empreintes digitales traitées ne doivent pas être transmises dans une mémoire non fiable. Toutes ces données biométriques doivent être stockées dans le matériel sécurisé tel que le TEE. L'enracinement ne doit pas pouvoir compromettre les données biométriques.
FingerprintService
et fingerprintd
effectuent des appels via Fingerprint HAL vers la bibliothèque spécifique au fournisseur pour enregistrer les empreintes digitales et effectuer d'autres opérations.

Directives de mise en œuvre
Les directives Fingerprint HAL suivantes sont conçues pour garantir que les données d'empreintes digitales ne sont pas divulguées et sont supprimées lorsqu'un utilisateur est supprimé d'un appareil :
- Les données d'empreintes digitales brutes ou leurs dérivés (par exemple, les modèles) ne doivent jamais être accessibles depuis l'extérieur du pilote de capteur ou du TEE. Si le matériel prend en charge un TEE, l'accès matériel doit être limité au TEE et protégé par une politique SELinux. Le canal SPI (Serial Peripheral Interface) doit être accessible uniquement au TEE et il doit y avoir une politique SELinux explicite sur tous les fichiers de périphérique.
- L'acquisition, l'inscription et la reconnaissance des empreintes digitales doivent avoir lieu à l'intérieur du TEE.
- Seule la forme cryptée des données d'empreintes digitales peut être stockée sur le système de fichiers, même si le système de fichiers lui-même est crypté.
- Les modèles d'empreintes digitales doivent être signés avec une clé privée spécifique à l'appareil. Pour Advanced Encryption Standard (AES), un modèle doit au minimum être signé avec le chemin d'accès absolu du système de fichiers, le groupe et l'ID de doigt afin que les fichiers de modèle soient inopérants sur un autre appareil ou pour toute personne autre que l'utilisateur qui les a inscrits sur le même appareil. Par exemple, la copie des données d'empreintes digitales d'un autre utilisateur sur le même appareil ou à partir d'un autre appareil ne doit pas fonctionner.
- Les implémentations doivent soit utiliser le chemin du système de fichiers fourni par la fonction
setActiveGroup()
, soit fournir un moyen d'effacer toutes les données de modèle d'utilisateur lorsque l'utilisateur est supprimé. Il est fortement recommandé que les fichiers de modèles d'empreintes digitales soient stockés sous forme chiffrée et stockés dans le chemin fourni. Si cela est impossible en raison des exigences de stockage TEE, l'implémenteur doit ajouter des points d'ancrage pour assurer la suppression des données lorsque l'utilisateur est supprimé.
Méthodes d'empreintes digitales
L'interface Fingerprint HIDL contient les principales méthodes suivantes dans IBiometricsFingerprint.hal
.
Méthode | Description |
---|---|
enroll() | Bascule la machine d'état HAL pour démarrer la collecte et le stockage d'un modèle d'empreinte digitale. Lorsque l'inscription est terminée, ou après un délai d'attente, la machine d'état HAL revient à l'état inactif. |
preEnroll() | Génère un jeton unique pour indiquer le début d'un enregistrement d'empreintes digitales. Fournit un jeton à la fonction enroll pour s'assurer qu'il y a eu une authentification préalable, par exemple, à l'aide d'un mot de passe. Pour éviter toute falsification, le jeton est encapsulé une fois les informations d'identification de l'appareil confirmées. Le jeton doit être vérifié lors de l'inscription pour vérifier qu'il est toujours valide. |
getAuthenticatorId() | Renvoie un jeton associé à l'ensemble d'empreintes digitales actuel. |
cancel() | Annule les opérations d'inscription ou d'authentification en attente. La machine d'état HAL est renvoyée à l'état inactif. |
enumerate() | Appel synchrone pour énumérer tous les modèles d'empreintes digitales connus. |
remove() | Supprime un modèle d'empreinte digitale. |
setActiveGroup() | Restreint une opération HAL à un ensemble d'empreintes digitales appartenant à un groupe spécifié, identifié par un identifiant de groupe (GID). |
authenticate() | Authentifie une opération liée à l'empreinte digitale (identifiée par un ID d'opération). |
setNotify() | Enregistre une fonction utilisateur qui reçoit des notifications de HAL. Si la machine d'état HAL est dans un état occupé, la fonction est bloquée jusqu'à ce que HAL quitte l'état occupé. |
postEnroll() | Termine l'opération d'inscription et invalide le défi généré par preEnroll() . Celui-ci doit être appelé à la fin d'une session d'inscription multi-doigts pour indiquer qu'aucun autre doigt ne peut être ajouté. |
Pour plus de détails à ce sujet, reportez-vous aux commentaires dans IBiometricsFingerprint.hal
.