L'état de l'appareil indique dans quelle mesure un logiciel peut être flashé sur un appareil et si la validation est appliquée. Les états de l'appareil sont LOCKED
et UNLOCKED
. Les appareils LOCKED
vous empêchent de flasher de nouveaux logiciels sur l'appareil, tandis que les appareils UNLOCKED
permettent de le modifier.
Lorsqu'un appareil s'allume, le bootloader vérifie d'abord s'il s'agit d'un appareil LOCKED
ou UNLOCKED
. Si un appareil est UNLOCKED
, le bootloader affiche un avertissement à l'utilisateur, puis procède au démarrage même si l'OS chargé n'est pas signé par la racine de confiance.
Si l'appareil est LOCKED
, le bootloader suit la procédure décrite dans la section Valider le démarrage pour valider le logiciel de l'appareil. Les appareils LOCKED
ne démarrent que si l'OS chargé est correctement signé par la racine de confiance. Pour en savoir plus, consultez la section Flux de démarrage.
Modifier l'état de l'appareil
Pour modifier l'état d'un appareil, utilisez la commande fastboot flashing [unlock | lock]
. Pour protéger les données utilisateur, toutes les transitions d'état effacent les partitions de données et demandent confirmation à l'utilisateur avant de supprimer les données.
La transition de UNLOCKED
vers LOCKED
est prévue lorsqu'un utilisateur achète un appareil de développement d'occasion. Après avoir verrouillé l'appareil, l'utilisateur doit être sûr qu'il est dans un état produit par le fabricant de l'appareil, tant qu'aucun avertissement ne s'affiche. La transition de LOCKED
vers UNLOCKED
est attendue lorsqu'un développeur souhaite désactiver la validation sur l'appareil à des fins de développement.
Racine de confiance
La racine de confiance est la clé cryptographique utilisée pour signer la copie d'Android stockée sur l'appareil. La partie privée de la racine de confiance n'est connue que par le fabricant de l'appareil et sert à signer chaque version d'Android destinée à la distribution. La partie publique de la racine de confiance est intégrée à l'appareil et stockée dans un emplacement où elle ne peut pas être falsifiée (généralement un stockage en lecture seule).
Lorsqu'il charge Android, le bootloader utilise la racine de confiance pour vérifier l'authenticité. Pour en savoir plus sur ce processus, consultez la section Valider le démarrage. Les appareils peuvent avoir plusieurs bootloaders et, par conséquent, plusieurs clés cryptographiques peuvent être utilisées.
Racine de confiance configurable par l'utilisateur
Les appareils peuvent éventuellement autoriser l'utilisateur à configurer la racine de confiance (par exemple, une clé publique). Les appareils peuvent utiliser cette racine de confiance configurable par l'utilisateur pour le démarrage validé, en plus de la racine de confiance intégrée. C'est le cas des appareils Google Pixel.
Si une racine de confiance configurable par l'utilisateur est implémentée, elle doit l'être de manière à:
- Une confirmation physique est requise pour définir/effacer la racine de confiance configurable par l'utilisateur.
- La racine de confiance configurable par l'utilisateur ne peut être définie que par l'utilisateur final. Il ne peut pas être défini en usine ni à un point intermédiaire avant que l'utilisateur final ne reçoive l'appareil.
- La racine de confiance configurable par l'utilisateur est stockée dans un espace de stockage inviolable. Anti-falsification signifie qu'il est possible de détecter si Android a falsifié les données, par exemple si elles ont été écrasées ou modifiées.
- Si une racine de confiance pouvant être définie par l'utilisateur est définie, l'appareil doit autoriser le démarrage d'une version d'Android signée avec la racine de confiance intégrée ou la racine de confiance pouvant être définie par l'utilisateur.
- Chaque fois que l'appareil démarre à l'aide de la racine de confiance configurable par l'utilisateur, l'utilisateur doit être informé que l'appareil charge une version personnalisée d'Android. Par exemple, pour les écrans d'avertissement, consultez les appareils
LOCKED
avec un ensemble de clés personnalisé.
Une façon d'implémenter une racine de confiance configurable par l'utilisateur consiste à disposer d'une partition virtuelle qui ne peut être flashée ou effacée que lorsque l'appareil est à l'état UNLOCKED
. Les appareils Google Pixel 2 utilisent cette approche, et la partition virtuelle est appelée avb_custom_key
. Le format des données de cette partition est la sortie de la commande avbtool extract_public_key
. Voici un exemple de configuration de la racine de confiance pouvant être définie par l'utilisateur:
avbtool extract_public_key --key key.pem --output pkmd.bin
fastboot flash avb_custom_key pkmd.bin
La racine de confiance pouvant être définie par l'utilisateur peut être effacée en émettant:
fastboot erase avb_custom_key