Chiffrement/Déchiffrement TEA/XTEA/XXTEA
Famille Tiny Encryption Algorithm - Chiffres par blocs symétriques légers
Avis de sécurité
TEA/XTEA/XXTEA sont des chiffres légers principalement utilisés dans les systèmes embarqués et les jeux. Pour les applications à haute sécurité, veuillez utiliser AES à la place.
À propos de la famille TEA
TEA (Tiny Encryption Algorithm) a été conçu par David Wheeler et Roger Needham au Computer Laboratory de l'Université de Cambridge en 1994. Sa caractéristique essentielle est la simplicité radicale : la boucle de chiffrement entière tient en moins de 10 lignes de C, tout en atteignant la sécurité d'un chiffrement par blocs de 64 bits grâce à 32 doubles-tours de type Feistel. La constante magique δ = 0x9E3779B9 (approximativement φ × 2³², le nombre d'or × 2³²) est ajoutée à la somme courante à chaque tour pour éviter les points fixes de clés faibles.
La famille TEA a évolué spécifiquement pour corriger les faiblesses découvertes : XTEA (1997) a remédié aux attaques à clés liées de TEA en repensant l'ordonnancement des clés pour permuter différemment les quatre mots de 32 bits à chaque tour. XXTEA (1998) a étendu la conception aux blocs de longueur variable via une technique de mélange Feistel sur l'ensemble du message. Les trois variantes partagent la même taille de clé de 128 bits et la structure de constante de tour basée sur δ, mais diffèrent considérablement en propriétés de sécurité et en flexibilité de taille de bloc.
Comparaison des algorithmes
| Algorithme | Taille du bloc | Longueur de clé | Tours | Sécurité |
|---|---|---|---|---|
| TEA | 64 bits | 128 bits | 64 | Héritage |
| XTEA | 64 bits | 128 bits | 64 | Bon |
| XXTEA | Variable (≥64 bits) | 128 bits | Variable (6+52/n) | Bon |
Caractéristiques principales
- Boucle noyau TEA : 7 lignes de C seulement — le chiffrement par blocs le plus compact adapté à la production
- Clé de 128 bits divisée en quatre mots de 32 bits ; chaque tour utilise une permutation différente de sous-clé (XTEA/XXTEA)
- 32 doubles-tours (64 opérations en un seul tour) utilisant δ = 0x9E3779B9 comme constante de tour
- XXTEA supporte des blocs de longueur variable — avantage clé pour chiffrer des données de taille arbitraire sans bourrage
Modes de chiffrement (TEA/XTEA uniquement)
- CBC: Cipher Block Chaining — chaque bloc TEA/XTEA de 64 bits est XORé avec le bloc de chiffrement précédent avant les 32 doubles-tours. L'IV de 64 bits chaîne les blocs ; des charges utiles identiques à des positions différentes produisent un chiffrement différent.
- ECB: Electronic Codebook — chaque bloc de 64 bits est traité indépendamment par les 32 doubles-tours avec la même clé. Deux blocs identiques de texte en clair produisent toujours un chiffrement identique, révélant la structure des données. Déconseillé sauf pour un seul bloc.
- CFB: Cipher Feedback — TEA/XTEA joue le rôle de générateur de flux de clé ; le chiffrement précédent est traité par TEA/XTEA puis XORé avec le prochain segment de texte en clair. Transforme le chiffrement par blocs 64 bits en chiffrement par flux à granularité octet, utile pour des flux de données de jeu de longueur variable.
- OFB: Output Feedback — le flux de clé est produit en itérant le chiffrement TEA/XTEA sur l'IV, indépendamment du texte en clair. La non-propagation des erreurs signifie qu'un octet corrompu n'affecte qu'un octet de texte en clair récupéré — adapté à la télémétrie embarquée où les erreurs binaires doivent rester confinées.
- RAW: Bloc brut - Chiffrement direct d'un seul bloc sans mode de chaînage. Pas d'IV requis.
Considérations de sécurité
- TEA original : David Wagner (1997) a démontré des attaques à clés liées ; évitez TEA si l'attaquant peut choisir des clés liées — utilisez XTEA ou XXTEA pour toute nouvelle implémentation
- XTEA corrige la vulnérabilité aux clés liées de TEA, mais la taille de bloc de 64 bits plafonne toujours la sécurité à 2³² blocs (~32 Go) par clé avant que les collisions liées au problème des anniversaires deviennent probables
- Le mélange sur l'ensemble du message de XXTEA nécessite au moins 2 passes ; pour de très petits blocs (≤ 2 mots), le nombre réduit d'étapes de mélange affaiblit la sécurité — parez les données courtes à au moins 3 mots
- Les trois variantes TEA sont inadaptées aux nouvelles applications générales ; pour les systèmes embarqués modernes, préférez ChaCha20 ou AES-128-CTR — réservez la famille TEA à la compatibilité avec des formats hérités ou à des environnements extrêmement contraints où la taille du code est la contrainte principale
Cas d'utilisation courants
- Protection des sauvegardes de jeu Xbox et Xbox 360 : la Xbox originale de Microsoft utilisait XTEA en interne pour signer et vérifier les données de sauvegarde de la console, empêchant toute falsification via les cartes mémoire
- Messagerie instantanée QQ : le protocole QQ initial de Tencent utilisait une variante XTEA modifiée pour chiffrer les données de session entre clients et serveurs, documentée dans des projets open source de rétro-ingénierie du protocole QQ
- Chiffrement des actifs de jeu Cocos2d-x et Unity : la famille TEA est populaire dans les moteurs de jeu pour obscurcir les fichiers de ressources (textures, audio, scripts) en raison de son empreinte de code minuscule dans les versions mobiles allégées
- Implémentations sur microcontrôleurs et FPGA où la ROM est mesurée en kilo-octets : la boucle noyau de 7 lignes de TEA compile en moins de 100 octets de code machine ARM Thumb-2, la rendant viable sur des MCU à mémoire Flash très limitée
Références
Outils Connexes
Cryptage/Décryptage AES
Crypter et décrypter du texte en toute sécurité à l'aide de l'algorithme AES
Chiffrement/Déchiffrement Blowfish
Chiffrement par blocs symétrique rapide conçu par Bruce Schneier, avec longueur de clé variable (32-448 bits)
Chiffrement/Déchiffrement DES/3DES
Chiffrer et déchiffrer avec les algorithmes DES et 3DES, plusieurs modes et options de remplissage