Aperçu
L'authentification faciale permet aux utilisateurs de déverrouiller leur appareil simplement en regardant l'avant de leur appareil. Android 10 ajoute la prise en charge d'une nouvelle pile d'authentification faciale capable de traiter en toute sécurité les images de la caméra, préservant ainsi la sécurité et la confidentialité lors de l'authentification faciale sur le matériel pris en charge. Android 10 offre également un moyen simple pour les implémentations conformes à la sécurité de permettre l'intégration d'applications pour les transactions, telles que les services bancaires en ligne ou d'autres services.
La pile d'authentification faciale Android est une nouvelle implémentation dans Android 10. La nouvelle implémentation introduit les interfaces IBiometricsFace.hal
, IBiometricsFaceClientCallback.hal
et types.hal
.
Architecture
L'API BiometricPrompt inclut toutes les authentifications biométriques, notamment le visage, le doigt et l'iris. Le Face HAL interagit avec les composants suivants.
FaceManager
FaceManager
est une interface privée qui maintient une connexion avec FaceService
. Il est utilisé par Keyguard pour accéder à l'authentification faciale avec une interface utilisateur personnalisée. Les applications n'ont pas accès à FaceManager et doivent plutôt utiliser BiometricPrompt
.
FaceService
Il s'agit de l'implémentation du cadre qui gère l'accès au matériel d'authentification faciale. Il contient des machines à états de base d'inscription et d'authentification ainsi que diverses autres aides (par exemple, l'énumération). Pour des raisons de stabilité et de sécurité, aucun code fournisseur n'est autorisé à s'exécuter dans ce processus. Tout le code du fournisseur est accessible via l' interface Face 1.0 HIDL .
confronté
Il s'agit d'un exécutable Linux qui implémente l'interface Face 1.0 HIDL utilisée par FaceService
. Il s'enregistre sous le nom IBiometricsFace@1.0 afin que FaceService
puisse le trouver.
Mise en œuvre
Visage HIDL
Pour implémenter Face HIDL, vous devez implémenter toutes les méthodes de IBiometricsFace.hal
dans une bibliothèque spécifique au fournisseur.
Messages d'erreur
Les messages d'erreur sont envoyés par un rappel et ramènent la machine d'état à l'état inactif après leur envoi. La plupart des messages ont une chaîne correspondante destinée à l'utilisateur pour informer l'utilisateur de l'erreur, mais toutes les erreurs n'ont pas cette chaîne destinée à l'utilisateur. Pour plus d'informations sur les messages d'erreur, consultez types.hal
. Tous les messages d'erreur représentent un état terminal, ce qui signifie que le framework suppose que le HAL revient à un état inactif après l'envoi d'un message d'erreur.
Messages d'acquisition
Les messages d'acquisition sont délivrés lors de l'inscription ou de l'authentification et sont destinés à guider l'utilisateur vers une inscription ou une authentification réussie. Chaque ordinal est associé à un message du fichier FaceAuthenticationManager.java
. Des messages spécifiques au fournisseur peuvent être ajoutés à condition que les chaînes d'aide correspondantes soient fournies. Les messages d'acquisition ne sont pas des états terminaux en eux-mêmes ; on s'attend à ce que le HAL en envoie autant que nécessaire pour compléter l'inscription ou l'authentification en cours. Si un message d'acquisition aboutit à un état terminal dans lequel aucune progression ne peut être réalisée, alors le HAL doit suivre les messages d'acquisition avec un message d'erreur, par exemple, où l'image est trop sombre et reste trop sombre pour que des progrès puissent être réalisés. Dans ce cas, il est raisonnable d'envoyer UNABLE_TO_PROCESS
après plusieurs tentatives mais aucun progrès supplémentaire ne peut être réalisé.
Matériel
Pour que les appareils soient conformes aux exigences biométriques strictes d'Android 10, ils doivent disposer d'un matériel sécurisé pour garantir l'intégrité des données faciales et la comparaison d'authentification ultime. Le document de définition de compatibilité Android (CDD) décrit le niveau de sécurité requis et le taux d'acceptation d'usurpation d'identité (SAR) acceptable requis. Un environnement d'exécution fiable (TEE) est requis pour un traitement et une reconnaissance sécurisés. De plus, un matériel de caméra sécurisé est requis pour empêcher les attaques par injection sur l’authentification faciale. Par exemple, les pages mémoire associées aux données d'image pourraient être privilégiées et marquées en lecture seule afin que seul le matériel de la caméra puisse les mettre à jour. Idéalement, aucun processus ne devrait y avoir accès, à l'exception de TEE et du matériel.
Étant donné que le matériel d'authentification faciale varie considérablement, il est nécessaire de développer des pilotes spécifiques au matériel pour activer l'authentification faciale, en fonction de l'architecture spécifique du périphérique. En tant que tel, il n’existe pas d’implémentation de référence pour faced
.
Méthodes
Les méthodes suivantes sont toutes asynchrones et doivent immédiatement revenir au framework. Ne pas le faire entraîne un ralentissement du système et des réinitialisations potentielles du système de surveillance. Il est recommandé d'avoir une file d'attente de messages avec plusieurs threads pour éviter de bloquer l'appelant. Toutes les requêtes GET doivent mettre en cache les informations dans la mesure du possible afin que l'appelant soit bloqué pendant un minimum de temps.
Méthode | Description |
---|---|
setCallback() | Appelé par FaceService pour renvoyer tous les messages vers lui-même. |
setActiveUser() | Définit l'utilisateur actif auquel toutes les opérations HAL ultérieures sont appliquées. L'authentification est toujours pour cet utilisateur jusqu'à ce que cette méthode soit à nouveau appelée. |
revokeChallenge() | Termine la transaction sécurisée en invalidant le défi généré par generateChallenge() . |
enroll() | Enregistre le visage d'un utilisateur. |
cancel() | Annule l'opération en cours (par exemple, inscrire, authentifier, supprimer ou énumérer) et revient à l'état faced . |
enumerate() | Énumère tous les modèles de visage associés à l’utilisateur actif. |
remove() | Supprime un modèle de visage ou tous les modèles de visage associés à l'utilisateur actif. |
authenticate() | Authentifie l'utilisateur actif. |
userActivity() | Cette méthode ne doit être utilisée que lorsque la HAL est dans l'état d'authentification ou de veille. L'utilisation de cette méthode lorsque le HAL n'est pas dans l'un de ces états renvoie OPERATION_NOT_SUPPORTED . L’appel de cette méthode alors que HAL est déjà en cours d’authentification peut prolonger la durée pendant laquelle le système recherche un visage. |
resetLockout() | Lorsque trop de visages sont rejetés, faced doit entrer dans un état de verrouillage ( LOCKOUT ou LOCKOUT_PERMANENT ). Lorsque c'est le cas, il est nécessaire d'envoyer le temps restant au framework afin qu'il puisse l'afficher à l'utilisateur. Comme avec setFeature() , cette méthode nécessite un jeton d'authentification matérielle (HAT) actif pour réinitialiser en toute sécurité l'état interne. Réinitialise le verrouillage uniquement pour l'utilisateur actuel. |
Les trois méthodes restantes sont toutes synchrones et doivent se bloquer pendant un minimum de temps pour éviter de bloquer le framework.
Méthode | Description |
---|---|
generateChallenge() | Génère un jeton aléatoire unique et cryptographiquement sécurisé utilisé pour indiquer le début d'une transaction sécurisée. |
setFeature() | Active ou désactive une fonctionnalité pour l'utilisateur actuel. Pour des raisons de sécurité, cela nécessite qu'un HAT vérifie le code PIN/le modèle/le mot de passe de l'utilisateur par rapport au défi ci-dessus. |
getFeature() | Récupère l'état d'activation actuel de la fonctionnalité, comme dicté par la valeur par défaut ou par un appel à setFeature() ci-dessus. Si l'ID de visage n'est pas valide, l'implémentation doit renvoyer ILLEGAL_ARGUMENT |
getAuthenticatorId() | Renvoie un identifiant associé à l'ensemble de visages actuel. Cet identifiant doit changer à chaque fois qu'un visage est ajouté |
Diagramme d'état
Le cadre s'attend à ce faced
suive le diagramme d'état ci-dessous.