Em dispositivos com um 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 a linguagem de definição de interface de hardware de impressão digital (HIDL) para se conectar a uma biblioteca específica do fornecedor e a um hardware de impressão digital (por exemplo, um sensor de impressão digital).
Para implementar o HIDL de impressão digital, é necessário 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 fica ocioso. No entanto, em resposta a
uma chamada para authenticate
ou enroll
, o
sensor de impressão digital detecta um toque (a tela também pode ser ativada quando um usuário
toca no sensor de impressão digital). O fluxo geral 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 transmitidos para
FingerprintService
.
Este 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 mais detalhes, consulte Autenticação.
Arquitetura
O HAL de impressão digital interage com os seguintes componentes:
BiometricManager
interage diretamente com um app em um processo de app. Cada app tem uma instância deIBiometricsFingerprint.hal
- O
FingerprintService
opera no processo do sistema, que processa a comunicação com o HAL de impressão digital. - A HAL de impressão digital é uma implementação C/C++ da interface HIDL IBiometricsFingerprint. Ela contém a biblioteca específica do fornecedor que se comunica com o hardware específico do dispositivo.
- Os componentes da API Keystore e do Keymaster fornecem criptografia com suporte de hardware para armazenamento seguro de chaves em um ambiente seguro, como o ambiente de execução confiável (TEE).

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

Diretrizes de implementação
As seguintes diretrizes do HAL de impressão digital foram criadas para garantir que os dados de impressão digital não sejam vazados e removamos quando um usuário for removido de um dispositivo:
- Os dados brutos ou derivados da impressão digital (por exemplo, modelos) nunca podem ser acessados fora do driver do sensor ou do TEE. Se o hardware oferecer suporte a um TEE, o acesso ao hardware precisa ser limitado ao TEE e protegido por uma política do SELinux. O canal de interface periférica serial (SPI, na sigla em inglês) precisa ser acessível apenas ao TEE, e precisa haver uma política SELinux explícita em todos os arquivos do dispositivo.
- A aquisição, a inscrição e o reconhecimento de impressão digital precisam ocorrer dentro do TEE.
- Somente a forma criptografada dos dados de impressão digital pode ser armazenada no sistema de arquivos, mesmo que ele seja criptografado.
- Os modelos de impressão digital precisam ser assinados com uma chave privada específica do dispositivo. Para o padrão de criptografia avançada (AES), pelo menos um modelo precisa ser assinado com o caminho absoluto do sistema de arquivos, o grupo e o ID do dedo, para que os arquivos de modelo não funcionem em outro dispositivo ou para qualquer pessoa que não seja o usuário que os registrou no mesmo dispositivo. Por exemplo, a cópia de dados de impressão digital de um usuário diferente no mesmo dispositivo ou em outro dispositivo não deve funcionar.
- As implementações precisam 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 ele for removido. É altamente recomendável que os arquivos de modelo de impressão digital sejam armazenados criptografados e no caminho fornecido. Se isso for inviável devido aos requisitos de armazenamento do TEE, o implementador precisará adicionar ganchos para garantir a remoção dos dados quando o usuário for removido.
Métodos de impressão digital
A interface HIDL de impressão digital contém os seguintes métodos principais em
IBiometricsFingerprint.hal
.
Método | Descrição |
---|---|
enroll() |
Muda a máquina de estado HAL para iniciar a coleta e o 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 inativo. |
preEnroll() |
Gera um token exclusivo para indicar o início de um
registro de impressão digital. Fornece um token à função enroll para
garantir que houve uma autenticação anterior, por exemplo, usando uma senha. Para evitar
adulterações, o token é envolvido depois que a credencial
do dispositivo é confirmada. O token precisa ser verificado durante o registro para verificar
se ele ainda é válido. |
getAuthenticatorId() |
Retorna um token associado ao conjunto de impressão digital atual. |
cancel() |
Cancela operações de inscrição ou autenticação pendentes. A máquina de estado HAL é retornada ao estado inativo. |
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 do usuário que recebe notificações do HAL. Se a máquina de estado HAL estiver ocupada, a função será bloqueada até que a HAL saia do estado ocupado. |
postEnroll() |
Conclui a operação de registro e invalida o desafio gerado por preEnroll() . Ele precisa ser chamado no final de uma
sessão de registro de vários dedos para indicar que não é possível adicionar mais dedos. |
Para mais detalhes, consulte os comentários em IBiometricsFingerprint.hal
.