Em dispositivos com sensor de impressão digital, os usuários podem registrar uma ou mais impressões digitais e usá-las para desbloquear o dispositivo e realizar outras tarefas. O Android usa o Fingerprint Hardware Interface Definition Language (HIDL) para se conectar a uma biblioteca específica do fornecedor e ao hardware de impressão digital (por exemplo, um sensor de impressão digital).
Para implementar o Fingerprint HIDL, você deve implementar IBiometricsFingerprint.hal
em uma biblioteca específica do fornecedor.
Correspondência de impressão digital
O sensor de impressão digital de um dispositivo geralmente está ocioso. No entanto, em resposta a uma chamada para authenticate
ou enroll
, o sensor de impressão digital ouve um toque (a tela também pode despertar quando um usuário toca o sensor de impressão digital). O fluxo de alto nível de correspondência de impressão digital inclui as seguintes etapas:
- O usuário coloca um dedo no sensor de impressão digital.
- A biblioteca específica do fornecedor determina se há uma correspondência de impressão digital no conjunto atual de modelos de impressão digital registrados.
- Os resultados correspondentes são passados para
FingerprintService
.
Esse fluxo pressupõe que uma impressão digital já tenha sido registrada no dispositivo, ou seja, a biblioteca específica do fornecedor registrou um modelo para a impressão digital. Para obter mais detalhes, consulte Autenticação .
Arquitetura
O Fingerprint HAL interage com os seguintes componentes.
-
BiometricManager
interage diretamente com um aplicativo em um processo de aplicativo. Cada aplicativo possui uma instância deIBiometricsFingerprint.hal
-
FingerprintService
opera no processo do sistema, que lida com a comunicação com a impressão digital HAL. - Fingerprint HAL é uma implementação C / C ++ da interface IBiometricsFingerprint HIDL. Contém a biblioteca específica do fornecedor que se comunica com o hardware específico do dispositivo.
- Os componentes Keystore API e Keymaster fornecem criptografia de hardware para armazenamento seguro de chaves em um ambiente seguro, como Trusted Execution Environment (TEE).

Uma implementação de HAL específica do fornecedor deve usar o protocolo de comunicação exigido por um TEE. Imagens brutas e recursos de impressão digital processados não devem ser transmitidos para memória não confiável. Todos esses dados biométricos precisam ser armazenados em um hardware seguro, como o TEE. O enraizamento não deve comprometer os dados biométricos.
FingerprintService
e fingerprintd
fazem chamadas por meio do Fingerprint HAL para a biblioteca específica do fornecedor para registrar impressões digitais e realizar outras operações.

Diretrizes de implementação
As seguintes diretrizes de impressão digital HAL são projetadas para garantir que os dados da impressão digital não vazem e sejam removidos quando um usuário é removido de um dispositivo:
- Dados brutos de impressão digital ou derivados (por exemplo, modelos) nunca devem ser acessíveis de fora do driver do sensor ou TEE. Se o hardware suportar um TEE, o acesso ao hardware deve ser limitado ao TEE e protegido por uma política SELinux. O canal da Interface Periférica Serial (SPI) deve ser acessível apenas para o TEE e deve haver uma política SELinux explícita em todos os arquivos do dispositivo.
- A aquisição, inscrição e reconhecimento da impressão digital devem ocorrer dentro do TEE.
- Apenas a forma criptografada dos dados de impressão digital pode ser armazenada no sistema de arquivos, mesmo se o próprio sistema de arquivos estiver criptografado.
- Os modelos de impressão digital devem ser assinados com uma chave privada específica do dispositivo. Para o Advanced Encryption Standard (AES), no mínimo um modelo deve ser assinado com o caminho absoluto do sistema de arquivos, grupo e ID de dedo, de forma que os arquivos de modelo fiquem inoperantes em outro dispositivo ou para qualquer pessoa que não seja o usuário que os inscreveu mesmo dispositivo. Por exemplo, copiar dados de impressão digital de um usuário diferente no mesmo dispositivo ou de outro dispositivo não deve funcionar.
- As implementações devem usar o caminho do sistema de arquivos fornecido pela função
setActiveGroup()
ou fornecer uma maneira de apagar todos os dados do modelo do usuário quando o usuário for removido. É altamente recomendável que os arquivos de modelo de impressão digital sejam armazenados como criptografados e armazenados no caminho fornecido. Se isso for inviável devido aos requisitos de armazenamento TEE, o implementador deve adicionar ganchos para garantir a remoção dos dados quando o usuário for removido.
Métodos de impressão digital
A interface Fingerprint HIDL contém os seguintes métodos principais em IBiometricsFingerprint.hal
.
Método | Descrição |
---|---|
enroll() | Alterna a máquina de estado HAL para iniciar a coleta e armazenamento de um modelo de impressão digital. Quando a inscrição é concluída ou após um tempo limite, a máquina de estado HAL retorna ao estado ocioso. |
preEnroll() | Gera um token exclusivo para indicar o início de um registro de impressão digital. Fornece um token para a função de enroll para garantir que houve autenticação anterior, por exemplo, usando uma senha. Para evitar adulteração, o token é agrupado após a confirmação da credencial do dispositivo. O token deve ser verificado durante a inscrição para verificar se ainda é válido. |
getAuthenticatorId() | Retorna um token associado ao conjunto de impressão digital atual. |
cancel() | Cancela operações pendentes de inscrição ou autenticação. A máquina de estado HAL retorna ao estado ocioso. |
enumerate() | Chamada síncrona para enumerar todos os modelos de impressão digital conhecidos. |
remove() | Exclui um modelo de impressão digital. |
setActiveGroup() | Restringe uma operação HAL a um conjunto de impressões digitais que pertencem a um grupo especificado, identificado por um identificador de grupo (GID). |
authenticate() | Autentica uma operação relacionada à impressão digital (identificada por um ID de operação). |
setNotify() | Registra uma função de usuário que recebe notificações do HAL. Se a máquina de estado do HAL estiver ocupada, a função será bloqueada até que o HAL saia do estado de ocupado. |
postEnroll() | preEnroll() a operação de inscrição e invalida o desafio gerado por preEnroll() . Deve ser chamado no final de uma sessão de inscrição de vários dedos para indicar que nenhum outro dedo pode ser adicionado. |
Para obter mais detalhes sobre isso, consulte os comentários em IBiometricsFingerprint.hal
.