Shift attack ( ing. slide attack ) - atac criptografic , care este, în cazul general, un atac bazat pe text clar selectat , care permite criptanaliza cifrurilor cu mai multe runde bloc, indiferent de numărul de runde utilizate. Propus de Alex Biryukov și David Wagner în 1999 [1] .
Ideea de a crea un atac de forfecare a venit pentru prima dată cu Edna Grossman și Brian Tuckerman în 1977. Raportul corespunzător a fost publicat [2] împreună cu IBM . Grossman și Tuckerman au reușit să arate posibilitatea unui atac asupra unui cifr NDS (New Data Seal) destul de slab . Atacul exploatează faptul că cifrul din fiecare rundă amestecă doar aceeași cheie, folosind aceeași masă în fiecare rundă. Utilizarea textelor clare ocolește acest lucru și ne permite să o considerăm cea mai veche versiune a atacului de schimbare.
În 1990, a fost propusă criptoanaliza diferențială , demonstrând vulnerabilitatea criptosistemelor de tip DES cu mai multe runde [3] . O modalitate de a asigura puterea lor criptografică a fost creșterea numărului de runde utilizate, ceea ce a crescut complexitatea de calcul a atacului proporțional cu numărul lor. Utilizarea acestei îmbunătățiri pentru mulți algoritmi de criptare s-a bazat, în special, pe judecata empirică că orice cifră, chiar și mai degrabă slabă, poate fi făcută criptografic puternic prin repetarea operațiunilor de criptare de mai multe ori:
Cu excepția doar a câtorva cazuri degenerate, algoritmul poate fi securizat în mod arbitrar prin creșterea numărului de runde.
Text original (engleză)[ arataascunde] Cu excepția câtorva cazuri degenerate, un algoritm poate fi securizat în mod arbitrar prin adăugarea mai multor runde. — B. Preneel, V. Rijmen, A. Bosselears: Principii și performanță a algoritmilor criptografici [4]De exemplu, unele cifruri propuse ca candidați pentru concursul AES în 1997 au avut un număr destul de mare de runde: RC6(20), MARS(32), SERPENT(32), CAST(48) [1] .
Cu toate acestea, în 1999, a fost publicat un articol al lui Alex Biryukov și David Wagner care descrie un atac de forfecare, care a respins această presupunere. O caracteristică a acestui atac a fost că nu depindea de numărul de runde de cifrare; succesul său a necesitat doar identitatea rundelor și posibilitatea de criptoanaliza a funcției de criptare pe o rundă separată. Articolul descrie, de asemenea, aplicarea acestui atac la cifrul TREYFER și versiunile simplificate ale cifrurilor DES (2K-DES) și BLOWFISH [1] .
În 2000, a fost publicat un al doilea articol, care a demonstrat versiuni îmbunătățite ale atacului de schimbare - „Alunecare cu o răsucire” și „Diapozitiv de completare”, permițând extinderea acestuia la cifrurile ale căror runde au diferențe mici. Deci, cu ajutorul acestor îmbunătățiri, au fost sparte unele modificări ale cifrului DES , precum și o versiune simplificată de 20 de runde a standardului de criptare GOST 28147-89 [5] [6] .
În cel mai simplu caz [7] , se aplică un atac shift algoritmilor de criptare, care sunt repetări multiple ale unei anumite funcții de criptare , a cărei introducere la fiecare rundă este textul cifrat (rezultatul criptării din runda anterioară) și o cheie rotundă. , care este același pentru toate rundele. Principalele cerințe pentru implementarea cu succes a acestui atac sunt [7] :
În cazul cifrurilor bloc moderne, cheile rotunde nu sunt de obicei aceleași. Acest lucru duce la faptul că algoritmul utilizat în construcția celui mai simplu atac este în general inaplicabil pentru astfel de cifruri și necesită unele completări.
Să existe un algoritm de criptare nr. 1, format din blocuri, astfel încât cheia să fie utilizată în runda a treia (vom presupune că numărul total de chei , cheia va fi nevoie mai târziu), și să alegem o pereche de „text simplu – text cifrat” . La ieșirea primei runde, obținem textul , unde este funcția de criptare.
Mai mult, atacul shift implică criptarea textului cu un nou cifr bloc nr. 2, format din blocuri de la la . Să notăm textul cifrat la ieșirea blocului --lea ca . Este ușor de observat că în acest caz, la ieșirea blocului i-lea, vom obține textul deja găsit mai sus , ceea ce înseamnă că textul și textul cifrat sunt legate prin relația .
Astfel, am obținut o pereche care satisface relațiile și , care nu este altceva decât o pereche de deplasare generală. În consecință, în cel mai simplu caz, aceste relații vor lua forma și .
Presupunând că un text are legătură cu raportul , ar trebui să obținem textul cifrat la ieșirea algoritmului de criptare #2 cu textul la intrare, pentru a-l confirma sau infirma prin rapoarte . În cazul unui program de chei banal, algoritmii de criptare nr. 1 și nr. 2 sunt identici, ceea ce înseamnă că poate fi obținut prin criptarea textului cu un cifr bloc deja existent. În caz contrar, algoritmii de criptare nr. 1 și nr. 2 sunt diferiți, iar criptoanalistul nu este capabil să construiască algoritmul nr. 2, ceea ce înseamnă că textul cifrat nu poate fi obținut.
După cum se menționează în notele la algoritmul de atac, cazul criptoanalizei cifrurilor cu auto-asemănarea p-round poate fi ușor redus la cel mai simplu caz de atac prin deplasare prin combinarea mai multor runde într-una singură, ceea ce este echivalent cu deplasarea blocurilor de cifr prin runde. În cazul unei rețele Feistel cu taste rotunde alternate alternativ și , adică cu auto-asemănarea în două runde, această abordare poate crește complexitatea criptoanalizei și, prin urmare, poate face ca atacul de schimbare să fie ineficient. În schimb, s-a propus, ca și până acum, să se schimbe doar cu o rundă în loc de două, dar în același timp să se modifice ușor cerințele impuse perechii de schimburi.
În descrierea problemei luate în considerare mai sus, s-a indicat că pentru a căuta o pereche de shift, în cazul general, este necesar să se poată lucra cu două -cifre bloc - cel original, format din blocuri de la până la , iar cel nou, format din blocuri de la la . Slide-ul de completare vă permite să lucrați numai cu cifrul bloc original.
Deși următorul raționament va fi demonstrat folosind un cifr cu 4 runde, acesta poate fi extins la orice număr de runde. Mai întâi, să vedem cum se modifică textul simplu în diferite runde de criptare. Să reprezentăm textul simplu ca , unde și sunt părțile din stânga și respectiv din dreapta ale textului.
Număr rotund | Partea stanga | Partea dreaptă |
---|---|---|
unu | ||
2 | ||
3 | ||
patru |
Să notăm textul la ieșirea rundei 1 și textul cifrat . Acum, rețineți că, pentru a găsi textul cifrat la ieșirea unui cifru bloc de 4 runde cu un program cheie , este suficient să adăugați diferența în partea dreaptă a fiecărei runde a cifrului original și apoi să criptați textul cu cifrul rezultat (Fig. 2, diagrama din dreapta). Pentru a face acest lucru, vom furniza textul la intrarea cifrului inițial . Să notăm textul cifrat ca . Să luăm în considerare modul în care textul se modifică în diferite runde de criptare.
Număr rotund | Partea stanga | Partea dreaptă |
---|---|---|
unu | ||
2 | ||
3 | ||
patru |
Din aceasta se poate observa că diferența introdusă se păstrează la fiecare rundă, ceea ce înseamnă că textele cifrate și sunt legate prin relațiile: și , iar perechile „text simplu - text cifrat” și prin relațiile și .
Dacă textele sunt legate printr-un raport , ei spun că textele și au o diferență de forfecare (diferența de diapozitive în engleză ) .
Astfel, se obțin următoarele ecuații pentru perechea de forfecare:
Ca și înainte, în cazul textelor -bit, sunt necesare texte clare pentru a găsi perechea de deplasare . Perechea de forfecare trebuie să satisfacă acum ecuația (vezi Fig. 2). În cazul găsirii unei perechi potențiale de deplasare, a doua ecuație permite găsirea unui candidat , iar dacă funcția este suficient de vulnerabilă la criptoanaliza, atunci aceste ecuații ne permit să găsim cheile potențiale dorite și . După aceea, rămâne doar să verificați dacă există false pozitive.
Alunecare cu o răsucire [ 5 ]Cerința specificată în declarația problemei de a putea lucra cu cifrul original #1, constând din blocuri de la la , și noul cifru #2, constând din blocuri de la la la , poate fi ușor transformat folosind așa-numitul shift- abordare și-rotire.
Dacă excludem ultima permutare a părților din stânga și din dreapta ale textului și inversăm ordinea cheilor, atunci decriptarea în rețeaua Feistel va avea loc exact în același mod ca și criptarea [1] . Abordarea shift-and-rotate folosește această proprietate, și anume, propune utilizarea algoritmului de decriptare ca cifru #2 (vezi Fig. 3).
Această abordare nu are diferențe fundamentale față de cel mai simplu algoritm. Ca și în cel mai simplu caz, cerințele pentru perechea de schimbare , unde . Astfel, obținem ecuațiile:
și o condiție care face mai ușor să găsiți perechi de schimburi:
Ca de obicei, în cazul textelor -bit, sunt necesare texte clare pentru a găsi perechea de deplasare . Dacă este găsit, vulnerabilitatea funcției vă permite să găsiți cheia din ecuații .
Numărul de texte necesare la acest pas poate fi redus la . Pentru a face acest lucru, criptăm diverse texte ale formularului și decriptăm diverse texte ale formularului , unde și sunt fixate și îndeplinim condiția . Astfel, din moment ce acum lucrăm, de fapt, cu texte - bit, conform paradoxului zilei de naștere, printre aceste perechi „text simplu-text cifrat”, există o probabilitate mare de apariție a unei perechi de deplasare.
Cheia poate fi găsită prin aplicarea metodei descrise pentru cazul general al cifrurilor bloc cu auto-similaritate p-round, și anume, prin combinarea fiecărei două runde ulterioare într-una singură - astfel reducem problema la cel mai simplu caz. Deși dimensiunea cheii rotunde se va dubla, acest lucru nu va complica criptoanaliza, deoarece cheia , care este jumătate din noua cheie rotundă, este deja cunoscută și trebuie să găsim doar a doua jumătate, egală ca dimensiune cu cea rotundă. cheie în problema inițială.
O modificare separată poate fi considerată utilizarea simultană a celor două abordări descrise mai sus - Complementation slide și Sliding with a twist, care permite extinderea atacului de schimbare la cifruri cu auto-similaritate în 4 runde [5] .
Problema criptoanalizei cifrurilor cu runde inegale diferă de toate cazurile luate în considerare până acum, în soluția cărora nu se poate folosi niciuna dintre modificările de atac considerate. Pentru cazul unor astfel de cifruri, a fost propus un atac de realiniere cu slide [ 8 ] , demonstrat pe exemplul de modificări ale cifrului DES , în special, pe exemplul versiunii complete de 16 runde a DES
Sliding-linear attack ( în engleză slide-linear attack ) [9] este un exemplu de implementare a unui atac shift utilizând principiile criptoanalizei liniare . Lucrarea acestui atac a fost prezentată pe cifrul 4K-DES.
Există, de asemenea, îmbunătățiri pentru a accelera implementarea modificărilor deja existente ale atacului de forfecare. În special, una dintre aceste îmbunătățiri, descrisă în lucrarea lui Eli Biham, Orr Dunkelman, Nathan Keller: Improved Slide Attacks [10] , face posibilă găsirea perechilor de deplasare mult mai rapid folosind o structură de cifră ciclică și permutările cheie corespunzătoare. Funcționarea acestei modificări a fost prezentată pe exemplul diferitelor variante ale cifrului GOST 28147-89 (GOST).
Pe lângă scopul lor inițial - atacarea cifrurilor bloc, principiile atacului shift și-au găsit aplicație și în domeniul criptoanalizei funcției hash. Similar cu cazul cifrurilor bloc, unde a fost folosit un atac shift pentru a găsi programul cheilor, s-a dovedit a fi potențial aplicabil pentru găsirea cheii secrete utilizate pentru a genera și valida hash-ul mesajului transmis. În special, această abordare a fost demonstrată pe exemplul generării inserției simulate (MAC) .
De asemenea, atacul shift s-a dovedit a fi util nu numai în cazul funcțiilor hash criptografice care iau valoarea unei chei secrete ca parametru, ci și în cazul funcțiilor hash care produc un hash doar pe baza unui mesaj. O analiză a unor astfel de funcții bazată pe un atac shift face posibilă identificarea, cu un grad ridicat de probabilitate, a unor proprietăți de shift și, ca urmare, a anumitor modele în funcționarea algoritmilor de hashing.
Întrucât vulnerabilitățile programului cheie sunt utilizate în timpul atacului de schimb, una dintre măsuri este de a-l complica. În special, este necesar să se evite repetițiile ciclice în programul cheie, dacă este posibil, sau cel puțin să se folosească o perioadă de repetiție suficient de mare. În cazul unui număr mic de taste, în loc de o simplă repetare periodică, ar trebui folosită o ordine aleatorie a secvenței lor.
Pe lângă slăbiciunea programului cheie, atacul shift exploatează și aceleași runde. O modalitate de a evita acest lucru este utilizarea unor constante rotunde diferite ca parametru al funcției de criptare pe runde separate - acest lucru vă permite să faceți diferențe în funcționarea blocurilor de criptare individuale fără a complica în mod semnificativ algoritmul de criptare în ansamblu.
De asemenea, eficacitatea unui atac prin schimbare poate fi redusă semnificativ prin creșterea puterii criptografice a funcției de criptare rotundă. Deci, rezistența sa la atacuri bazate pe texte clare va face mult mai dificilă găsirea cheii rotunde chiar și în prezența unei perechi de shift.