État de l'appareil

L'état de l'appareil indique la liberté avec laquelle le logiciel peut être flashé sur un appareil et si la vérification est appliquée. Les états des appareils sont LOCKED et UNLOCKED . Les appareils LOCKED vous empêchent de flasher un nouveau logiciel sur l'appareil, tandis que les appareils UNLOCKED autorisent la modification.

Lorsqu'un périphérique s'allume, le chargeur de démarrage vérifie d'abord si un périphérique est LOCKED ou UNLOCKED . Si un périphérique est UNLOCKED , le chargeur de démarrage affiche un avertissement à l'utilisateur, puis procède au démarrage même si le système d'exploitation chargé n'est pas signé par la racine de confiance.

Si le périphérique est LOCKED , le chargeur de démarrage suit les étapes de Vérification du démarrage pour vérifier le logiciel du périphérique. Les appareils LOCKED démarrent uniquement si le système d’exploitation chargé est correctement signé par la racine de confiance. Pour plus de détails, consultez Le flux de démarrage .

Modification de l'état de l'appareil

Pour modifier l'état d'un périphérique , utilisez le fastboot flashing [unlock | lock] commande. Pour protéger les données utilisateur, toutes les transitions d'état effacent les partitions de données et demandent la confirmation de l'utilisateur avant que les données ne soient supprimées.

La transition UNLOCKED à LOCKED est anticipée lorsqu'un utilisateur achète un appareil de développement d'occasion. Suite au verrouillage de l'appareil, l'utilisateur doit avoir la certitude qu'il se trouve dans un état produit par le fabricant de l'appareil, tant qu'il n'y a pas d'avertissement. La transition LOCKED à UNLOCKED est attendue lorsqu'un développeur souhaite désactiver la vérification 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 du fabricant de l'appareil et est utilisée pour signer chaque version d'Android destinée à la distribution. La partie publique de la racine de confiance est intégrée dans l'appareil et est stockée dans un endroit empêchant toute altération (généralement un stockage en lecture seule).

Lorsqu'il charge Android, le chargeur de démarrage utilise la racine de confiance pour vérifier l'authenticité. Pour plus de détails sur ce processus, consultez Vérification du démarrage . Les appareils peuvent avoir plusieurs chargeurs de démarrage et, en tant que tels, plusieurs clés cryptographiques peuvent être utilisées.

Racine de confiance paramétrable par l'utilisateur

Les appareils peuvent éventuellement permettre à l'utilisateur de configurer la racine de confiance (par exemple, une clé publique). Les appareils peuvent utiliser cette racine de confiance paramétrable par l’utilisateur pour le démarrage vérifié au lieu de la racine de confiance intégrée. Cela permet à l'utilisateur d'installer et d'utiliser des versions personnalisées d'Android sans sacrifier les améliorations de sécurité de Verified Boot.

Si une racine de confiance paramétrable par l'utilisateur est implémentée, cela doit être fait de telle manière que :

  • Une confirmation physique est requise pour définir/effacer la racine de confiance définissable par l'utilisateur.
  • La racine de confiance paramétrable par l'utilisateur ne peut être définie que par l'utilisateur final. Il ne peut pas être réglé en usine ou à tout moment intermédiaire avant que l'utilisateur final ne reçoive l'appareil.
  • La racine de confiance paramétrable par l'utilisateur est stockée dans un stockage inviolable. L'inviolabilité 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 paramétrable 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 paramétrable par l'utilisateur.
  • Chaque fois que l'appareil démarre à l'aide de la racine de confiance définie 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, voir Appareils LOCKED avec jeu de clés personnalisé .

Une façon d'implémenter une racine de confiance paramétrable par l'utilisateur consiste à disposer d'une partition virtuelle qui ne peut être flashée ou effacée que lorsque le périphérique est à l'état UNLOCKED . Les appareils Google Pixel 2 utilisent cette approche et la partition virtuelle s'appelle avb_custom_key . Le format des données dans cette partition est le résultat de la commande avbtool extract_public_key . Voici un exemple de la manière de définir la racine de confiance paramétrable par l'utilisateur :

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

La racine de confiance paramétrable par l'utilisateur peut être effacée en émettant :

fastboot erase avb_custom_key