CEAI

CEAI
Creator David Wheeler și Roger Needham
Creată 1994 _
publicat 1994 _
Dimensiunea cheii 128 de biți
Dimensiunea blocului pe 64 de biți
Numărul de runde 64 (32 de cicluri)
Tip de Rețeaua Feistel

În criptografie , Tiny Encryption Algorithm (TEA) [1]  este un algoritm de criptare în bloc de tip Feistel Network . Algoritmul a fost dezvoltat la Departamentul de Informatică al Universității din Cambridge de David Wheeler ( David Wheeler ) și Roger Needham ( Roger Needham ) și a fost prezentat pentru prima dată în 1994 [2] la un simpozion despre algoritmii de criptare rapidă din Leuven ( Belgia ).

Cifrul este neproprietar , utilizat pe scară largă într-o serie de aplicații criptografice și într-o mare varietate de hardware datorită cerințelor sale extrem de scăzute de memorie și ușurinței de implementare. Algoritmul are atât o implementare software în diferite limbaje de programare, cât și o implementare hardware pe circuite integrate de tip FPGA .

Proprietăți

Algoritmul de criptare TEA [1] se bazează pe operații pe biți cu un bloc de 64 de biți , are o cheie de criptare de 128 de biți . Numărul standard de runde de rețea Feistel este de 64 (32 de runde), totuși, pentru a obține cea mai bună performanță sau criptare, numărul de runde poate fi variat de la 8 (16 runde) la 64 (128 de runde). Rețeaua Feistel este asimetrică datorită utilizării adăugării modulo 2 32 ca operație de suprapunere .

Avantajele cifrului sunt ușurința de implementare, dimensiunea mică a codului și viteza de execuție destul de mare, precum și posibilitatea de optimizare a execuției pe procesoare standard pe 32 de biți, deoarece operațiunile principale sunt exclusiv „OR” (XOR) , deplasare pe biți. şi adăugarea prin modulul 2 32 . Deoarece algoritmul nu folosește tabele de căutare și funcția de rotunjire este destul de simplă, algoritmul are nevoie de cel puțin 16 cicluri (32 de runde) pentru a obține o difuzie eficientă, deși difuzia completă se realizează în 6 cicluri (12 runde). [unu]

Algoritmul are o rezistență excelentă la criptoanaliza liniară și o rezistență destul de bună la criptoanaliza diferențială . Principalul dezavantaj al acestui algoritm de criptare este vulnerabilitatea lui la atacurile legate de chei .  Datorită programării simple a tastelor, fiecare tastă are 3 taste echivalente. Aceasta înseamnă că lungimea efectivă a cheii este de numai 126 de biți [3] [4] , deci acest algoritm nu trebuie utilizat ca funcție hash .

Descrierea algoritmului

Textul sursă este împărțit în blocuri de 64 de biți fiecare. Cheia de 128 de biți K este împărțită în patru subchei de 32 de biți K[0], K[1], K[2] și K[3]. Acest lucru completează procesul pregătitor, după care fiecare bloc de 64 de biți este criptat pentru 32 de cicluri (64 de runde) conform algoritmului de mai jos. [5]

Să presupunem că intrarea rundei a n-a (pentru 1 ≤ n ≤ 64) este părțile din dreapta și din stânga (L n , R n ), atunci rezultatul rundei a n-a va fi părțile din stânga și din dreapta (L n+1 , R n +1 ), care se calculează conform următoarelor reguli:

L n+1 = R n .

Dacă n = 2 * i - 1 pentru 1 ≤ i ≤ 32 (runde impare), atunci R n+1 = L n ({ [ R n 4 ] K[0] } { R n i * δ } { [ R n 5 ] K[1] })

Dacă n = 2 * i pentru 1 ≤ i ≤ 32 (runde pare), atunci R n+1 = L n ({ [ R n 4 ] K[2] } { R n i * δ } { [ R n 5 ] K[3] })

Unde

De asemenea, este evident că nu există un algoritm de programare a cheilor ca atare în algoritmul de criptare TEA. În schimb, subcheile K[0] și K[1] sunt folosite în runde impare, iar K[2] și K[3] în runde pare.

Deoarece acesta este un cifr de bloc , unde lungimea blocului este de 64 de biți și lungimea datelor poate să nu fie un multiplu de 64 de biți, valoarea tuturor octeților care completează blocul la un multiplu de 64 de biți este setată la 0x01 .

Implementare

Implementarea în limbajul de programare C (o versiune adaptată a codului prezentat în articolul lui David Wheeler și Roger Needham [2] ) a funcțiilor de criptare și decriptare folosind algoritmul TEA:

#include <stdint.h> void encrypt ( uint32_t * v , const uint32_t * k ) { /* înființat */ uint32_tv0 = v [ 0 ] ; uint32_tv1 = v [ 1 ] ; uint32_t suma = 0 ; uint32_t i ; /* o constantă cheie de program */ uint32_t delta = 0x9e3779b9 ; /* cheie cache */ uint32_tk0 = k [ 0 ] ; uint32_tk1 = k [ 1 ] ; uint32_t k2 = k [ 2 ]; uint32_t k3 = k [ 3 ]; /* începerea ciclului de bază */ pentru ( i = 0 ; i < 32 ; ++ i ) { suma += delta ; v0 += ( ( v1 << 4 ) + k0 ) ^ ( v1 + sumă ) ^ ( ( v1 >> 5 ) + k1 ); v1 += ( ( v0 << 4 ) + k2 ) ^ ( v0 + sumă ) ^ ( ( v0 >> 5 ) + k3 ); } /* sfarsit ciclu */ v [ 0 ] = v0 ; v [ 1 ] = v1 ; } void decrypt ( uint32_t * v , const uint32_t * k ) { /* înființat */ uint32_tv0 = v [ 0 ] ; uint32_tv1 = v [ 1 ] ; uint32_tsum = 0xC6EF3720 ; _ uint32_t i ; /* o constantă cheie de program */ uint32_t delta = 0x9e3779b9 ; /* cheie cache */ uint32_tk0 = k [ 0 ] ; uint32_tk1 = k [ 1 ] ; uint32_t k2 = k [ 2 ]; uint32_t k3 = k [ 3 ]; /* începerea ciclului de bază */ pentru ( i = 0 ; i < 32 ; ++ i ) { v1 -= ( ( v0 << 4 ) + k2 ) ^ ( v0 + sumă ) ^ ( ( v0 >> 5 ) + k3 ); v0 -= ( ( v1 << 4 ) + k0 ) ^ ( v1 + sumă ) ^ ( ( v1 >> 5 ) + k1 ); suma -= delta ; } /* sfarsit ciclu */ v [ 0 ] = v0 ; v [ 1 ] = v1 ; }

Comentarii:

  • v - text sursă, format din două părți de 32 de biți
  • k este o cheie formată din patru părți de 32 de biți

Modificări față de codul original:

  • tipul uint32_t este folosit datorită faptului că are întotdeauna o dimensiune de 32 de biți, spre deosebire de long (prezent în codul original), care poate conține 64 de biți (de exemplu, pe unele sisteme pe 64 de biți)
  • codul sursă nu folosește tipul const
  • parantezele redundante din expresiile pentru v0 și v1 sunt omise în codul sursă, în această modificare sunt lăsate pentru o mai mare claritate

Criptanaliză

Se presupune că acest algoritm oferă o securitate comparabilă cu algoritmul de criptare IDEA , deoarece folosește aceeași idee de utilizare a operațiilor din grupuri algebrice ortogonale . [1] Această abordare oferă o protecție excelentă împotriva tehnicilor de criptoanaliza liniară .

Atacurile cheie conexe

Algoritmul este cel mai vulnerabil la atacurile legate de chei din cauza programării simple a cheilor ( inclusiv a lipsei unui algoritm de programare a cheilor ca atare). Sunt cunoscute cel puțin trei atacuri de acest tip, ele au fost prezentate în lucrarea lui John Kelsey ( John Kelsea ), Bruce Schneier ( Bruce Schneier ) și David Wagner ( David Wagner ) în 1997 [6] . Cele mai simple dintre ele dau un răspuns diferențial cu o probabilitate de 2 -32 după 32 de cicluri ale algoritmului, deci sunt necesare cel puțin 2 34 de texte clare alese pentru a găsi răspunsul diferențial cu o probabilitate de 1 și a determina toți biții cheii. Un atac mai complex, care combină ideile „atacului cheie legat” [7] al lui Eli Biham și un atac diferențial , oferă un răspuns diferențial cu o probabilitate de 2 −11 , necesită doar 2 23 de texte clare alese și un timp de aproximativ 2 32 de timpi de criptare (adică necesită un număr de operații pe biți de ordinul a 2 32 ).  

Criptanaliza diferențială

TEA sa dovedit a fi destul de robust împotriva criptoanalizei diferenţiale . Un atac TEA cu 10 runde necesită 2 52,5 texte clare alese și are o complexitate de timp de 2 84 [8] . Cel mai bun rezultat este criptoanaliza a 17 runde de TEA [9] . Acest atac necesită doar 1920 de texte clare alese, dar are o complexitate temporală de 2123,37 .

Chei echivalente

O altă problemă a algoritmului TEA este existența cheilor echivalente. S-a demonstrat că fiecare tastă are trei echivalente [4] . Aceasta înseamnă că lungimea efectivă a cheii este de numai 126 de biți în loc de cei 128 intenționați de dezvoltatori, așa că nu este de dorit să se utilizeze TEA ca funcție hash , ceea ce a fost reflectat în cartea lui Andrew Huang „ Hacking the Xbox: an introduction to reverse engineering” („Hacking the Xbox: An Introduction to Reverse Engineering”) folosind exemplul de piratare a consolei de jocuri Microsoft Xbox .

Tabelul cheilor echivalente:

K[0] K[1] K[2] K[3]
K[0] K[1] K[2] 80000000 h K[3] 80000000 h
K[0 ] 80000000h K[1] 80000000 h K[2] K[3]
K[0 ] 80000000h K[1] 80000000 h K[2] 80000000 h K[3] 80000000 h

Extensii de algoritm

Descoperirea unui număr de vulnerabilități și slăbiciuni grave în algoritmul TEA original a condus la crearea rapidă a extensiilor sale. Principalele diferențe ale tuturor acestor algoritmi sunt o programare îmbunătățită a cheilor, dependența dinamică a cheii de text, precum și o dimensiune diferită a cheii, bloc de intrare și/sau numărul de runde ale rețelei Feistel.

XTEA

XTEA are o dimensiune a blocului de 64 de biți, o dimensiune a cheii de 128 de biți și o rundă de rețea Feistel de 64. Algoritmul a fost dezvoltat de David Wheeler și Roger Needham și publicat în 1997 . Principala diferență față de algoritmul TEA original este prezența unui algoritm de programare a cheilor, care a făcut posibilă eliminarea unei vulnerabilități critice pentru „atacuri asupra cheilor asociate”, dar a condus la o deteriorare a rezistenței la criptoanaliza diferențială [9] . Există trei modificări ale acestui algoritm dezvoltat de Tom Denis [10] : XTEA-1 (dimensiunea blocului - 64 de biți, dimensiunea cheii - 128 de biți, numărul de runde ale rețelei Feistel - 32), XTEA-2 (dimensiunea blocului - 128 de biți , dimensiunea cheii 128 biți, numărul rețelei Feistel 64) și XTEA-3 (dimensiunea blocului 128 biți, dimensiunea cheii 256 biți, numărul rețelei Feistel 64).

XXTEA

În 1998, a fost publicată următoarea extensie a algoritmului, numită XXTEA . Dimensiunea cheii este de 128 de biți. O caracteristică distinctivă este capacitatea de a cripta orice blocuri care sunt multiplu de 64 de biți, numărul de runde este de 52 + 6 * (numărul de cuvinte de 32 de biți dintr-un bloc) sau 52 + 12 * M cu o lungime de bloc de 64 * M biți. Eficacitatea practică a unui atac diferențial publicat anonim nu a fost dovedită [11] .

RTEA

Există, de asemenea, o modificare alternativă a algoritmului TEA, numită RTEA , dezvoltată în 2007 de Marcos el Ruptor . Dimensiunea blocului - 64 de biți; pentru o cheie de 128 de biți, numărul de runde ale rețelei Feistel este de 48, pentru o cheie de 256 de biți este de 64. Potrivit dezvoltatorilor, acest algoritm este mai productiv și mai rezistent la criptoanaliza [12] decât XTEA, totuși , acest algoritm are deja un „atac asupra cheilor aferente” [13] .

Raiden

Folosind mecanisme de programare genetică în 2006, o echipă de dezvoltatori condusă de Julio Castro ( ing.  Julio César Hernández Castro ) a creat algoritmul Raiden , conceput pentru a elimina vulnerabilitățile cifrului TEA. Acesta repetă aproape exact structura algoritmului TEA, cu excepția faptului că algoritmul Raiden are un algoritm extins de programare a cheilor. Numărul standard de runde ale rețelei Feistel este de 32 (16 cicluri). Raiden folosește un program de chei asemănător PRNG, transformă cheia și generează subchei pentru fiecare rundă. Cifrul trece cu succes testele Diehard , Sexton și ORL [14] .

