AES (Advanced Encryption Standard) est un algorithme de chiffrement symétrique par blocs adopté en 2001 par l'Institut national des normes et de la technologie des États-Unis (NIST) comme norme officielle. AES a remplacé le DES obsolète et est depuis devenu l'algorithme de chiffrement le plus répandu au monde, utilisé des systèmes bancaires aux applications mobiles. Selon le NIST (2023), AES offre une sécurité équivalente à 2^256 opérations pour une clé de 256 bits, le rendant invulnérable aux attaques modernes par force brute. NIST FIPS 197, 2023
Points clés
AES (Advanced Encryption Standard) est un chiffrement symétrique par blocs développé par les cryptographes belges Joan Daemen et Vincent Rijmen sous le nom Rijndael. En 2001, le NIST a sélectionné Rijndael comme gagnant du concours pour un nouveau standard de chiffrement américain après cinq ans de tests publics et d'analyse. AES fonctionne avec des blocs de données de taille fixe (128 bits) et prend en charge trois longueurs de clé : 128, 192 et 256 bits. Le nombre de rondes de transformation dépend de la longueur de la clé : 10 rondes pour 128 bits, 12 pour 192 bits et 14 pour 256 bits. Chaque ronde comprend quatre opérations : SubBytes (substitution non linéaire d'octets via S-box), ShiftRows (décalage cyclique de lignes), MixColumns (mélange de colonnes) et AddRoundKey (XOR avec la clé de ronde).
Le développement d'AES a commencé en 1997 lorsque le NIST a annoncé un concours pour remplacer DES, dont la clé de 56 bits a été cassée en 22 heures en 1998 sur le dispositif spécialisé Deep Crack. Quinze algorithmes de différents pays ont participé, dont Serpent (Royaume-Uni), Twofish (États-Unis) et RC6 (États-Unis). Pour la finale de 1999, il restait 5 candidats. Rijndael a gagné grâce à sa combinaison de haute vitesse sur toutes les plateformes (des microcontrôleurs 8 bits aux serveurs 64 bits), de résistance à la cryptanalyse et d'implémentation compacte en matériel. Depuis 2006, AES est utilisé pour chiffrer les données classifiées SECRET et TOP SECRET dans les systèmes gouvernementaux américains. Aujourd'hui, AES est intégré dans tous les protocoles majeurs : TLS 1.2/1.3, IPsec, SSH, Wi-Fi WPA2/WPA3 et Bluetooth BR/EDR.
AES traite les données par blocs de 128 bits (16 octets), organisés en une matrice 4x4 octets appelée state. Chaque ronde de chiffrement effectue une séquence de transformations déterministes qui créent collectivement un effet d'avalanche : modifier un bit des données d'entrée modifie environ 50 % des bits de sortie. Cet effet rend AES résistant à la cryptanalyse différentielle et linéaire — les principales méthodes pour casser les chiffrements par blocs.
Le processus commence par AddRoundKey — XOR de la clé initiale avec le state. Ensuite, les rondes sont exécutées : SubBytes remplace chaque octet du state par une valeur de la S-box (table de substitution). ShiftRows décale cycliquement la deuxième ligne d'1 position, la troisième de 2, la quatrième de 3 — assurant le mélange entre les colonnes. MixColumns multiplie chaque colonne du state par une matrice fixe dans le corps de Galois GF(2^8), créant une dépendance de chaque octet de sortie sur les quatre octets d'entrée de la colonne. AddRoundKey applique un XOR avec la clé de ronde suivante, dérivée de la clé originale via Key Expansion. La dernière ronde omet MixColumns. Le déchiffrement utilise les opérations inverses InvSubBytes, InvShiftRows, InvMixColumns et AddRoundKey dans l'ordre inverse. Pour les développeurs mobiles, il n'est pas nécessaire de comprendre la structure interne d'AES — il suffit de savoir comment appeler correctement les API intégrées de la plateforme avec les paramètres appropriés.
La caractéristique clé d'AES qui assure sa force cryptographique est l'effet d'avalanche. Modifier un bit dans le texte clair ou la clé entraîne la modification d'environ 50 % des bits du texte chiffré, rendant AES extrêmement résistant à la cryptanalyse différentielle et linéaire. La combinaison de SubBytes (non-linéarité via S-box) et MixColumns (diffusion via multiplication dans le corps de Galois) crée une complexité mathématique telle que même la connaissance d'une partie du texte chiffré ne permet pas de récupérer la clé plus rapidement que par force brute. Selon l'analyse du NIST (2018), la meilleure attaque connue sur AES-128 — l'attaque biclique — réduit la longueur effective de la clé de seulement 2 bits (à 126,2 bits), sans donner d'avantage pratique à l'attaquant. Pour AES-256, il n'existe aucune attaque pratiquement réalisable dépassant la force brute.
AES prend en charge trois tailles de clé, chacune correspondant à un niveau spécifique de force cryptographique. Le choix de la taille de la clé affecte la sécurité, les performances et les exigences en ressources de l'appareil.
| Taille de clé | Nombre de rondes | Niveau de sécurité | Application |
|---|---|---|---|
| AES-128 | 10 | 128 bits | Applications commerciales, TLS |
| AES-192 | 12 | 192 bits | Systèmes gouvernementaux (SECRET) |
| AES-256 | 14 | 256 bits | TOP SECRET, secteur financier |
Règle pratique : pour les applications mobiles, utilisez AES-256 par défaut. La différence de performance entre AES-128 et AES-256 sur les appareils modernes avec prise en charge AES-NI ne dépasse pas 10 à 15 %, mais le niveau de sécurité double. Selon l'analyse quantique (Grassl et al., 2016), casser AES-128 nécessiterait 2^77 opérations quantiques via l'algorithme de Grover, tandis qu'AES-256 en nécessiterait 2^149, rendant AES-256 résistant aux attaques quantiques pour les 20 à 30 prochaines années. Même AES-128 offre une protection suffisante pour la grande majorité des scénarios commerciaux : la force brute d'une clé de 128 bits nécessiterait plus d'énergie que n'en contient l'univers selon l'estimation de Bruce Schneier. Cependant, les normes de sécurité (GDPR, HIPAA, PCI DSS) exigent souvent explicitement AES-256, donc les projets de production doivent utiliser la longueur maximale de clé.
AES en tant que chiffrement par blocs chiffre des blocs de taille fixe (128 bits). Pour chiffrer des données de longueur arbitraire, des modes de fonctionnement sont utilisés. La sélection du mode affecte de manière critique la sécurité : le mauvais mode peut annuler la force d'AES.
Pour les projets mobiles, utilisez AES-256-GCM avec un nonce de 12 octets. GCM résout deux problèmes simultanément : le chiffrement des données et l'authentification, empêchant les attaques par oracle de padding et par texte chiffré choisi. Android Keystore et iOS CryptoKit prennent en charge AES-GCM nativement sans nécessiter de primitives cryptographiques supplémentaires. Lorsque vous travaillez avec GCM, il est critique de ne jamais réutiliser le nonce avec la même clé — cela détruit complètement la sécurité du chiffrement. Générez un nouveau nonce aléatoire pour chaque chiffrement et stockez-le avec le texte chiffré.
Examinons un exemple d'implémentation sécurisée d'AES-256-GCM sur Android avec Jetpack Security. Le code ci-dessous montre le cycle complet : création d'une clé AES-256 via MasterKey, chiffrement et déchiffrement d'une chaîne avec des données authentifiées supplémentaires (AAD).
import androidx.security.crypto.MasterKey
import androidx.security.crypto.EncryptedSharedPreferences
val masterKey = MasterKey.Builder(context)
.setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
.build()
val securePrefs = EncryptedSharedPreferences.create(
context,
"secure_prefs",
masterKey,
EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM
)
fun storeSecureData(key: String, value: String) {
securePrefs.edit().putString(key, value).apply()
}
fun readSecureData(key: String): String? {
return securePrefs.getString(key, null)
}
La caractéristique clé de cette solution est qu'AES-256-GCM est utilisé à deux niveaux : pour chiffrer les paires clé-valeur (PrefValueEncryptionScheme) et pour protéger les noms des clés eux-mêmes (PrefKeyEncryptionScheme utilise AES-256-SIV, résistant à la réutilisation du nonce). MasterKey est généré en utilisant l'algorithme AES-256-GCM et stocké dans Android Keystore, protégé matériellement sur les appareils dotés d'un Trusted Execution Environment. Sur les appareils sans support matériel (TEE), la clé est chiffrée via Bouncy Castle, ce qui reste plus sûr que le stockage dans SharedPreferences.
Pour le chiffrement direct de gros volumes de données (par exemple, des images ou des fichiers), utilisez AES-256-GCM via EncryptedFile d'AndroidX Security. Pour l'exportation de clés (par exemple, pour sauvegarde), utilisez un chiffrement supplémentaire avec un mot de passe utilisateur via PBKDF2 avec 100000+ itérations.
Sur iOS, les opérations AES sont organisées via le framework CryptoKit (Swift 5.0+). Une clé AES-256 est créée via SymmetricKey(size: .bits256) et stockée dans le Secure Enclave — un cryptoprocesseur matériel isolé du CPU principal et du système d'exploitation. CryptoKit fournit deux implémentations d'AES : AES.GCM (recommandé) et AES.CBC (pour la rétrocompatibilité avec les formats hérités). Le chiffrement est effectué via la méthode seal(), qui prend les données, la clé et le nonce (12 octets), et retourne AES.GCM.SealedBox — une structure contenant le texte chiffré et le tag d'authentification. Le déchiffrement se fait via open(). Apple recommande fortement de ne pas utiliser CommonCrypto directement : CryptoKit sélectionne automatiquement les paramètres optimaux, protège contre les attaques par canal auxiliaire et utilise l'accélération matérielle AES-NI sur les processeurs Apple Silicon. Sur les appareils avec Secure Enclave, les clés ne quittent jamais le module matériel, empêchant le vol même en cas de compromission totale de l'application. Pour la sérialisation de la clé, utilisez la méthode withUnsafeBytes suivie d'un stockage dans Keychain via SecItemAdd avec l'attribut kSecAttrAccessible = kSecAttrAccessibleWhenUnlockedThisDeviceOnly.
Questions fréquentes
AES est un algorithme qui convertit des données lisibles en un ensemble d'octets illisibles à l'aide d'une clé secrète. La même clé est nécessaire pour ramener les données à leur forme originale. AES est si fiable qu'il est utilisé pour chiffrer les documents secrets du gouvernement américain.
AES-128 utilise une clé de 128 bits et effectue 10 rondes de chiffrement. AES-256 utilise une clé de 256 bits et 14 rondes, le rendant 2^128 fois plus difficile à casser. Pour les applications mobiles, AES-256 est recommandé en raison de la différence de performance minimale.
AES-256-GCM est le mode le plus sûr et recommandé. GCM offre un chiffrement authentifié (chiffrement + vérification d'intégrité). Le mode ECB est interdit, CBC nécessite un MAC séparé. GCM est le standard de facto pour les applications mobiles.
Théoriquement, AES peut être cassé par force brute, mais pour AES-256, cela nécessiterait 2^256 tentatives — plus que le nombre d'atomes dans l'univers observable. Aucune attaque pratique sur AES-256 n'existe. Les attaques par canal auxiliaire (Spectre, Meltdown) ne cassent pas AES mais volent les clés de la mémoire, donc le stockage matériel des clés est critique.
Utilisez la bibliothèque AndroidX Security : MasterKey.Builder avec KeyScheme.AES256_GCM crée une clé protégée dans Android Keystore, et EncryptedSharedPreferences chiffre automatiquement toutes les données via AES-256-GCM. Pas de cryptographie manuelle — l'API est sécurisée par défaut, sans risque d'erreurs du développeur.
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