Gesichtserkennung (HIDL)

Übersicht

Mit der Gesichtserkennung können Nutzer ihr Gerät entsperren, indem sie einfach in die Kamera schauen. Android 10 unterstützt einen neuen Stack für die Gesichtserkennung, mit dem Kameraframes sicher verarbeitet werden können. So werden Sicherheit und Datenschutz bei der Gesichtserkennung auf unterstützter Hardware gewährleistet. Android 10 bietet außerdem eine einfache Möglichkeit für sicherheitskonforme Implementierungen, die Anwendungsintegration für Transaktionen wie Onlinebanking oder andere Dienste zu ermöglichen.

Der Face Authentication-Stack für Android ist eine neue Implementierung in Android 10. Mit der neuen Implementierung werden die Schnittstellen IBiometricsFace.hal, IBiometricsFaceClientCallback.hal und types.hal eingeführt.

Architektur

Die BiometricPrompt API umfasst alle biometrischen Authentifizierungsmethoden, einschließlich Gesicht, Finger und Iris. Der Face HAL interagiert mit den folgenden Komponenten.

Biometrischer Stack

Abbildung 1. Biometrischer Stack

FaceManager

FaceManager ist eine private Schnittstelle, die eine Verbindung zu FaceService aufrechterhält. Es wird von Keyguard für den Zugriff auf die Gesichtserkennung über eine benutzerdefinierte UI verwendet. 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. Es enthält grundlegende Maschinen für die Registrierung und den Authentifizierungsstatus sowie verschiedene andere Hilfsfunktionen (z. B. Aufzählung). Aus Stabilitäts- und Sicherheitsgründen darf in diesem Prozess kein Anbietercode ausgeführt werden. Der Zugriff auf den gesamten Anbietercode erfolgt über die Face 1.0 HIDL-Schnittstelle.

gegenüber

Dies ist eine Linux-Ausführbare Datei, die die von FaceService verwendete HIDL-Schnittstelle „Face 1.0“ implementiert. Es registriert sich als IBiometricsFace@1.0, damit FaceService es finden kann.

Implementierung

Gesicht HIDL

Wenn Sie die Face HIDL implementieren möchten, müssen Sie alle Methoden von IBiometricsFace.hal in einer anbieterspezifischen Bibliothek implementieren.

Fehlermeldungen

Fehlermeldungen werden über einen Callback gesendet und setzen den Statusautomaten nach dem Senden wieder in den Status idle (Inaktiv). Die meisten Meldungen haben einen entsprechenden String, der den Nutzer über den Fehler informiert. Nicht alle Fehler haben jedoch diesen String. Weitere Informationen zu Fehlermeldungen finden Sie unter types.hal. Alle Fehlermeldungen stellen einen Endstatus dar. Das Framework geht davon aus, dass die HAL nach dem Senden einer Fehlermeldung in den Inaktivitätsstatus zurückkehrt.

Akquisitionsnachrichten

Akquisitionsnachrichten werden während der Registrierung oder Authentifizierung gesendet und sollen den Nutzer zu einer erfolgreichen Registrierung oder Authentifizierung führen. Jede Ordinalzahl ist mit einer Nachricht aus der Datei FaceAuthenticationManager.java verknüpft. Anbieterspezifische Nachrichten können hinzugefügt werden, sofern die entsprechenden Hilfetexte bereitgestellt werden. Akquisitionsnachrichten sind keine Terminalstatus an sich. Es wird erwartet, dass der HAL so viele dieser Nachrichten sendet, wie erforderlich, um die aktuelle Registrierung oder Authentifizierung abzuschließen. Wenn eine Akquisitionsnachricht in einen Endzustand führt, in dem kein Fortschritt möglich ist, sollte der HAL den Akquisitionsnachrichten mit einer Fehlermeldung folgen, z. B., dass das Bild zu dunkel und zu dunkel bleibt, um einen weiteren Vorgang auszuführen. In diesem Fall ist es sinnvoll, UNABLE_TO_PROCESS nach mehreren Versuchen zu senden, aber es ist kein weiterer Fortschritt möglich.

Hardware

