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