Afin de vérifier la signature d'un fichier ROM ZIP sur un PC, deux choses sont nécessaires :
- La clé publique du créateur de la ROM (peut être extraite à partir de
/system/etc/security/otacerts.zip
si le créateur est le même, par exemple en cas de mise à jour d'une ROM stock).
- Un outil pour extraire le certificat du commentaire (pied de page) du fichier ZIP et vérifier sa clé de signature par rapport à la clé publique du développeur de la ROM.
Il existe de nombreux outils permettant d'effectuer la deuxième étape, dont celui qui suit. officiellement fourni par LineageOS :
update_verifier.py <pubkey> /path/to/zip_file
DÉTAILS
J'avais une vague idée que les fichiers ZIP des ROMs personnalisées contenaient le code standard de la ROM. Bloc de signatures JAR (ce qui est également le cas avec Schéma de signature APK v1 ). Ainsi, la norme jarsigner -verify
pourrait être utilisée pour vérifier l'intégrité d'un fichier JAR/ZIP auto-signé (qu'il n'a pas été altéré depuis sa création), mais pas l'authenticité de la source (qui nécessite le certificat racine, comme c'est le cas avec AVB).
Mais un examen plus approfondi du code source de TWRP indique qu'il utilise le même mécanisme de vérification des signatures utilisé dans la récupération de stock pour la vérification du fichier ZIP OTA (code source aquí ), c'est-à-dire la vérification de l'autorité du créateur du fichier ZIP à l'aide de clés publiques préconstruites stockées dans le fichier /res/keys/
. signapk.jar
est utilisé au moment de la compilation pour signer les deux APK ( apksigner est appelé) et les fichiers ZIP OTA. Le même outil ajoute le "signé par SignApk" que vous avez remarqué dans le fichier ZIP.
Ainsi, le /res/keys/
dans le répertoire de récupération doit contenir les clés publiques de tous les créateurs de ROM afin de vérifier leurs fichiers ZIP, ce qui ne semble pas pratique. La restauration d'origine ne contient que la ou les clés publiques de l'équipementier, tandis que la restauration personnalisée contient très probablement les clés de test du SDK officiel. Et c'est pourquoi nous sommes souvent confrontés à l'infâme "La vérification de la signature ZIP a échoué" pour les ROMs et autres fichiers ZIP flashables.
Sur les appareils non-A/B, le paquet OTA (s'il n'est pas téléchargé manuellement par l'utilisateur) est le suivant également vérifié avant de démarrer en mode de récupération. Dans ce cas, les clés préconstruites de otacerts.zip
sont utilisés pour la vérification (code source aquí ). Mais avec les mises à jour A/B, la récupération n'intervient pas du tout ( /res/keys/
n'existe plus depuis Android 10) et le paquet peut ne pas être vérifié même une fois (si l'on fait "mises à jour en continu" Pour plus de détails, voir cette réponse ).
En gardant ces points à l'esprit, le mécanisme de vérification utilisé dans la récupération ne semble pas avoir une grande importance. Afin de vérifier l'authenticité d'une ROM, le mieux serait de simplement faire une vérification de la somme de contrôle du fichier téléchargé si possible, comme LineageOS fournit des hachages SHA256 avec leurs fichiers ZIP téléchargeables.