Aujourd'hui, nos appareils mobiles sont de véritables journaux intimes où nous stockons tout : des photos les plus personnelles aux informations de nos cartes bancaires. C'est pourquoi la sécurité ne peut être négligée. Pour protéger les données sensibles sur Android, le système Android Keystore est essentiel pour empêcher les personnes malveillantes de voler nos clés cryptographiques, ce qui en fait un pilier fondamental de la sécurité Android.
En résumé, ce système fonctionne comme un coffre-fort numérique. Au lieu de stocker les clés sous forme de simples fichiers texte dans la mémoire du téléphone (ce qui serait catastrophique pour la sécurité), il les verrouille dans un conteneur sécurisé . Mieux encore, une fois la clé stockée, vous pouvez l'utiliser pour chiffrer ou signer des documents, mais elle ne peut jamais être extraite de l'appareil, même si le système d'exploitation est compromis.
Comment la sécurité fonctionne-t-elle au cœur du système ?
Le Keystore est infaillible et protège les données clés de deux manières très claires. Premièrement, il empêche toute personne extérieure à l'appareil de voler ces données, car il bloque leur extraction par les processus applicatifs. Deuxièmement, il garantit que même si quelqu'un parvient à accéder au système, il ne pourra pas utiliser la clé à sa guise ; les applications doivent définir des utilisations autorisées que le système applique rigoureusement.
Pour une sécurité optimale, Android s'appuie sur le matériel. Les données sensibles ne transitent pas par les processus de l'application ; lors d'une opération, elles sont envoyées à un processus système spécialisé . De plus, sur les téléphones récents, les clés sont liées à l' environnement d'exécution de confiance (TEE) ou à l'élément sécurisé (SE). Avec un appareil équipé de StrongBox , la sécurité est renforcée : ce module possède son propre processeur, un stockage sécurisé et un véritable générateur de nombres aléatoires, le rendant résistant même aux attaques physiques.
Pour déterminer si une clé est réellement protégée par le matériel, les développeurs peuvent utiliser la fonction `getSecurityLevel()` sous Android 10 et versions ultérieures. Si le résultat est `TRUSTED_ENVIRONMENT` ou `STRONGBOX` , on peut être certain que la clé réside dans une zone isolée du processeur principal.
Contrôle d'accès et autorisations d'utilisation
L'un des principaux atouts de ce système est la possibilité d'attribuer des « règles » à chaque clé lors de sa création. Ces règles sont immuables ; une fois définies, elles ne peuvent plus être modifiées . Par exemple, vous pouvez limiter une clé à certains algorithmes , tels que AES ou RSA, ou définir une période de validité précise.
Mais le plus puissant, c'est le authentification des utilisateursVous pouvez configurer la clé pour qu'elle ne fonctionne que si l'utilisateur s'est récemment authentifié à l'aide de son code PIN, de son schéma ou de son identifiant. biométrie (empreinte digitale ou visage)), considérant que le Déverrouillage facial 2D vs 3D Il offre différents niveaux de protection. Il existe deux modes : l’un autorisant toutes les clés pendant une certaine durée après l’authentification, et l’autre, plus strict, où… chaque opération crypto doit être autorisé individuellement par le biais d'un BiometricPrompt.
Trousseau d'accès vs. Fournisseur de keystore Android
Il peut arriver que vous vous demandiez quelle option choisir. L' API KeyChain est la solution idéale lorsque vous avez besoin d'identifiants système. L'utilisateur choisit alors, via une interface système, les identifiants qu'il souhaite partager avec l'application. Cette solution est particulièrement utile pour les identifiants partagés entre plusieurs applications, avec le consentement explicite du propriétaire de l'appareil mobile.
En outre, le Fournisseur de clés Android Il est conçu pour que chaque application gère ses propres clés de manière privée. C'est l'option privilégiée lorsque vous souhaitez juste votre application accéder à leurs secrets sans que l'utilisateur ait besoin de sélectionner manuellement des clés dans une liste. Pour ce faire, des classes Java standard sont utilisées, telles que : KeyStore, KeyPairGenerator o KeyGenerator.
Mise en œuvre technique : Chiffrement et signatures

Pour le chiffrement symétrique des données, AES-GCM est la méthode la plus recommandée . Cette méthode garantit non seulement la confidentialité, mais aussi l'intégrité des données en détectant toute altération des octets chiffrés. Il est essentiel de se rappeler que chaque opération génère un vecteur d'initialisation (IV) unique qui doit être stocké avec les données chiffrées pour permettre le déchiffrement.
Si vous avez besoin d'une signature numérique, la solution idéale est d'utiliser RSA . Une paire de clés (publique et privée) est générée dans le magasin de clés. La clé privée est stockée dans un matériel sécurisé pour signer les informations , tandis que la clé publique peut être diffusée pour vérifier que le message n'a pas été altéré et qu'il provient bien de la source originale.
Architecture interne et évolution du système
Sous le capot, le système est une machine complexe. Magasin de clés Android Il s'agit de l'interface visible de l'application, mais elle communique avec le démon du magasin de clés via Binder. Ce démon gère le keyblobs (clés chiffrées) et repose sur HAL de KeyMint (anciennement Keymaster) pour effectuer des tâches de manutention lourde dans le monde de la sécurité.
Le chemin a été long : d’Android 6.0, qui a introduit le contrôle d’accès et les primitives AES/HMAC, en passant par Android 7.0 avec la certification des clés et la liaison de version (pour empêcher un attaquant de rétrograder le système d’exploitation vers une version vulnérable), jusqu’à Android 12. Dans cette dernière version, le démon a été réécrit en Rust pour gagner en sécurité et la couche d’abstraction matérielle (HAL) de KeyMint a été introduite, prenant en charge les accords de clés ECDH et les limites d’utilisation des clés.
Perspective médico-légale et risques d'extraction
Bien que le système de clés soit très robuste, en informatique légale, il existe des méthodes permettant d'en extraire les informations. Les clés sont stockées de manière chiffrée. /misc/keystore/ (ou dans une base de données SQLite depuis Android 12). Pour les protéger, une Clé de chiffrement (KEK) dérivé de valeurs fixes du matériel sécurisé.
Certains experts en criminalistique numérique tentent le déchiffrement hors ligne en extrayant les valeurs matérielles via des vulnérabilités spécifiques au processeur (comme MTK ou Qualcomm). S'ils parviennent à obtenir la KEK (Keystore Key), ils peuvent déchiffrer les clés du keystore et accéder ensuite aux bases de données chiffrées d'applications telles que Signal ou Element , qui utilisent généralement le keystore pour protéger la clé principale de leurs bases de données Realm.