HIDL de impressão digital

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:

  1. O usuário coloca um dedo no sensor de impressão digital.
  2. 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.
  3. 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 de IBiometricsFingerprint.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).
Fluxo de dados para autenticação de impressão digital
Figura 1. Fluxo de dados de alto nível para autenticação de impressão digital

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.

Interação com impressão digital
Figura 2. Interação do daemon de impressão digital com a biblioteca específica do fornecedor de impressão digital

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:

  1. O usuário coloca um dedo no sensor de impressão digital.
  2. 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.
  3. 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 de IBiometricsFingerprint.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).
Fluxo de dados para autenticação de impressão digital
Figura 1. Fluxo de dados de alto nível para autenticação de impressão digital

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.

Interação com impressão digital
Figura 2. Interação do daemon de impressão digital com a biblioteca específica do fornecedor de impressão digital

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 .