Em dispositivos com sensor de impressão digital, os usuários podem registrar uma ou mais impressões digitais e usar essas impressões digitais 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 a um 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 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
.
Esse fluxo pressupõe que uma impressão digital já foi 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 tem uma instância deIBiometricsFingerprint.hal
- O
FingerprintService
opera no processo do sistema, que trata da comunicação com a impressão digital HAL. - Fingerprint HAL é uma implementação C/C++ da interface IBiometricsFingerprint HIDL. Ele 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 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 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 de Fingerprint HAL são projetadas para garantir que os dados de impressão digital não vazem e sejam removidos quando um usuário for 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 deverá ser limitado ao TEE e protegido por uma política SELinux. O canal Serial Peripheral Interface (SPI) deve ser acessível apenas ao TEE e deve haver uma política SELinux explícita em todos os arquivos do dispositivo.
- A aquisição de impressão digital, inscrição e reconhecimento devem ocorrer dentro do TEE.
- Somente a forma criptografada dos dados da 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 o Advanced Encryption Standard (AES), no mínimo um modelo deve ser assinado com o caminho absoluto do sistema de arquivos, grupo e ID do dedo, de modo 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 de 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 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() | Alterna a máquina de estado HAL para iniciar a coleta e armazenamento de um modelo de impressão digital. Quando o registro for concluído ou após um tempo limite, a máquina de estado HAL retornará ao estado inativo. |
preEnroll() | Gera um token exclusivo para indicar o início de um registro de impressão digital. Fornece um enroll para a função de registro para garantir que houve autenticação prévia, por exemplo, usando uma senha. Para evitar adulterações, 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 é retornada 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 a 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 em um estado ocupado, a função será bloqueada até que o HAL saia do estado ocupado. |
postEnroll() | Finaliza a operação de inscrição e invalida o desafio gerado 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 isso, consulte os comentários em IBiometricsFingerprint.hal
.
Em dispositivos com sensor de impressão digital, os usuários podem registrar uma ou mais impressões digitais e usar essas impressões digitais 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 a um 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 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
.
Esse fluxo pressupõe que uma impressão digital já foi 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 tem uma instância deIBiometricsFingerprint.hal
- O
FingerprintService
opera no processo do sistema, que trata da comunicação com a impressão digital HAL. - Fingerprint HAL é uma implementação C/C++ da interface IBiometricsFingerprint HIDL. Ele 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 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 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 de Fingerprint HAL são projetadas para garantir que os dados de impressão digital não vazem e sejam removidos quando um usuário for 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 deverá ser limitado ao TEE e protegido por uma política SELinux. O canal Serial Peripheral Interface (SPI) deve ser acessível apenas ao TEE e deve haver uma política SELinux explícita em todos os arquivos do dispositivo.
- A aquisição de impressão digital, inscrição e reconhecimento devem ocorrer dentro do TEE.
- Somente a forma criptografada dos dados da 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 o Advanced Encryption Standard (AES), no mínimo um modelo deve ser assinado com o caminho absoluto do sistema de arquivos, grupo e ID do dedo, de modo 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 de 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 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() | Alterna a máquina de estado HAL para iniciar a coleta e armazenamento de um modelo de impressão digital. Quando o registro for concluído ou após um tempo limite, a máquina de estado HAL retornará ao estado inativo. |
preEnroll() | Gera um token exclusivo para indicar o início de um registro de impressão digital. Fornece um enroll para a função de registro para garantir que houve autenticação prévia, por exemplo, usando uma senha. Para evitar adulterações, 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 é retornada 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 a 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 em um estado ocupado, a função será bloqueada até que o HAL saia do estado ocupado. |
postEnroll() | Finaliza a operação de inscrição e invalida o desafio gerado 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 isso, consulte os comentários em IBiometricsFingerprint.hal
.