Google is committed to advancing racial equity for Black communities. See how.
Cette page a été traduite par l'API Cloud Translation.
Switch to English

Signature d'application

La signature d'applications 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 exécutée sur la plate-forme Android doit être signée par le développeur . Les applications qui tentent de s'installer sans être signées seront rejetées par Google Play ou par 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 avec leur application. Les développeurs savent que leur application est fournie, non modifiée, à l'appareil Android; et les développeurs peuvent être tenus responsables du comportement de leur application.

Sur Android, la signature d'applications 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 package 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 dans le certificat) correspond à la clé utilisée pour signer tout autre APK sur l'appareil, le nouvel APK a la possibilité de spécifier dans le manifeste qu'il partagera un UID avec l'autre de la même manière -signés APK.

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 ne doivent pas être signées par une autorité centrale. Android n'effectue actuellement pas de vérification de l'autorité de certification pour les certificats d'application.

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

Schémas de signature APK

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

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 un JAR signé . Pour plus d'informations sur l'utilisation de ce schéma, consultez la documentation d'Android Studio sur la signature de 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 le schéma de signature APK v2.

Schéma de signature APK v2 et 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 supérieur. (Le schéma v2 a été mis à jour vers la v3 dans Android 9 pour inclure des informations supplémentaires dans le bloc de signature, mais fonctionne autrement 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 schéma v2 + à une application, consultez Schéma de signature APK v2 .

Lors de la validation, le schéma v2 + traite le fichier APK comme un objet 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 des fichiers 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 les 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 de l'APK

Figure 1. Processus de vérification de la signature APK

Le hachage du fichier entier 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 du bloc de signature d'APK invalide la signature v2 + de l'APK. Les APK avec la signature v2 + supprimée sont également rejetés, car leur signature v1 spécifie que l'APK a été signé v2, ce qui fait qu'Android 7.0 et les versions plus récentes refusent 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 APK, consultez la section Vérification du schéma de signature APK v2.