Le journal de transparence binaire Pixel utilise la technologie de journal de transparence.
L'utilité des journaux de transparence a été prouvée avec la transparence des certificats, un protocole Internet qui exige des autorités de certification qu'elles publient les certificats qu'elles émettent dans des journaux publics de transparence des certificats. Ce processus a considérablement réduit l'émission incorrecte de certificats, ce qui a permis d'améliorer la sécurité d'Internet. De nombreux opérateurs de journaux de transparence des certificats s'appuient sur une implémentation des journaux de transparence disponible sur transparency.dev.
Les journaux de transparence sont implémentés avec des arbres de Merkle. Cette page part du principe que vous avez une connaissance générale des arbres de Merkle et de la transparence binaire. Consultez Structures de données vérifiables pour obtenir une présentation des arbres de Merkle et la page de destination pour obtenir une présentation de la transparence binaire.
Implémentation des journaux
Le journal de transparence binaire Pixel est implémenté en tant qu'arbre de Merkle basé sur des tuiles. La racine du contenu de la carte est diffusée sur https://developers.google.com/android/binary_transparency/tile. Remarque : Il ne s'agit pas d'une page Web ordinaire. Les entrées de journal contenues dans ses sous-répertoires doivent être lues de manière programmatique avec la bibliothèque TLog Golang SumDB et non via un navigateur.
Pour obtenir une description du contenu des entrées, consultez Contenu des journaux.
Le hachage racine de l'arbre de Merkle d'un journal, contenu dans un point de contrôle, est disponible à l'adresse https://developers.google.com/android/binary_transparency/checkpoint.txt. Il est présenté au format de point de contrôle. Les feuilles de cet arbre de Merkle sont disponibles à l'adresse https://developers.google.com/android/binary_transparency/image_info.txt. La signature du point de contrôle peut être validée avec la clé publique suivante :
-----BEGIN CERTIFICATE-----
MIICPDCCAeOgAwIBAgIVAPooxISw/nFF/dPwmCUaV36Z4s3hMAoGCCqGSM49BAMCMHQxCzAJBgNV
BAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYD
VQQKEwtHb29nbGUgSW5jLjEQMA4GA1UECxMHQW5kcm9pZDEQMA4GA1UEAxMHQW5kcm9pZDAgFw0y
MTA3MTkyMjQxNDFaGA8yMDUxMDcxOTIyNDE0MVowdDELMAkGA1UEBhMCVVMxEzARBgNVBAgTCkNh
bGlmb3JuaWExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC0dvb2dsZSBJbmMuMRAw
DgYDVQQLEwdBbmRyb2lkMRAwDgYDVQQDEwdBbmRyb2lkMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcD
QgAEU83uXNUiTYE53c2TfdWmqpW20bBXy4KEf5Ff8dV8GLKlVAXKHyjw3Lp9J3E0yCRJ/39XKeuA
AMF7KzSvhD248KNQME4wDAYDVR0TBAUwAwEB/zAdBgNVHQ4EFgQUHRpvuNkzjtBY213BWgUyWWHm
3VYwHwYDVR0jBBgwFoAUHRpvuNkzjtBY213BWgUyWWHm3VYwCgYIKoZIzj0EAwIDRwAwRAIgZsZb
CNBXRkCKLS+LG/41VWj1cTszt9QCdJQNuy7aT94CIDPgn7v5b1ykBVUTuLgRSofxAzHg9R4dg1oA
7tTFAuDg
-----END CERTIFICATE-----
Le processus de validation lit le point de contrôle et les blocs contenant les entrées de journal à partir du journal.
Procédure de validation
Un journal de transparence est implémenté avec un arbre de Merkle constitué de hachages. Un nœud feuille contient des données, et un nœud parent contient le hachage de ses enfants.
Deux calculs sont effectués sur l'arbre de Merkle pour vérifier la propriété inviolable des journaux de transparence : la preuve d'inclusion et la preuve de cohérence. Le premier prouve que le journal inclut une entrée correspondant à une version d'image, c'est-à-dire que l'entrée de journal inclut le résumé VBMeta, un hachage qui représente les images de l'OS et qui peut être renvoyé par un appareil. Ce dernier prouve que lorsque de nouvelles entrées sont ajoutées à l'arborescence, le nouveau point de contrôle est cohérent avec la version précédente de l'arborescence.
Pour valider votre image Pixel, effectuez la preuve d'inclusion. L'exécution du calcul de la preuve de cohérence est facultative, car des tiers le font en permanence.
Si vous souhaitez vous familiariser avec les concepts de validation dans la transparence des binaires Pixel, vous pouvez suivre les instructions ci-dessous pour utiliser l'image exécutée sur votre appareil Pixel. Si vous souhaitez exécuter le micrologiciel Pixel avec le plus haut degré de confiance, consultez la procédure de validation sur Validation complète de la transparence des binaires Pixel.
Conditions préalables pour la validation
Avant de vérifier que l'artefact (firmware ou APK) est conforme à la réclamation, assurez-vous que les outils suivants sont disponibles sur un ordinateur connecté au réseau. Selon la cible de validation, vous n'aurez peut-être pas besoin de toutes ces informations.
Golang
L'outil de validation est écrit en Go. Pour le compiler, installez Go 1.24 ou version ultérieure à partir du site Go.
Android Debug Bridge (ADB)
ADB est un outil qui communique avec un appareil Android pour inspecter l'image ou extraire des APK. Il est disponible sur le site Web d'Android SDK Platform-Tools.
Outil de validation de la preuve d'inclusion
Le vérificateur de preuve d'inclusion est un module Go qui interroge le journal de transparence et indique si un artefact est inclus dans le journal.
Il est publié dans le dépôt GitHub android-binary-transparency à l'adresse https://github.com/android/android-binary-transparency/tree/main.
Pour cloner le dépôt avb de l'AOSP :
computer:~$ git clone https://android.googlesource.com/platform/external/avb
Pour cloner le dépôt GitHub android-binary-transparency :
computer:~$ git clone https://github.com/android/android-binary-transparency
AAPT2
AAPT2 (Android Asset Packaging Tool) est un outil de compilation utilisé pour compiler et empaqueter les ressources d'une application Android. Il est disponible en tant qu'outil autonome dans les outils de compilation du SDK Android version 26.0.2 et ultérieures.
bundletool
bundletool est un outil utilisé pour créer un Android App Bundle (AAB). Il peut également être utilisé pour valider les signatures de code APK.
Vous pouvez le télécharger sur GitHub.
wget ou curl
wget et curl sont des outils qui peuvent être utilisés pour récupérer ou télécharger des fichiers depuis Internet. Assurez-vous d'avoir installé l'un de ces outils, car les scripts de validation peuvent en dépendre.
Avbtool
avbtool est utilisé pour calculer le condensé VBMeta des images d'usine et vérifier les binaires.
Après avoir cloné le dépôt avb (comme indiqué dans la section sur le vérificateur de preuve d'inclusion), avbtool.py se trouve dans le répertoire avb cloné.
Vous devez ajouter ce répertoire à votre variable d'environnement $PATH.
computer:~$ PATH=$PATH:DIRECTORY_CONTAINING_AVBTOOL
Fbpacktool
fbpacktool est un script Python utilisé pour décompresser des composants individuels dans bootloader.img de Pixel.
Vous n'en avez pas besoin si vous validez des APK.
Cet outil est important, car il permet à avbtool.py de découvrir les images requises pour la validation.
Pour utiliser cet outil, vous devez télécharger les trois scripts Python suivants dans le répertoire où se trouve votre avbtool.py, rendre fbpacktool.py exécutable et créer un lien symbolique nommé fbpacktool vers fbpacktool.py pour plus de commodité.
Si vous avez wget :
computer:dir_to_avbtool$ wget https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpacktool.py \
https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpack.py \
https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/packedstruct.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool
Si vous avez curl :
computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpacktool.py
computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/fbpack.py
computer:dir_to_avbtool$ curl -O https://source.android.com/devices/bootloader/tools/pixel/fw_unpack/packedstruct.py
computer:dir_to_avbtool$ chmod +x fbpacktool.py
computer:dir_to_avbtool$ ln -s fbpacktool.py fbpacktool
OpenSSL
openssl permet d'effectuer diverses opérations cryptographiques à l'aide du terminal dans le workflow de validation. Assurez-vous qu'il est installé sur votre système. Vous pouvez vérifier dans votre terminal en exécutant la commande suivante et en vous assurant que le résultat renvoyé n'est pas vide :
computer:~$ which openssl
/usr/bin/openssl
Preuve d'inclusion
Un propriétaire de Pixel peut vérifier que son image figure dans le journal en extrayant d'abord les métadonnées pertinentes, puis en comparant le hachage racine recalculé avec le hachage racine contenu dans le point de contrôle publié. Si elles correspondent, le propriétaire du Pixel peut être assuré de bénéficier de certaines protections illustrées dans le modèle de menaces.
Pour vérifier que l'image d'un appareil Pixel figure dans le journal de transparence, connectez-vous à l'appareil avec adb, puis exécutez les commandes suivantes :
FINGERPRINT=$(adb shell getprop ro.build.fingerprint)
VBMETA_DIGEST=$(adb shell getprop ro.boot.vbmeta.digest)
LOG_ENTRY="${FINGERPRINT}\n${VBMETA_DIGEST}\n"
PAYLOAD_PATH="/tmp/log_payload.txt"
echo -e $LOG_ENTRY >> $PAYLOAD_PATH
cd avb/tools/transparency/verify/
go build cmd/verifier/verifier.go
./verifier --payload_path=$PAYLOAD_PATH
La première strophe récupère les métadonnées d'un appareil Pixel au format d'une entrée de journal et les enregistre dans /tmp/log_payload.txt.
La deuxième strophe exécute le validateur de preuve d'inclusion publié dans le dépôt Android Verified Boot. Cet outil calcule le hachage de l'entrée de journal candidate, récupère les autres hachages nécessaires pour recalculer le point de contrôle à partir du journal et le compare au point de contrôle publié par le journal.
Le résultat de la commande est écrit dans stdout :
OKsi l'image est incluse dans le journal.FAILUREdans le cas contraire.
Preuve de cohérence (facultatif)
Comme Google publie régulièrement de nouvelles versions de l'image d'usine Pixel, le journal de transparence ne cesse de s'allonger. Un témoin vérifie que l'arbre se développe de manière cohérente avec ses feuilles précédentes. Le témoin assure le suivi du hachage racine de l'arbre et calcule le prochain hachage racine candidat en demandant les nouveaux hachages de feuille à l'arbre. Pour qu'un journal de transparence soit inviolable, sa cohérence doit être vérifiée en permanence.
Le comportement en mode ajout seul du journal de transparence est activement vérifié par des tiers. La plupart des utilisateurs n'ont donc pas besoin de le faire eux-mêmes, mais il est possible pour quiconque de surveiller la cohérence du journal. Google a publié une implémentation Open Source d'un témoin dans ce dépôt GitHub. Il est nécessaire d'utiliser la configuration spécifique au journal Pixel Binary Transparency (PixelBT).