Concept

XTEA

Résumé
vignette|Deux rounds du réseau de Feistel de l'algorithme XTEA En cryptographie, XTEA (eXtended TEA) est un algorithme de chiffrement conçu pour corriger les faiblesses de TEA. David Wheeler et Roger Needham, de l'université de Cambridge, ont conçu cet algorithme qui fut proposé dans un rapport technique non publié en 1997 (Needham and Wheeler, 1997). Il n'est soumis à aucun brevet. Tout comme TEA, XTEA est basé sur un réseau de Feistel de blocs de 64 bits, avec une clé de 128 bits en 64 tours recommandés. Plusieurs différences sont notables vis-à-vis de TEA, notamment un plan de génération de clés plus élaboré et un arrangement des décalages, XOR et additions. Parallèlement à XTEA, un algorithme de chiffrement par blocs de tailles variables, dénommé Block TEA, est présenté dans le même rapport ; il utilise la fonction par tour de XTEA mais s'applique cycliquement à tout le message lors de plusieurs itérations. Vu qu'il traite l'ensemble du message, Block TEA a la particularité de n'avoir pas besoin d'un mode d'opération. Une attaque sur cet algorithme est décrite par Markku-Juhani Saarinen dans un rapport de 1998 non publié ; il a aussi découvert une faiblesse dans XXTEA, le successeur de Block TEA. Jusqu'en 2004, la meilleure attaque sur XTEA est une cryptanalyse différentielle par clé apparentée sur 24 des 64 tours de XTEA, demandant 220.5 textes choisis et une complexité de 2115.15 (Ko et al, 2004). Ce code source standard en langage C — mis dans le domaine public par David Wheeler et Roger Needham — procède au chiffrement et au déchiffrement en utilisant XTEA : void encipher(unsigned int num_rounds, unsigned long* v, unsigned long* k) { unsigned long v0=v[0], v1=v[1], i; unsigned long sum=0, delta=0x9E3779B9; for(i=0; i>11 & 3]); } v[0]=v0; v[1]=v1; } void decipher(unsigned int num_rounds, unsigned long* v, unsigned long* k) { unsigned long v0=v[0], v1=v[1], i; unsigned long delta=0x9E3779B9, sum=delta*num_rounds; for(i=0; i>11 & 3]); sum -= delta; v0 -= ((v1 < 4 ^ v1 >> 5) + v1) ^ (sum + k[sum & 3]); } v[0]=v0; v[1]=v1; } Le code-source original possède des défauts de portabilité vers les plateformes non-32 bits.
À propos de ce résultat
Cette page est générée automatiquement et peut contenir des informations qui ne sont pas correctes, complètes, à jour ou pertinentes par rapport à votre recherche. Il en va de même pour toutes les autres pages de ce site. Veillez à vérifier les informations auprès des sources officielles de l'EPFL.