Signature d'application

La signature d'application permet aux développeurs d'identifier l'auteur de l'application et de mettre à jour leur application sans créer d'interfaces et d'autorisations compliquées. Chaque application est exécuté sur la plate - forme Android doit être signé par le développeur . Les applications qui tentent de s'installer sans être signées seront rejetées par Google Play ou le programme d'installation du package sur l'appareil Android.

Sur Google Play, la signature d'applications relie la confiance que Google a avec le développeur et la confiance que le développeur a envers son application. Les développeurs savent que leur application est fournie, sans modification, à l'appareil Android ; et les développeurs peuvent être tenus responsables du comportement de leur application.

Sur Android, la signature d'application est la première étape pour placer une application dans son bac à sable d'application. Le certificat d'application signé définit quel ID utilisateur est associé à quelle application ; différentes applications s'exécutent sous différents ID utilisateur. La signature d'application garantit qu'une application ne peut accéder à aucune autre application, sauf via un IPC bien défini.

Lorsqu'une application (fichier APK) est installée sur un appareil Android, le gestionnaire de packages vérifie que l'APK a été correctement signé avec le certificat inclus dans cet APK. Si le certificat (ou, plus précisément, la clé publique du certificat) correspond à la clé utilisée pour signer tout autre APK sur l'appareil, le nouveau APK a la possibilité de spécifier dans le manifeste qu'il partagera un UID avec l'autre de la même manière. -APK signés.

Les applications peuvent être signées par un tiers (OEM, opérateur, marché alternatif) ou auto-signées. Android fournit la signature de code à l'aide de certificats auto-signés que les développeurs peuvent générer sans assistance ou autorisation externe. Les demandes n'ont pas à être signées par une autorité centrale. Android n'effectue actuellement pas de vérification CA pour les certificats d'application.

Les applications sont également en mesure de déclarer des autorisations de sécurité au niveau de la protection Signature, limitant l'accès uniquement aux applications signées avec la même clé tout en conservant des UID et des bacs à sable d'application distincts. Une relation plus étroite avec une application Sandbox partagée est autorisée par la fonction UID partagé où deux ou plusieurs applications signées avec même clé de développeur peut déclarer un UID partagé dans leur manifeste.

Schémas de signature APK

Android prend en charge trois schémas de signature d'application :

Pour une compatibilité maximale, signez les applications avec tous les schémas, d'abord avec v1, puis v2, puis v3. Les appareils Android 7.0+ et plus récents installent les applications signées avec les schémas v2+ plus rapidement que ceux signés uniquement avec le schéma v1. Les anciennes plates-formes Android ignorent les signatures v2+ et ont donc besoin que les applications contiennent des signatures v1.

Signature JAR (schéma v1)

La signature d'APK fait partie d'Android depuis le début. Il est basé sur JAR signé . Pour plus de détails sur l' utilisation de ce système, consultez la documentation studio Android sur Signer votre application .

Les signatures v1 ne protègent pas certaines parties de l'APK, telles que les métadonnées ZIP. Le vérificateur APK doit traiter de nombreuses structures de données non fiables (pas encore vérifiées), puis supprimer les données non couvertes par les signatures. Cela offre une surface d'attaque importante. De plus, le vérificateur APK doit décompresser toutes les entrées compressées, ce qui consomme plus de temps et de mémoire. Pour résoudre ces problèmes, Android 7.0 a introduit APK Signature Scheme v2.

APK Signature Scheme v2 & v3 (schéma v2+)

Les appareils exécutant Android 7.0 et versions ultérieures prennent en charge le schéma de signature APK v2 (schéma v2) et versions ultérieures. (Le schéma v2 a été mis à jour vers v3 dans Android 9 pour inclure des informations supplémentaires dans le bloc de signature, mais fonctionne de la même manière.) Le contenu de l'APK est haché et signé, puis le bloc de signature APK résultant est inséré dans l'APK. Pour plus de détails sur l' application du régime v2 + à une application, voir APK Signature Scheme v2 .

Lors de la validation, le schéma v2+ traite le fichier APK comme un blob et effectue une vérification de signature sur l'ensemble du fichier. Toute modification de l'APK, y compris les modifications des métadonnées ZIP, invalide la signature de l'APK. Cette forme de vérification APK est nettement plus rapide et permet de détecter davantage de classes de modifications non autorisées.

Le nouveau format est rétrocompatible, de sorte que les APK signés avec le nouveau format de signature peuvent être installés sur des appareils Android plus anciens (qui ignorent simplement les données supplémentaires ajoutées à l'APK), tant que ces APK sont également signés v1.

Processus de vérification de la signature APK

Figure 1. APK processus de vérification de signature

Le hachage du fichier complet de l'APK est vérifié par rapport à la signature v2+ stockée dans le bloc de signature APK. Le hachage couvre tout sauf le bloc de signature APK, qui contient la signature v2+. Toute modification de l'APK en dehors de l'APK Signing Block invalide la signature v2+ de l'APK. Les APK avec une signature v2+ supprimée sont également rejetés, car leur signature v1 spécifie que l'APK a été signé v2, ce qui oblige Android 7.0 et les versions plus récentes à refuser de vérifier les APK à l'aide de leurs signatures v1.

Pour plus de détails sur le processus de vérification de la signature de l' APK, consultez la section vérification du APK Signature Scheme v2.