Tiny Encryption Algorithm
Due passaggi della funzione Feistel (1 ciclo) nel TEA
Generale
ProgettistiRoger Needham, David Wheeler
Prima pubblicazione1994
SuccessoriXTEA, XXTEA
Dettagli
Dimensione chiave128 bits
Dimensione blocco64 bits
StrutturaRete di Feistel
Numero di passaggivariabili: raccomandanti 64 passaggi della funzione Feistel (32 cicli)
Migliore crittanalisi
Il TEA soffre del problema delle chiavi equivalenti (Kelsey ed altri autori, 1996) e può essere violato utilizzando un attacco correlato alla chiave utilizzando 223 testi in chiaro scelti ed un tempo di 232.

In crittografia il Tiny Encryption Algorithm (TEA) è un cifrario a blocchi noto per la sua semplicità e facilità di implementazione (bastano in genere poche linee di codice). Fu ideato da David Wheeler e Roger Needham del dipartimento informatico dell'Università di Cambridge[1], e presentato per la prima volta nel 1994 al secondo Fast Software Encryption, tenutosi a Lovanio (Belgio)[2].

L'algoritmo non è soggetto ad alcun brevetto.

Proprietà

modifica

Il TEA opera su blocchi di 64 bit ed utilizza una chiave crittografica lunga 128 bit. Ha una struttura a rete di Feistel con 64 passaggi (suggeriti), in genere implementati a coppie denominate cicli. Ha una funzione di gestione della chiave molto semplice, che ne mescola tutti i bit nella stessa maniera ad ogni ciclo. Vengono inoltre utilizzati i multipli di una costante per rendere l'algoritmo resistente agli attacchi più semplici basati sulla simmetria dei passaggi. Questa costante, 2654435769 () è scelta per essere dove è la sezione aurea.

Il TEA ha alcune debolezze la più grave delle quali è legata alle chiavi equivalenti: ogni chiave è equivalente ad altre 3, il che significa che la lunghezza effettiva della chiave risulta essere di soli 126 bit[3]. Come conseguenza di ciò, il TEA non è assolutamente indicato come funzione crittografica di hash. Questa debolezza è stata usata per hackerare la console Microsoft Xbox, dove il cifrario era utilizzato come funzione di hash per il controllo del software di avvio[4]. Il TEA è anche suscettibile di un attacco correlato alla chiave, che richiede 223 testi in chiaro scelti con una coppia di chiavi correlate ed un tempo di 232[5].

L'inusuale minima dimensione del TEA lo renderebbe 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. D'altronde, la comprovata insicurezza dell'algoritmo suggerisce di utilizzare una delle varianti che sono state presentate per correggere le debolezze della sua struttura.

Versioni

modifica

La prima versione pubblica del TEA fu seguita da una seconda versione denominata XTEA, eXtended TEA, che incorporava alcune modifiche atte a rendere l'algoritmo più sicuro: a differenza dell'algoritmo originale, essa integra una funzione di gestione della chiave più complessa ed una diversa successione delle operazioni di spostamento dei bit (shift), XOR ed addizione. Insieme all'XTEA fu presentato anche il Block TEA, identico all'XTEA ma che itera sull'intero messaggio considerandolo un unico blocco.

Una terza versione, denominata Corrected Block TEA (noto come XXTEA), fu pubblicata nel 1998: deriva dall'XTEA ma si differenzia per la possibilità di utilizzare blocchi di dati di qualunque lunghezza.

Codice di riferimento

modifica

Quelle che seguono sono adattamenti in C delle routine di cifratura e decifratura del TEA, rilasciate nel pubblico dominio da David Wheeler e Roger Needham:

#include <stdint.h>

void encrypt (uint32_t* v, uint32_t* k) {
    uint32_t v0=v[0], v1=v[1], sum=0, i;           /* set up */
    uint32_t delta=0x9e3779b9;                     /* a key schedule constant */
    uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];   /* cache key */
    for (i=0; i < 32; i++) {                       /* basic cycle start */
        sum += delta;
        v0 += ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
        v1 += ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);  
    }                                              /* end cycle */
    v[0]=v0; v[1]=v1;
}

void decrypt (uint32_t* v, uint32_t* k) {
    uint32_t v0=v[0], v1=v[1], sum=0xC6EF3720, i;  /* set up ;sum == delta*32 */
    uint32_t delta=0x9e3779b9;                     /* a key schedule constant */
    uint32_t k0=k[0], k1=k[1], k2=k[2], k3=k[3];   /* cache key */
    for (i=0; i<32; i++) {                         /* basic cycle start */
        v1 -= ((v0<<4) + k2) ^ (v0 + sum) ^ ((v0>>5) + k3);
        v0 -= ((v1<<4) + k0) ^ (v1 + sum) ^ ((v1>>5) + k1);
        sum -= delta;                                   
    }                                              /* end cycle */
    v[0]=v0; v[1]=v1;
}

Da notare che l'implementazione standard è legata ad una specifica architettura di microprocessori, il che significa che le considerazioni sull'ordine dei byte sono importanti quando il testo cifrato è distribuito e processato su diversi sistemi. Il documento originale non specifica nessun dettaglio sull'architettura dei microprocessori perciò chiunque implementi un sistema che utilizza il TEA è tenuto a considerare in proprio quelle specifiche.

Note

modifica

Voci correlate

modifica
  • RC4 - Un cifrario a flusso che, come il TEA, è progettato per essere molto semplice da implementare.
  • XTEA - Il Block TEA, la prima versione modificata del TEA.
  • XXTEA - Il Corrected Block TEA, la seconda versione modificata del TEA.

Altri progetti

modifica

Collegamenti esterni

modifica

📚 Artikel Terkait di Wikipedia

Trusted Platform Module

(al tempo t 1 {\displaystyle t_{1}} ) con l'hash SHA1 (US Secure Hash Algorithm 1, RFC 3174) calcolato sul contenuto precedente dello stesso registro

Reddit

old defaults fell down a well?, su reddit blog, 7 maggio 2014. ^ reddit algorithm, su seomoz.org, 2 giugno 2008. ^ Sherilynn Macale, A rundown of Reddit’s

Domain Name System

Role of Wildcards in the Domain Name System (EN) RFC 4635, HMAC SHA TSIG Algorithm Identifiers (EN) RFC 4892, Requirements for a Mechanism Identifying a

Lista dei linguaggi di programmazione

BUGSYS BuildProfessional C C-- C++ - ISO/IEC 14882 C# - ISO/IEC 23270 C/AL Caché ObjectScript CAML CancerScript Cat Cayenne Cecil Cel Cesil Ceylon CFML Cg

Freenet

crittografia asimmetrica, in particolare sul sistema Digital Signature Algorithm (DSA). I documenti inseriti con questo tipo di chiave vengono firmati

Lista concatenata

presenza di riferimenti locali e cache dei dati. Le liste concatenate non ricevono quasi nessun beneficio da una cache. Un altro svantaggio delle liste

Profilazione (programmazione)

to find out how well their instruction scheduling or branch prediction algorithm is performing...» (italiano) «Gli strumenti di analisi dei programmi sono

Rete bayesiana

DOI:10.48550/arXiv.1304.2736. ^ (EN) Peter Spirtes e Clark Glymour, An Algorithm for Fast Recovery of Sparse Causal Graphs, in Social Science Computer