Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.
Se usó la API de Cloud Translation para traducir esta página.
Switch to English

Autenticación facial HIDL

Descripción general

La autenticación facial permite a los usuarios desbloquear su dispositivo simplemente mirando la parte frontal de su dispositivo. Android 10 agrega soporte para una nueva pila de autenticación facial que puede procesar de forma segura los marcos de la cámara, preservando la seguridad y la privacidad durante la autenticación facial en hardware compatible. Android 10 también proporciona una forma fácil de implementar implementaciones compatibles con la seguridad para permitir la integración de aplicaciones para transacciones, como banca en línea u otros servicios.

La pila de autenticación facial de Android es una nueva implementación en Android 10. La nueva implementación presenta las IBiometricsFace.hal , IBiometricsFaceClientCallback.hal y types.hal .

Arquitectura

La API BiometricPrompt incluye toda la autenticación biométrica, incluida la cara, el dedo y el iris. El Face HAL interactúa con los siguientes componentes.

Pila biométrica
Figura 1. Pila biométrica

FaceManager

FaceManager es una interfaz privada que mantiene una conexión con FaceService . Keyguard lo utiliza para acceder a la autenticación facial con una interfaz de usuario personalizada. Las aplicaciones no tienen acceso a FaceManager y deben usar BiometricPrompt lugar.

FaceService

Esta es la implementación del marco que administra el acceso al hardware de autenticación facial. Contiene máquinas de estado básicas de inscripción y autenticación, así como varios otros ayudantes (por ejemplo, enumeración). Debido a problemas de estabilidad y seguridad, no se permite que se ejecute ningún código de proveedor en este proceso. Se accede a todo el código de proveedor a través de la interfaz Face 1.0 HIDL .

enfrentó

Este es un ejecutable de Linux que implementa la interfaz Face 1.0 HIDL utilizada por FaceService . Se registra como IBiometricsFace@1.0 para que FaceService pueda encontrarlo.

Implementación

Cara HIDL

Para implementar Face HIDL, debe implementar todos los métodos de IBiometricsFace.hal en una biblioteca específica del proveedor.

Error de mensajes

Los mensajes de error se envían mediante una devolución de llamada y devuelven la máquina de estado al estado inactivo después de que se envían. La mayoría de los mensajes tienen una cadena de cara al usuario correspondiente para informar al usuario del error, pero no todos los errores tienen esta cadena de cara al usuario. Para obtener más información sobre los mensajes de error, consulte types.hal . Todos los mensajes de error representan un estado de terminal, lo que significa que el marco supone que el HAL vuelve a un estado inactivo después de enviar un mensaje de error.

Mensajes de adquisición

Los mensajes de adquisición se envían durante la inscripción o la autenticación y están destinados a guiar al usuario hacia una inscripción o autenticación exitosa. Cada ordinal tiene un mensaje asociado del archivo FaceAuthenticationManager.java . Se pueden agregar mensajes específicos del proveedor siempre que se proporcionen las cadenas de ayuda correspondientes. Los mensajes de adquisición no son estados terminales en sí mismos; Se espera que HAL envíe tantos como sea necesario para completar la inscripción o autenticación actual. Si un mensaje de adquisición da como resultado un estado terminal en el que no se puede realizar ningún progreso, entonces la HAL debe seguir los mensajes de adquisición con un mensaje de error, por ejemplo, cuando la imagen es demasiado oscura y permanece demasiado oscura para que se pueda avanzar. En este caso, es razonable enviar UNABLE_TO_PROCESS después de que se hayan realizado varios intentos, pero no se puede avanzar más.

Hardware

Para que los dispositivos cumplan con los estrictos requisitos biométricos de Android 10, deben tener hardware seguro para garantizar la integridad de los datos faciales y la mejor comparación de autenticación. El Documento de definición de compatibilidad de Android (CDD) describe el nivel de seguridad requerido y la tasa aceptable de aceptación de falsificaciones (SAR) requerida. Se requiere un entorno de ejecución confiable (TEE) para un procesamiento y reconocimiento seguros. Además, se requiere hardware de cámara seguro para evitar ataques de inyección en la autenticación facial. Por ejemplo, las páginas de memoria asociadas para datos de imagen podrían tener privilegios y marcarse como de solo lectura para que solo el hardware de la cámara pueda actualizarlas. Idealmente, ningún proceso debería tener acceso excepto TEE y el hardware.

Debido a que el hardware de autenticación facial varía considerablemente, es necesario desarrollar controladores específicos de hardware para habilitar la autenticación facial, según la arquitectura del dispositivo específico. Como tal, no existe una implementación de referencia para faced .

Métodos

Los siguientes métodos son todos asincrónicos y deben volver inmediatamente al marco. No hacerlo da como resultado un sistema lento y posibles reinicios de Watchdog. Se recomienda tener una cola de mensajes con varios hilos para evitar bloquear a la persona que llama. Todas las solicitudes GET deben almacenar en caché la información siempre que sea posible para que la persona que llama esté bloqueada durante un período mínimo de tiempo.

Método Descripción
setCallback() Llamado por FaceService para sondear todos los mensajes a sí mismo.
setActiveUser() Establece el usuario activo, al que se aplican todas las operaciones HAL posteriores. La autenticación es siempre para este usuario hasta que se vuelva a llamar a este método.
revokeChallenge() Finaliza la transacción segura invalidando el desafío generado por generateChallenge() .
enroll() Registra el rostro de un usuario.
cancel() Cancela la operación actual (por ejemplo, inscribirse, autenticar, quitar o enumerate) y vuelve faced al estado de reposo.
enumerate() Enumera todas las plantillas de caras asociadas con el usuario activo.
remove() Elimina una plantilla de rostro o todas las plantillas de rostro asociadas con el usuario activo.
authenticate() Autentica al usuario activo.
userActivity() Este método solo debe usarse cuando el HAL está en el estado de autenticación o en espera. El uso de este método cuando HAL no se encuentra en uno de estos estados devuelve OPERATION_NOT_SUPPORTED . Llamar a este método mientras HAL ya se está autenticando puede extender la cantidad de tiempo que el sistema busca un rostro.
resetLockout() Cuando se rechazan demasiadas caras, se requiere que las faced entren en un estado de bloqueo ( LOCKOUT o LOCKOUT_PERMANENT ). Cuando lo hace, es necesario enviar el tiempo restante al marco para que pueda mostrarlo al usuario. Al igual que con setFeature() , este método requiere un token de autenticación de hardware activo (HAT) para restablecer de forma segura el estado interno. Restablece el bloqueo solo para el usuario actual.

Los tres métodos restantes son todos síncronos y deben bloquearse durante un período mínimo de tiempo para evitar el estancamiento del marco.

Método Descripción
generateChallenge() Genera un token aleatorio único y criptográficamente seguro que se utiliza para indicar el inicio de una transacción segura.
setFeature() Habilita o deshabilita una función para el usuario actual. Por razones de seguridad, esto requiere que un HAT verifique el PIN / patrón / contraseña del usuario con el desafío anterior.
getFeature() Recupera el estado de habilitación actual de la función, según lo dicta el valor predeterminado o una llamada a setFeature() anterior. Si el ID de rostro no es válido, la implementación debe devolver ILLEGAL_ARGUMENT
getAuthenticatorId() Devuelve un identificador asociado con el conjunto de rostros actual. Este identificador debe cambiar cada vez que se agrega una cara

Diagrama de estado

El marco espera que se faced a seguir el diagrama de estado a continuación.

Diagrama de estado
Figura 2. Flujo de estado de autenticación facial