O estado do dispositivo indica a liberdade com que o software pode ser atualizado para um dispositivo e se a verificação é aplicada. Os estados do dispositivo são LOCKED
e UNLOCKED
. Os dispositivos LOCKED
evitam que você atualize novo software no dispositivo, enquanto os dispositivos UNLOCKED
permitem modificações.
Quando um dispositivo é ligado, o bootloader primeiro verifica se um dispositivo está LOCKED
ou UNLOCKED
. Se um dispositivo for UNLOCKED
, o bootloader mostra um aviso ao usuário e prossegue com a inicialização mesmo que o sistema operacional carregado não esteja assinado pela raiz de confiança.
Se o dispositivo estiver LOCKED
, o bootloader seguirá as etapas em Verificando a inicialização para verificar o software do dispositivo. Os dispositivos LOCKED
inicializam somente se o sistema operacional carregado estiver devidamente assinado pela raiz de confiança. Para obter mais detalhes, consulte O fluxo de inicialização .
Alterando o estado do dispositivo
Para alterar o estado de um dispositivo , use o fastboot flashing [unlock | lock]
comando. Para proteger os dados do usuário, todas as transições de estado apagam as partições de dados e solicitam a confirmação do usuário antes que os dados sejam excluídos.
A transição UNLOCKED
para LOCKED
é antecipada quando um usuário compra um dispositivo de desenvolvimento usado. Como resultado do bloqueio do dispositivo, o usuário deve ter certeza de que ele está no estado produzido pelo fabricante do dispositivo, desde que não haja aviso. A transição LOCKED
para UNLOCKED
é esperada quando um desenvolvedor deseja desabilitar a verificação no dispositivo para fins de desenvolvimento.
Raiz da Confianç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 no dispositivo e armazenada em um local que não pode ser adulterada (normalmente armazenamento somente leitura).
Ao carregar o Android, o bootloader usa a raiz de confiança para verificar a autenticidade. Para obter mais detalhes sobre esse processo, consulte Verificando a inicialização . Os dispositivos podem ter vários carregadores de inicialização e, como tal, várias chaves criptográficas podem estar em jogo.
Raiz de confiança configurável pelo usuário
Os dispositivos podem opcionalmente 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 configurável pelo usuário para inicialização verificada em vez da raiz de confiança integrada. Isso permite que o usuário instale e use versões personalizadas do Android sem sacrificar as melhorias de segurança do Verified Boot.
Se a raiz de confiança configurável pelo usuário for implementada, isso deverá ser feito de forma que:
- A confirmação física é necessária para definir/limpar a raiz de confiança configurável pelo usuário.
- A raiz de confiança configurável pelo usuário só pode ser definida pelo usuário final. Ele não pode ser configurado na fábrica ou em qualquer ponto intermediário antes que o usuário final obtenha o dispositivo.
- A raiz de confiança configurável pelo usuário é armazenada em um armazenamento inviolável. Evidente de violação significa que é possível detectar se o Android violou os dados, por exemplo, se eles foram substituídos ou alterados.
- Se uma raiz de confiança configurável pelo usuário for definida, o dispositivo deverá permitir a inicialização de uma versão do Android assinada com a raiz de confiança integrada ou com a raiz de confiança configurável pelo usuário.
- Cada vez que o dispositivo inicializa usando a raiz de confiança configurável pelo usuário, o usuário deve ser notificado de que o dispositivo está carregando uma versão personalizada do Android. Por exemplo, telas de aviso, consulte Dispositivos
LOCKED
com conjunto de chave personalizado .
Uma maneira de implementar a raiz de confiança configurável pelo usuário é ter uma partição virtual que só possa ser atualizada ou limpa quando o dispositivo estiver no estado UNLOCKED
. Os dispositivos Google Pixel 2 usam essa abordagem e a partição virtual é chamada avb_custom_key
. O formato dos dados nesta partição é a saída do comando avbtool extract_public_key
. Aqui está um exemplo de como definir a raiz de confiança configurável 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 configurável pelo usuário pode ser limpa emitindo:
fastboot erase avb_custom_key