El estado del dispositivo indica con qué libertad se puede escribir software en un dispositivo y
si se aplica la verificación. Los estados del dispositivo son LOCKED
y UNLOCKED
. Los dispositivos LOCKED
te impiden actualizar el software, mientras que los dispositivos UNLOCKED
permiten la modificación.
Cuando se enciende un dispositivo, el bootloader primero verifica si es LOCKED
o UNLOCKED
. Si un dispositivo es UNLOCKED
, el bootloader muestra una advertencia al usuario y, luego, continúa con el inicio, incluso si la raíz de confianza no firmó el SO cargado.
Si el dispositivo es LOCKED
, el bootloader sigue los pasos de Verificación del inicio para verificar el software del dispositivo. Los dispositivos LOCKED
se inician solo si la raíz de confianza firma correctamente el SO cargado. Para obtener más detalles, consulta El flujo de inicio.
Cambia el estado del dispositivo
Para cambiar el estado de un dispositivo, usa el comando fastboot flashing [unlock | lock]
. Para proteger los datos del usuario, todas las transiciones de estado borran las particiones de datos y solicitan la confirmación del usuario antes de borrar los datos.
La transición de UNLOCKED
a LOCKED
se anticipa cuando un usuario compra un dispositivo de desarrollo usado. Como resultado del bloqueo del dispositivo, el usuario debe tener la seguridad de que se encuentra en un estado producido por el fabricante del dispositivo, siempre que no haya una advertencia. Se espera la transición de LOCKED
a UNLOCKED
cuando un desarrollador desea inhabilitar la verificación en el dispositivo con fines de desarrollo.
Raíz de confianza
La raíz de confianza es la clave criptográfica que se usa para firmar la copia de Android que se almacena en el dispositivo. Solo el fabricante del dispositivo conoce la parte privada de la raíz de confianza y la usa para firmar cada versión de Android destinada a la distribución. La parte pública de la raíz de confianza está incorporada en el dispositivo y se almacena en un lugar para que no se pueda manipular (por lo general, almacenamiento de solo lectura).
Cuando carga Android, el bootloader usa la raíz de confianza para verificar la autenticidad. Para obtener más detalles sobre este proceso, consulta Cómo verificar el inicio. Los dispositivos pueden tener varios cargadores de arranque y, por lo tanto, es posible que se usen varias claves criptográficas.
Raíz de confianza configurable por el usuario
De manera opcional, los dispositivos pueden permitir que el usuario configure la raíz de confianza (por ejemplo, una clave pública). Los dispositivos pueden usar esta raíz de confianza que el usuario puede configurar para el inicio verificado, además de la raíz de confianza integrada, y los dispositivos Google Pixel lo hacen.
Si se implementa la raíz de confianza que puede establecer el usuario, se debe hacer de la siguiente manera:
- Se requiere la confirmación física para establecer o borrar la raíz de confianza que puede configurar el usuario.
- Solo el usuario final puede establecer la raíz de confianza que se puede configurar por el usuario. No se puede configurar en la fábrica ni en ningún punto intermedio antes de que el usuario final reciba el dispositivo.
- La raíz de confianza que puede establecer el usuario se almacena en un almacenamiento con evidencia de manipulación. A prueba de manipulaciones significa que es posible detectar si Android manipuló los datos, por ejemplo, si se sobreescribieron o cambiaron.
- Si se configura una raíz de confianza que el usuario puede establecer, el dispositivo debería permitir que se inicie una versión de Android firmada con la raíz de confianza integrada o la raíz de confianza que el usuario puede establecer.
- Cada vez que el dispositivo se inicia con la raíz de confianza que el usuario puede configurar, se le debe notificar que el dispositivo está cargando una versión personalizada de Android. Por ejemplo, pantallas de advertencia, consulta Dispositivos
LOCKED
con un conjunto de claves personalizado.
Una forma de implementar la raíz de confianza que puede establecer el usuario es tener una partición virtual que solo se pueda borrar o actualizar cuando el dispositivo esté en el estado UNLOCKED
. Los dispositivos Google Pixel 2 usan este enfoque y la partición virtual se llama avb_custom_key
. El formato de los datos en esta partición es el resultado del comando avbtool extract_public_key
. Este es un ejemplo de cómo configurar la raíz de confianza que puede establecer el usuario:
avbtool extract_public_key --key key.pem --output pkmd.bin
fastboot flash avb_custom_key pkmd.bin
Para borrar la raíz de confianza que puede establecer el usuario, emite lo siguiente:
fastboot erase avb_custom_key