O estado do dispositivo indica quão livremente o software pode ser transferido para um dispositivo e se a verificação é aplicada. Os estados do dispositivo são LOCKED
e UNLOCKED
. Os dispositivos LOCKED
impedem que você instale um novo software no dispositivo, enquanto os dispositivos UNLOCKED
permitem a modificação.
Quando um dispositivo é ligado, o bootloader primeiro verifica se um dispositivo está LOCKED
ou UNLOCKED
. Se um dispositivo for UNLOCKED
, o bootloader mostrará um aviso ao usuário e prosseguirá com a inicialização mesmo que o sistema operacional carregado não seja assinado pela raiz de confiança.
Se o dispositivo estiver LOCKED
, o carregador de inicialização seguirá as etapas em Verificando a inicialização para verificar o software do dispositivo. Dispositivos LOCKED
são inicializados somente se o sistema operacional carregado for 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 de fastboot flashing [unlock | lock]
. Para proteger os dados do usuário, todas as transições de estado limpam 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 travamento do dispositivo, o usuário deve ter confiança de que está em um estado produzido pelo fabricante do dispositivo, desde que não haja aviso. A transição LOCKED
to UNLOCKED
é esperada quando um desenvolvedor deseja desabilitar a verificação no dispositivo para fins de desenvolvimento.
Raiz de 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 está incorporada no dispositivo e é armazenada em um local para que não possa ser adulterada (normalmente armazenamento somente leitura).
Quando carrega 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 interna. Isso permite que o usuário instale e use versões personalizadas do Android sem sacrificar as melhorias de segurança da inicialização verificada.
Se a raiz de confiança configurável pelo usuário for implementada, isso deve 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 definido 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 armazenamento inviolável. Evidente de adulteração significa que é possível detectar se o Android adulterou os dados, por exemplo, se foram substituídos ou alterados.
- Se uma raiz de confiança configurável pelo usuário for definida, o dispositivo deverá permitir que uma versão do Android assinada com a raiz de confiança interna ou a raiz de confiança configurável pelo usuário seja inicializada.
- Sempre 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 chaves 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