Google is committed to advancing racial equity for Black communities. See how.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Empreinte digitale HIDL

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 et à un matériel d'empreintes digitales spécifiques au fournisseur (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 d' authenticate ou d' enroll , le capteur d'empreintes digitales écoute une touche (l'écran peut également se réveiller lorsqu'un utilisateur touche le capteur d'empreintes digitales). Le flux de haut niveau de correspondance d'empreintes digitales comprend les étapes suivantes:

  1. L'utilisateur place un doigt sur le capteur d'empreintes digitales.
  2. 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 enregistrés.
  3. 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, consultez 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 de IBiometricsFingerprint.hal
  • FingerprintService opère 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. Il 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 matérielle pour un stockage sécurisé des clés dans un environnement sécurisé, tel que Trusted Execution Environment (TEE).
Flux de données pour l'authentification par empreinte digitale
Figure 1. Flux de données de haut niveau pour l'authentification par empreinte digitale

Une implémentation HAL spécifique au fournisseur doit utiliser le protocole de communication requis par un TEE. Les images brutes et les fonctions d'empreintes digitales traitées ne doivent pas être transmises dans une mémoire non approuvée. 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 passent des appels via Fingerprint HAL à la bibliothèque spécifique au fournisseur pour enregistrer les empreintes digitales et effectuer d'autres opérations.

Interaction avec les empreintes digitales
Figure 2. Interaction du démon d'empreintes digitales avec la bibliothèque spécifique au fournisseur d'empreintes digitales

Directives de mise en œuvre

Les directives HAL d'empreintes digitales 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 les dérivés (par exemple, les modèles) ne doivent jamais être accessibles depuis l'extérieur du pilote du capteur ou du TEE. Si le matériel prend en charge un TEE, l'accès au 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 d'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), au minimum un modèle doit être signé avec le chemin d'accès absolu du système de fichiers, le groupe et l'ID de doigt de sorte que les fichiers de modèle ne soient pas utilisables 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 utilisateur différent 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 du modèle utilisateur lorsque l'utilisateur est supprimé. Il est fortement recommandé que les fichiers de modèles d'empreintes digitales soient stockés sous forme crypté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 hooks pour garantir 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 La description
enroll() Bascule la machine à états 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'expiration, la machine à états HAL revient à l'état inactif.
preEnroll() Génère un jeton unique pour indiquer le début de l'inscription d'une empreinte digitale. Fournit un jeton à la fonction d' enroll pour garantir 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 à états HAL est remise à 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 identificateur de groupe (GID).
authenticate() Authentifie une opération liée aux empreintes digitales (identifiée par un ID d'opération).
setNotify() Enregistre une fonction utilisateur qui reçoit des notifications de la HAL. Si la machine à états HAL est dans un état occupé, la fonction est bloquée jusqu'à ce que la HAL quitte l'état occupé.
postEnroll() Termine l'opération d'inscription et invalide le défi généré par preEnroll() . Ceci doit être appelé à la fin d'une session d'inscription à plusieurs 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 .