Übersicht
Mit der Gesichtserkennung können Nutzer ihr Gerät entsperren, indem sie einfach auf die Vorderseite des Geräts schauen. Android 10 bietet Unterstützung für einen neuen Gesichtserkennungs-Stack, mit dem Kamerabilder sicher verarbeitet werden können. So werden Sicherheit und Datenschutz bei der Gesichtserkennung auf unterstützter Hardware gewahrt. Android 10 bietet außerdem eine einfache Möglichkeit für sicherheitskonforme Implementierungen, die Anwendungsintegration für Transaktionen wie Onlinebanking oder andere Dienste zu aktivieren.
Der Android-Gesichtserkennungs-Stack ist eine neue Implementierung in Android 10. Die neue Implementierung führt die Schnittstellen IBiometricsFace.hal,
IBiometricsFaceClientCallback.hal,
und types.hal ein.
Architektur
Die BiometricPrompt API umfasst alle biometrischen Authentifizierungsmethoden, einschließlich Gesichtserkennung, Fingerabdruckerkennung und Iriserkennung. Die Face HAL interagiert mit den folgenden Komponenten.
Abbildung 1 : Biometrischer Stack
FaceManager
FaceManager ist eine private Schnittstelle, die eine Verbindung zu FaceService aufrechterhält. Sie wird von Keyguard verwendet, um mit einer benutzerdefinierten UI auf die Gesichtserkennung zuzugreifen. Apps haben keinen Zugriff auf FaceManager und müssen stattdessen BiometricPrompt verwenden.
FaceService
Dies ist die Framework-Implementierung, die den Zugriff auf die Gesichtserkennungshardware verwaltet. Sie enthält grundlegende Zustandsautomaten für die Registrierung und Authentifizierung sowie verschiedene andere Hilfsprogramme (z. B. Enumeration). Aus Stabilitäts- und Sicherheitsgründen darf in diesem Prozess kein Anbietercode ausgeführt werden. Der gesamte Anbietercode wird über die Face 1.0 HIDL-Schnittstelle aufgerufen.
faced
Dies ist eine ausführbare Linux-Datei, die die Face 1.0 HIDL-Schnittstelle implementiert, die von FaceService verwendet wird. Sie registriert sich als IBiometricsFace@1.0, damit FaceService sie finden kann.
Implementierung
Face HIDL
Um die Face HIDL zu implementieren, müssen Sie alle Methoden von IBiometricsFace.hal
in einer anbieterspezifischen Bibliothek implementieren.
Fehlermeldungen
Fehlermeldungen werden über einen Callback gesendet und setzen den Zustandsautomaten nach dem Senden in den Leerlaufzustand zurück. Die meisten Nachrichten haben einen entsprechenden für Nutzer sichtbaren String, um den Nutzer über den Fehler zu informieren. Allerdings haben nicht alle Fehler diesen String. Weitere Informationen zu Fehlermeldungen finden Sie unter
types.hal.
Alle Fehlermeldungen stellen einen Endzustand dar. Das Framework geht davon aus, dass die HAL nach dem Senden einer Fehlermeldung in den Leerlaufzustand zurückkehrt.
Erfassungsmeldungen
Erfassungsmeldungen werden während der Registrierung oder Authentifizierung gesendet und sollen den Nutzer zu einer erfolgreichen Registrierung oder Authentifizierung führen.
Jede Ordnungszahl hat
eine zugehörige Meldung aus der FaceAuthenticationManager.java
Datei. Anbieterspezifische Meldungen können hinzugefügt werden, sofern die entsprechenden Hilfestrings bereitgestellt werden. Erfassungsmeldungen sind keine Endzustände. Die HAL muss so viele davon senden, wie erforderlich sind, um die aktuelle Registrierung oder Authentifizierung abzuschließen. Wenn eine Erfassungsmeldung zu einem Endzustand führt, in dem kein Fortschritt erzielt werden kann, sollte die HAL auf die Erfassungsmeldungen mit einer Fehlermeldung folgen, z. B. wenn das Bild zu dunkel ist und zu dunkel bleibt, um Fortschritte zu erzielen. In diesem Fall ist es
sinnvoll, nach mehreren Versuchen, bei denen kein weiterer Fortschritt erzielt werden konnte, UNABLE_TO_PROCESS zu senden.
Hardware
Damit Geräte die Anforderungen für starke biometrische Authentifizierung für Android 10 erfüllen, müssen sie über sichere Hardware verfügen, um die Integrität der Gesichtserkennungsdaten und den endgültigen Authentifizierungsvergleich zu gewährleisten. Im Android Compatibility Definition Document (CDD) wird die erforderliche Sicherheitsstufe und die akzeptable Spoof Acceptance Rate (SAR) beschrieben. Für die sichere Verarbeitung und Erkennung ist eine vertrauenswürdige Ausführungsumgebung (Trusted Execution Environment, TEE) erforderlich. Außerdem ist sichere Kamerahardware erforderlich, um Injection-Angriffe auf die Gesichtserkennung zu verhindern. So könnten beispielsweise die zugehörigen Speicherseiten für Bilddaten privilegiert und als schreibgeschützt markiert werden, damit nur die Kamerahardware sie aktualisieren kann. Idealerweise sollte kein Prozess außer der TEE und der Hardware Zugriff haben.
Da sich die Hardware für die Gesichtserkennung erheblich unterscheidet, müssen je nach spezifischer Gerätearchitektur hardwarespezifische Treiber entwickelt werden, um die Gesichtserkennung zu ermöglichen. Daher gibt es keine Referenzimplementierung für faced.
Methoden
Alle folgenden Methoden sind asynchron und müssen sofort zum Framework zurückkehren. Andernfalls wird das System langsam und es kann zu Watchdog-Resets kommen. Es wird empfohlen, eine Nachrichtenwarteschlange mit mehreren Threads zu verwenden, um zu verhindern, dass der Aufrufer blockiert wird. Bei allen GET-Anfragen sollten Informationen nach Möglichkeit im Cache gespeichert werden, damit der Aufrufer nur für eine minimale Zeit blockiert wird.
| Methode | Beschreibung |
|---|---|
setCallback() |
Wird von FaceService aufgerufen, um alle Nachrichten an sich selbst zurückzuleiten. |
setActiveUser() |
Legt den aktiven Nutzer fest, auf den alle nachfolgenden HAL-Vorgänge angewendet werden. Die Authentifizierung erfolgt immer für diesen Nutzer, bis diese Methode wieder aufgerufen wird. |
revokeChallenge() |
Beendet die sichere Transaktion, indem die von generateChallenge() generierte Challenge ungültig gemacht wird. |
enroll() |
Registriert das Gesicht eines Nutzers. |
cancel() |
Bricht den aktuellen Vorgang ab (z. B. Registrierung, Authentifizierung,
Entfernung oder Enumeration) und setzt faced in den Leerlaufzustand zurück. |
enumerate() |
Listet alle Gesichtsvorlagen auf, die mit dem aktiven Nutzer verknüpft sind. |
remove() |
Entfernt eine Gesichtsvorlage oder alle Gesichtsvorlagen, die mit dem aktiven Nutzer verknüpft sind. |
authenticate() |
Authentifiziert den aktiven Nutzer. |
userActivity() |
Diese Methode sollte nur verwendet werden, wenn sich die HAL im Authentifizierungs- oder
Standby-Zustand befindet. Wenn Sie diese Methode verwenden, wenn sich die HAL nicht in einem dieser
Zustände befindet, wird OPERATION_NOT_SUPPORTED zurückgegeben. Wenn Sie
diese Methode aufrufen, während die HAL bereits authentifiziert wird, kann sich die
Zeit verlängern, in der das System nach einem Gesicht sucht. |
resetLockout() |
Wenn zu viele Gesichter abgelehnt werden, muss faced in einen Sperrzustand (LOCKOUT oder LOCKOUT_PERMANENT) eintreten. In diesem Fall muss die verbleibende Zeit an das Framework gesendet werden, damit sie dem Nutzer angezeigt werden kann. Wie bei setFeature() ist für diese Methode ein aktives Hardware-Authentifizierungstoken (Hardware Authentication Token, HAT) erforderlich, um den internen Zustand sicher zurückzusetzen. Setzt die Sperrung
nur für den aktuellen Nutzer zurück. |
Die drei verbleibenden Methoden sind alle synchron und sollten nur für eine minimale Zeit blockieren, um zu verhindern, dass das Framework ins Stocken gerät.
| Methode | Beschreibung |
|---|---|
generateChallenge() |
Generiert ein eindeutiges und kryptografisch sicheres Zufallstoken, das den Beginn einer sicheren Transaktion angibt. |
setFeature() |
Aktiviert oder deaktiviert eine Funktion für den aktuellen Nutzer. Aus Sicherheitsgründen ist hierfür ein HAT erforderlich, um die PIN, das Muster oder das Passwort des Nutzers mit der oben genannten Challenge zu vergleichen. |
getFeature() |
Ruft den aktuellen Aktivierungsstatus der Funktion ab, wie durch
die Standardeinstellung oder einen Aufruf von setFeature() oben festgelegt. Wenn die Gesichts-ID ungültig ist, muss die
Implementierung ILLEGAL_ARGUMENT zurückgeben. |
getAuthenticatorId() |
Gibt eine ID zurück, die mit dem aktuellen Gesichtssatz verknüpft ist. Diese ID muss sich ändern, wenn ein Gesicht hinzugefügt wird. |
Zustandsdiagramm
Das Framework erwartet, dass faced dem folgenden Zustandsdiagramm folgt.
Abbildung 2 : Zustandsablauf der Gesichtserkennung