Le chiffrement (encryption) est le processus de conversion des données en une forme illisible sans une clé spéciale. Dans les applications mobiles, le chiffrement protège les données personnelles des utilisateurs, les informations de paiement et la logique métier contre l'interception et les fuites. Selon Statista (2024), le nombre de fuites de données provenant d'applications mobiles a augmenté de 38% en deux ans, et dans 72% des cas, la cause était l'absence ou une mauvaise utilisation du chiffrement. Les plateformes mobiles modernes fournissent des API intégrées pour le chiffrement, et leur utilisation est une norme de sécurité obligatoire. Statista, 2024
Points essentiels
Le chiffrement dans le contexte des applications mobiles est l'application d'algorithmes cryptographiques pour protéger les données stockées sur l'appareil (data at rest) et transmises sur le réseau (data in transit). Au niveau de l'appareil, le stockage local est chiffré : fichiers, bases de données, SharedPreferences et cache. Au niveau du réseau, le trafic entre l'application et le serveur est chiffré via les protocoles TLS/HTTPS. L'objectif ultime est de garantir que même avec un accès physique à l'appareil ou une interception du trafic, un attaquant ne puisse pas lire les données protégées sans la clé cryptographique.
Les appareils mobiles sont particulièrement vulnérables à la perte de données : un téléphone peut facilement être perdu, volé ou infecté par un logiciel malveillant. Selon le Ponemon Institute (2023), 42% des entreprises victimes de fuites de données attribuent les incidents aux appareils mobiles. Sans chiffrement, un attaquant peut se connecter à l'appareil via USB, extraire la base de données SQLite et lire toutes les données stockées. Le chiffrement résout ce problème : même si la base de données est extraite, son contenu reste chiffré. De plus, aux États-Unis et dans l'UE, des lois (GDPR, CCPA) exigent le chiffrement des données personnelles et imposent des amendes pouvant atteindre 4% du chiffre d'affaires annuel en cas de violation. L'utilisation du chiffrement n'est pas seulement une nécessité technique, mais aussi juridique pour toute application mobile traitant des données utilisateurs.
Tous les algorithmes de chiffrement se divisent en deux types principaux : symétriques (une clé pour chiffrer et déchiffrer) et asymétriques (une paire de clés — publique et privée). Le choix du type dépend du cas d'utilisation : pour chiffrer des données locales, on utilise souvent des algorithmes symétriques en raison de leur rapidité, et pour l'échange de clés et l'authentification, on utilise des algorithmes asymétriques.
| Caractéristique | Symétrique | Asymétrique |
|---|---|---|
| Nombre de clés | 1 (secrète) | 2 (publique + privée) |
| Vitesse | Élevée (1–10 Go/s) | Faible (1–10 Mo/s) |
| Distribution des clés | Problématique — la clé doit être transmise | Simple — la clé publique est publiée |
| Exemples | AES, ChaCha20 | RSA, ECDH, ECIES |
| Utilisation dans le développement mobile | Chiffrement des données locales | Échange de clés, signatures numériques |
En pratique, les applications mobiles utilisent le chiffrement hybride : avec un algorithme asymétrique (par exemple ECDH), les parties échangent une clé de session, et toutes les données suivantes sont chiffrées avec un algorithme symétrique (AES ou ChaCha20). Cette approche combine la rapidité du chiffrement symétrique avec la sécurité de l'échange asymétrique de clés. Cette méthode est à la base de TLS 1.3, du Signal Protocol et d'Apple iMessage.
Le développement mobile moderne utilise plusieurs algorithmes de chiffrement standardisés, chacun conçu pour des tâches spécifiques avec son propre domaine d'application.
Le chiffrement protège les données dans trois scénarios clés : perte de l'appareil (chiffrement du disque et des conteneurs d'application), interception du trafic (protocoles réseau TLS/HTTPS) et fuite depuis le serveur (chiffrement de bout en bout). Chaque scénario nécessite sa propre approche et ses propres outils.
Les données au repos — données sur l'appareil — sont chiffrées via Android Keystore et iOS Keychain. Sur Android à partir de la version 7.0, le chiffrement basé sur les fichiers (File-Based Encryption) est utilisé, et les applications peuvent chiffrer supplémentairement leurs données via EncryptedSharedPreferences et EncryptedFile de la bibliothèque AndroidX Security. Sur iOS, toutes les applications fonctionnent par défaut avec l'API Data Protection, qui chiffre les fichiers au niveau du système de fichiers avec une clé liée au code de l'appareil. Pour les données en transit, TLS 1.2/1.3 est utilisé avec Certificate Pinning obligatoire.
Le chiffrement de bout en bout (E2E) est le plus haut niveau de protection des données, où un message est chiffré sur l'appareil de l'expéditeur et déchiffré uniquement sur l'appareil du destinataire. Le serveur de stockage et de transmission n'a pas accès au contenu — il ne manipule que des blobs chiffrés. L'implémentation E2E la plus connue pour les applications mobiles est le Signal Protocol, qui utilise l'algorithme Double Ratchet en combinaison avec X3DH (Extended Triple Diffie-Hellman) pour l'échange initial de clés. Le Signal Protocol offre Perfect Forward Secrecy et future secrecy : la compromission d'une clé ne révèle pas les messages précédents ou suivants. Selon une étude de l'Université Carnegie Mellon (2023), le chiffrement E2E dans les applications de messagerie réduit le risque de fuite de communication de 99,7% par rapport au chiffrement TLS seul. L'utilisation de l'E2E est obligatoire pour les applications des catégories Health & Fitness et Finance selon les exigences du GDPR et de la HIPAA. Pour implémenter l'E2E dans votre propre projet, il est recommandé d'utiliser la bibliothèque Signal Protocol (Java/Swift) ou basée sur Olm (Matrix protocol). Lors du choix d'une solution E2E, évaluez la compatibilité avec la plateforme : le Signal Protocol nécessite la prise en charge de l'envoi asynchrone et du stockage de clés sur le client, ce qui complique les scénarios multi-appareils — pour de tels cas, le Matrix Protocol avec son modèle de salons peut être un meilleur choix.
Regardons un exemple de chiffrement et de déchiffrement de données sur Android utilisant Jetpack Security (AndroidX Security). La bibliothèque fournit EncryptedFile pour le chiffrement de fichiers et EncryptedSharedPreferences pour les paramètres.
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val encryptedFile = EncryptedFile.Builder(
context,
File(context.filesDir, "secret.dat"),
masterKey,
EncryptedFile.FileEncryptionScheme.AES256_GCM_HKDF_4KB
).build()
encryptedFile.openFileOutput(applicationContext).use { outputStream ->
outputStream.write("Sensitive user data".toByteArray(Charsets.UTF_8))
}
MasterKey est créé en utilisant AES256-GCM — le mode de chiffrement symétrique le plus sûr. La clé est stockée dans Android Keystore, isolé du processus principal : même si l'application est compromise, un attaquant ne peut pas extraire la clé. EncryptedFile utilise le schéma AES-256-GCM avec HKDF pour la dérivation de clé et une taille de page de 4 Ko, offrant un bon équilibre entre vitesse et sécurité. Pour lire les données, openFileInput est utilisé avec les mêmes paramètres : la bibliothèque déchiffre automatiquement les données à la lecture.
Sur iOS, des fonctionnalités similaires sont fournies via CryptoKit (Swift) utilisant AES.GCM ou ChaChaPoly. La clé est stockée dans le Secure Enclave via Keychain Services. Le principe est le même : les clés ne quittent jamais le stockage matériel sécurisé, et les données sont chiffrées avant d'être écrites sur le disque. Cette architecture est conforme aux recommandations OWASP MASVS (Mobile Application Security Verification Standard) de niveau L2 pour les applications traitant des données sensibles. Dans les projets réels, la combinaison d'EncryptedSharedPreferences pour les jetons et d'EncryptedFile pour les données utilisateur couvre 100% des scénarios de chiffrement local. De plus, pour travailler avec des clés reçues du serveur (par exemple, les clés de session ECDH), Android KeyStore est utilisé avec le paramètre purpose = KeyProperties.PURPOSE_ENCRYPT, qui garantit que la clé ne peut être utilisée que pour des opérations cryptographiques autorisées et n'est jamais exportée du stockage matériel vers la RAM en texte clair.
Questions fréquentes
AES-256 en mode GCM avec stockage de la clé dans le stockage matériel (Android Keystore / iOS Keychain) est considéré comme l'étalon-or. Pour le trafic réseau — TLS 1.3 avec la courbe elliptique Curve25519. ChaCha20-Poly1305 est utilisé comme alternative sur les appareils sans AES matériel.
AES est un algorithme symétrique (une clé), rapide, adapté au chiffrement de gros volumes de données. RSA est asymétrique (une paire de clés), lent, utilisé pour le chiffrement de clés et les signatures, pas pour les données. Dans les applications mobiles, AES chiffre les données, RSA protège les clés.
Il faut chiffrer les données confidentielles : jetons d'accès, mots de passe, informations personnelles, données de paiement, dossiers médicaux. Les données publiques (images, contenu) peuvent rester non chiffrées, mais il est préférable de les stocker dans un conteneur protégé de l'application.
Avec le chiffrement de bout en bout, les données sont chiffrées sur l'appareil de l'expéditeur avant l'envoi et déchiffrées uniquement sur l'appareil du destinataire. Le serveur ne voit que des données chiffrées. Le protocole Double Ratchet, implémenté dans le Signal Protocol, est le mécanisme E2E le plus courant dans les messageries mobiles.
Techniquement possible, mais déconseillé. Pour les données sur l'appareil, utilisez le chiffrement symétrique (AES-GCM) avec une clé du Keystore. Pour le réseau, utilisez TLS 1.3 avec un ensemble de clés séparé et Certificate Pinning. La séparation empêche la compromission des deux canaux en cas de fuite d'une clé.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi