XTEA

Da Wikipedia, l'enciclopedia libera.
Vai alla navigazione Vai alla ricerca
Extended TEA (XTEA)
Due passaggi della funzione Feistel (1 ciclo) nell'XTEA
Generale
ProgettistiRoger Needham, David Wheeler
Prima pubblicazione1997
Derivato daTEA
SuccessoriXXTEA
Dettagli
Dimensione chiave128 bits
Dimensione blocco64 bits
StrutturaRete di Feistel
Numero di passaggivariabili: raccomandati 64 passaggi della funzione Feistel (32 cicli)
Migliore crittanalisi
Nel 2004 è stato dimostrato che un attacco di crittanalisi differenziale correlato alla chiave può violare 26 dei 64 passaggi dell'XTEA con 220,5 testi in chiaro scelti ed un tempo di 2115,15.

In crittografia l'XTEA (eXtended TEA) è un cifrario a blocchi che fu presentato nel 1997 da David Wheeler e Roger Needham, del dipartimento informatico dell'Università di Cambridge,[1] per correggere le vulnerabilità scoperte nel loro algoritmo TEA. L'XTEA non è soggetto ad alcun brevetto.

La semplicità della sua struttura e la compattezza del codice rendono l'XTEA un'interessante scelta in molte situazioni dove si hanno vincoli estremi legati alle risorse, ad esempio nei vecchi sistemi hardware dove la quantità di memoria è spesso minima.

Struttura[modifica | modifica wikitesto]

Anche l'XTEA, come il TEA, è strutturato sulla funzione nota come rete di Feistel ed opera su blocchi di dati di 64 bit, chiavi di cifratura di 128 bit ed un numero consigliato di 64 passaggi. Le differenze più appariscenti rispetto al TEA sono un algoritmo di gestione della chiave più complesso ed un diverso ordine delle operazioni di XOR, addizione e spostamento dei bit.

Block TEA[modifica | modifica wikitesto]

Insieme all'XTEA, gli autori presentarono anche un'ulteriore variante dell'algoritmo originale denominata Block TEA, che utilizzava la stessa funzione interna dell'XTEA ma applicata ciclicamente sull'intero messaggio per diverse iterazioni. Dato che opera sull'intero messaggio, il BLock TEA ha la proprietà di non richiedere una modalità di funzionamento.

Nel 1998 Saarinen mostrò un attacco portato al Block TEA nella sua interezza, attacco che scovò anche una vulnerabilità nel successore del Block TEA, l'XXTEA.

Sicurezza[modifica | modifica wikitesto]

Il miglior attacco all'XTEA è stato descritto da Youngdai Ko ed altri autori che nel 2004 hanno mostrato come utilizzare la crittanalisi differenziale correlata alla chiave per violare 26 dei 64 passaggi dell'XTEA, attacco che richiede 220,5 testi in chiaro scelti ed un tempo di 2115,15.

Implementazioni[modifica | modifica wikitesto]

Quelle che seguono sono le funzioni di cifratura e decifratura dell'XTEA, rilasciate nel pubblico dominio dagli autori, scritte in linguaggio C:

#include <stdint.h>

/* riceve 64 bit di dati in v[0] e v[1] e una chiave a 128 bit in key[0]..key[3] */

void encipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4]) {
    unsigned int i;
    uint32_t v0=v[0], v1=v[1], sum=0, delta=0x9E3779B9;
    for (i=0; i < num_rounds; i++) {
        v0 += (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
        sum += delta;
        v1 += (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
    }
    v[0]=v0; v[1]=v1;
}

void decipher(unsigned int num_rounds, uint32_t v[2], uint32_t const key[4]) {
    unsigned int i;
    uint32_t v0=v[0], v1=v[1], delta=0x9E3779B9, sum=delta*num_rounds;
    for (i=0; i < num_rounds; i++) {
        v1 -= (((v0 << 4) ^ (v0 >> 5)) + v0) ^ (sum + key[(sum>>11) & 3]);
        sum -= delta;
        v0 -= (((v1 << 4) ^ (v1 >> 5)) + v1) ^ (sum + key[sum & 3]);
    }
    v[0]=v0; v[1]=v1;
}

Il codice è stato leggermente modificato per aggiornarlo all'evoluzione hardware ed ora funziona sui sistemi a 64 bit grazie all'uso del tipo uint32_t, fornito dalla libreria stdint.h. Sono state anche aggiunte nelle formule le parentesi tonde che nel sorgente originale erano state tolte per sfruttare le regole di precedenza del linguaggio. In Java va usato il tipo di dati 'int' e l'operatore >>> al posto di >>.

Il valore raccomandato per il parametro num_rounds è 32 e non 64, dato che per ogni iterazione il ciclo esegue 2 passaggi della rete di Feistel. Per incrementare la velocità si possono precalcolare i valori di sum+k[].


Note[modifica | modifica wikitesto]

Bibliografia[modifica | modifica wikitesto]

  • 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)
  • Seokhie Hong, Deukjo Hong, Youngdai Ko, Donghoon Chang, Wonil Lee e Sangjin Lee. "Differential cryptanalysis of TEA and XTEA." - Proceedings of ICISC 2003 (2003b)
  • Dukjae Moon, Kyungdeok Hwang, Wonil Lee, Sangjin Lee e Jongin Lim. "Impossible differential cryptanalysis of reduced round XTEA and TEA." - Lecture Notes in Computer Science, 2365: 49-60, 2002. ISSN 0302-9743.
  • Roger M. Needham and David J. Wheeler. "Tea extensions." Technical report, Computer Laboratory, University of Cambridge (1997) (PDF).

Voci correlate[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]