Estado do dispositivo

O estado do dispositivo indica a liberdade de flash de software em um dispositivo e se a verificação é aplicada. Os estados do dispositivo são LOCKED e UNLOCKED. Dispositivos LOCKED impedem que você instale um novo software no dispositivo, enquanto dispositivos UNLOCKED permitem modificações.

Quando um dispositivo é ligado, o carregador de inicialização primeiro verifica se ele é LOCKED ou UNLOCKED. Se um dispositivo estiver UNLOCKED, o carregador de inicialização mostra um aviso ao usuário e prossegue a inicialização, mesmo que o SO carregado não tenha sido assinado pela raiz de confiança.

Se o dispositivo for LOCKED, o carregador de inicialização vai passar pelas etapas em Verificação da inicialização para verificar o software do dispositivo. Os dispositivos LOCKED são inicializados somente se o SO carregado estiver devidamente assinado pela raiz de confiança. Para mais detalhes, consulte O fluxo de inicialização.

Mudar o estado do dispositivo

Para mudar o estado de um dispositivo, use o comando fastboot flashing [unlock | lock]. Para proteger os dados do usuário, todas as transições de estado limpam as partições de dados e pedem a confirmação do usuário antes de excluir os dados.

A transição de UNLOCKED para LOCKED é antecipada quando um usuário compra um dispositivo de desenvolvimento usado. Como resultado do bloqueio do dispositivo, o usuário precisa ter confiança de que ele está em um estado produzido pelo fabricante do dispositivo, desde que não haja nenhum aviso. A transição de LOCKED para UNLOCKED é esperada quando um desenvolvedor quer desativar a verificação no dispositivo para fins de desenvolvimento.

Raiz de confiança

A raiz de confiança é a chave criptográfica usada para assinar a cópia do Android armazenada no dispositivo. A parte privada da raiz de confiança é conhecida apenas pelo fabricante do dispositivo e é usada para assinar todas as versões do Android destinadas à distribuição. A parte pública da raiz de confiança é incorporada ao dispositivo e armazenada em um local para que não possa ser adulterada (geralmente armazenamento somente leitura).

Ao carregar o Android, o carregador de inicialização usa a raiz de confiança para verificar a autenticidade. Para mais detalhes sobre esse processo, consulte Como verificar a inicialização. Os dispositivos podem ter vários carregador de inicialização e, portanto, várias chaves criptográficas podem estar em jogo.

Raiz de confiança definida pelo usuário

Os dispositivos podem permitir que o usuário configure a raiz de confiança (por exemplo, uma chave pública). Os dispositivos podem usar essa raiz de confiança definida pelo usuário para a inicialização verificada, além da raiz de confiança integrada. Os dispositivos Google Pixel fazem isso.

Se a raiz de confiança definida pelo usuário for implementada, ela será feita de uma maneira em que:

  • É necessária uma confirmação física para definir/limpar a raiz de confiança definida pelo usuário.
  • A raiz de confiança definida pelo usuário só pode ser definida pelo usuário final. Ele não pode ser definido na fábrica ou em qualquer ponto intermediário antes que o usuário final receba o dispositivo.
  • A raiz de confiança definida pelo usuário é armazenada em um armazenamento inviolável. Vulnerável a adulterações significa que é possível detectar se o Android adulterou os dados, por exemplo, se eles foram substituídos ou alterados.
  • Se uma raiz de confiança configurável pelo usuário estiver definida, o dispositivo precisará permitir que uma versão do Android assinada com a raiz de confiança integrada ou a raiz de confiança configurável pelo usuário seja inicializada.
  • Sempre que o dispositivo for inicializado usando a raiz de confiança definida pelo usuário, o usuário vai receber uma notificação de que o dispositivo está carregando uma versão personalizada do Android. Por exemplo, telas de aviso, consulte LOCKED dispositivos com conjunto de chaves personalizado.

Uma maneira de implementar a raiz de confiança definida pelo usuário é ter uma partição virtual que só pode ser inicializada ou limpa quando o dispositivo está no estado UNLOCKED. Os dispositivos Google Pixel 2 usam essa abordagem, e a partição virtual é chamada de avb_custom_key. O formato dos dados nessa partição é a saída do comando avbtool extract_public_key. Confira um exemplo de como definir a raiz de confiança definida pelo usuário:

avbtool extract_public_key --key key.pem --output pkmd.bin
fastboot flash avb_custom_key pkmd.bin

A raiz de confiança definida pelo usuário pode ser limpa emitindo:

fastboot erase avb_custom_key