Stato del dispositivo

Lo stato del dispositivo indica quanto liberamente è possibile eseguire il flashing del software su un dispositivo e se viene applicata la verifica. Gli stati del dispositivo sono LOCKED e UNLOCKED . I dispositivi LOCKED impediscono di installare nuovo software sul dispositivo, mentre i dispositivi UNLOCKED consentono la modifica.

Quando un dispositivo si accende, il bootloader controlla innanzitutto se un dispositivo è LOCKED o UNLOCKED . Se un dispositivo è UNLOCKED , il bootloader mostra all'utente un avviso e quindi procede all'avvio anche se il sistema operativo caricato non è firmato dalla root of trust.

Se il dispositivo è LOCKED , il bootloader esegue i passaggi descritti in Verifica dell'avvio per verificare il software del dispositivo. I dispositivi LOCKED si avviano solo se il sistema operativo caricato è firmato correttamente dalla radice di attendibilità. Per ulteriori dettagli, vedere Il flusso di avvio .

Modifica dello stato del dispositivo

Per modificare lo stato di un dispositivo , utilizzare il fastboot flashing [unlock | lock] . Per proteggere i dati dell'utente, tutte le transizioni di stato cancellano le partizioni dei dati e richiedono la conferma dell'utente prima che i dati vengano eliminati.

Il passaggio UNLOCKED a LOCKED è anticipato nel momento in cui un utente acquista un dispositivo di sviluppo usato. Come risultato del blocco del dispositivo, l'utente dovrebbe avere la certezza che si trova in uno stato prodotto dal produttore del dispositivo, purché non vi sia alcun avviso. La transizione LOCKED a UNLOCKED è prevista quando uno sviluppatore desidera disabilitare la verifica sul dispositivo per scopi di sviluppo.

Radice di fiducia

La root of trust è la chiave crittografica utilizzata per firmare la copia di Android archiviata sul dispositivo. La parte privata della root of trust è nota solo al produttore del dispositivo e viene utilizzata per firmare ogni versione di Android destinata alla distribuzione. La parte pubblica della root of trust è incorporata nel dispositivo ed è archiviata in un luogo in cui non può essere manomessa (in genere archiviazione di sola lettura).

Quando carica Android, il bootloader utilizza la root of trust per verificare l'autenticità. Per ulteriori dettagli su questo processo, vedere Verifica dell'avvio . I dispositivi possono avere più boot loader e pertanto potrebbero essere in gioco più chiavi crittografiche.

Radice di attendibilità impostabile dall'utente

I dispositivi possono facoltativamente consentire all'utente di configurare la radice di attendibilità (ad esempio, una chiave pubblica). I dispositivi possono utilizzare questa radice di attendibilità impostabile dall'utente per l'avvio verificato invece della radice di attendibilità integrata. Ciò consente all'utente di installare e utilizzare versioni personalizzate di Android senza sacrificare i miglioramenti di sicurezza di Verified Boot.

Se viene implementata una radice di attendibilità impostabile dall'utente, è necessario farlo in modo tale che:

  • È necessaria la conferma fisica per impostare/cancellare la radice di attendibilità impostabile dall'utente.
  • La radice di attendibilità impostabile dall'utente può essere impostata solo dall'utente finale. Non può essere impostato in fabbrica o in qualsiasi punto intermedio prima che l'utente finale riceva il dispositivo.
  • La radice di attendibilità impostabile dall'utente viene archiviata in un archivio a prova di manomissione. Anti-manomissione significa che è possibile rilevare se Android ha manomesso i dati, ad esempio se sono stati sovrascritti o modificati.
  • Se viene impostata una root of trust impostabile dall'utente, il dispositivo dovrebbe consentire l'avvio di una versione di Android firmata con la root of trust integrata o con la root of trust impostabile dall'utente.
  • Ogni volta che il dispositivo si avvia utilizzando la radice di attendibilità impostabile dall'utente, l'utente dovrebbe ricevere una notifica che il dispositivo sta caricando una versione personalizzata di Android. Ad esempio, per le schermate di avviso, vedere Dispositivi LOCKED con set di chiavi personalizzate .

Un modo per implementare una radice di attendibilità impostabile dall'utente è disporre di una partizione virtuale che può essere flashata o cancellata solo quando il dispositivo è nello stato UNLOCKED . I dispositivi Google Pixel 2 utilizzano questo approccio e la partizione virtuale si chiama avb_custom_key . Il formato dei dati in questa partizione è l'output del comando avbtool extract_public_key . Ecco un esempio di come impostare la radice di attendibilità impostabile dall'utente:

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

La radice di attendibilità impostabile dall'utente può essere cancellata emettendo:

fastboot erase avb_custom_key