Algoritm de criptare minusculă
Algoritm de criptare minusculă | |
---|---|
Două etape ale funcției Feistel (1 ciclu) în TEA | |
General | |
Designeri | Roger Needham , David Wheeler |
Prima publicație | 1994 |
Succesori | XTEA , XXTEA |
Detalii | |
Dimensiunea cheii | 128 biți |
Dimensiunea blocului | 64 de biți |
Structura | Rețeaua Feistel |
Numărul de pase | variabile: recomandarea a 64 de pași ai funcției Feistel (32 de cicluri) |
Criptanaliză mai bună | |
TEA suferă de problema cheii echivalente (Kelsey și colab., 1996 ) și poate fi piratată folosind un atac legat de cheie folosind 2 23 text clar ales și un timp de 2 32 . | |
În criptografie, Tiny Encryption Algorithm (TEA) este un cifru bloc cunoscut pentru simplitatea și ușurința sa de implementare (de obicei, câteva linii de cod sunt suficiente). A fost conceput de David Wheeler și Roger Needham de la departamentul de calculatoare al Universității din Cambridge [1] și prezentat pentru prima dată în 1994 la cea de-a doua Fast Software Encryption , desfășurată la Leuven ( Belgia ) [2] .
Algoritmul nu este supus niciunui brevet .
Proprietate
TEA funcționează pe blocuri pe 64 de biți și folosește o cheie criptografică lungă pe 128 de biți. Are o structură de rețea Feistel cu 64 de pași (sugerată), implementată de obicei în perechi numite bucle . Are o funcție de gestionare a cheilor foarte simplă, care amestecă toți biții în același mod în fiecare ciclu. Multiplii unei constante sunt, de asemenea, folosiți pentru a face algoritmul rezistent la atacuri mai simple bazate pe simetria pașilor. Această constantă, 2654435769 ( ) este ales să fie unde este este secțiunea aurie .
TEA are unele puncte slabe, dintre care cel mai grav este legat de cheile echivalente : fiecare cheie este echivalentă cu alte 3, ceea ce înseamnă că lungimea efectivă a cheii este de doar 126 de biți [3] . Ca o consecință a acestui fapt, TEA nu este în niciun caz denumită funcție hash criptografică . Această slăbiciune a fost folosită pentru a pirata consola Microsoft Xbox , unde cifrul a fost folosit ca funcție hash pentru controlul software-ului de boot [4] . TEA este, de asemenea, susceptibil la un atac legat de cheie , care necesită 2 23 de texte simple alese cu o pereche de chei corelate și un timp de 2 32 [5] .
Dimensiunea minimă neobișnuită a TEA l-ar face o alegere interesantă în multe situații în care există constrângeri extreme legate de resurse, de exemplu în sistemele hardware vechi în care cantitatea de memorie este adesea minimă. Pe de altă parte, nesiguranța dovedită a algoritmului sugerează utilizarea uneia dintre variantele care au fost prezentate pentru a corecta punctele slabe ale structurii sale.
Versiuni
Prima versiune publică a TEA a fost urmată de o a doua versiune numită XTEA , eXtended TEA , care a încorporat unele modificări menite să facă algoritmul mai sigur: spre deosebire de algoritmul original, acesta integrează o funcție de gestionare a cheilor mai complexă și o succesiune diferită de biți Shift , XOR și operațiuni de adăugare. Împreună cu XTEA, a fost prezentat și Block TEA , identic cu XTEA, dar care repetă întregul mesaj considerându-l ca un singur bloc.
O a treia versiune, denumită Corect Block TEA (cunoscută sub numele de XXTEA ), a fost publicată în 1998 : derivă din XTEA, dar diferă prin posibilitatea utilizării blocurilor de date de orice lungime.
Cod de referinta
Următoarele sunt adaptările C ale rutinelor de criptare și decriptare TEA, lansate în domeniul public de David Wheeler și Roger Needham:
#include <stdint.h>
criptare nulă ( uint32_t * v , uint32_t * k ) {
uint32_t v0 = v [ 0 ], v1 = v [ 1 ], sum = 0 , i ; / * înființat * /
uint32_t delta = 0x9e3779b9 ; / * o constantă de programare cheie * /
uint32_t k0 = k [ 0 ], k1 = k [ 1 ], k2 = k [ 2 ], k3 = k [ 3 ]; / * cheie cache * /
for ( i = 0 ; i < 32 ; i ++ ) { / * start ciclu de bază * /
sum + = delta ;
v0 + = (( v1 << 4 ) + k0 ) ^ ( v1 + sumă ) ^ (( v1 >> 5 ) + k1 );
v1 + = (( v0 << 4 ) + k2 ) ^ ( v0 + sumă ) ^ (( v0 >> 5 ) + k3 );
} / * sfârșitul ciclului * /
v [ 0 ] = v0 ; v [ 1 ] = v1 ;
}
decriptare nulă ( 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 ; / * o constantă de programare cheie * /
uint32_t k0 = k [ 0 ], k1 = k [ 1 ], k2 = k [ 2 ], k3 = k [ 3 ]; / * cheie cache * /
for ( i = 0 ; i < 32 ; i ++ ) { / * start ciclu de bază * /
v1 - = (( v0 << 4 ) + k2 ) ^ ( v0 + sumă ) ^ (( v0 >> 5 ) + k3 );
v0 - = (( v1 << 4 ) + k0 ) ^ ( v1 + sumă ) ^ (( v1 >> 5 ) + k1 );
suma - = delta ;
} / * sfârșitul ciclului * /
v [ 0 ] = v0 ; v [ 1 ] = v1 ;
}
Rețineți că implementarea standard este legată de o arhitectură specifică a microprocesorului , ceea ce înseamnă că considerațiile privind ordinea octeților sunt importante atunci când textul cifrat este distribuit și procesat pe diferite sisteme. Documentul original nu specifică niciun detaliu cu privire la arhitectura microprocesoarelor, astfel încât oricui care implementează un sistem care utilizează TEA este obligat să ia în considerare aceste specificități.
Notă
- ^ Site-ul oficial al Laboratorului de Calculatoare al Universității Cambridge
- ^ TEA, un mic algoritm de criptare
- ^ Bruce Schneier și David Wagner: Criptanaliza programului cheie a IDEA, G-DES, GOST, SAFER și Triple-DES ( 1996 )
- ^ 17 Microsoft Mistakes Made in the Xbox Security System Arhivat 16 aprilie 2009 la Internet Archive .
- ^ Bruce Schneier și David Wagner: Criptanaliză cu chei conexe a 3-WAY, Biham-DES, CAST, DES-X NewDES, RC2 și TEA ( 1997 )
Elemente conexe
- RC4 - Un cod de flux care, la fel ca TEA, este conceput pentru a fi foarte simplu de implementat.
- XTEA - Block TEA, prima versiune modificată a TEA.
- XXTEA - Blocul corectat TEA, a doua versiune modificată a TEA.
Alte referințe
- O criptanaliză a TEA ( 2003 )
- O aplicație de algoritmi genetici pentru criptanaliza unui ciclu TEA ( 2002 )
linkuri externe
- O criptanaliză a algoritmului de criptare minusculă ( PDF ), pe cs.ua.edu .
- Noțiuni despre TEA și implementări în diferite limbi , la 143.53.36.235:8080 . Adus la 14 octombrie 2008 (arhivat din original la 12 iunie 2017) .
- Vectorii de testare pentru TEA , la cix.co.uk.
- Implementarea PHP a XTEA , la php-einfach.de .
- Implementarea JavaScript a TEA , la movable-type.co.uk .