Comparația diferitelor versiuni ale extensiei algoritmului TEA

Iată un tabel comparativ cu principalele caracteristici ale familiei de algoritmi TEA:

Numele algoritmului Număr standard de runde de rețea Feistel Dimensiunea blocului Dimensiunea cheii
CEAI 64 64 de biți 128 de biți
XTEA 64 64 de biți 128 de biți
XTEA-1 32 64 de biți 128 de biți
XTEA-2 64 128 de biți 128 de biți
XTEA-3 64 128 de biți 256 de biți
XXTEA 52+12*M 64*M biți 128 de biți
RTEA 48 sau 64 64 de biți 128 sau 256 de biți
Raiden 32 64 de biți 128 de biți

În același timp, autorii algoritmului TEA pe pagina lor oficială [1] atrag atenția asupra faptului că, în condiții reale de utilizare practică, algoritmul TEA este încă destul de fiabil și toate vulnerabilitățile găsite, de regulă, nu sunt critic, de exemplu, la transmiterea datelor în timp real.

Vezi și

Note

  1. 1 2 3 4 5 Pagina de criptare TEA (link indisponibil) . Consultat la 25 februarie 2009. Arhivat din original la 12 iunie 2017. 
  2. 1 2 3 Roger M. Needham și David J. Wheeler. TEA, un algoritm de criptare minuscul arhivat 13 octombrie 2017 la Wayback Machine
  3. Kelsey, John; Schneier, Bruce; Wagner, David. Criptanaliza cheie-schedulă a IDEA, G-DES, GOST, SAFER și Triple-DES  (engleză)  // Note de curs în Informatică: jurnal. - 1996. - Vol. 1109 . - P. 237-251 . - doi : 10.1007/3-540-68697-5_19 .
  4. 1 2 Andem, Vikram Reddy (2003). O criptoanaliză a micului algoritm de criptare Arhivat din original pe 20 aprilie 2009.
  5. Seokhie Hong, Deukjo Hong, Youngdai Ko, Donghoon Chang, Wonil Lee, Sangjin Lee, (2003). Criptanaliză diferențială a TEA și XTEA  (link indisponibil)
  6. Kelsey, John; Schneier, Bruce; Wagner, David. Criptanaliza cu chei înrudite pentru 3-WAY, Biham-DES, CAST, DES-X NewDES, RC2 și TEA  //  Note de curs în Informatică: jurnal. - 1997. - Vol. 1334 . - P. 233-246 . - doi : 10.1007/BFb0028479 .
  7. Eli Biham, Departamentul de Informatică, Technion - Institutul de Tehnologie din Israel, Haifa 32000, Israel, (1992). „Noi tipuri de atacuri criptoanalitice folosind chei înrudite”  (link indisponibil)
  8. Moon, Dukjae; Hwang, Kyungdeok; Lee, Wonil; Lee, Sangjin; Lim, Jongin. Criptanaliza diferențială imposibilă a XTEA și TEA rotunde reduse  //  Lecture Notes in Computer Science: journal. - 2002. - Vol. 2365 . - P. 49-60 . - doi : 10.1007/3-540-45661-9_4 .
  9. 1 2 Hong, Seokhie; Hong, Deukjo; Ko, Youngdai; Chang, Donghoon; Lee, Wonil; Lee, Sangjin. Criptanaliza diferențială a TEA și XTEA  (nedefinit)  // În Proceedings of ICISC 2003. - 2003.  (link inaccesibil)
  10. Tom St Denis. Algoritmi extinși TEA Arhivat 27 august 2018 la Wayback Machine
  11. Articol original cu implementarea atacului asupra XXTEA și cod exemplu (downlink) . Consultat la 6 noiembrie 2009. Arhivat din original pe 23 septembrie 2009. 
  12. Rezultate comparative ale stabilității cripto-algoritmilor simetrici Arhivat la 25 iulie 2008.  (Engleză)
  13. Un atac cheie asociat pentru RTEA.  (link indisponibil)
  14. [ Raiden: O alternativă la TEA Block Cipher  ] . Consultat la 6 noiembrie 2009. Arhivat din original la 5 martie 2016. Raiden: O alternativă la TEA Block Cipher 

Link -uri