Doi pești | |
---|---|
Creator | un grup de specialiști condus de Bruce Schneier |
Creată | 1998 |
Dimensiunea cheii | 128/192/256 biți |
Dimensiunea blocului | 128 de biți |
Numărul de runde | 16 |
Tip de | Rețeaua Feistel |
Twofish este un cifru bloc simetric cu o dimensiune a blocului de 128 de biți și o lungime a cheii de până la 256 de biți. Numărul de runde 16. Dezvoltat de un grup de specialiști condus de Bruce Schneier . A fost unul dintre cei cinci finaliști ai etapei a doua a competiției AES . Algoritmul se bazează pe algoritmii Blowfish , SAFER și SQUARE .
Caracteristicile distinctive ale algoritmului sunt utilizarea nodurilor de înlocuire pre-calculate și dependente de cheie și o schemă complexă pentru despachetarea subcheilor de criptare. Jumătate din cheia de criptare de n biți este folosită ca cheie de criptare reală, cealaltă jumătate este folosită pentru a modifica algoritmul (nodurile de substituție depind de acesta).
Twofish a fost dezvoltat special pentru a îndeplini cerințele și recomandările NIST pentru AES [1] :
Cu toate acestea, complexitatea structurii algoritmului și, în consecință, complexitatea analizei sale pentru chei slabe sau legături ascunse, precum și timpul de execuție destul de lent în comparație cu Rijndael pe majoritatea platformelor, nu au jucat în favoarea sa [2] ] .
Algoritmul Twofish a apărut dintr-o încercare de a modifica algoritmul Blowfish pentru un bloc de intrare de 128 de biți. Noul algoritm trebuia să fie ușor de implementat în hardware (inclusiv utilizarea de tabele mai mici), să aibă un sistem de extindere a cheilor mai avansat ( ing. chei program ) și să aibă o funcție cu o singură valoare F.
Ca rezultat, algoritmul a fost implementat ca o rețea Feistel mixtă cu patru ramuri care se modifică reciproc folosind transformarea cripto Hadamar ( de exemplu, transformarea pseudo-Hadamar, PHT ).
Posibilitatea implementării eficiente pe procesoare moderne (pentru acea vreme) pe 32 de biți (precum și în smart carduri și dispozitive similare) este unul dintre principiile cheie care i-au ghidat pe dezvoltatorii Twofish.
De exemplu, funcția F, când calculează PHT și adaugă la partea cheie K, folosește în mod intenționat adăugarea în locul tradiționalului xor . Acest lucru face posibilă utilizarea instrucțiunii LEA din familia de procesoare Pentium, care permite calcularea transformării Hadamard într-un singur ciclu de ceas . (Cu toate acestea, în acest caz, codul trebuie compilat pentru o anumită valoare a cheii).
Algoritmul Twofish nu este brevetat și poate fi folosit de oricine fără taxe sau redevențe. Este folosit în multe programe de criptare, deși este mai puțin comun decât Blowfish .
Twofish împarte blocul de date de intrare pe 128 de biți în patru subblocuri de 32 de biți, pe care, după procedura de albire a intrării, sunt efectuate 16 runde de transformări. După ultima rundă, se efectuează albirea la ieșire.
Albirea este o procedură de xoring a datelor cu subchei înainte de prima rundă și după ultima rundă. Această tehnică a fost folosită pentru prima dată în cifrul Khufu / Khare și independent de Ron Rivest în algoritmul de criptare DESX . Joe Killian (NEC) și Phillip Rogaway (Universitatea din California) au arătat că albirea face ca sarcina de căutare exhaustivă a cheilor în DESX [3] să fie mai dificilă . Dezvoltatorii Twofish susțin [4] că albirea Twofish complică semnificativ sarcina de a ghici cheia, deoarece criptoanalistul nu poate afla ce date intră în intrarea funcției F din prima rundă.
Au existat însă și aspecte negative. Un studiu interesant a fost realizat de specialiști de la Centrul de Cercetare IBM. [5] Ei au implementat algoritmul Twofish pe un card inteligent CMOS tipic și au analizat posibilitatea unui atac folosind Analiza Putere Diferenţială (DPA). Procedura de albire a intrării a fost atacată, deoarece folosește direct xor de subchei cu datele de intrare. Drept urmare, cercetătorii au arătat că este posibil să se calculeze complet o cheie de 128 de biți analizând doar 100 de operațiuni aleatorii de criptare bloc.
Funcția g este baza algoritmului Twofish. Intrarea funcției este un număr X pe 32 de biți, care este apoi împărțit în patru octeți x0, x1, x2, x3. Fiecare dintre octeții rezultați este trecut prin caseta S. (Trebuie remarcat faptul că casetele S din algoritm nu sunt fixe, ci depind de cheie). Cei 4 octeți rezultați la ieșirile cutiilor S sunt interpretați ca un vector cu patru componente. Acest vector este înmulțit cu o matrice MDS fixă 4x4 (distanță maximă separabilă), iar calculele sunt efectuate în câmpul Galois modulo polinomul ireductibil.
O matrice MDS este o astfel de matrice peste un câmp finit K, încât dacă o luăm ca o matrice a unei transformări liniare din spațiu în spațiu , atunci oricare doi vectori din spațiul de forma (x, f(x)) vor au cel puţin m + 1 diferenţe de componente . Adică, un set de vectori de forma (x, f(x)) formează un cod cu proprietatea codului separabil la distanță maximă. Un astfel de cod, de exemplu, este codul Reed-Solomon .
În Twofish, proprietatea de diversitate maximă a matricei MDS înseamnă că numărul total de octeți în schimbare ai vectorului a și ai vectorului este de cel puțin cinci. Cu alte cuvinte, orice modificare la doar un octet într-o modifică toți cei patru octeți din b.
Transformarea Crypto Hadamard este o transformare reversibilă a unui șir de biți cu lungimea 2n. Șirul este împărțit în două părți a și b de aceeași lungime în n biți. Transformarea se calculează după cum urmează:
Această operație este adesea folosită pentru a „împrăștia” codul (de exemplu, în cifrul SAFER ).
În Twofish, această transformare este utilizată atunci când se amestecă rezultatele a două funcții g (n = 32).
În fiecare rundă, cele două blocuri drepte de 32 de biți care sunt xored cu rezultatele funcției F sunt rotite suplimentar cu un bit. Al treilea bloc este deplasat înainte de operația xor, al patrulea bloc după. Aceste schimbări sunt adăugate în mod deliberat pentru a rupe alinierea octeților care este inerentă în cutiile S și înmulțirile matricei MDS. Cu toate acestea, cifrul încetează să fie complet simetric, deoarece în timpul criptării și decriptării schimbările ar trebui să fie efectuate în direcții opuse.
Twofish este proiectat să funcționeze cu chei de 128, 192 și 256 de biți. Din cheia inițială sunt generate 40 de subchei pe 32 de biți, dintre care primele opt sunt folosite doar în operațiunile de albire de intrare și ieșire, iar restul de 32 sunt folosite în runde de criptare, două subchei pe rundă. O caracteristică a Twofish este că cheia originală este folosită și pentru a schimba algoritmul de criptare în sine, deoarece casetele S utilizate în funcția g nu sunt fixe, ci depind de cheie.
Pentru a forma subchei rotunde, cheia originală M este împărțită cu o permutare de octeți în două blocuri identice și . Apoi, folosind blocul și funcția h, se criptează valoarea 2*i, iar folosind blocul , se criptează valoarea 2*i+1, unde i este numărul rundei curente (0 - 15). Blocurile criptate rezultate sunt amestecate prin cripto-transforma Hadamard și apoi utilizate ca subchei rotunde.
Să luăm în considerare mai detaliat algoritmul pentru generarea subcheilor rotunde, precum și funcția dependentă de cheie g. Atât generarea subcheilor, cât și formarea funcției g în Twofish folosesc o funcție principală: h(X, L 0 , L 1 , … , L k ). Aici X, L 0 , L 1 , … , L k sunt cuvinte de 32 de biți și k = N / 64, unde N este lungimea cheii originale în biți. Rezultatul funcției este un cuvânt de 32 de biți.
Funcția este executată în k pași. Adică pentru o lungime a cheii de 256 de biți vor fi 4 etape, pentru o cheie de 192 de biți - 3 etape, pentru 128 de biți - 2 etape.
La fiecare etapă, cuvântul de intrare pe 32 de biți este împărțit în 4 octeți, iar fiecare octet este supus unei permutări fixe de bit q 0 sau q 1
Rezultatul este reprezentat ca un vector de 4 octeți și înmulțit cu matricea MDS. Calculele sunt efectuate în câmpul Galois GF(2 8 ) modulo polinomul ireductibil .
Matricea MDS are forma:Permutările q 0 și q 1
q 0 și q 1 sunt permutări fixe a 8 biți ale octetului de intrare x.
Octetul x este împărțit în două jumătăți de 4 biți a 0 și b 0 , peste care sunt efectuate următoarele transformări:
Aici este o deplasare ciclică pe 4 biți la dreapta și t 0 , t 1 , t 2 , t 3 sunt înlocuiri de tabel ale numerelor de 4 biți.
Pentru q 0 tabelele arată astfel:
t 0 = [ 8 1 7 D 6 F 3 2 0 B 5 9 ECA 4 ] t 1 = [ BCE 8 1 2 3 5 F 4 A 6 7 0 9 D ] t 2 = [ BA 5 E 6 D 9 0 C 8 F 3 2 4 7 1 ] t 3 = [ D 7 F 4 1 2 6 E 9 B 3 0 8 5 CA ]Pentru q 1 tabelele arată astfel:
t 0 = [ 2 8 BDF 7 6 E 3 1 9 4 0 AC 5 ] t 1 = [ 1 E 2 B 4 C 3 7 6 DA 5 F 9 0 8 ] t 2 = [ 4 C 7 5 1 6 9 A 0 ED 8 2 B 3 F ] t 3 = [ B 9 5 1 C 3 DE 6 4 7 F 2 0 8 A ]Fie M cheia originală, N fie lungimea ei în biți. Subcheile sunt generate după cum urmează:
Subcheile pentru runda a I-a sunt calculate prin formulele:
Functia g este definita in termenii functiei h : .
Vectorul S , ca și vectorii M e și Mo , este de asemenea format din cheia originală și constă din k cuvinte de 32 de biți. Octeții cheie originali sunt împărțiți în k grupuri de opt octeți. Fiecare astfel de grup este tratat ca un vector cu 8 componente și înmulțit cu o matrice RS fixă de 4×8 octeți. Ca rezultat al înmulțirii, se obține un vector format din patru octeți. Calculele sunt efectuate în câmpul Galois modulo un polinom ireductibil . Matricea RS are forma
Un studiu al Twofish cu un număr redus de runde a arătat că algoritmul are o marjă mare de siguranță și, în comparație cu restul finaliștilor competiției AES, s-a dovedit a fi cel mai persistent. Cu toate acestea, structura sa neobișnuită și complexitatea relativă au ridicat unele îndoieli cu privire la calitatea acestei rezistențe.
Împărțirea cheii originale în două jumătăți în timpul formării subcheilor rotunde a provocat critici. Criptografii Fauzan Mirza și Sean Murphy au sugerat că o astfel de diviziune face posibilă organizarea unui atac conform principiului „împărți și cuceri”, adică împărțirea sarcinii în două similare, dar mai simple [6] . Cu toate acestea, un astfel de atac nu a fost efectiv efectuat.
Pentru 2008, cea mai bună variantă a criptoanalizei Twofish este o variantă a criptoanalizei diferențiale trunchiate, care a fost publicată de Shiho Moriai și Yiqun Lisa Yin în Japonia în 2000 [7] . Ei au arătat că sunt necesare 251 de texte clare potrivite pentru a găsi diferențele necesare . Cu toate acestea, studiile au fost de natură teoretică, nu a fost efectuat niciun atac real. Pe blogul său, creatorul Twofish Bruce Schneier susține că un astfel de atac este imposibil în realitate [8] .
Criptosisteme simetrice | |
---|---|
Cifruri în flux | |
Rețeaua Feistel | |
Rețeaua SP | |
Alte |