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 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 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 escuta um toque (a tela também pode ser ativada quando um usuário toca no 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
.
Este fluxo assume que uma impressão digital já foi cadastrada no dispositivo, ou seja, a biblioteca específica do fornecedor cadastrou 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 tem 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 com suporte de hardware para armazenamento seguro de chaves em um ambiente seguro, como o Trusted Execution Environment (TEE).
Uma implementação HAL específica do fornecedor deve usar o protocolo de comunicação exigido por um TEE. As imagens brutas e os recursos de impressão digital processados não devem ser transmitidos em memória não confiável. Todos esses dados biométricos precisam ser armazenados no hardware seguro, como o TEE. O enraizamento não deve ser capaz de 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 do Fingerprint HAL são projetadas para garantir que os dados de 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 Serial Peripheral Interface (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 que o próprio sistema de arquivos seja criptografado.
- Os modelos de impressão digital devem ser assinados com uma chave privada específica do dispositivo. Para Advanced Encryption Standard (AES), no mínimo, um modelo deve ser assinado com o caminho absoluto do sistema de arquivos, grupo e ID digital 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 registrou no 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 criptografados e armazenados no caminho fornecido. Se isso for inviável devido aos requisitos de armazenamento do 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() | Muda a máquina de estado HAL para iniciar a coleta e armazenamento de um modelo de impressão digital. Quando o registro é concluído 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 enroll para garantir que houve autenticação prévia, por exemplo, usando uma senha. Para evitar adulteração, o token é encapsulado 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 as operações de inscrição ou autenticação pendentes. 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 HAL estiver ocupada, a função será bloqueada até que o HAL deixe o estado ocupado. |
postEnroll() | Finaliza a operação de inscrição e invalida o desafio gerado por preEnroll() . Isso deve ser chamado no final de uma sessão de registro de vários dedos para indicar que não podem ser adicionados mais dedos. |
Para obter mais detalhes sobre eles, consulte os comentários em IBiometricsFingerprint.hal
.