XXTEA

Da Wikipedia, l'enciclopedia libera.
Corrected Block TEA (XXTEA)
Algorithm diagram for XXTEA cipher.png
Un passaggio dell'XXTEA
Generale
Progettisti Roger Needham, David Wheeler
Prima pubblicazione 1998
Derivato da Block TEA
Dettagli
Dimensione chiave 128 bit
Dimensione blocco arbitraria, ma non meno di 64 bit
Struttura Rete di Feistel non bilanciata
Numero di passaggi dipendono dalla dimensione del blocco (da 6 a 32 cicli interi)

In crittografia il Corrected Block TEA (spesso abbreviato in XXTEA) è un cifrario a blocchi sviluppato per correggere le vulnerabilità riscontrate nel disegno del Block TEA, un algoritmo di cifratura erede del Tiny Encryption Algorithm che fu pubblicato per la prima volta insieme all'XTEA nel 1997[1].

L'algoritmo è stato presentato nel 1998 da David Wheeler e Roger Needham, del dipartimento informatico dell'Università di Cambridge[2]. Non è soggetto ad alcun brevetto.

Struttura[modifica | modifica wikitesto]

L'XXTEA, tecnicamente parlando, è un cifrario a blocchi basato su una rete di Feistel non bilanciata, dove le due metà in cui è diviso il blocco di dati su cui opera la funzione non sono delle stesse dimensioni. L'XXTEA lavora, infatti, su blocchi di dimensione variabile la cui lunghezza è minimo 64 bit e multipla di 32 bit. Il numero dei cicli completi dipende dalla dimensione del blocco, ma devono comunque essere compresi fra un minimo di 6 ed un massimo di 32 (quando si utilizzano blocchi di piccole dimensioni).

Il Block TEA, da cui deriva, applicava la funzione interna dell'XTEA ad ogni word del blocco, combinandola con la sua vicina del flusso di sinistra. Questo modo di operare comportava una bassa diffusione, una delle proprietà che un buon cifrario deve possedere: questa vulnerabilità fu subito utilizzata per proporre un metodo per violare il Block TEA[3].

Il Corrected Block TEA utilizza una funzione interna più curata che fa uso, per la processazione delle word del blocco, di entrambe quelle adiacenti.

Se la dimensione del blocco è identica alla dimensione del messaggio, l'XXTEA ha la proprietà di non richiedere l'impostazione di una modalità di funzionamento: l'algoritmo può essere applicato direttamente all'intero messaggio.

L'XXTEA risulta più efficiente dell'XTEA per operare su messaggi molto lunghi.

Codice di riferimento[modifica | modifica wikitesto]

Ecco una implementazione dell'XXTEA in linguaggio C, basata sull'originale pubblicata da David Wheeler e Roger Needham[4]:

  /* #define MX (z>>5^y<<2) + (y>>3^z<<4)^(sum^y) + (key[p&3^e]^z) */
  #define MX  ( (((z>>5)^(y<<2))+((y>>3)^(z<<4)))^((sum^y)+(key[(p&3)^e]^z)) )
 
  long btea(long* v, long length, long* key) {
    unsigned long z /* = v[length-1] */, y=v[0], sum=0, e, DELTA=0x9e3779b9;
    long p, q ;
    if (length > 1) {          /* Coding Part */
      z=v[length-1];           /* Moved z=v[length-1] to here, else segmentation fault in decode when length < 0 */
      q = 6 + 52/length;
      while (q-- > 0) {
        sum += DELTA;
        e = (sum >> 2) & 3;
        for (p=0; p<length-1; p++) y = v[p+1], z = v[p] += MX;
        y = v[0];
        z = v[length-1] += MX;
      }
      return 0 ; 
    } else if (length < -1) {  /* Decoding Part */
      length = -length;
      q = 6 + 52/length;
      sum = q*DELTA ;
      while (sum != 0) {
        e = (sum >> 2) & 3;
        for (p=length-1; p>0; p--) z = v[p-1], y = v[p] -= MX;
        z = v[length-1];
        y = v[0] -= MX;
        sum -= DELTA;
      }
      return 0;
    }
    return 1;
  }

Voci correlate[modifica | modifica wikitesto]

Note[modifica | modifica wikitesto]

  1. ^ Tinyness: An Overview of TEA and Related Ciphers (Matthew D. Russell)
  2. ^ Sito ufficiale del Computer Laboratory of Cambridge University
  3. ^ Youngdai Ko, Seokhie Hong, Wonil Lee, Sangjin Lee e Jongin Lim. "Related-key attack|Related key differential attacks on 26 rounds of XTEA and full rounds of GOST." In Proceedings of FSE '04 - Lecture Notes in Computer Science, 2004 (Springer Science+Business Media|Springer-Verlag)
  4. ^ Implementazione in C dell'XXTEA