close

Mały algorytm szyfrowania

Skocz do nawigacji Skocz do wyszukiwania
Mały algorytm szyfrowania
Herbata InfoBox Diagram.png
Dwa kroki funkcji Feistela (1 cykl) w TEA
Ogólny
ProjektanciRoger Needham , David Wheeler
Pierwsza publikacja1994
NastępcyXTEA , XXTEA
Detale
Rozmiar klucza128 bitów
Rozmiar bloku64 bity
StrukturaSieć Feistela
Liczba przejazdówzmienne: rekomendowanie 64 kroków funkcji Feistela (32 cykle)
Lepsza kryptoanaliza
TEA cierpi na równoważny problem z kluczami (Kelsey et al., 1996 ) i może zostać zhakowany przy użyciu ataku związanego z kluczem przy użyciu 2 23 wybranego tekstu jawnego i czasu 2 32 .

W kryptografii Tiny Encryption Algorithm (TEA) to szyfr blokowy znany z prostoty i łatwości implementacji (zwykle wystarczy kilka linijek kodu). Został on opracowany przez Davida Wheelera i Rogera Needhama z wydziału komputerowego Uniwersytetu Cambridge [1] i zaprezentowany po raz pierwszy w 1994 roku podczas drugiego Fast Software Encryption , które odbyło się w Leuven ( Belgia ) [2] .

Algorytm nie jest chroniony patentem .

Właściwości

TEA działa na blokach 64 - bitowych i używa 128-bitowego klucza kryptograficznego . Ma strukturę sieci Feistel z 64 krokami (sugerowane), zwykle realizowanymi w parach zwanych pętlami . Ma bardzo prostą funkcję zarządzania kluczami , która miesza wszystkie swoje bity w ten sam sposób w każdym cyklu. Ponadto stosuje się wielokrotności stałej, aby algorytm był odporny na prostsze ataki oparte na symetrii kroków. Ta stała , 2654435769 ( ) jest wybrana jako złoty podział .

TEA ma pewne słabości, z których najpoważniejsza związana jest z równoważnymi kluczami : każdy klucz jest równoważny trzem innym, co oznacza, że ​​efektywna długość klucza wynosi tylko 126 bitów [3] . W konsekwencji TEA w żadnym wypadku nie jest określana jako kryptograficzna funkcja skrótu . Ta słabość została wykorzystana do zhakowania konsoli Microsoft Xbox , gdzie szyfr był używany jako funkcja skrótu do kontrolowania oprogramowania rozruchowego [4] . TEA jest również podatny na atak związany z kluczem , który wymaga 2 23 tekstów jawnych wybranych za pomocą pary skorelowanych kluczy i czasu 2 32 [5] .

Nietypowy minimalny rozmiar TEA czyni go interesującym wyborem w wielu sytuacjach, w których występują ekstremalne ograniczenia związane z zasobami, na przykład w starych systemach sprzętowych, gdzie ilość pamięci jest często minimalna. Z drugiej strony udowodniona niepewność algorytmu sugeruje wykorzystanie jednego z przedstawionych wariantów do skorygowania słabości jego struktury.

Wersje

Po pierwszej publicznej wersji TEA pojawiła się druga wersja o nazwie XTEA , eXtended TEA , która zawierała pewne modyfikacje mające na celu zwiększenie bezpieczeństwa algorytmu: w przeciwieństwie do oryginalnego algorytmu integruje bardziej złożoną funkcję zarządzania kluczami i inną kolejność bitów operacje przesunięcia , XOR i dodawania. Wraz z XTEA została również zaprezentowana Block TEA , identyczna jak XTEA, ale która iteruje po całej wiadomości, uznając ją za pojedynczy blok.

Trzecia wersja, nazwana Corrected Block TEA (znana jako XXTEA ), została opublikowana w 1998 roku: wywodzi się z XTEA, ale różni się możliwością wykorzystania bloków danych o dowolnej długości.

Kod referencyjny

Poniżej przedstawiono adaptacje C procedur szyfrowania i deszyfrowania TEA , udostępnione do domeny publicznej przez Davida Wheelera i Rogera Needhama:

#include <stdint.h> 

nieważne szyfrowanie ( uint32_t * v , uint32_t * k ) {      
    uint32_t v0 = v [ 0 ], v1 = v [ 1 ], suma = 0 , ja ; / * organizować coś * /               
    delta uint32_t = 0x9e3779b9 ; / * kluczowa stała harmonogramu * /                      
    uint32_t k0 = k [ 0 ], k1 = k [ 1 ], k2 = k [ 2 ], k3 = k [ 3 ]; / * klucz pamięci podręcznej * /       
    for ( i = 0 ; i < 32 ; i ++ ) { / * początek cyklu podstawowego * /                             
        suma + = delta ;  
        v0 + = (( v1 << 4 ) + k0 ) ^ ( v1 + suma ) ^ (( v1 >> 5 ) + k1 );            
        v1 + = (( v0 << 4 ) + k2 ) ^ ( v0 + suma ) ^ (( v0 >> 5 ) + k3 ); } / * koniec cyklu * /              
                                                  
    v [ 0 ] = v0 ; v [ 1 ] = v1 ; 
}

nieważne odszyfrowanie ( uint32_t * v , uint32_t * k ) {      
    uint32_t v0 = v [ 0 ], v1 = v [ 1 ], suma = 0xC6EF3720 , ja ; / * konfiguracja; suma == delta * 32 * /      
    delta uint32_t = 0x9e3779b9 ; / * kluczowa stała harmonogramu * /                      
    uint32_t k0 = k [ 0 ], k1 = k [ 1 ], k2 = k [ 2 ], k3 = k [ 3 ]; / * klucz pamięci podręcznej * /       
    for ( i = 0 ; i < 32 ; i ++ ) { / * początek cyklu podstawowego * /                             
        v1 - = (( v0 << 4 ) + k2 ) ^ ( v0 + suma ) ^ (( v0 >> 5 ) + k3 );            
        v0 - = (( v1 << 4 ) + k0 ) ^ ( v1 + suma ) ^ (( v1 >> 5 ) + k1 );            
        suma - = delta ; } / * koniec cyklu * /                                     
                                                  
    v [ 0 ] = v0 ; v [ 1 ] = v1 ; 
}

Należy zauważyć, że standardowa implementacja jest powiązana z konkretną architekturą mikroprocesora , co oznacza, że ​​uwzględnienie kolejności bajtów jest ważne, gdy zaszyfrowany tekst jest dystrybuowany i przetwarzany w różnych systemach. Oryginalny dokument nie określa żadnych szczegółów dotyczących architektury mikroprocesorów, więc każdy, kto wdraża system wykorzystujący TEA, jest zobowiązany do samodzielnego rozważenia tych szczegółów.

Notatki

Powiązane pozycje

  • RC4szyfr strumieniowy, który podobnie jak TEA jest bardzo prosty w implementacji.
  • XTEA - The Block TEA, pierwsza zmodyfikowana wersja TEA.
  • XXTEA - The Corrected Block TEA, druga zmodyfikowana wersja TEA.

Inne odniesienia

Linki zewnętrzne