Algoritm de criptare minusculă

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Algoritm de criptare minusculă
TEA InfoBox Diagram.png
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ă

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

linkuri externe