Damit Geräte die Anforderungen an starke biometrische Authentifizierung für Android 10 erfüllen, müssen sie über sichere Hardware verfügen, um die Integrität der Gesichtsdaten und den endgültigen Authentifizierungsabgleich zu gewährleisten. Im Android Compatibility Definition Document (CDD) wird das erforderliche Sicherheitsniveau und die zulässige Rate für Spoofing-Akzeptanz (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 Gesichtsauthentifizierung zu verhindern. So könnten die zugehörigen Speicherseiten für Bilddaten beispielsweise privilegiert und schreibgeschützt sein, sodass nur die Kamerahardware sie aktualisieren kann. Idealerweise sollte kein Prozess außer TEE und der Hardware Zugriff haben.

Da die Hardware für die Gesichtserkennung sehr unterschiedlich ist, müssen je nach Gerätearchitektur hardwarespezifische Treiber entwickelt werden, um die Gesichtserkennung zu ermöglichen. Daher gibt es keine Referenzimplementierung für faced.

Methoden

Die folgenden Methoden sind alle asynchron und müssen sofort an das Framework zurückgegeben werden. Andernfalls wird das System langsam und der Watchdog wird möglicherweise zurückgesetzt. Es wird empfohlen, eine Nachrichtenwarteschlange mit mehreren Threads zu verwenden, um den Aufrufer nicht zu blockieren. Alle GET-Anfragen sollten nach Möglichkeit Informationen im Cache speichern, damit der Aufrufer nur für kurze Zeit blockiert wird.

Method Beschreibung
setCallback() Wird von FaceService aufgerufen, um alle Nachrichten an sich selbst zu verteilen.
setActiveUser() Hiermit wird der aktive Nutzer festgelegt, auf den alle nachfolgenden HAL-Vorgänge angewendet werden. Die Authentifizierung erfolgt immer für diesen Nutzer, bis diese Methode wieder aufgerufen wird.
revokeChallenge() Schließt die sichere Transaktion ab, indem die von generateChallenge() generierte Bestätigung ungültig gemacht wird.
enroll() Registriert das Gesicht eines Nutzers.
cancel() Der aktuelle Vorgang (z. B. Registrieren, Authentifizieren, Entfernen oder Auflisten) wird abgebrochen und faced kehrt in den Inaktivitätsstatus zurück.
enumerate() Listet alle Gesichtervorlagen auf, die dem aktiven Nutzer zugeordnet sind.
remove() Entfernt eine Gesichtervorlage oder alle Gesichtervorlagen, die dem aktiven Nutzer zugeordnet sind.
authenticate() Authentifiziert den aktiven Nutzer.
userActivity() Diese Methode sollte nur verwendet werden, wenn sich der HAL im Authentifizierungs- oder Standby-Status befindet. Wenn Sie diese Methode verwenden, während sich die HAL nicht in einem dieser Status 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 Sperrstatus (LOCKOUT oder LOCKOUT_PERMANENT) versetzt werden. In diesem Fall muss die verbleibende Zeit an das Framework gesendet werden, damit es dem Nutzer angezeigt werden kann. Wie bei setFeature() ist für diese Methode ein aktives Hardware-Authentifizierungstoken (HAT) erforderlich, um den internen Status sicher zurückzusetzen. Die Sperrung wird nur für den aktuellen Nutzer zurückgesetzt.

Die drei verbleibenden Methoden sind alle synchron und sollten für die minimalste Zeit blockieren, um das Framework nicht zu verlangsamen.

Method 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 muss ein HAT die PIN/das Muster/das Passwort des Nutzers anhand der oben genannten Herausforderung prüfen.
getFeature() Ruft den aktuellen Aktivierungsstatus der Funktion ab, wie er durch die Standardeinstellung oder einen Aufruf von setFeature() oben festgelegt ist. Wenn die Gesichts-ID ungültig ist, muss die Implementierung ILLEGAL_ARGUMENT zurückgeben
getAuthenticatorId() Gibt eine Kennung zurück, die mit dem aktuellen Gesichtersatz verknüpft ist. Diese Kennung muss sich ändern, wenn ein Gesicht hinzugefügt wird.

Zustandsdiagramm

Das Framework erwartet, dass faced dem folgenden Zustandsdiagramm folgt.

Zustandsdiagramm

Abbildung 2: Ablauf des Status der Gesichtserkennung