La signature d'application permet aux développeurs d'identifier l'auteur de l'application et de la mettre à jour sans créer d'interfaces et d'autorisations complexes. 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 sont rejetées par Google Play ou par l'installateur de paquets sur l'appareil Android.
Sur Google Play, la signature d'application fait le lien entre la confiance que Google entretient avec le développeur et celle que le développeur entretient avec son application. Les développeurs savent que leur application est fournie sur l'appareil Android sans être modifiée, et ils 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 l'ID utilisateur associé à chaque application. Différentes applications s'exécutent sous différents ID utilisateur. La signature d'application garantit qu'une application ne peut pas accéder à une autre application que 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 nouvel APK peut spécifier dans le fichier manifeste qu'il partage un UID avec les autres APK signés de la même manière.
Les applications peuvent être signées par un tiers (OEM, opérateur, marché alternatif) ou autosignées. Android fournit la signature de code à l'aide de certificats autosignés que les développeurs peuvent générer sans assistance ni autorisation externes. Les applications n'ont pas besoin d'être signées par une autorité centrale. Android n'effectue actuellement pas de validation de l'autorité de certification pour les certificats d'application.
Les applications peuvent également déclarer des autorisations de sécurité au niveau du niveau de protection de la signature, en limitant l'accès 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 un bac à sable d'application partagé est autorisée à l'aide de la fonctionnalité d'UID partagé, où deux applications ou plus signées avec la même clé de développeur peuvent déclarer un UID partagé dans leur fichier manifeste.
Schémas de signature d'APK
Android prend en charge trois schémas de signature d'application:
- Schéma v1: basé sur la signature JAR
- Schéma v2: APK Signature Scheme v2, introduit dans Android 7.0.
- Schéma v3: APK Signature Scheme v3, introduit dans Android 9.
Pour une compatibilité maximale, signez les applications avec tous les schémas, d'abord avec la version 1, puis la version 2, puis la version 3. Les appareils Android 7.0 et versions ultérieures installent les applications signées avec les schémas v2 et versions ultérieures plus rapidement que celles signées uniquement avec le schéma v1. Les anciennes plates-formes Android ignorent les signatures V2 et ultérieures. Les applications doivent donc contenir 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 fichier JAR signé. Pour en savoir plus sur l'utilisation de ce schéma, consultez la documentation 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 d'APK doit traiter de nombreuses structures de données non approuvées (non encore validées), puis supprimer les données non couvertes par les signatures. Cela offre une surface d'attaque de taille. De plus, l'outil de vérification d'APK doit décompresser toutes les entrées compressées, ce qui prend 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 et v3 (schéma v2+)
Les appareils équipés d'Android 7.0 ou version ultérieure sont compatibles avec le schéma de signature APK v2 (schéma v2) et versions ultérieures. (Le schéma v2 a été mis à jour vers la version 3 dans Android 9 pour inclure des informations supplémentaires dans le bloc de signature, mais il fonctionne de la même manière.) Le contenu de l'APK est haché et signé, puis le bloc de signature de l'APK résultant est inséré dans l'APK. Pour en savoir plus sur l'application du schéma v2 ou version ultérieure à une application, consultez la section APK Signature Scheme v2.
Lors de la validation, le schéma v2 et versions ultérieures traite le fichier APK comme un blob et effectue une vérification de signature sur l'ensemble du fichier. Toute modification apportée à l'APK, y compris les modifications des métadonnées ZIP, invalide la signature de l'APK. Cette forme de validation d'APK est beaucoup plus rapide et permet de détecter davantage de classes de modifications non autorisées.
Le nouveau format est rétrocompatible. Les APK signés avec le nouveau format de signature peuvent donc être installés sur les anciens appareils Android (qui ignorent simplement les données supplémentaires ajoutées à l'APK), à condition que ces APK soient également signés avec la version 1.
Le hachage complet de l'APK est vérifié par rapport à la signature v2+ stockée dans le bloc de signature des APK. Le hachage couvre tout, sauf le bloc de signature APK, qui contient la signature v2 ou ultérieure. Toute modification apportée à l'APK en dehors du bloc de signature de l'APK invalide la signature v2 ou ultérieure de l'APK. Les APK dont la signature v2 ou ultérieure a été supprimée sont également rejetés, car leur signature v1 spécifie que l'APK a été signé en version v2, ce qui fait qu'Android 7.0 et les versions ultérieures refusent de vérifier les APK à l'aide de leurs signatures v1.
Pour en savoir plus sur le processus de validation de la signature APK, consultez la section Validation d'APK Signature Scheme v2.