Sunteți pe pagina 1din 72

Capitolul 5 – Criptografia modernă

5. Criptografia modernă

Momentul istoric în care criptografia a devenit ştiinţific ramură individualizată a


matematicii, a fost în anul 1949 când a fost publicat articolul "Communication Theory of Secrecy
Systems". Această lucrare a pus bazele criptosistemelor simetrice.
Dezvoltarea societăţii informaţionale, care a dus la o creştere impresionantă a volumului
de informaţie preponderent economică vehiculată în reţelele de calculatoare, a accelerat
dezvoltarea şi mai ales utilizarea instrumentelor criptografiei moderne. Rolul criptografiei
moderne este de a asigura prin mijloace matematice specifice, atât în teorie cât şi în practică, cele
patru caracteristici fundamentale ale informaţiei: confidenţialitatea, integritatea, autenticitatea şi
non-repudierea.
Criptografia modernă utilizează în principiu aceeaşi algoritmi ca şi criptografia
tradiţională (transpoziţia şi substituţia), dar accentul cade pe complexitatea algoritmilor.
Obiectivul criptografic din actuala perioadă este de a concepe algoritmi de criptare atât de
complecşi şi de ireversibili încât chiar şi în situaţia în care atacatorul (sau criptanalistul) având la
dispoziţie cantităţi mari de text criptat la alegerea sa, el să nu poată face nimic fără cheia secretă.
În criptografia modernă un sistem criptografic (criptosistem) este definit ca o structură
cu cinci componente:
• P = { t / t∈ T* } care este spaţiul textelor în clar, scrise pentru un alfabet nevid T (în mod
obişnuit T={0,1})
• K spaţiul cheilor de criptare, k∈K
• Familia funcţiilor de criptare dependentă de chei şi de un algoritm de criptare E
Ek : P → C , Ek = {ek / ek(t)=w şi ek este injectivă}
• Familia funcţiilor de decriptare dependentă de chei şi de un algoritm de decriptare D
Dk : C → P , Dk = { dk / dk(ek( t )) = t ∀ t ∈ P }
• C spaţiul mesajelor cu text criptat unde:
C={ w / ∃ k∈ K, a∈P, w = Ek(a) }

78
Capitolul 5 – Criptografia modernă

Pentru ca un sistem criptografic să fie “bun” (principiile au fost enunţate încă din
secolul XVII de Francisc Bacon) el trebuie să îndeplinească următoarele condiţii:
1. Fiind date ek şi a∈P să fie uşor de calculat ek(a).
2. Fiind date dk şi w∈C să fie uşor de determinat dk (w).
3. Să fie imposibil de determinat t din w, fără a cunoaşte dk.
4. Textul criptat să fie un text banal fără suspiciuni.

Dacă funcţia ek este bijectivă atunci sistemul este simetric , iar dacă funcţia ek nu este
bijectivă atunci sistemul este asimetric.
Există două tipuri de sisteme simetrice (cunoscute şi sub denumirea de sisteme cu cheie
secretă): sisteme care se bazează pe algoritmi de tip bloc şi sisteme care se bazează algoritmi de
tip şir. Algoritmii de tip bloc acţionează asupra blocurilor de text în clar şi text cifrat. Algoritmii
de tip şir se aplică şirurilor de text în clar şi text cifrat, la nivel de bit sau octet. Cele două tipuri
de algoritmi vor fi descrise în subcapitolele 5.1 şi 5.2.
Sistemele criptografice asimetrice sunt cunoscute sub numele de sisteme cu chei publice;
algoritmii care stau la baza acestor sisteme vor fi descrişi în subcapitolul 5.3.

5.1 Algoritmi simetrici de tip bloc

Algoritmii de tip bloc criptează mesajul în blocuri de 64 sau 128 de biţi. Se aplică o
funcţie matematică între un bloc de biţi ai mesajului în clar şi cheie (care poate varia ca mărime),
rezultând acelaşi număr de biţi pentru mesajul criptat. Funcţia de criptare este realizată astfel
încât să îndeplinească următoarele cerinţe:
- ştiind un bloc de biţi ai textului în clar şi cheia de criptare, sistemul să poată genera rapid
un bloc al textului criptat;
- ştiind un bloc de biţi ai textului criptat şi cheia de criptare/decriptare, sistemul să poată
genera rapid un bloc al textului în clar;
- ştiind blocurile textului în clar şi ale textului criptat, sistemului să-i fie dificil să genereze
cheia.
Acest tip de algoritmi este foarte folosit în criptografia modernă; de aceea în acest capitol
vom prezenta cîţiva algoritmi care “au făcut carieră”, după prezentarea modurilor criptografice
care stau la baza funcţionării algoritmilor de tip bloc.

79
Capitolul 5 – Criptografia modernă

5.1.1 Moduri criptografice

Un mod criptografic combină cifrul de bază, un anumit fel de feedback şi câteva operaţii
simple. Operaţiile sunt simple, deoarece securitatea depinde de cifrul folosit şi nu de modul
criptografic. Există şi alte considerente de securitate: tiparele din textul în clar trebuie ascunse,
intrarea în algoritmul de cifrare trebuie randomizată şi criptarea a mai mult de un mesaj folosind
aceeaşi cheie trebuie să fie posibilă.
Un alt aspect care trebuie luat în considerare este eficienţa - un mod criptografic nu trebuie
să fie mai puţin eficient decât algoritmul de cifrare pe care se bazează. În anumite împrejurări
este important ca textul în clar şi textul cifrat să fie de aceeaşi lungime.
O altă consideraţie se referă la toleranţa la eroare. Anumite aplicaţii necesită efectuarea
criptării sau decriptării ca procese paralele, în timp ce altele trebuie să poată pre-procesa
maximum posibil. Este important ca procesul de decriptare să poată recupera erorile la nivel de
bit din textul cifrat sau biţii lipsă sau cei în plus.
În continuare se vor descrie cele mai folosite moduri criptografice, atât pentru cifruri bloc,
cât şi pentru cifruri şir.

5.1.2 Modul cărţii de cod electronice

Modul cărţii de cod electronice (ECB1) este cel mai natural mod de a folosi un cifru bloc:
un bloc de text în clar se criptează într-un bloc de text cifrat. Deoarece acelaşi bloc de text în clar
se criptează întotdeauna în acelaşi bloc de text cifrat este teoretic posibil să construim o carte de
cod, care să conţină textele în clar şi textele cifrate corespunzătoare. Dacă lungimea blocului este
de 64 biţi, cartea de cod va avea 264 intrări, ceea ce este prea mult pentru pre-procesare şi
memorare. Şi să nu uităm, fiecare cheie va avea o carte de cod diferită.
Acesta este cel mai simplu mod de operare: fiecare bloc de text în clar este criptat
independent.. Blocurile nu trebuie criptate de o manieră liniară: putem cripta 10 blocuri aflate în
mijlocul textului, apoi blocurile de la sfârşit şi în final blocurile de la începutul textului. Acest
aspect este important pentru fişierele criptate care sunt accesate aleator, cum ar fi bazele de date.
Dacă o bază de date este criptată folosind modul ECB, atunci orice articol poate fi adăugat, şters,

1
Electronic CodeBook
80
Capitolul 5 – Criptografia modernă

criptat sau decriptat independent de celelalte articole, presupunând că un articol este format
dintr-un număr finit de blocuri. Procesarea poate fi astfel paralelă: dacă se dispune de mai multe
procesoare de criptare, ele pot cripta sau decripta diferite blocuri fără a depinde de restul
blocurilor.
Problema care se pune în modul ECB este următoarea: dacă criptanalistul dispune de text în
clar şi text cifrat pentru mai multe mesaje, el poate compune cartea de cod fără a cunoaşte cheile.
În lumea reală, fragmentele de mesaj au tendinţa de a se repeta. Diverse mesaje pot avea secvenţe
comune. Mesajele generate de calculator, cum ar fi poşta electronică, pot avea o structură
regulată. Mesajele pot fi de o mare redundanţă sau pot avea şiruri lungi de zero sau spaţii.
Dacă un criptanalist descoperă că blocul de text în clar 5e081bc5 corespunde blocului de
text cifrat 7ea593a4, va putea imediat să decripteze acest bloc, oriunde apare în alte mesaje.
Bazat pe redundanţa mesajelor criptate, criptanalistul poate construi atacuri statistice care conduc
la rezultate, independent de puterea cifrului text.
Această vulnerabilitate este crescută la începutul şi sfârşitul mesajelor, unde anteturile şi
subsolurile conţin informaţii despre expeditor şi destinatar, data calendaristică etc. Acest aspect
poartă numele de “începuturi stereotipice” şi “sfârşituri stereotipice”.
Avantajul modului ECB este că nu există risc de securitate la criptarea mai multor mesaje
cu aceeaşi cheie. De fapt, fiecare bloc poate fi privit ca un mesaj separat criptat cu aceeaşi cheie.
Erorile de biţi în textul cifrat vor determina, la decriptare, ca întreg blocul în care au loc să fie
decriptat incorect, dar nu vor afecta restul mesajului. Totuşi, dacă un bit de text cifrat este în mod
accidental pierdut sau adăugat, întreg textul cifrat rămas va fi incorect decriptat, atât timp cât nu
există o structură de frame-uri, care să permită realinierea limitelor blocurilor.

Completarea ultimului bloc


Majoritatea mesajelor nu pot fi exact împărţite în blocuri de lungime fixă; ultimul bloc
trebuie completat, pentru a respecta cerinţa ECB, la 64 de biţi. Completarea ultimului bloc de
face prin repetarea unor caractere – zero, unu sau alternarea lor. Dacă se doreşte îndepărtarea lor
din textul decriptat, se adaugă numărul octeţilor de completare ca ultim octet al ultimului bloc.
De exemplu, dacă presupunem ca lungimea blocului este de 64 de biţi şi ultimul bloc conţine 3
octeţi (24 de biţi). Trebuie adăugaţi 5 octeţi de completare, 4 octeţi conţinând zero-uri şi un octet
final de valoare 5 (numărul octeţilor de completare, care va fi folosit după decriptare la
înlăturarea acestora). Metoda va funcţiona corect dacă această completare va fi consistent
aplicată, chiar asupra mesajelor formate din blocuri complete. În caz contrar se poate folosi un
81
Capitolul 5 – Criptografia modernă

caracter de sfârşit de fişier, pentru a marca ultimul octet din textul în clar, după care se efectuează
completarea.
O alternativă la completarea ultimului bloc, este capturarea de text cifrat. Fie
Pn-1 = penultimul bloc de text în clar de 64 biţi
Pn = ultimul bloc de text în clar, de lungime k, 1 ≤ k ≤ 64
Criptarea se efectuează astfel:
In-1 = blocul de text cifrat obţinut din Pn-1
Cap = sub-bloc format din ultimii 64-k biţi ai blocului In-1
Cn = sub-bloc format din primii k biţi ai blocului In-1
Blocul cifrat In-1 este deci concatenarea Cn + In-1

Cn-1 = blocul de text cifrat obţinut din blocul concatenat de lungime 64 biţi:
Cap + Pn

Decriptarea are la dispoziţie:


Cn-1 = penultimul bloc de text cifrat de 64 biţi
Cn = ultimul bloc de text cifrat, de lungime k, 1 ≤ k ≤ 64

Prin decriptarea blocului Cn-1 se obţin cele două sub-blocuri Cap şi Pn


Prin concatenarea Cap+Cn se obţine blocul intermediar In-1, care prin decriptare duce la Pn-1.

Replicarea blocului
O problemă şi mai serioasă în cadrul modului ECB apare atunci când un adversar ar putea
modifica mesajele criptate fără cunoaşterea cheii sau a algoritmului, astfel încât să facă
imposibilă decriptarea la destinaţie. Pentru ilustrarea problemei să considerăm un sistem de
transfer de bani între conturi aflate în bănci diferite. Pentru a simplifica operarea în sistemele
bancare, băncile cad de acord asupra unui format standard al mesajului:
Banca 1: expeditor 1.5 blocuri
Banca 2: destinatar 1.5 blocuri
Numele deponentului 6 blocuri
Contul deponentului 2 blocuri
Suma transferată 1 bloc

82
Capitolul 5 – Criptografia modernă

Un bloc corespunde unui bloc criptat de 8 octeţi. Mesajele sunt criptate folosind un
algoritm de tip bloc în modul ECB.
Criptanalistul, care ascultă liniile de comunicaţii între cele două bănci, poate folosi această
informaţie pentru a se îmbogăţi. Pentru început înregistrează toate mesajele criptate de la Banca 1
spre Banca 2. Apoi transferă 100 USD de la Banca 1 la Banca 2. La un moment de timp ulterior
repetă transferul. Cu ajutorul calculatorului, examinează mesajele înregistrate, căutând o pereche
de mesaje identice. Acestea sunt cele două mesaje care autorizează transferul a 100 USD în
propriul cont. În acest moment el poate insera acest mesaj folosind accesul la liniile de
comunicaţii dintre cele două bănci, transferând ilegal bani în contul său. La prima vedere băncile
pot preveni acest gen de fraudă prin inserarea unei informaţii de dată şi timp în mesaje, ceea ce
face dificil de interceptat două mesaje identice.

Dată / timp 1 bloc


Banca 1: expeditor 1.5 blocuri
Banca 2: destinatar 1.5 blocuri
Numele deponentului 6 blocuri
Contul deponentului 2 blocuri
Suma transferată 1 bloc

Totuşi, criptanalistul va putea să-şi transfere bani ilegal în contul său, folosind o tehnică
numită replicarea blocului. După identificarea blocurilor cifrate care conţin numele şi contul său
(blocurile 5 până la 12), acestea se înlocuiesc în mesaje interceptate, care sunt apoi trimise spre
destinatar. Schimbarea frecventă a cheilor de către bănci nu rezolvă problema ci doar creşte
efortul criptanalistului.
Soluţia la această problemă fundamentală a modului ECB, care constă în faptul că un
interceptor poate elimina, insera sau modifica blocuri din mesajul cifrat, există şi este o tehnică
numită înlănţuire.

83
Capitolul 5 – Criptografia modernă

5.1.3 Modul înlănţuire în cifrul bloc

Înlănţuirea adaugă un mecanism de feedback la un cifru bloc: rezultatele criptării blocurilor


anterioare sunt introduse în criptarea blocului curent. Astfel, fiecare bloc este folosit pentru a
modifica criptarea următorului bloc. Fiecare bloc de text cifrat este dependent nu numai de blocul
de text în clar care îl generează, ci şi de toate blocurile de text în clar precedente.
În modul înlănţuire în cifrul bloc (CBC2), textul în clar este operat XOR cu blocurile de
text în clar precedente, înainte de a fi criptat. Pentru aceasta se foloseşte un registru de feedback,
care memorează rezultatul operării XOR. Astfel, după ce un bloc de text în clar este criptat, textul
cifrat rezultat este memorat în registrul de feedback. Înainte ca următorul bloc de text în clar să
fie criptat, este operat XOR cu registrul de feedback, iar rezultatul devine blocul de intrare în
rutina de criptare. Blocul de text cifrat rezultat este la rândul lui memorat în registrul de feedback,
pentru a fi operat XOR cu următorul bloc de text în clar şi tot aşa până la sfârşitul mesajului.
Criptarea fiecărui bloc depinde de toate blocurile anterioare.
Decriptarea are loc într-o manieră similară. Un bloc de text cifrat este decriptat normal şi în
acelaşi timp salvat în registrul de feedback. După ce următorul bloc este decriptat, el este operat
XOR cu registrul de feedback. Se continuă cu memorarea următorului bloc de text cifrat în
registrul de feedback şi tot aşa până la sfârşitul mesajului.
În limbaj matematic:

Ci = EK (Pi ⊕ Ci-1)
Pi = Ci-1 ⊕ DK (Ci)

unde:
Ci = bloc de text cifrat curent
EK = rutina de criptare
Pi = bloc de text în clar curent
⊕ = operaţiunea XOR (sau exclusiv)
Ci-1 = bloc de text cifrat anterior

2
Cipher Block Chaining
84
Capitolul 5 – Criptografia modernă

Vectorul de iniţializare
Modul CBC face ca blocuri de text în clar identice să fie criptate în blocuri de text cifrat
diferite doar dacă câteva blocuri anterioare sunt diferite. Două mesaje identice vor fi criptate sub
forma aceluiaşi mesaj cifrat. Şi mai grav, două mesaje care sunt identice în partea de început se
vor cripta identic, până când apare prima diferenţă în textul în clar.
Unele mesaje au un header comun: antetul unei scrisori, linia From dintr-un e-mail. Deşi în
acest caz tehnica de replicare a blocului nu mai este posibilă, acest început identic al mesajelor
criptate oferă criptanalistului informaţii utile.
Aceasta se poate preveni prin criptarea unor date aleatoare ca prim bloc. Acest bloc de date
aleatoare se numeşte vector de iniţializare (IV), variabilă de iniţializare sau valoare iniţială de
înlănţuire. Aceste date nu au nici o semnificaţie: ele sunt prezente pentru a face fiecare mesaj
unic. Când receptorul tratează acest bloc, îl va folosi doar pentru a iniţializa registrul de feedback,
în rest îl ignoră. Deseori o înregistrare de dată şi timp este o bună alegere pentru vectorul de
iniţializare.
Prin adăugarea vectorului de iniţializare mesaje de text în clar identice produc mesaje de
text cifrat diferite. Astfel, devine imposibil pentru un interceptor să aplice tehnica de replicare a
blocului şi este mult mai dificil să încerce deducerea unei cărţi de cod.
Cerinţa ca vectorul de iniţializare să fie unic pentru fiecare mesaj criptat cu aceeaşi cheie
este opţională.
Vectorul de iniţializare nu este necesar să fie secret; el poate fi transmis în clar împreună cu
mesajul de text cifrat. Afirmaţia este susţinută de următoarea demonstraţie: să presupunem că
avem un mesaj format din blocurile: B1, B2, ... Bn. B1 este criptat folosind IV. B2 este criptat
folosind textul cifrat corespunzător blocului B1 ca fiind IV. Astfel, dacă sunt n blocuri, există n-1
IV-uri expuse, chiar dacă IV-ul original este păstrat secret. Nu există deci, nici un motiv de a
păstra IV secret; el este doar un bloc de text cifrat fără corespondent în text în clar şi poate fi
considerat ca fiind B0 pentru a începe înlănţuirea.

Completarea ultimului bloc


Completarea ultimului bloc funcţionează ca şi în modul ECB, dar în anumite aplicaţii textul
cifrat trebuie să aibă aceeaşi lungime ca şi textul în clar (de exemplu pentru ca cele două texte să
ocupe exact acelaşi spaţiu de memorie). În acest caz criptarea ultimului bloc se produce într-un
mod diferit. Să presupunem că ultimul bloc are j biţi. După criptarea ultimului bloc complet, se

85
Capitolul 5 – Criptografia modernă

criptează textul cifrat din nou, se selectează primii j biţi, iar aceştia se operează XOR cu ultimul
bloc pentru a produce ultimul bloc criptat.
Slăbiciunea acestui mod de tratare a ultimului bloc este că prin modificarea de biţi
individuali în textul cifrat se modifică corespunzător ultimul bloc, ceea ce este periculos în cazul
în care aici sunt conţinute informaţii importante.
O calea mai bună de tratare a ultimului bloc este tehnica de capturare. Astfel toţi biţii
mesajului de text în clar trec prin algoritmul de criptare.

Propagarea erorii
Modul CBC poate fi caracterizat ca feedback al textului cifrat la sfârşitul criptării şi ca
feedforward al textului cifrat la sfârşitul decriptării. Aceasta are implicaţii în cazul producerii de
erori. Un singur bit greşit într-un bloc de text în clar va afecta acel bloc în text cifrat şi toate
blocurile în text cifrat ce urmează. Din fericire, efectul este reversibil prin decriptare, iar textul în
clar obţinut va conţine acelaşi bit greşit.
Erorile în text cifrat sunt mult mai frecvente. Ele apar în cazul căilor de comunicaţii de
slabă calitate sau din cauza unor defecte ale mediilor de stocare. În modul CBC, o eroare de un
singur bit în textul cifrat afectează un bloc şi un bit din textul în clar obţinut. Blocul care conţine
eroare este complet afectat, iar blocul următor va avea o eroare de 1 bit pe aceeaşi poziţie ca şi
eroarea originală.
Această proprietate de a converti o eroare mică (relativ la numărul de biţi) din textul cifrat
la o eroare mare (relativ la numărul de biţi) din textul în clar se numeşte extensia erorii. Este un
dezavantaj major.
Blocurile care urmează după cel de-al doilea bloc eronat la nivel de 1 bit nu sunt afectate de
către eroarea iniţială, astfel încât CBC este auto-recuperant. Două blocuri sunt afectate de către o
eroare, dar sistemul recuperează şi continuă să lucreze corect pentru toate blocurile următoare.
CBC este un exemplu de cifru bloc folosit într-o manieră auto-sincronizată, dar numai la nivel de
bloc.
În timp ce modul CBC recuperează rapid erori la nivel de biţi, nu recuperează în nici un fel
erori de sincronizare. Dacă un bit este pierdut din sau adăugat la textul cifrat, atunci toate
blocurile următoare sunt translatate cu un bit, iar decriptarea va produce numai blocuri fără nici
un înţeles. Orice criptosistem care foloseşte modul CBC trebuie să asigure că structura blocului
rămâne intactă, fie folosind frame-uri, fie stocând datele în grupuri de blocuri de lungime fixată.

86
Capitolul 5 – Criptografia modernă

Probleme de securitate
Anumite probleme sunt generate de structura modului CBC. În primul rând, deoarece un
bloc de text cifrat afectează blocul următor de o manieră directă, criptanalistul poate adăuga
blocuri la sfârşitul mesajului criptat, fără a putea fi detectat.
Dacă se foloseşte CBC, textul în clar trebuie structurat astfel încât să se ştie unde se află
sfârşitul mesajului şi să se poată detecta adăugarea blocurilor suplimentare.
În al doilea rând, criptanalistul poate altera un bloc de text cifrat prin introducerea
controlată de modificări în următorul bloc de text cifrat. Astfel, modificând valoarea unui bit,
întregul bloc se va decripta incorect, dar următorul bloc va avea o eroare de un bit în poziţia
corespunzătoare modificării. Ţinând cont de aceasta, întregul mesaj de text în clar trebuie să
includă un anume fel de redundanţă controlată sau autentificare.
În final, deşi tiparele din textul în clar sunt ascunse prin înlănţuire, mesajele foarte lungi vor
conţine în continuare tipare. Paradoxul zilei de naştere prezice că un bloc identic va apărea după
2m/2 blocuri, unde m este mărimea blocului. Pentru o mărime a blocului de 64 de biţi e vorba de
aproape 34 gigaocteţi, ceea ce în lumea reală elimină problema.

5.1.4 Modul cifru-feedback

Cifrurile bloc pot fi implementate şi ca cifruri şir auto-sincronizabile, modul numindu-se


cifru-feedback (CFB3). În modul CBC, criptarea nu poate începe până când nu este disponibil un
bloc complet de date, ceea ce poate deveni o problemă în anumite aplicaţii de reţea. Într-o reţea
sigură, un terminal trebuie să fie capabil să transmită fiecare caracter spre server, de îndată ce
acesta este introdus. Când datele trebuie să fie procesate la nivel de octet, modul CBC nu
funcţionează.
În modul CFB, datele pot fi procesate în unităţi de mărime mai mică decât mărimea
blocului, de exemplu la nivel de octet, ceea ce defineşte modul CFB pe 8 biţi. Un algoritm bloc în
modul CFB operează pe o stivă având lungimea blocului de intrare. Iniţial, stiva este completată
cu un vector de iniţializare (VI), ca şi în modul CBC. Stiva este criptată şi cei 8 biţi aflaţi la
stânga stivei sunt operaţi XOR cu primul octet al textului în clar, rezultând primul caracter de 8
biţi ai textului cifrat, care poate fi transmis.

3
Cipher-FeedBack
87
Capitolul 5 – Criptografia modernă

Stiva este încărcată prin dreapta cu acest caracter, în timp ce caracterul din stânga este
descărcat în urma deplasării spre dreapta cu 8 poziţii binare a stivei. Următorul caracter din textul
în clar este criptat în acelaşi mod. Decriptarea este reversul acestui proces.
Dacă mărimea blocului algoritmului este n, atunci algoritmul CFB pe n biţi este:
Ci=Pi ⊕ EK(Ci-1)
Pi=Ci ⊕ EK(Ci-1)

Ca şi în modul CBC, modul CFB leagă caracterele din textul în clar împreună astfel încât
textul cifrat depinde de tot textul în clar precedent.

Vectorul de iniţializare
Pentru a iniţializa procesul CFB, intrarea în algoritmul bloc trebuie să fie iniţializată cu un
vector de iniţializare (IV). Ca şi în cazul CBC, acesta nu trebuie să fie secret.
Totuşi, IV trebuie să fie unic; dacă nu este unic, un criptanalist poate descoperi textul în
clar corespunzător. Deci IV trebuie schimbat la fiecare mesaj şi nu trebuie repetat pe durata de
viaţă a cheii.

Propagarea erorii
În modul CFB, o eroare în textul în clar afectează toate textele cifrate următoare şi apare la
decriptare. O eroare în textul cifrat este mult mai interesantă. Primul efect al unei erori de un bit
în textul cifrat este o eroare de un bit în textul în clar. După aceasta, eroare intră în stivă, ceea ce
va afecta decriptarea până când bitul greşit va fi descărcat din stivă, după care decriptarea se va
efectua corect. În modul CFB pe n biţi, o eroare de un bit în textul cifrat va afecta decriptarea
blocului curent şi a următoarelor m/n-1 blocuri, unde m este mărimea blocului.
CFB este un cifru bloc care este folosit ca un cifru şir auto-sincronizabil (la nivel de bloc).

5.1.5 Alegerea unui mod criptografic

ECB este cel mai simplu şi mai rapid mod de a folosi un cifru bloc, dar în acelaşi timp este
şi cel mai vulnerabil la atacuri, fiind uşor de criptanalizat. ECB nu se recomandă a fi folosit la
criptarea mesajelor, dar dă bune rezultate la criptarea datelor aleatoare de mici dimensiuni.

88
Capitolul 5 – Criptografia modernă

Pentru un text în clar normal se folosesc modurile CBC sau CFB. Alegerea modului
depinde de cerinţele specifice de securitate. CBC dă bune rezultate în criptarea fişierelor.
Securitatea creşte semnificativ şi chiar dacă uneori există biţi eronaţi în date, erorile de
sincronizare sunt rare.
Prezentăm în continuare un sumar al caracteristicilor de securitate şi eficienţă pentru
modurile analizate, cu plusurile (+) şi minusurile (-) lor.
Modul ECB
Securitate:
• (-) tiparele din textul în clar sunt ascunse
• (-) intrarea în cifrul bloc nu este aleatoare, fiind identică cu textul în clar
• (+) cu aceeaşi cheie se pot cripta mai multe mesaje
• (+) textul în clar este uşor de manipulat; blocurile pot fi înlăturate, repetate sau
interschimbate
Eficienţa:
• (+) viteza este aceeaşi cu a cifrului bloc
• (-) textul cifrat este doar cu un bloc mai lung decât textul în clar
• (-) nu este posibilă pre-procesarea
• (+) procesarea poate fi efectuată în paralel
Toleranţa la eroare:
• (-) o eroare în textul cifrat afectează un întreg bloc de text în clar
• (-) eroarea de sincronizare nu se poate corecta

Modul CBC
Securitate:
• (+) tiparele din textul în clar sunt ascunse prin operare XOR cu blocul de text
cifrat anterior
• (+) intrarea în cifrul bloc este aleatoare prin operare XOR cu blocul de text
cifrat anterior
• (+) cu aceeaşi cheie se pot cripta mai multe mesaje
• (+/-) textul în clar este uneori greu de manipulat; blocurile pot fi înlăturate de la
începutul şi sfârşitul mesajului, biţii primului bloc pot fi schimbaţi şi repetiţia
permite anumite schimbări controlate

89
Capitolul 5 – Criptografia modernă

Eficienţa:
• (+) viteza este aceeaşi cu a cifrului bloc
• (-) textul cifrat este doar cu un bloc mai lung decât textul în clar
• (-) nu este posibilă pre-procesarea
• (+/-) criptarea nu poate fi efectuată în paralel; decriptarea este paralelizabilă şi are
proprietatea de acces aleator
Toleranţa la eroare:
• (-) o eroare în textul cifrat afectează un întreg bloc de text în clar şi bitul
corespunzător din următorul bloc
• (-) eroarea de sincronizare nu se poate corecta

Modul CFB
Securitate:
• (+) tiparele din textul în clar sunt ascunse
• (+) intrarea în cifrul bloc este aleatoare
• (+)+ cu aceeaşi cheie se pot cripta mai multe mesaje, cu condiţia să se folosească
IV-uri diferite
• (+/-) textul în clar este uneori greu de manipulat; blocurile pot fi înlăturate de la
începutul şi sfârşitul mesajului, biţii primului bloc pot fi schimbaţi şi repetiţia
permite anumite schimbări controlate
Eficienţa:
• (+) viteza este aceeaşi cu a cifrului bloc
• (-) textul cifrat este de aceeaşi lungime ca şi textul în clar
• (-) este posibilă o anumită pre-procesarea înainte de apariţia blocului; blocul de
text cifrat anterior se poate cripta
• (+/-) criptarea nu poate fi efectuată în paralel; decriptarea este paralelizabilă şi are
proprietatea de acces aleator
Toleranţa la eroare:
• (-) o eroare în textul cifrat afectează un întreg bloc de text în clar şi bitul
corespunzător din textul în clar
• (+) erorile de sincronizare ale blocurilor se pot corecta

90
Capitolul 5 – Criptografia modernă

5.1.6 Algoritmul DES

Algoritmul DES (Data Encryption Standard) a fost dezvoltat pentru guvernul Statelor Unite
şi pentru folosinţă publică. El a fost dezvoltat plecând de la algoritmul “Lucifer” conceput în
Laboratoarele IBM. În mai 1973, revista Federal Register a sintetizat principiile care trebuie să
stea la baza proiectării unui algoritm criptografic standard:
- algoritmul trebuie să asigure un înalt nivel de securitate;
- algoritmul trebuie să fie complet specificat şi simplu de înţeles;
- securitatea algoritmului trebuie să fie asigurată de cheie şi nu trebuie să depindă de
păstrarea secretă a algoritmului;
- algoritmul trebuie să fie disponibil tuturor utilizatorilor;
- algoritmul trebuie să fie adaptabil pentru diverse aplicaţii;
- algoritmul trebuie să fie implementabil pe dispozitivele electronice;
- algoritmul trebuie să fie eficient în utilizare;
- algoritmul trebuie să poată fi validat;
- algoritmul trebuie să fie exportabil.
DES a fost oficial adoptat ca standard federal în 23 noiembrie 1976, iar în 1977
specificaţiile sale au fost făcute publice.

Privire generală asupra algoritmului


Algoritmul DES este o combinaţie complexă folosind două blocuri fundamentale în
criptografie: substituţia şi permutarea (transpoziţia). Acest cifru bloc acceptă un bloc de 64 de biţi
la intrare şi generează un bloc cifrat de 64 de biţi. DES este un algoritm simetric. Acelaşi
algoritm şi aceeaşi cheie sunt folosiţi atât la criptare cât şi la decriptare.
Algoritmul este constituit din 16 cicluri repetate ale blocurilor fundamentale. Textul iniţial
este descompus în blocuri de 64 de biţi. Cheia este de 64 biţi din care doar 56 sunt efectivi,
ceilalţi fiind biţi de paritate. Folosirea substituţiei provoacă confuzie prin sistematica substituire a
unor biţi cu alţii. Transpoziţiile provoacă difuzie prin re-ordonarea biţilor.
Algoritmul foloseşte numai operaţii clasice aritmetice şi logice cu număr de până la 64 de
biţi, ceea ce face relativ uşor de implementat atât software cât mai ales hardware: unul din
scopurile declarate ale algoritmului fiind uşoara lui implementare hardware într-un cip
specializat.
Parcurgerea celor 16 cicluri, descrisă în [Pfl89] are loc după schema din figura 5.1:

91
Capitolul 5 – Criptografia modernă

Intrare

permutare iniţială

Substituţie Cheia

Permutare
Ciclul 1

Substituţie Cheia

Permutare
Ciclul 2

Substituţie Cheia

Permutare
Ciclul 16

Imaginea inversată a permutării iniţiale

Ieşire

Fig. 5.1 Detalii pentru folosirea algoritmului DES

92
Capitolul 5 – Criptografia modernă

La intrarea datele sunt împărţite în blocuri de 64 biţi, care sunt transformate folosind cheia
de 64 de biţi. Cei 64 de biţi sunt permutaţi prin “permutarea iniţială”. În continuare, urmează
operaţiile ce constituie un ciclu. Blocul de 64 de biţi este separat în două, “jumătatea stângă” şi
“jumătatea dreaptă”, fiecare de 32 de biţi. Cheia este deplasată la stânga cu un număr de biţi şi
permutată: ea se combină cu “partea dreaptă” care apoi se combină cu “partea stângă”; rezultatul
devine noua “parte dreaptă”; vechea “parte dreaptă” devine noua “parte stângă” (vezi fig. 5.2).

Date permutate

Jumătatea stângă Jumătatea dreaptă Cheie


deplasată
S

Cheie
permutată

Noua jumătatea
stângă (vechea Noua jumătatea
jumătate dreaptă) dreaptă

Fig. 5.2 Manipularea cheii în algoritmul DES


După repetarea acestui ciclu de 16 ori se face permutarea finală care este inversă permutării
iniţiale.
Pentru combinarea unei secvenţe de 32 biţi cu cheia de 64 biţi se folosesc expandări de la
32 biţi la 48 biţi şi reducerea cheii de la 64 biţi la 48 biţi prin alegerea anumitor biţi, operaţii ce le
numim “permutare expandată” şi “permutare aleasă” (fig. 5.3).

Permutare Permutare aleasă Permutare expandată


Fig. 5.3 Manipularea permutării în algoritmul DES

93
Capitolul 5 – Criptografia modernă

În fiecare ciclu practic au loc patru operaţii separate. Întâi partea dreaptă este expandată de
la 32 la 48 biţi; apoi este combinată cu o formă a cheii; rezultatul este substituit şi condensat în 32
biţi, cei 32 biţi sunt permutaţi şi apoi combinaţi cu partea stângă pentru a da o nouă parte dreaptă
(fig. 5.4).

D S Cheia
32 biţi 32 biţi 28 biţi 28 biţi
Permutare Deplasare Deplasare
expandată

permutare aleasa de
58 biţi

48 biţi

5.4 Ciclul în algoritmul DES


Permutarea expandată este definită în tabelul ce urmează:
Bit 1 2 3 4 5 6 7 8
se mută la 2,48 3 4 5,7 6,8 9 10 11,13
Bit 9 10 11 12 13 14 15 16
se mută la 12,14 15 16 17,19 18,20 21 22 23,25
Bit 17 18 19 20 21 22 23 24
se mută la 24,26 27 28 29,31 30,32 33 34 35,37
Bit 25 26 27 28 29 30 31 32
se mută la 36,38 39 40 41,43 42,44 45 46 47,1
Tabelul 5.1 Definirea permutării expandate în DES
94
Capitolul 5 – Criptografia modernă

Cheia este împărţită cu două părţi de 28 biţi deplasate la stânga cu un număr de biţi apoi
reunite şi 48 din cei 56 de biţi sunt permutaţi şi folosiţi ca o cheie de 48 de biţi de-a lungul
ciclului.
Cheia dintr-un ciclu este combinată printr-o funcţie sau exclusiv cu “partea dreaptă”
expandată. Rezultatul este operat în 8 “cutii-S” care efectuează substituţia. O “cutie-S” este o
tabelă în care 6 biţi de date sunt înlocuiţi de 4 biţi.
Permutările sunt efectuate de tabele numite “cutii-P”.

Consideraţii asupra algoritmului DES


Cu algoritmul DES se poate face atât codificarea cât şi decodificarea unui mesaj.
Rezultatul este adevărat pentru că ciclul j derivă din ciclul (j-1) astfel:
S j = Dj −1 (1)

D j = S j −1 (+) f ( D j −1 ,k j ) (2)

unde (+) este operaţia sau exclusiv, f este funcţia rezultată din operaţiile dintr-un ciclu.
Aceste ecuaţii arată că rezultatul fiecărui ciclu depinde numai de ciclul precedent.
Descriind ecuaţiile pentru D j-1 şi S j-1 avem :
Dj − 1 = S j (3)

şi S j −1 = D j (+) f ( D j −1 ,k j ) (4)

înlocuind (3) în (4) avem:


S j −1 = D j (+) f ( S j ,k j ) (5)

Ecuaţiile (3) şi (5) arată că aceleaşi valori pot fi obţinute în cicluri ulterioare. Această
proprietate face algoritmul DES reversibil.
Deci putem face codificarea unor date şi decodificarea lor folosind acelaşi algoritm făcând
observaţia că la decodificare cheia se ia în ordine inversă.
Datorită lungimii cheii de lucru şi a operaţiilor elementare pe care le foloseşte algoritmul,
nu se ridică probleme deosebite într-o implementare software; singura observaţie este că, datorită
modulului de lucru (cu secvenţe de date, cu tabele) practic algoritmul este lent într-o
implementare software. Modul de concepere îl face însă perfect implementabil hard (într-un cip)
ceea ce s-a şi realizat, existând multiple variante de maşini hard de codificare.

95
Capitolul 5 – Criptografia modernă

Criptanaliza
Deşi DES a fost cel mai celebru algoritm al secolului XX este considerat la această oră
nesigur pentru multe aplicaţii. Pare paradoxal, dar aceasta este consecinţa măririi considerabile a
puterii de calcul de la confirmarea DES – ului ca un standard criptografic şi până in anul 2000.
Slăbiciunea pleacă de la lungimea prea mică a cheii de 56 de biţi. Varianta algoritmului
cunoscută ca triplu-DES este cea care este considerată sigură şi la această oră.
Insecuritatea DES-ului pleacă de la premiza că un atac “în forţă” are şanse de reuşită în
condiţiile puterii de calcul disponibile astăzi ( a se vedea atacurile EFF4 ); până în 2004 cel mai
eficient atac este datorat criptanalizei liniare care folosind 243 texte cunoscute generează o
complexitate temporală de 239-43 (Junod 2001); în condiţiile unui atac cu text ales complexitatea
poate fi redusă de patru ori (Knudsen şi Mathiassen, 2000).
O istorie cronologică a DES – ului este prezentată în următorul tabel:

Data Anul Evenimentul


15 mai 1973 NBS publică prima cerere pentru un algoritm standard pentru criptare
27 august 1974 NBS publică a doua cerere pentru un algoritm standard pentru criptare
17 martie 1975 DES este publicat în Federal Register5 pentru comentarii
august 1976 Se organizează primul workshop despre DES
septembrie 1976 Al doilea workshop despre fundamentele matematice ale DES-ului
noiembrie 1976 DES este aprobat ca un standard
15 ianuarie 1977 DES este publicat în FIPS PUB 46
1983 DES este reconfirmat pentru prima dată
22 ianuarie 1988 DES este reconfirmat pentru a doua oară ca FIPS 46-1
Biham şi Shamir publică primul atac teoretic cu o complexitate mai mică
decât atacul
1992
”în forţă brută” : criptanaliza diferenţială ; metoda cerea un număr
nerealist (247) de texte alese
30 decembrie 1993 DES este reconfirmat pentru a treia oară ca FIPS 46-2
Prima criptanaliză experimentală folosind criptanaliza liniară (Matsui,
1994
1994)
Proiectul DESCHALL sparge pentru prima dată în public un mesaj criptat
iunie 1997
cu DES
iulie 1998 EFF găseşte o cheie pentru DES în 56 de ore

4
Electronic Frontier Foundation
5
Publicaţie a NIST (National Institute of Standards and Technology)
96
Capitolul 5 – Criptografia modernă

EFF folosind putere de calcul distribuită găseşte o cheie pentru DES în 22


ianuarie 1999
de ore şi 15 minute
DES este reconfirmat pentru a patra oară ca FIPS 46-3 cu specificaţia
25 octombrie 1999
preferinţei pentru Triplu DES
26 noiembrie 2001 AES este publicat în FIPS 197
26 mai 2002 Standardul AES devine efectiv
Retragerea standardului FIPS 46-3 (şi a celor conexe) este propusă în
26 iulie 2004
Federal Register

Tabelul 5.2 Cronologia evenimentelor algoritmului DES

5.1.7 Variante de DES


DES multiplu
Unele implementări de DES folosesc triplul-DES. Deoarece DES nu este un grup, textul
cifrat rezultat este mult mai greu de spart folosind căutarea exhaustivă: 2112 încercări în loc de 256
încercări.

DES cu sub-chei independente


O altă variantă constă în folosirea unei sub-chei diferite pentru fiecare trecere, în loc de a o
genera dintr-o singură cheie de 56 de biţi. Deoarece în fiecare din cele 16 treceri se foloseşte o
cheie de 48 de biţi, rezultă că lungimea cheii pentru această variantă este de 768 biţi, ceea ce va
creşte semnificativ dificultatea unui atac în forţă împotriva algoritmului, acesta având
complexitatea de 2768.
Totuşi, un atac de tip “întâlnire la mijloc” este posibil, ceea ce reduce complexitatea
atacului la 2384; încă destul de lung pentru orice nevoie imaginabilă de securitate.
Această variantă poate fi analizată folosind criptanaliza diferenţială şi poate fi spartă cu 261
texte în clar date. Se pare că nici o modificare în planificarea cheilor nu conduce la întărirea
semnificativă a algoritmului DES.

DESX
DESX este o variantă DES dezvoltată de RSA Data Security, care a fost inclusă încă din
1968 în programul de securitate pentru poştă electronică MailSafe. DESX foloseşte o tehnică
numită albire, pentru a ascunde intrările şi ieşirile DES. În plus faţă de cheia DES de 56 de biţi,

97
Capitolul 5 – Criptografia modernă

DESX are o cheie suplimentară de albire de 64 de biţi. Aceşti 64 de biţi sunt operaţi XOR cu
textul în clar înainte de prima trecere DES. 64 de biţi suplimentari, calculaţi ca o funcţie bijectivă
de toţi cei 120 de biţi ai cheii DES, sunt operaţi XOR cu textul cifrat înaintea ultimei treceri.
Albirea îl face pe DESX mult mai puternic decât DES faţă de un atac în forţă; atacul necesită
(2120)/n operaţii cu n texte în clar cunoscute. De asemenea se îmbunătăţeşte securitatea împotriva
criptanalizei liniare şi diferenţiale; atacul necesită 261 texte în clar date şi 260 de texte în clar
cunoscute.

CRYPT(3)
CRYPT(3) este o variantă de DES întâlnită în sistemele UNIX. Este folosită în mod
obişnuit pentru parole, dar uneori şi pentru criptare. Diferenţa între CRYPT(3) şi DES este că
CRYPT(3) are o permutare de chei cu 212 posibilităţi, astfel încât să nu permită folosirea cipurilor
DES la construcţia unui dispozitiv hardware de spart parole.

DES generalizat
DES-ul generalizat (GDES) a fost proiectat să mărească viteza DES-ului şi să întărească
algoritmul. Mărimea totală a blocului creşte, în timp ce suma calculelor rămâne constantă.
GDES operează pe blocuri de text în clar de lungime variabilă. Blocurile criptate sunt
împărţite în q sub-blocuri; numărul exact depinde de mărimea totală a blocului. În general q este
egal cu lungimea blocului împărţită la 32.
Funcţia f este calculată o dată la fiecare trecere, pe ultimul bloc din dreapta. Rezultatul este
operat XOR cu toate celelalte părţi, care sunt apoi rotite spre dreapta. GDES are un număr
variabil de treceri, n. Exista o mică modificare la ultima trecere, astfel încât procesele de criptare
şi decriptare diferă doar prin ordinea sub-cheilor. De fapt, pentru q=2 şi n=16 se obţine
algoritmul DES.
Biham şi Shamir arată că, folosind criptanaliza diferenţială, GDES cu q=8 şi n=16 este
vulnerabil cu doar şase texte în clar date. Dacă se folosesc şi sub-chei independente, sunt
necesare 16 texte în clar date. Pentru q=8 şi n=64, GDES e mai slab decât DES; sunt necesare 249
texte în clar date pentru a-l sparge. De fapt, orice schemă GDES este mai rapidă decât DES, dar
este de asemenea mai puţin sigură.

98
Capitolul 5 – Criptografia modernă

RDES
RDES este o variantă care înlocuieşte schimbarea stânga-dreapta de la sfârşitul fiecărei
treceri cu o schimbare dependentă de cheie. Schimbările sunt fixe, depinzând doar de cheie.
Aceasta înseamnă că cele 15 schimbări dependente de cheie se petrec cu 215 posibilităţi şi că
această variantă nu rezistă la criptanaliza diferenţială.
O idee mai bună este ca schimbarea să aibă loc doar în partea dreaptă, la începutul fiecărei
treceri, iar schimbarea să depindă de datele de intrare şi nu de cheie. În RDES-1 se practică o
schimbare dependentă de date de cuvinte pe 16 biţi la începutul fiecărei treceri. În RDES-2 există
o schimbare de octeţi dependentă de date la începutul fiecărei treceri, după o schimbare ca în
RDES-1. Se poate continua în acelaşi mod până la RDES-4. RDES-1 este sigură atât faţă de
criptanaliza liniară cât şi faţă de cea diferenţială.

5.1.8 Algoritmul AES

În ianuarie 1997, NIST6 a organizat un concurs de criptografie deschis cercetătorilor din


întreaga lume, având ca subiect crearea unui nou standard, care urma să se numească AES7.
Regulile concursului erau:
- algoritmul să fie un cifru bloc simetric;
- proiectul trebuia să fie public;
- AES trebuia să suporte chei de 128, 192 şi 256 biţi;
- algoritmul trebuia să se poată implementa atât hardware cât şi software;
- AES trebuia să fie un standard public sau oferit cu licenţă ne discriminatorie.

În august 1998 NIST a selectat cinci finalişti pe criterii de securitate, eficienţă, flexibilitate şi
cerinţe de memorie. Finaliştii au fost:
1. Rijndael (Joan Daemen şi Vincent Rijmen, 86 de voturi)
2. Serpent (Ross Anderson, Eli Biham, Lars Knudsen, 56 voturi)
3. Twofish (echipa condusă de Bruce Schneier, 31 voturi)
4. RC6 (RSA Laboratories, 23 voturi)
5. MARS (IBM, 13 voturi)

6
National Institute of Standards and Technology SUA
7
Advanced Encryption Standard – Standard de Criptare Avansat
99
Capitolul 5 – Criptografia modernă

În octombrie 2000 NIST a stabilit câştigătorul. Acesta este algoritmul Rijndael, dezvoltat
de doi tineri cercetători belgieni, Joan Daemen şi Vincent Rijmen şi care devine standard
guvernamental al SUA. Se speră ca Rjindael să devină standardul criptografic dominant în lume
pentru următorii 10 ani.
Rijndael permite lungimi de chei şi mărimi de blocuri de la 128 de biţi la 256 de biţi, în
paşi de câte 32 de biţi. Lungimea cheii şi lungimea blocului pot fi alese în mod independent, dar
în practică se vor folosi două variante: bloc de 128 biţi cu cheie de 128 biţi şi bloc de 128 biţi cu
cheie de 256 biţi. Standardul comercial va deveni cel mai probabil varianta 128/128. O cheie de
128 biţi permite un spaţiu al cheilor de 2128 chei.

Preliminarii matematice
Rijndael se bazează pe teoria câmpului Galois, în sensul că anumite operaţiuni sunt definite
la nivel de octet iar octeţii reprezintă elemente în câmpul finit GF(28).
Cum toate reprezentările câmpului finit GF(28) sunt izomorfe, se poate alege reprezentarea
clasică polinomială, cu impact pozitiv asupra complexităţii implementării.
Octetul b, format din biţii b7, b6, b5, b4, b3, b2, b1 şi b0, este considerat ca fiind un polinom
de gradul 7 cu coeficienţi 0 sau 1:
b7 x7 + b6 x6 + b5 x5 + b4 x4 + b3 x3 + b2 x2 + b1 x + b0
Operaţiunea de adunare este definită ca suma a două polinoame în care coeficienţii se
adună modulo 2 şi care corespunde operării XOR a celor doi octeţi corespondenţi. Sunt
îndeplinite axiomele grupului abelian: operaţia este internă, asociativă, comutativă, există
element neutru şi element invers
Operaţiunea de înmulţire corespunde produsului a două polinoame modulo, un polinom
ireductibil de grad 8 şi care pentru AES este
m(x) = x8 + x4 + x3 + x + 1

Înmulţirea este internă (rezultatul este un polinom de grad strict mai mic ca 8), asociativă şi
există element neutru. Elementul invers se determină cu algoritmul lui Euclid, iar distributivitatea
celor doua operaţii se verifică.
Concluzia este că mulţimea celor 256 de valori posibile ale unui octet, împreună cu cele
două operaţiuni definite mai sus formează un corp algebric finit, respectiv GF(28).

100
Capitolul 5 – Criptografia modernă

Proiectarea AES
În proiectarea AES s-a ţinut cont de trei criterii:
- rezistenţa împotriva tuturor atacurilor cunoscute;
- viteza şi compactitatea codului pe un mare număr de platforme;
- simplicitatea proiectării.

Ca şi DES, AES foloseşte substituţie şi permutări, ca şi runde multiple. Numărul de runde


depinde de mărimea cheii şi de mărimea blocului, fiind 10 în cazul 128/128 şi mărindu-se până la
14 pentru cazul 256/128. Spre deosebire de DES, toate operaţiile sunt la nivel de octet, pentru a
permite implementări eficient hardware şi software.

Descrierea AES
În algoritmul AES rezultatul cifrat intermediar este numit vector state, care poate fi
reprezentat ca un tabel cu patru linii şi patru coloane, acestea fiind numerotate începând de la 0.
Vectorul state se iniţializează cu blocul de 128 biţi de text în clar (în ordinea coloanelor, cu
primii patru octeţi în coloana 0) şi va fi modificat la fiecare pas al calculului, prin substituţii,
permutări şi alte transformări, rezultând în final blocul de 128 biţi de text cifrat.
Cheia de 128 de biţi este expandată în 11 tabele 4x4 notate rk(0), rk(1),...., rk(10).
Expandarea este realizată prin rotiri repetate şi operaţii XOR asupra unor grupuri de biţi din cheia
originală.
Înainte de a începe cele 10 runde, cheia rk(0) se operează XOR cu vectorul state.
Calculul principal constă în execuţia a 10 runde, folosind cheia rk(i) la iteraţia i. Fiecare
rundă constă în patru paşi.
Pasul 1 realizează o substituţie octet cu octet asupra vectorului state folosind o cutie S.
Pasul 2 roteşte la stânga fiecare din cele 4 rânduri ale vectorului state: rândul 0 este rotit cu
0 octeţi, rândul 1 este rotit cu 1 octet, rândul 2 este rotit cu 2 octeţi şi rândul 3 este rotit cu 3
octeţi, realizând difuzia datelor.
Pasul 3 amestecă fiecare coloană din vectorul state independent de celelalte, prin înmulţirea
coloanei cu o matrice constantă, multiplicarea fiind realizată folosind câmpul finit Galois GF(28).
În fine, pasul 4 operează XOR cheia rk din runda respectivă cu vectorul state.
Deoarece fiecare pas este reversibil, decriptarea se poate realiza prin rularea algoritmului de
la coadă la cap, sau prin rularea algoritmului de criptare nemodificat, dar folosind tabele diferite.

101
Capitolul 5 – Criptografia modernă

Avantaje AES
Avantajele AES relativ la implementare sunt:
- AES se poate implementa pe un procesor Pentium Pro şi va rula cu o viteză mai
mare decât orice alt cifru bloc;
- AES se poate implementa pe un dispozitiv Smart Card, folosind un spaţiu redus
de memorie RAM şi un număr redus de cicluri;
- transformarea din cadrul unei runde este paralelă prin proiectare, ceea ce
constituie un avantaj pentru viitoarele procesoare;
- AES nu foloseşte operaţiuni aritmetice, ci doar operaţii la nivel de şiruri de biţi.

Simplitatea proiectării AES:


- AES nu foloseşte componente criptografice externe, cum ar fi cutii S, biţi aleatori
sau şiruri de cifre din dezvoltarea numărului π;
- AES nu îşi bazează securitatea pe interacţiuni obscure sau greu de înţeles între
operaţiuni aritmetice;
- proiectarea clară a AES nu permite ascunderea unei “trape”.

Lungimea variabilă a blocului


- lungimile de bloc de 192 şi 256 biţi permit construirea unei funcţii hash iterative
folosind AES ca funcţie de compresie.

Extensii:
- proiectarea permite specificarea de variante cu lungimi de blocuri şi lungimi de
chei aflate între 128 şi 256 biţi, în paşi de câte 32 de biţi;
- deşi numărul de runde în AES este fixat în specificaţiile algoritmului, el poate
modificat ca un parametru în cazul unor probleme de securitate.

Limitările AES
Limitările AES sunt în legătură cu algoritmul de decriptare:
- algoritmul de decriptare este mai puţin pretabil la implementarea pe un dispozitiv
Smart Card, deoarece necesită mai mult cod şi mai multe cicluri;
- implementarea software a AES foloseşte cod şi/sau tabele diferite pentru
algoritmul de criptare, respectiv decriptare;
102
Capitolul 5 – Criptografia modernă

- implementarea hardware a AES a algoritmului de decriptare refoloseşte doar


parţial circuitele care implementează algoritmul de criptare.

5.1.9 Algoritmul LUCIFER

În 1960, IBM iniţiază un program de cercetare în criptografia computerizată numit Lucifer.


Astfel se numeşte şi algoritmul cifru bloc dezvoltat în cadrul acestui program în 1970. În realitate
există cel puţin doi algoritmi cu acest nume.
Lucifer este o reţea de permutări şi substituţii, cu blocuri construite într-o manieră
asemănătoare cu DES. În DES, ieşirea funcţiei f este operată XOR cu intrarea fazei anterioare
pentru a forma intrarea fazei curente. În cazul lui Lucifer, “cutiile-S” au intrări şi ieşiri de 4 biţi;
intrarea este o permutare a biţilor ieşirii din faza anterioară, iar intrarea din prima fază este chiar
textul în clar. Un bit cheie este folosit pentru a alege între “cutia-S” actuală din două posibile -
Lucifer implementează aceasta printr-o “cutie-T” cu 9 biţi la intrare şi 8 la ieşire). Lucifer are 16
faze, blocuri de 128 de biţi şi o manipulare a cheii mai simplă decât DES-ul.
Folosind criptografia diferenţială împotriva primei forme de Lucifer, Biham şi Shamir au
arătat că Lucifer cu 8 faze şi 32 de biţi poate fi spart cu 40 de texte în clar alese şi 229 paşi; acelaşi
atac poate sparge Lucifer cu 8 faze şi 128 biţi cu 60 de texte în clar alese şi 253 paşi. Aceste
atacuri folosesc “cutii-S” DES tari. Folosind criptografia diferenţială împotriva celei de a doua
forme de Lucifer, s-a arătat că “cutiile-S” sunt mai slabe decât în DES. Analize ulterioare au
arătat că peste jumătate din chei nu sunt sigure, ceea ce conduce la posibilitatea de a sparge
Lucifer cu 128 de biţi, cu orice număr de faze, cu 233 texte în clar alese, sau cu 265 texte în clar
cunoscute cu chei alese. În concluzie, a doua formă de Lucifer este mai slabă. Sentimentul că
Lucifer este mai sigur decât DES datorită lungimii mai mari a cheii şi lipsei de rezultate publicate
este nejustificat.

5.1.10 Algoritmul Madryga

W.E. Madryga a propus în 1984 algoritmul bloc care îi poartă numele, caracterizat printr-o
bună eficienţă la nivelul programării software-ului: nu are permutări excesive şi lucrează la nivel
de octet, fiind proiectat pentru a îndeplini următoarele obiective:

103
Capitolul 5 – Criptografia modernă

1. Textul în clar nu poate fi obţinut din textul cifrat fără a folosi cheia – aceasta
înseamnă că algoritmul este sigur.
2. Numărul operaţiilor necesar pentru a determina cheia dintr-un eşantion de text în
clar şi text cifrat trebuie să fie statistic egal cu produsul dintre numărul operaţiilor
de criptare şi numărul de chei posibile – deci nici un atac în text clar nu ar putea fi
mai eficient decît atacul în forţă.
3. Cunoaşterea algoritmului nu trebuie să afecteze forţa cifrului – toată securitatea
rezidă în cheie.
4. O schimbare de un bit în cheie trebuie să producă o schimbare radicală în textul
cifrat obţinut din acelaşi text în clar şi o schimbare de un bit în textul în clar
trebuie să producă o schimbare radicală în textul cifrat obţinut folosind aceeaşi
cheie – acesta este efectul avalanşă.
5. Algoritmul trebuie să conţină o combinaţie necomutativă de substituţii şi
permutări.
6. Algoritmul trebuie să includă substituţii şi permutări într-un mod determinat, atât
de datele de intrare cât şi de cheie.
7. Grupurile repetitive de biţi din textul în clar trebuie să fie total ascunse în textul
cifrat.
8. Lungimea textului cifrat trebuie să fie egală cu a textului în clar .
9. Nu trebuie să existe nici o relaţie simplă între o cheie posibilă şi efectele sale
asupra textului cifrat
10. Orice cheie posibilă trebuie să producă un cifru puternic – nu se admit chei slabe.
11. Lungimea cheii şi a textului trebuie să fie ajustabile, pentru a îndeplini diverse
cerinţe de securitate.
12. Algoritmul trebuie să poată fi implementat eficient pe calculatoare mari, pe PC-uri
cât şi în circuite dedicate – de fapt funcţiile folosite în algoritm sunt limitate la
XOR şi deplasarea biţilor.

DES îndeplineşte primele nouă obiective, dar ultimele trei sunt noi. Presupunând că cel
mai bun mod de a sparge algoritmul este atacul în forţă, o cheie de lungime variabilă va
depăşi obiecţiile privind lungimea insuficientă a cheii.

104
Capitolul 5 – Criptografia modernă

Descrierea algoritmului Madryga


Madryga constă în două cicluri imbricate. Ciclul exterior se repetă de opt ori şi aplică ciclul
interior textului în clar. Ciclul interior transformă textul în clar în text cifrat şi se repetă pentru
fiecare bloc de 8 biţi din textul în clar. Astfel, algoritmul parcurge întregul text în clar de opt ori.
O iteraţie a ciclului interior se aplică unei ferestre de 3 octeţi de date numită frame-ul de
lucru. Fereastra avansează cu 1 octet la fiecare iteraţie (şirul de date este considerat circular când
se procesează ultimii octeţi). Primii doi octeţi din frame-ul de lucru sunt rotiţi cu un număr
variabil de poziţii, în timp ce ultimul octet este operat XOR cu anumiţi biţi din cheie. Pe măsură
ce frame-ul de lucru avansează, toţi octeţii sunt rotiţi şi operaţi XOR cu părţi din cheie. Rotaţiile
succesive se suprapun cu rezultatele operării XOR şi a rotaţiilor anterioare, iar datele obţinute din
operarea XOR sunt folosite pentru a influenţa rotaţia. Aceasta face întregul proces reversibil.
Deoarece fiecare octet influenţează cei doi octeţi din stânga sa şi un octet aflat la dreapta sa,
după opt treceri, fiecare octet din textul cifrat depinde de 16 octeţi aflaţi la stânga sa şi de 8 octeţi
aflaţi la dreapta sa.
În procesul de criptare, fiecare iteraţie a ciclului interior începe cu frame-ul de lucru definit
cu penultimul octet al textului în clar ca prim octet şi avansează circular până la ante-penultimul
octet al textului în clar. Iniţial, cheia este operată XOR cu o constantă aleatoare şi apoi rotită la
stânga cu 3 biţi. Ultimii trei biţi ai celui de-al treilea octet din frame-ul de lucru sunt salvaţi; ei
vor controla rotirea celorlalţi doi octeţi din frame. Apoi ultimul octet al frame-ului de lucru este
operat XOR cu ultimul octet din cheie. Primii doi octeţi concatenaţi sunt rotiţi spre stânga cu un
număr variabil de poziţii (0-7). În final, fereastra avansează spre dreapta cu un octet şi întregul
proces se repetă.
Scopul constantei aleatoare este să transforme cheia într-un şir pseudo-aleator. Lungimea
acestei constante trebuie să fie egală cu lungimea cheii şi trebuie să fie aceeaşi pentru toţi cei care
doresc să comunice. Pentru o cheie de 64 de biţi, Madryga recomanda constanta
0x0f1e2d3c4b5a6978.
Decriptarea inversează acest proces. Fiecare iteraţie a ciclului interior începe cu frame-ul de
lucru poziţionat pe ante-penultimul octet al textului cifrat şi avansează în direcţia inversă cu câte
un octet, în mod circular, până la penultimul octet al textului cifrat. Atât cheia cât şi cei doi octeţi
cifraţi sunt rotiţi spre dreapta, iar între rotaţii are loc operarea XOR.

105
Capitolul 5 – Criptografia modernă

Criptanaliza algoritmului Madryga


Cercetătorii de la Universitatea din Queensland au studiat, printre alte cifruri bloc şi
algoritmul Madryga. Ei au observat că algoritmul nu prezintă efectul de avalanşă şi că, de
asemenea, multe texte cifrate au un procentaj crescut de valori de 1 faţă de valorile de 0.
Deşi nu se cunoaşte nici o analiză formală a algoritmului, impresia generală este că gradul
de securitate oferit nu este, în general, satisfăcător.

5.1.11 Algoritmul FEAL

FEAL a fost proiectat de Akihiro Shimizu şi Shoji Miyaguchi de la NTT Japonia.


Algoritmul foloseşte blocuri de 64 de biţi şi o cheie tot de 64 de biţi. Ideea este de a construi un
algoritm tip DES cu o funcţie de ciclu mai puternică. Necesitând mai puţine cicluri, algoritmul ar
trebui să fie mai rapid decât DES.

Descrierea FEAL
Procesul de criptare începe cu un bloc de 64 de biţi ai textului în clar. Blocul este operat
XOR cu cheia de 64 de biţi şi apoi înjumătăţit. Jumătatea stângă este operată XOR cu jumătatea
dreaptă pentru a forma o nouă jumătate dreaptă. Jumătatea stângă şi noua jumătate dreaptă trec
prin n cicluri; în fiecare ciclu, jumătatea dreaptă este combinată cu 16 biţi din cheie (folosind
funcţia f) şi operată XOR cu jumătatea stângă, pentru a genera noua jumătate dreaptă. Jumătatea
dreaptă originală (de la începutul ciclului) devine noua jumătate stângă. După n cicluri, jumătatea
stângă este din nou operată XOR cu jumătatea dreaptă pentru a forma noua jumătate dreaptă, care
se concatenează cu jumătatea stângă, reîntregind blocul de 64 de biţi. Blocul de date este operat
XOR cu alţi 64 de biţi din cheie şi algoritmul se termină.
Funcţia f ia cei 32 de biţi ai unei jumătăţi de bloc şi 16 biţi din cheie şi îi amestecă. Biţii de
date sunt sparţi în 4 sub-blocuri de câte 8 biţi, apoi sub-blocurile sunt operate XOR şi substituite
între ele.
Cele două funcţii S0 şi S1 sunt definite astfel:

S0 (a, b) = rotaţie stânga 2 biţi ((a+b) mod 256)


S1 (a, b) = rotaţie stânga 2 biţi ((a+b+1) mod 256)

106
Capitolul 5 – Criptografia modernă

Acelaşi algoritm se poate folosi şi la decriptare. Singura diferenţă este că folosirea cheii
trebuie efectuată în ordine inversă.
Viteza de criptare FEAL pe un procesor tip 286 de 10 GHz este de 220 KB/sec.

Criptanaliza FEAL
FEAL-4, FEAL cu patru cicluri, a fost decriptat cu succes, folosind un atac cu texte în clar
alese, fiind primul succes al criptanalizei diferenţiale care a necesitat doar 20 de texte în clar
alese. Pentru spargerea lui FEAL-16 sunt necesare 228 texte în clar alese.
La încercarea de a modifica FEAL prin mărirea cheii la 128 de biţi, criptanaliza a arătat că
algoritmul este la fel de uşor de spart ca şi în cazul cheii de 64 de biţi.

5.1.12 Algoritmul RC2

RC2 este un algoritm de criptare cu cheie de lungime variabilă, proiectat de Ron Rivest
pentru compania RSA. Este un algoritm proprietar ale cărui detalii nu au fost publicate.
RC2 este un cifru bloc cu cheie de lungime variabilă care operează pe blocuri de lungime
de 64 de biţi şi care a fost proiectat să înlocuiască DES-ul. Conform autorului, implementările
software ale RC2 sunt de trei ori mai rapide decât ale DES-ului. Algoritmul accepta o cheie a
cărei lungime este cuprinsă între 0 şi lungimea şirului maxim acceptat de calculator; viteza de
criptare este independentă de lungimea cheii. Cheia este pre-procesată pentru a obţine un tabel de
128 de octeţi, astfel încât numărul efectiv de chei diferite este de 21024. RC2 nu este un algoritm
iterativ, nu foloseşte “cutii-S”, ci operaţiuni de combinare şi amestec, dintre care doar una este
aleasă în fiecare ciclu. Se sugerează astfel că RC2 oferă mai multă protecţie faţă de criptanaliza
diferenţială şi liniară decât alte cifruri bloc care copiază modelul DES.
RC2 a primit din partea guvernului american are un statut special de export, condiţia de
acceptare fiind ca lungimea cheii să nu depăşească 40 de biţi.

5.1.13 Algoritmul IDEA

Prima formă a cifrului IDEA, a fost concepută în 1990 de către Xuejia Lai şi James Massey
şi s-a numit PES (Proposed Encryption Standard). Anul următor, după ce Biham şi Shamir au
relevat insecuritate în faţa criptanalizei diferenţiale, autorii şi-au întărit cifrul, noua versiune

107
Capitolul 5 – Criptografia modernă

numindu-se IPES. În 1992 IPES şi-a schimbat numele în IDEA (Intrenational Data Encryption
Algorithm).
IDEA se bazează pe fundamente teoretice impresionante, fiind printre cei mai buni şi siguri
algoritmi existenţi şi fiind parte din PGP.
IDEA este un cifru bloc care operează pe blocuri de text în clar de 64 de biţi, cu o cheie de
128 de biţi. Acelaşi algoritm este folosit atât la criptare cât şi la decriptare.
Ca şi în cazul celorlalte cifruri bloc, IDEA foloseşte atât con-fuziunea cât şi difuziunea.
Filozofia de proiectare a algoritmului constă în combinarea de operaţii din diverse grupuri
algebrice. Trei grupuri algebrice sunt folosite, toate uşor de implementat atât hardware cât şi
software:
- operaţia XOR ;
- adunarea modulo 216;
- înmulţirea modulo 216 + 1.

Toate aceste operaţii acţionează asupra unor sub-blocuri de 16 biţi, iar algoritmul are o
eficienţă sporită pe procesoare de 16 biţi.

Descrierea algoritmului IDEA


Blocul de date de 64 de biţi se împarte în patru sub-blocuri de câte 16 biţi: X1, X2, X3, X4.
Aceste patru sub-blocuri constituie intrarea în primul ciclu al algoritmului. Există în total opt
cicluri. În fiecare ciclu cele patru sub-blocuri sunt operate XOR, adunate şi multiplicate unele cu
altele şi cu şase sub-chei de câte 16 biţi. Între cicluri, al doilea şi al treilea bloc se permută între
ele. În final, cele patru sub-blocuri sunt combinate cu patru sub-chei printr-o funcţie de
transformare.
În fiecare ciclu au loc următoarele etape:

1. X1 şi prima sub-cheie se înmulţesc.


2. X2 şi a doua sub-cheie se adună.
3. X3 şi a treia sub-cheie se adună.
4. X4 şi a patra sub-cheie se înmulţesc.
5. Rezultatele de la paşii 1 şi 3 se operează XOR.
6. Rezultatele de la paşii 2 şi 4 se operează XOR.
7. Rezultatul de la pasul 5 şi cea de-a cincea sub-cheie se operează XOR.
108
Capitolul 5 – Criptografia modernă

8. Rezultatul de la pasul 8 şi cea de-a şasea sub-cheie se înmulţesc.


9. Rezultatele de la paşii 7 şi 9 se adună.
10. Rezultatele de la paşii 1 şi 9 se operează XOR.
11. Rezultatele de la paşii 3 şi 9 se operează XOR.
12. Rezultatele de la paşii 2 şi 10 se operează XOR.
13. Rezultatele de la paşii 4 şi 10 se operează XOR.

Ieşirea din ciclu este constituită de cele patru sub-blocuri rezultate ale paşilor 11, 12, 13 şi
14. Se permută sub-blocurile 2 şi 3 (cu excepţia ultimului ciclu) şi se obţine intrarea pentru
următorul ciclu.
După opt cicluri urmează transformarea finală:

1. X1 şi prima sub-cheie se înmulţesc.


2. X2 şi a doua sub-cheie se adună.
3. X3 şi a treia sub-cheie se adună.
4. X4 şi a patra sub-cheie se înmulţesc.

Cele patru sub-blocuri rezultate sunt concatenate pentru a se obţine textul cifrat.
Crearea sub-cheilor este simplă. Algoritmul foloseşte 52 de sub-chei (câte 6 pentru fiecare
din cele 8 cicluri şi 4 pentru transformarea finală). Iniţial, cheia de 128 de biţi se împarte în 8
sub-chei de câte 16 biţi (6 sub-chei pentru primul ciclu şi 2 pentru ciclul 2). Apoi, cheia este
rotită spre stânga cu 25 de biţi şi împărţită din nou în 8 sub-chei (4 sub-chei pentru ciclul 2 şi 4
pentru ciclul următor). Procesul se repetă, producând sub-cheile necesare.
Decriptarea se efectuează în acelaşi mod, cu excepţia faptului că sub-cheile sunt inversate,
iar sub-cheile de decriptare sunt inversele aditive sau multiplicative ale sub-cheilor de criptare.

Viteza algoritmului IDEA


Implementările software curente ale algoritmului IDEA sunt de două ori mai rapide decât
ale DES-ului.

109
Capitolul 5 – Criptografia modernă

Criptanaliza
Lungimea cheii folosită de IDEA este de peste două ori mai mare decât lungimea cheii din
DES. Presupunând că atacul în forţă este cel mai eficient, sunt necesare 2128 criptări pentru a
descoperi cheia, ceea ce conduce la resurse prea mari.
Putem presupune că atacul în forţă nu este cea mai bună abordare de criptanaliză a
algoritmului IDEA, însă nici criptografia diferenţială nu conduce la concluzii concrete.
Willi Meier a examinat cele trei operaţii algebrice folosite în IDEA şi a subliniat faptul că
deşi ele sunt incompatibile, există situaţii care pot conduce la simplificări care să faciliteze
criptanaliza. Joan Daemen a descoperit o clasă de chei slabe pentru IDEA. Acestea nu sunt chei
slabe în sensul DES, ci în sensul că dacă sunt folosite, un criptanalist poate uşor să le identifice
într-un atac cu text în clar ales.
De exemplu, o cheie slabă este:

0000.0000.0x00.0000.0000.000x.xxxx.x000 - în hexazecimal

Numărul aflat în poziţiile marcate cu x poate fi orice număr. Dacă această cheie este
folosită, operarea XOR a anumitor perechi de texte în clar va conduce la operarea XOR a textelor
cifrate respective.
Şansa de generare accidentală a unei astfel de chei slabe este foarte mică: una din 296. Este
simplu de modificat algoritmul IDEA astfel încât aceste chei slabe să fie excluse: se operează
XOR fiecare sub-cheie cu valoarea 0x0dae.

Moduri de operare şi variante IDEA


IDEA poate funcţiona în oricare din modurile de cifru bloc prezentate. Deşi orice
implementare de tip dublu-IDEA prezintă acelaşi tip de vulnerabilitate ca şi dublu-DES,
lungimea dublă a cheii face inaplicabil un atac. Iar o implementare triplu-IDEA este cu atât mai
sigură.
De asemenea IDEA se poate implementa cu sub-chei independente, în cazul în care se
dispune de instrumente de manipulare a cheilor de lungime mare. Necesarul este de 52 de chei cu
lungimea de 16 biţi, deci o cheie totală de 832 de biţi. Această variantă este indubitabil mai
sigură.

110
Capitolul 5 – Criptografia modernă

Modalitatea de a spori securitatea prin dublarea mărimii blocului nu este posibilă, deoarece
ar conduce la sub-blocuri de 32 de biţi în loc de 16 biţi. Dar, în timp ce 216+1 este număr prim,
232+1 nu este prim, ceea ce va contrazice axiomele grupului.
Deşi IDEA pare un algoritm mai sigur decât DES, înlocuirea în aplicaţiile existente nu este
o operaţiune simplă. Dacă modelul de bază de date sau de mesaj este construit să accepte o cheie
de 64 de biţi, poate fi imposibil de implementat cheia de 128 de biţi din IDEA. Varianta de a
concatena cheia de 64 de biţi cu ea însăşi slăbeşte considerabil algoritmul IDEA.
Dublarea vitezei algoritmului IDEA se poate realiza prin înjumătăţirea numărului de cicluri
de la 8 la 4, cu păstrarea securităţii la un nivel acceptabil.

5.1.14 Algoritmul Skipjack

Skipjack este un algoritm de criptare dezvoltat de NSA pentru cipurile Clipper şi Capstone,
clasificat ca fiind secret şi implementat doar hardware.
Dintre caracteristicile cunoscute ale algoritmului amintim:
- este un cifru bloc interactiv;
- mărimea blocului este de 64 de biţi;
- cheia este de 80 de biţi;
- poate fi folosit în modurile ECB, CBC, OFB;
- o singură operaţiune de criptare sau de decriptare constă în 32 de cicluri;
- NSA a început proiectul în 1985 şi l-a completat în 1990.

5.1.15 Algoritmul Blowfish

Blowfish este un algoritm proiectat pentru a fi implementat pe procesoare puternice, care


încearcă să respecte următoarele criterii:

1. Rapiditate – Blowfish criptează date pe procesoare de 32 de biţi la o rată de 26 de


tacturi pe octet.
2. Compact – Blowfish poate rula în mai puţin de 5K de memorie.

111
Capitolul 5 – Criptografia modernă

3. Simplitate – Blowfish foloseşte doar operaţii simple: adunare, operare XOR şi


căutare în tabelă, cu operanzi de 32 de biţi. Algoritmul este uşor de analizat, ceea
ce evită erorile de implementare.
4. Securitate variabilă – lungimea cheii este variabilă, putând creşte până la 448 de
biţi.

Blowfish este optimizat pentru aplicaţii în care cheia nu trebuie să se schimbe des, cum ar fi
legături de comunicaţie sau un criptor automat pentru fişiere. Este semnificativ mai rapid decât
DES când este implementat pe procesoare de 32 de biţi dotate cu memorie cache mare, cum ar fi
Pentium. Blowfish nu este potrivit pentru comutarea de pachete, cu schimbări dese de cheie, ca
funcţie hash one-way sau în aplicaţii smart-card, unde memoria este insuficientă.

Descrierea algoritmului Blowfish


Blowfish este un cifru bloc care operează cu blocuri de 64 de biţi si are cheie de lungime
variabilă. Algoritmul constă în două părţi: expandarea cheii şi criptarea datelor. Expandarea cheii
converteşte o cheie de până la 448 de biţi în mai multe matrice de sub-chei totalizând 4168 de
biţi.
Criptarea datelor rezidă într-o funcţie simplă iterată de 16 ori. Fiecare ciclu este format
dintr-o permutare dependentă de cheie şi o substituţie dependentă şi de cheie şi de date. Toate
operaţiile sunt adunări şi operări XOR pe cuvinte de 32 de biţi. Singurele operaţii suplimentare
sunt patru căutări într-un tabel indexat, pe ciclu.
Blowfish foloseşte un număr mare de sub-chei. Aceste sub-chei trebuie precalculate înainte
de orice criptare sau decriptare de date.

Tabelul P este format din 16 chei de 32 de biţi:


P1, P2, …, P18

Patru “cutii-S” de 32 de biţi are 256 de intrări fiecare:

S1,0, S1,1, …. , S1,255


S2,0, S2,1, …. , S2,255
S3,0, S3,1, …. , S3,255
S4,0, S4,1, …. , S4,255
112
Capitolul 5 – Criptografia modernă

Blowfish este o reţea Feistel cu 16 cicluri. Intrarea este x, un element de 64 biţi de date.
Pentru criptare:

Se împarte x în două părţi de câte 32 de biţi: xL şi xR

For i = 1 to 16:
xL = xL ⊕ Pi
xR = F(xL) ⊕ xR
se schimbă xL şi xR între ele
End for

se schimbă xL şi xR între ele


xR = xR ⊕ P17
xL = xL ⊕ P18
se recombină xL şi xR

Funcţia F funcţionează astfel:


Se împarte xL în patru sferturi a câte 8 biţi:
a, b, c, d
F(xL) = ((S1,a + S2,b mod 232) ⊕ S3,c) + S4,d mod 232

Decriptarea are loc similar cu criptarea, cu diferenţa că P1, P2, …, P18 sunt folosite în
ordine inversă.
O implementare a algoritmului Blowfish care să asigure o creştere de viteză trebuie să
menţină toate cheile în memoria cache.
Sub-cheile sunt calculate folosind algoritmul Blowfish, care constă în următorii paşi:
1. Se iniţializează tabelul P şi cele patru “cutii-S”, în ordine, cu un şir fix. Acest şir
este format din cifrele hexazecimale ale lui π.
2. Se operează XOR P1 cu primii 32 de biţi ai cheii, se operează P2 cu următorii 32
de biţi ai cheii şi tot aşa până la P18, astfel încât întreg tabelul P să fie operat XOR
cu biţii din cheie.

113
Capitolul 5 – Criptografia modernă

3. Se criptează un şir format din zerouri cu algoritmul Blowfish, folosind sub-cheile


descrise în paşii 1 şi 2.
4. Se înlocuiesc P1 şi P2 cu ieşirea din pasul 3.
5. Se criptează ieşirea din pasul 3 folosind algoritmul Blowfish cu sub-cheile
modificate.
6. Se înlocuiesc P3 şi P4 cu ieşirea din pasul 5.
7. Se continuă procesul, înlocuind toate elementele din tabelul P şi apoi cele patru
“cutii-S” în ordine, cu ieşirea algoritmului Blowfish.

În total, 521 de iteraţii sunt necesare pentru a genera toate sub-cheile necesare. Aplicaţiile
pot memora sub-cheile pentru a nu trebui să le calculeze de fiecare dată.

Securitatea algoritmului Blowfish


În cazul algoritmului Blowfish cu “cutii-S” cunoscute şi r cicluri, tabelul P poate fi
determinat cu 28r+1 texte în clar alese. Atacul funcţionează doar pe variantele cu un număr redus
de cicluri şi este complet ineficient în cazul algoritmului Blowfish cu 16 cicluri.

5.1.16 Algoritmul RC5

RC5 este un cifru bloc cu o diversitate de parametri: mărimea blocului, lungimea cheii şi
numărul de cicluri şi cu trei operaţii: operare XOR, adunare şi rotaţii. Rotaţiile variabile depind
de date şi de cheie şi sunt o funcţie neliniară. RC5 lucrează cu un bloc de lungime variabilă, de
exemplu 64 de biţi.
Criptarea foloseşte 2r+2 cuvinte de 32 de biţi, dependente de cheie, notate: S0, S1, S2, ...,
S2r+1, unde r este numărul de cicluri. Pentru a realiza criptarea se începe cu împărţirea blocului de
text în clar în două cuvinte de 32 de biţi: A şi B.
Apoi:
A = A + S0
B = B + S1
For i = 1 to r:
A = ((A ⊕ B ) <<< B ) + S2i
B = ((B ⊕ A ) <<< A ) + S2i+1

114
Capitolul 5 – Criptografia modernă

Ieşirea este în regiştrii A şi B.


Decriptarea se petrece asemănător: se împarte blocul de text în clar în două cuvinte A şi B,
după care
For i = r to 1:
B = ((B - S2i+1 ) >>> A ) ⊕ A
A = ((A - S2i ) >>> B ) ⊕ B
B = B - S1
A = A - S0

Simbolul “>>>” reprezintă deplasare circulară la dreapta. Adunarea şi scăderea sunt


modulo 232.
Crearea unui vector de chei începe prin copierea octeţilor cheii într-un vector L, care este
format din c cuvinte de 32 de biţi, eventual completând ultimul cuvânt cu zerouri.
Se iniţializează un vector S, folosind generatorul liniar congruenţional modulo 232:
S0 = P
For i = r to 2(r+1)-1:
Si = (Si-1 + Q) modulo 232
unde P=0xb7e15163 şi Q=0x9e3779b9; aceste constante se bazează pe reprezentarea binară a
numerelor e şi ϕ.
În final, se mixează L în S:

i=j=0
A=B=0
do 3n ori, unde n = max (2(r+1), c):
A = Si = (Si + A + B) <<< 3
B = Lj = (Lj + A + B) <<< (A + B)
i = (i + 1) modulo 2(r+1)
j = (j + 1) modulo c

Actualmente RC5 este o familie de algoritmi, definită ca RC5-w/r/b, unde w este lungimea
cuvântului, r este numărul de cicluri, iar b este lungimea cheii în octeţi.

115
Capitolul 5 – Criptografia modernă

Pentru RC5 cu bloc de 64 de biţi, există un atac diferenţial care necesită 224 texte în clar
alese pentru 5 cicluri, 245 pentru 10 cicluri, 258 pentru 12 cicluri şi 268 pentru 15 cicluri. Evident,
există doar 264 texte în clar alese posibile, astfel încât acest atac nu va funcţiona pentru un număr
de cicluri mai mare sau egal cu 15. Estimările de criptanaliză liniară indică un RC5 sigur după 6
cicluri; se recomandă minim 12 cicluri şi dacă este posibil, 16.

5.1.17 Dubla criptare

Un mod evident de îmbunătăţire a securităţii algoritmilor bloc este criptarea unui bloc de
două ori, folosind două chei diferite. Mai întâi se criptează blocul cu prima cheie, apoi se
criptează textul cifrat rezultat folosind a doua cheie. Decriptarea este procesul invers:

C = EK2 (EK1 (P))


P = DK1 (DK2 (C))

Dacă algoritmul bloc este un grup, există întotdeauna un K3, astfel încât

C = EK2 (EK1 (P)) = EK3 (P)

În caz contrar, blocul de text cifrat rezultat dintr-o dublă criptare ar trebui să fie mult mai
greu de decriptat folosind căutarea exhaustivă. În loc de 2n încercări (unde n este lungimea în biţi
a cheii), vor fi necesare 22n încercări. Dacă algoritmul are chei de 64 de biţi, vor fi necesare 2128
încercări pentru a găsi cheia.
În cazul atacului cu texte în clar cunoscute, Merkle şi Hellman au demonstrat că schema cu
dublă criptare poate fi spartă în 2n+1 criptări şi nu în 22n. Atacul se numeşte “întâlnire la mijloc”;
el funcţionează prin criptarea de la un capăt, decriptarea la capătul celălalt şi potrivirea
rezultatelor în mijlocul textului criptat.
În acest atac, criptanalistul cunoaşte P1, C1, P2 şi C2, astfel încât

C1 = EK2 (EK1 (P1))


C2 = EK2 (EK1 (P2))

116
Capitolul 5 – Criptografia modernă

Pentru fiecare K posibil, se calculează EK(P1) şi se memorează rezultatul. După terminarea


tuturor calculelor, se calculează DK(C1) pentru fiecare K şi se caută un rezultat identic în
memorie. Dacă se găseşte un astfel de rezultat, fie K2 cheia curentă şi K1 cheia folosită pentru
rezultatul din memorie. Se criptează P2 cu K1 şi K2; dacă se obţine C2 este aproape sigur (cu o
probabilitate de 1 din 22m-2n, unde m este mărimea blocului), că cele două chei sunt valide. Dacă
nu, se continuă căutarea. Numărul maxim de căutări este 2 x 2n, adică 2n+1.
Acest atac necesită un spaţiu mare de memorie: 2n blocuri. Pentru un algoritm de 56 de biţi,
aceasta înseamnă 256 blocuri de 64 de biţi, adică 1017 octeţi. Este o cantitate considerabilă de
memorie, dar demonstrează că dubla criptare nu duce la dublarea securităţii. În cazul însă al unei
chei de 128 de biţi, cantitatea de memorie necesară este de 1039 octeţi, ceea ce înseamnă că un
atac de tip “întâlnire la mijloc” nu este fezabil.
O altă metodă de dublă criptare, numită Davies-Price, este o variantă de CBC:
Ci = EK1 (Pi ⊕ EK2(Ci-1))
Pi = DK2 (Ci ) ⊕ EK2(Ci-1))

care prezintă aceeaşi vulnerabilitate faţă de un atac de tip “întâlnire la mijloc”.

5.1.18 Tripla criptare

Tripla criptare cu două chei


O idee mai bună, propusă de Tuchman, operează pe un bloc de trei ori folosind două chei:
se începe cu prima cheie, se continuă cu a doua cheie şi se termină folosind din nou prima cheie,
în sensul că expeditorul criptează cu prima cheie, decriptează cu a doua cheie şi în final criptează
cu prima cheie. Destinatarul decriptează cu prima cheie, apoi criptează cu a doua cheie şi în final
decriptează cu prima cheie:
C = EK1 (DK2(EK1 (P)))
P = DK1(EK2 (DK1 (C)))

Aceasta poartă numele de mod EDE (encrypt-decrypt-encrypt); dacă algoritmul bloc are o
cheie de n biţi, această schemă conduce la o cheie de 2n biţi. Această formă curioasă de criptare-
decriptare-criptare a fost proiectată de IBM, pentru a păstra compatibilitatea cu implementarea

117
Capitolul 5 – Criptografia modernă

convenţională a algoritmului: dacă cele două chei sunt identice, tripla criptare se reduce la o
singură criptare cu o singură cheie.
K1 şi K2 alternează, pentru a preveni posibilitatea de a folosi un atac de tip “întâlnire la
mijloc”. Dacă C = EK2 (EK1 (EK1 (P ))), atunci criptanalistul poate calcula EK1 (EK1 (P )) pentru
toate valorile K1 posibile, după care porneşte atacul. Ar fi necesare doar 2n+2 criptări.
Tripla criptare cu două chei nu permite un atac de tip “întâlnire la mijloc” de genul celui
întâlnit în cazul dublei criptări, dar Merkle şi Hellman au proiectat un alt gen de atac, care poate
sparge tripla criptare cu două chei în 2n-1 paşi folosind 2n blocuri de memorie.
Pentru fiecare K2 posibil, se decriptează 0 şi se memorează. Apoi, se decriptează cu fiecare
K1 posibil, pentru a-l găsi pe P. Se criptează triplu P pentru a-l afla pe C, după care se
decriptează C cu K1. Dacă această decriptare este o decriptare a lui 0 folosind K2 (din memorie)
atunci perechea K1, K2 este o posibilă candidată. Dacă această posibilitate nu se verifică, se
continuă căutarea.
Acesta este un atac cu texte în clar alese, care necesită o mare cantitate de texte în clar alese
şi anume 2m, în timp ce memoria şi durata sunt de ordinul 2n. Nu este foarte practic, dar
subliniază o slăbiciune a algoritmului.
Paul van Oorschot şi Michael Wiener au convertit aceasta la un atac cu 2p texte în clar
cunoscute. Exemplul presupune modul EDE:

1. Se ghiceşte valoarea intermediară a.


2. Se calculează şi memorează pentru fiecare K1 posibilă, a doua valoare
intermediară b, când prima valoare intermediară este a, folosind textul în clar
cunoscut:
b = DK1 (C)
3. Se caută în tabelul memorat, pentru fiecare K2 posibil, elemente cu aceeaşi valoare
intermediară b:
b = EK2 (a)
4. Probabilitatea de succes este p/m, unde p este numărul de texte în clar cunoscute şi
m este mărimea blocului. Dacă nu se găsesc elementele căutate la pasul 3, se alege
o nouă valoare pentru a şi se reia de la pasul 1.

Acest atac necesită 2n+m/p timp operaţional şi p spaţiu de memorie. Pentru DES, aceasta
înseamnă 2120/p. Pentru p mai mare ca 256, acest atac este mai rapid decât căutarea exhaustivă.
118
Capitolul 5 – Criptografia modernă

Tripla criptare cu trei chei


Această variantă presupune o lungime totală a cheii mai mare, dar memorarea cheii nu
constituie o problemă.

C = EK3 (DK2(EK1 (P)))


P = DK1(EK2 (DK3 (C)))

Cel mai bun atac cere 22n paşi şi 2n blocuri de memorie si este de tip “întâlnire la mijloc”.
Tripla criptare cu trei chei independente este echivalentă din punct de vedere al securităţii,
cu dubla criptare.

Tripla criptare cu cheie minimă


Tripla criptare cu cheie minimă este o variantă de triplă criptare cu două chei, care previne
atacul prezentat anterior. Particularitatea constă în derivarea celor trei chei din două: X1 şi X2

K1 = EX1 (DX2 (EX1(T1)))


K2 = EX1 (DX2 (EX1(T2)))
K3 = EX1 (DX2 (EX1(T3)))

T1, T2 şi T3 sunt constante, care nu trebuie să fie secrete.

Moduri de triplă criptare


Există două moduri posibile de triplă criptare:
CBC interior: criptează întregul fişier în modul CBC de trei ori

Ci = EK3 (Si ⊕ Ci-1)


Si = DK2 (Ti ⊕ Si-1)
Ti = EK1 (Pi ⊕ Ti-1)
Pi = Ti-1 ⊕ DK1 (Ti)
Ti = Si-1 ⊕ EK2 (Si)
Si = Ci-1 ⊕ DK3 (Ci)

119
Capitolul 5 – Criptografia modernă

CBC exterior: criptează triplu întregul fişier în modul CBC

Ci = EK3 (DK2(EK1(Pi ⊕ Ci-1)))


Pi = Ci-1 ⊕ DK1 (EK2(DK3(Ci)

Ambele moduri necesită mai multe resurse decât criptarea simplă: mai mult hardware sau
mai mult timp. Totuşi, dacă se dispune de trei cipuri de criptare, ieşirea din modul CBC interior
este la fel de rapid ca şi criptarea simplă, deoarece cele trei criptări sunt independente.
Pe de altă parte, modul CBC exterior, chiar beneficiind de trei cip-uri, va furniza o ieşire la
o treime din ieşirea criptării simple.
Din păcate, criptarea simplă este şi cea mai puţin sigură. Analiza diverselor moduri faţă de
criptanaliza diferenţială cu texte cifrat alese arată că modul CBC interior este doar cu puţin mai
sigur decât cel simplu.
Există şi alte moduri, cum ar fi criptarea întregului fişier în modul ECB, urmată de o dublă
criptare în modul CBC; sau o criptare simplă CBC, apoi ECB şi în final din nou o criptare simplă
CBC. Din păcate, nici aceste moduri nu sunt mai sigure decât DES-ul simplu.

Variante ale triplei criptări


Înainte ca să se demonstreze ca DES nu formează un grup, au fost propuse mai multe
scheme pentru criptarea multiplă. O cale de a garanta că tripla criptare nu se reduce la o criptare
simplă este schimbarea efectivă a mărimii blocului. O metodă simplă este de a adăuga un bit.
Completarea textului se face cu un şir de biţi aleatori, având lungimea egală cu jumătate din
lungimea blocului, între prima şi a doua criptare, apoi între a doua şi a treia criptare.
Dacă p este funcţia de completare:

C = EK3(p(EK2(p(EK1(P)))))

Această completare nu numai că distruge formele apărute, dar de asemenea reacoperă


blocurile criptate, de o manieră asemănătoare cu al doilea rând de cărămizi dintr-un zid şi asta
doar prin adăugarea unui bloc suplimentar.

120
Capitolul 5 – Criptografia modernă

O altă tehnică este folosirea unei funcţii de permutare care nu depinde de cheie între cele
trei criptări. Permutarea se aplică pe blocuri mari – 8 kilo-octeţi şi va da efectiv acestei variante o
lungime a blocului de 8 KB. Presupunând că permutarea este rapidă, viteza este comparabilă cu
cea a triplei criptări:

C = EK3(T(EK2(T(EK1(P)))))

T ia un bloc de intrare de până la 8 KB şi foloseşte un generator de numere


pseudo-aleatoare pentru a obţine o transpoziţie a sa. O schimbare de 1 bit în intrare produce o
schimbare de 8 octeţi în ieşire, după prima criptare, de până la 64 de octeţi schimbaţi după a doua
criptare şi de până la 512 octeţi schimbaţi după cea de-a treia criptare.
Variantele recente ale acestei scheme răspund atacului lui Biham asupra modului CBC
interior, incluzând o fază de ascundere a formelor din textul în clar, care constă în operarea XOR
a şirului cu un generator de numere aleatoare sigur din punct de vedere criptografic, notat R.
Permutarea T evită ca criptanalistul să ştie a priori ce cheie a fost folosită la criptare. Cea de-a
doua criptare este notată nE (criptare cu o cheie aleasă ciclic din n chei diferite):

C = EK3(R(T(nEK2(T(EK1(R))))))

Toate criptările sunt în modul ECB, iar cheile sunt furnizate pentru cel puţin n+2 chei de
criptare şi generatorul de numere aleatoare sigur din punct de vedere criptografic. Schema a fost
propusă pentru DES, dar funcţionează cu orice algoritm bloc.

5.2 Algoritmi simetrici de tip şir

Cifrurile şir formează o clasă importantă de algoritmi de criptare; ele pot fi cifruri cu chei
simetrice sau cu chei publice. Ceea ce le caracterizează şi le diferenţiază faţă de cifrurile bloc este
faptul că cifrurile şir procesează textul de criptat în unităţi oricât de mici, chiar bit cu bit, aplicând
funcţia XOR între biţii cheii şi biţii de cifrat, iar funcţia de criptare se poate modifica în cursul
criptării. Cifrurile şir sunt algoritmi cu memorie, în sensul că procesul de criptarea nu depinde
doar de cheie şi de textul în clar, ci şi de starea curentă. În cazul în care probabilitatea erorilor de
transmisie este mare, folosirea cifrurilor şir este avantajoasă deoarece au proprietatea de a nu

121
Capitolul 5 – Criptografia modernă

propaga erorile. Ele se folosesc şi în cazurile în care datele trebuie procesate una câte una,
datorită lipsei de spaţiu de memorie.

Clasificare
Algoritmii simetrici de tip şir se împart în două mari clase:
1. Cifruri şir sincrone.
2. Cifruri şir asincrone.

5.2.1 Cifruri şir sincrone

Un cifru şir sincron este unul care generează şirul de chei independent de textul în clar şi
de textul cifrat. Criptarea în acest caz poate fi descrisă de următoarele ecuaţii:

Si+1 = f (Si, k),


zi = g (Si, k),
ci = h (zi, mi),

unde S0 este starea iniţială şi se poate determina din cheia k, f este funcţia de stare, g este funcţia
care produce şirul de chei z, iar h este funcţia de ieşire care combină şirul de chei cu textul în clar
mi pentru a obţine textul cifrat ci.

Proprietăţile cifrurilor şir sincrone

- Sincronizarea – atât expeditorul cât şi destinatarul trebuie să fie sincronizaţi, în


sensul de a folosi aceeaşi cheie şi a opera cu aceeaşi stare respectiv, astfel încât să
fie posibilă o decriptare corectă. Dacă sincronizarea se pierde prin inserarea sau
lipsa unor biţi din textul cifrat transmis, atunci decriptarea eşuează şi poate fi
reluată doar prin tehnici suplimentare de re-sincronizare, adică re-iniţializarea,
plasarea de markeri speciali sau dacă textul în clar conţine suficientă redundanţă şi
se încearcă toate deplasările posibile ale şirului de chei.

- Nepropagarea erorii – un bit de text cifrat care este modificat în timpul transmisiei
nu trebuie să afecteze decriptarea celorlalţi biţi cifraţi.

122
Capitolul 5 – Criptografia modernă

- Atacuri active – ca o consecinţă a sincronizării, inserarea, ştergerea sau


retransmisia unor biţi de text cifrat de către un adversar activ va cauza o pierdere
instantanee a sincronizării şi creşte posibilitatea detectarii atacului de către
decriptor. Ca o consecinţă a nepropagării erorii, un atacator ar putea să modifice
biţi aleşi din textul cifrat şi să afle exact ce efect au modificările în textul în clar.
Trebuie deci, să se folosească mecanisme suplimentare de autentificare a
expeditorului şi de garantare a integrităţii datelor.

5.2.2 Cifruri şir asincrone

Un cifru şir asincron sau autosincronizabil este unul care generează şirul de chei ca o
funcţie de cheie şi un număr de biţi din textul cifrat anterior. Funcţia de criptarea în acest caz
poate fi descrisă de următoarele ecuaţii:
Si = (ci-t, ci-t+1, …, ci-1),
zi = g (Si, k),
ci = h (zi, mi),

unde S0 = (c-t, c-t+1, …, c-1), este starea iniţială (nesecretă), k este cheia, g este funcţia care
produce şirul de chei z, iar h este funcţia de ieşire care combină şirul de chei cu textul în clar mi
pentru a obţine textul cifrat ci.

Proprietăţile cifrurilor şir asincrone

- Auto-sincronizarea – este posibilă dacă biţi din textul cifrat sunt şterse sau
adăugate, deoarece decriptarea depinde doar de un număr determinat de biţi cifraţi
anterior. Astfel de cifruri sunt capabile să-şi restabilească automat procesul de
decriptare corectă după pierderea sincronizării.

- Propagarea limitată a erorii – să presupunem că starea unui cifru şir asincron


depinde de t biţi cifraţi anteriori. Dacă un singur bit cifrat este modificat, şters sau
inserat în timpul transmisiei, atunci decriptarea a cel mult t biţi următori de text
cifrat va fi incorectă, după care se reia decriptarea corectă.

- Atacuri active – limitarea propagării erorii face ca orice modificare a textului cifrat
de către un adversar activ să aibă ca şi consecinţă decriptarea incorectă a altor biţi
cifraţi, ceea ce poate mări posibilitatea ca atacul să fie observat de către decriptor.

123
Capitolul 5 – Criptografia modernă

Pe de altă parte, datorită auto-sincronizării este mai dificil decât în cazul cifrurilor
şir sincrone să se detecteze inserarea, ştergerea sau modificarea unor biţi în textul
cifrat. Trebuie deci să se folosească mecanisme suplimentare de autentificare a
expeditorului şi de garantare a integrităţii datelor.

- Difuzia statisticilor textului în clar – deoarece fiecare bit de text clar influenţează
toţi biţii cifraţi următori, proprietăţile statistice ale textului în clar sunt dispersate în
textul cifrat. Ca o consecinţă, cifrurile şir asincrone trebuie să fie mai rezistente
decât cifrurile şir sincrone faţă de atacurile bazate pe redundanţa textului în clar.

5.2.3 Proiectarea şi analiza cifrurilor şir

Majoritatea cifrurilor şir folosite în practică sunt proiectate folosind LFSR-uri8, care sunt
simplu de implementat software sau hardware. Problema este că aceste implementări sunt
ineficiente din punct de vedere al vitezei. Pentru a rezista atacului de corelaţie, funcţia de
feedback trebuie să fie un polinom dens, ceea ce presupune multe calcule, care produc la ieşire un
singur bit, deci trebuie repetate des. Totuşi, cele mai multe sisteme de criptare militare se bazează
pe LFSR.

Proiectarea cifrurilor şir


Construcţia cifrurilor şir poate fi privită din perspective diferite [Rue92] :

- Abordarea sistemică este încercarea de a crea o problemă dificilă pentru


criptanalist, folosind un set de principii şi criterii fundamentale de proiectare.

- Abordarea informaţională este orientată spre ascunderea faţă de criptanalist a


oricărei informaţii despre textul în clar. Oricât efort ar depune acesta, nu va ajunge
niciodată la o soluţie unică.

- Abordarea pe baza teoriei complexităţii încearcă să bazeze sistemul de criptare


(sau să-l facă echivalent) pe o problemă cunoscută ca fiind dificil de rezolvat.

- Abordarea aleatoare generează o problemă greu de gestionat, forţând criptanalistul


să examineze o mare cantitate de date fără semnificaţie.

8
LFSR - Liniar Feedback Shift Register au fost descrise în 3.2
124
Capitolul 5 – Criptografia modernă

Abordarea sistemică este folosită în proiectarea majorităţii cifrurilor şir, conducând la


generatoare care prezintă proprietăţi de securitate care pot fi măsurate: perioda, distribuţia biţilor,
complexitatea liniară. Proiectantul studiază de asemenea tehnicile criptanalitice folosite împotriva
acestor generatori, pentru a fi sigur că generatorii sunt imuni la astfel de atacuri.
În timp, abordarea sistemică a impus un set de criterii de proiectare a cifrurilor şir [Rue92]:
- periodă lungă, lipsa repetiţiilor;
- complexitate liniară mare;
- criterii statistice;
- confuzia – fiecare bit generat trebuie să fie o transformare complexă a biţilor cheii;
- difuzie – redundanţele din substructuri trebuie să fie disipate în statistici de rang
înalt (long-range statistics);
- criterii de nonliniaritate pentru funcţii booleene cum ar fi imunitatea corelaţiei de
ordin m, distanţa la funcţiile liniare, criteriul avalanşei.

Problema majoră a acestor criptosisteme este că nu se poate demonstra nimic despre


securitatea lor; nu s-a demonstrat că aceste criterii de proiectare sunt necesare şi/sau suficiente
pentru asigurarea securităţii.
Abordarea informaţională a proiectării de cifruri şir presupune că criptanalistul dispune de
un timp şi o putere de calcul nelimitate. Singurul cifru şir real care oferă securitate în aceste
condiţii este bloc notes9-ul sau echivalent, banda cu unică folosinţă10: două benzi magnetice
care conţin aceeaşi cheie formată din biţi aleatori se foloseşte la criptare şi la decriptare, prin
operare XOR cu textul în clar şi respectiv, cu textul cifrat. Cheia este de unică folosinţă.
Deoarece biţii sunt aleatori, criptanalistul nu poate prezice cheia. Prin distrugerea benzilor dupa
folosire se obţine secretul perfect.
În abordarea aleatoare a proiectării cifrurilor şir, criptograful încearcă să se asigure că
adversarul său, criptanalistul, va trebui să rezolve o problemă de foarte mari dimensiuni.
Obiectivul este creşterea numărului de biţi pe care criptanalistul trebuie să-i analizeze, simultan
cu păstrarea cheii secrete la dimensiuni mici. Acest lucru se poate obţine prin folosirea unui şir
public aleator de mari dimensiuni la criptare şi decriptare. Cheia va specifica părţile din şirul
public care sunt folosite la criptare şi decriptare. Criptanalistul, care nu cunoaşte cheia, va fi
forţat să dezvolte o căutare în forţă “brute-force search” asupra întregului şir public. Securitatea

9
2.3.3 Substituţia “perfectă”
10
”one-time tape”
125
Capitolul 5 – Criptografia modernă

acestui tip de cifru se poate exprima în numărul mediu de biţi pe care un criptanalist trebuie să-i
examineze înainte ca şansele de a determina cheia să fie mai mari decât a o ghici.
Abordarea pe baza teoriei complexităţii conduce proiectantul să folosească teoria
complexităţii în demersul său de a demonstra securitatea generatorului. Generatorii tind să devină
din ce în ce mai complicaţi, bazaţi pe probleme dificil de rezolvat, cum este cazul în criptografia
cu chei publice.

Complexitatea liniară
O metrică importantă folosită pentru a analiza generatoarele bazate pe LFSR este
complexitatea liniară, definită ca fiind lungimea n a celui mai scurt LFSR care poate produce
ieşirea generatorului. Orice şir generat de o maşină de stare finită peste un câmp finit are o
complexitate liniară finită. [Mas86]. Complexitatea liniară este importantă deoarece un algoritm
simplu, Berlekamp-Massey, poate genera LFSR-ul de definiţie examinând doar 2n biţi din cheie,
ceea ce însemnă spargerea cifrului şir.
Concluzia este că o complexitate liniară ridicată nu înseamnă neapărat un generator sigur,
dar o complexitate liniară scăzută indică un generator fără securitate.

Atacuri
Criptografii încearcă să obţină o complexitate liniară ridicată prin combinarea ieşirilor mai
multor LFSR-uri într-un mod nonliniar. Pericolul este ca unul sau mai multe şiruri generate
interne – de obicei ieşiri ale LFSR-urilor individuale să fie corelate cu şirul combinat, ceea ce
permite un atac bazat pe algebra liniară numit atac de corelaţie. [Mih95]. Thomas Siegenthaler a
arătat că imunitatea de corelare poate fi precis definită şi că există o legătură între aceasta şi
complexitatea liniară [Sie84]. Ideea de bază a atacului de corelaţie este identificarea unor
corelaţii între ieşirea generatorului şi ieşirea uneia din componentele sale interne. Apoi,
observând şirul de ieşire, se pot obţine informaţii despre ieşirea internă. Folosind aceste
informaţii şi alte corelaţii se colectează informaţii despre celelalte ieşiri interne ale generatorului, până
când acesta este spart în totalitate.

5.2.4 Cifruri şir bazate pe LFSR

Proiectarea unui cifru şir bazat pe LFSR constă în alegerea unuia sau mai multor LFSR-uri,
de lungimi diferite şi cu funcţii feedback polinomiale distincte (dacă lungimile sunt relativ prime

126
Capitolul 5 – Criptografia modernă

între ele şi polinoamele de feedback sunt primitive, atunci generatorul va fi de lungime


maximală). Cheia este starea iniţială a LFSR-urilor. Pentru a genera un bit, se deplaseaza LFSR-
urile cu o poziţie (operaţiune numită clocking), după care se aplică o funcţie nonliniară anumitor
biţi generaţi de LFSR-uri. Această funcţie se numeşte funcţie de combinare şi întreg generatorul
poartă numele de generator de combinare (în cazul unui singur LFSR, generatorul se numeşte
generator de filtrare) [Zie59].
Anumite generatoare fac clocking-ul LFSR-urilor cu rate diferite, iar uneori clocking-ul
unui generator depinde de al altuia. Este cazul generatoarelor clock-controlled [GC88]. Clock-
control-ul poate fi de tip feedforward, când ieşirea unui LFSR controlează clocking-ul altui LFSR
sau de tip feedback, cand ieşirea unui LFSR este folosită pentru propriul clocking.
Deşi aceste generatoare sunt teoretic vulnerabile la atacul de corelaţie, multe dintre ele
prezintă un grad acceptabil de securitate [GC95].
O proiectare optimă a cifrurile şir necesită folosirea unei structuri matematice – cum ar fi
LFSR, care să garanteze lungimea maximă şi alte proprietăţi, şi o structură funcţională nonliniară
cât mai complicată, care să protejeze cifrul faţă de atacurile criptanaliste.

Generatorul Geffe

Generatorul Geffe descris schematic în figura 5.2.2 foloseşte trei LFSR-uri, combinate
într-un mod nonliniar. Primele două sunt intrări într-un multiplexor, iar al treilea LFSR
controlează ieşirea multiplexorului. Dacă a1, a2 şi a3 sunt ieşirile celor trei LFSR-uri, ieşirea b a
generatorului Geffe este:
b = (a1 Λ a2) ⊕ ((¬ a1) Λ a3)
Dacă lungimile LFSR-urile sunt n1, n2 respectiv n3, atunci complexitatea liniară a
generatorului este:
(n1 + 1) x n2 + n1 x n3
Perioada generatorului este cel mai mic multiplu comun al celor trei perioade. Presupunând
că gradele celor trei primitive polinomiale sunt relativ prime, perioada generatorului este
produsul perioadelor LFSR-urilor.
Deşi generatorul pare solid construit, el este slab din punct de vedere criptografic, fiind
vulnerabil la atacul de corelaţie [ZYR90]. Ieşirea generatorului este aceeaşi cu ieşirea LFSR-2
din 75% din cazuri şi dacă se cunosc poziţiile biţilor de feedback (feedback taps) se poate ghici
valoarea iniţială pentru LFSR-2 şi deci genera şirul de ieşire al acestuia. În continuare se poate
127
Capitolul 5 – Criptografia modernă

număra de câte ori ieşirea LFSR-2 este aceeaşi cu a generatorului: dacă valoarea iniţială a fost
greşit ghicită, cele două ieşiri vor coincide în 50% din cazuri, dacă ghicirea a fost corectă,
procentul de coincidenţă va creşte la 75%. În mod similar, ieşirea generatorului este aceeaşi cu
ieşirea LFSR-3 din 75% din cazuri. Având aceste corelaţii, generatorul şirului de chei poate fi
spart cu uşurinţă. De exemplu, dacă primitivele polinomiale au doar trei termeni fiecare şi dacă
cel mai mare LFSR are lungimea n, este necesară doar o porţiune de 37n biţi din şirul generat
pentru a reconstrui stările interne ale celor trei LFSR-uri [ZYW91].

Multiplexor
2-la-1

LFSR-2

LFSR-3
Selecţie

LFSR-1

Fig. 5.5 Generatorul Geffe

Cifrul A5

A5 este un cifru şir folosit pentru a cripta fluxul de date GSM (Group Special Mobile),
reprezentând standardul non-american pentru telefonia mobilă celulară. A5 criptează linia dintre
telefon şi celula de bază, restul legăturii rămânând necriptată. A5 este format din trei LFSR-uri,
care au regiştri de lungime 19, 22 şi respectiv 23. Toate polinoamele de feedback sunt cu un
număr redus de coeficienţi11. Ieşirea este obţinută prin operarea XOR a celor trei LFSR-uri. A5
foloseşte un clock control variabil. Fiecare registru face un clocking bazat pe bitul central, care
este operat XOR cu inversa funcţiei prag (threshold function) a biţilor de la mijlocul celor trei
regiştri. În mod normal, două din LFSR-uri sunt clock-ate la fiecare iteraţie.

11
sparse (eng.)
128
Capitolul 5 – Criptografia modernă

Există un atac trivial care necesită 240 criptări: se ghiceşte conţinutul primelor două
LFSR-uri, apoi se determină al treilea din şirul generat. În ciuda acestui fapt, A5 este bine
proiectat şi este extrem de eficient. El trece cu succes toate testele statistice cunoscute şi singura
sa slăbiciune rezidă în faptul că regiştrii sunt scurţi, ceea ce face posibilă o căutare exhaustivă.
Variantele A5 cu regiştri lungi şi polinoame feedback dense au un grad de siguranţă sporit.

5.2.5 Generatori aditivi

Generatorii aditivi, cunoscuţi sub numele de generatori Fibonacci lenţi (lagged), sunt
extrem de eficienţi deoarece ei produc cuvinte aleatoare în loc de biţi aleatori. Nu prezintă
securitate, dar se pot folosi la construcţia unor generatoare sigure. Starea iniţială a generatorului
este un vector de cuvinte de n biţi, unde n ia valorile 8, 16, 32 etc. notat X1, X2, X3, …, Xm. Starea
iniţială este cheia. Cuvântul i al generatorului este:

Xi = (Xi-a + Xi-b + Xi-c, + … +Xi-m) mod 2n

Dacă, coeficienţii a, b, c,… m sunt aleşi în mod corect, perioada generatorului este cel puţin
egală cu 2n – 1. Una din condiţiile cerute pentru coeficienţi este ca cel mai puţin semnificativ bit
să formeze un LFSR de lungime maximă.

Cifrul RC4

RC4 este un cifru şir cu cheie de lungime variabilă, dezvoltat în 1987 de către Ron Rivest
pentru RSA Data Security. În 1994 codul sursă al algoritmului este făcut public pe Internet.
RC4 este un algoritm simplu de descris: şirul cheie este independent de textul în clar. Are 8
x 8 “cutii-S”: S0, S1, ..., S255. Intrările sunt permutări ale numerelor de la zero la 255, iar
permutarea este o funcţie de o cheie de lungime variabilă. Există doi indici, i şi j, iniţializaţi cu
zero.
Pentru a genera un octet aleator se procedează astfel:

i = (i + 1) modulo 256
j = (j + Si) modulo 256

129
Capitolul 5 – Criptografia modernă

T = Si
Si = Sj
Sj = T
t = (Si + Sj) modulo 256
K = St

Octetul K este operat XOR cu textul în clar pentru a produce text cifrat sau operat XOR cu
textul cifrat pentru a obţine textul în clar. Criptarea este aproape de 10 ori mai rapidă decât
DES-ul.
Iniţializarea “cutiilor-S” este simplă. Se iniţializează liniar: S0 = 0, S1 = 1, …, S255 = 255 şi
un alt vector de 256 de octeţi cu cheia, repetând cheia, dacă este necesar, pentru a completa
vectorul cu componentele: K0, K1, …, K255.

j=0
For i = 0 to 255:
j = (j + Si + Ki) modulo 256
se schimbă Si cu Sj între ele

Nu există rezultate publice ale criptanalizei. Se crede ca algoritmul este imun la analiza
diferenţială şi liniară; RC4 poate fi în aproximativ 21700 stări posibile. “Cutiile-S” evoluează lent
în timpul întrebuinţării: i asigură că fiecare element se schimbă, iar j că aceste schimbări sunt
aleatoare.
RC4 are un statut special de export, acesta fiind permis doar pentru chei de până la 40 de
octeţi. RC4 este implementat în multe produse comerciale, dintre care amintim Lotus Notes şi
Oracle Secure SQL.

Cifrul SEAL

SEAL este un cifru şir eficient pentru implementări software, dezvoltat de IBM. Algoritmul
a fost optimizat pentru procesoare de 32 de biţi: pentru a rula eficient sunt necesari opt regiştri de
câte 32 de biţi şi câţiva kilo-octeţi de memorie cache. Folosind operaţii relativ lente, SEAL
pre-procesează operarea cheii într-un set de tabele, care sunt apoi folosite pentru a accelera
criptarea şi decriptarea.

130
Capitolul 5 – Criptografia modernă

Familia de funcţii pseudo-aleatoare


SEAL nu este un cifru şir tradiţional, ci mai degrabă o familie de funcţii pseudo-aleatoare.
Dându-se o cheie k de 160 de biţi şi n de 32 de biţi, SEAL transformă n într-un şir de biţi k(n) de
lungime L. L poate lua orice valoare mai mică de 64 de kilo-octeţi. SEAL se presupune că are
proprietatea că dacă k este ales aleator, atunci k(n) ar trebui sa fie identică, din punct de vedere al
calculului cu o funcţie aleatoare de n.
Efectul practic al faptului că SEAL este o familie de funcţii pseudo-aleatoare este că poate
fi folosit în aplicaţii în care cifrurile şir tradiţionale nu se pot aplica. Majoritatea cifrurilor şir
generează o secvenţă de biţi: cunoscând cheia şi poziţia i, singura posibilitate de a genera bitul de
pe poziţia j este de a genera toţi biţii dintre i şi j. În cazul unei familii de funcţii pseudo-aleatoare
situaţia este diferită: se poate accesa uşor orice poziţie din şirul cheie, ceea ce poate fi foarte util.
Să ne imaginăm că trebuie să securizăm un hard disk, prin criptarea fiecărui sector de 512
octeţi. Cu o familie de funcţii pseudo-aleatoare cum este SEAL, se poate cripta sectorul n prin
operare XOR a conţinutului său cu k(n). Este ca şi cum întregul hard disk ar fi operat XOR cu un
lung şir pseudo-aleator, iar orice parte a acestui şir se poate calcula fără probleme.
O familie de de funcţii pseudo-aleatoare simplifică de asemenea şi problema sincronizării,
întâlnită în cazul cifrurilor şir standard.

Descrierea algoritmului SEAL


Algoritmul SEAL este definit de trei tabele de chei, numite R, S şi T. Faza de
pre-procesare mapează cheia k pe aceste tabele folosind o procedura bazată pe SHA (Secure Hash
Algorithm). Tabela T de 2 kilo-octeţi reprezintă 9 “cutii-S” de câte 32 de biţi.
SEAL foloseşte şi patru regiştri de 32 de biţi: A, B, C şi D, ale căror valori iniţiale sunt
determinate de n şi tabelele R şi T. Aceşti regiştri se schimbă după câteva iteraţii, fiecare având
opt cicluri. În fiecare ciclu, 9 biţi din primul registru formează un index în tabela T. Valoarea
obţinută astfel este adunată sau operată XOR cu conţinutul celui de al doilea registru. Primul
registru este apoi deplasat circular cu 9 poziţii. În anumite cicluri, al doilea registru este modificat
prin adunare sau operare XOR cu valoarea primului registru (după deplasarea circulară). După
opt asemenea cicluri, regiştrii A, B, C şi D sunt adăugaţi şirului cheie, după ce sunt adunaţi sau
operaţi XOR cu un anumit cuvânt din tabela S. Iteraţia este completată prin adunarea la A şi
respectiv C de valori suplimentare care depinde de n1, n2, n3 sau n4, în funcţie de paritatea
numărului iteraţiei.
131
Capitolul 5 – Criptografia modernă

Ideile importante din proiectarea algoritmului sunt:


1. Folosirea unei chei screte şi mari, derivată din “cutia-S” (T).
2. Alternarea operaţiilor aritmetice (adunare şi operare XOR).
3. Folosirea unei stări interne întreţinută de către cifru, care nu se manifestă direct în
fluxul de date (cele ni valori care modifică A şi C la sfârşitul fiecărei iteraţii).
4. Variaţia funcţiei de ciclu relativ la numărul ciclului şi variaţia funcţiei de iteraţie
relativ la numărul iteraţiei.

SEAL necesită aproximativ cinci operaţii elementare pentru a cripta fiecare octet din text.
El rulează la viteza de 58 MB/sec, pe o maşină 486 la 50 MHz, fiind extrem de rapid. Pe de altă
parte, SEAL trebuie să pre-proceseze cheile în tabelele interne, care ocupă în total 3 KB. Deci,
SEAL nu se va folosi în situaţii în care nu dispunem de timp pentru construirea tabelelor şi, de
memorie pentru a le stoca.

Automatul celular

Automatul celular este un generator propus de Steve Wolfram [Wol86], care foloseşte un
automat celular unidimensional pentru a genera numere pseudo-aleatoare. Automatul celular
constă dintr-un vector de biţi a1, a2, a3, … ak, … an şi o funcţie de actualizare:

a’k = ak-1 ⊕ (ak ∨ ak+1)

Bitul generat este extras din una din valorile lui ak.
Comportarea generatorului pare a fi aleatoare, totuşi există un atac cu texte în clar
cunoscute pentru acest tip de generatori [MS91]. De asemenea s-a demonstrat că ieşirea unui
generator Wolfram poate fi generată de un LFSR de aceeaşi lungime. [Bar90].

Generatorul Blum – Micali

Acest generator îşi datorează securitatea dificultăţii de a calcula logaritmi discreţi. [BM84].
Fie g un număr prim şi p un număr prim diferit de 2. O cheie x0 iniţializează procesul:
xi+1 = gxi mod p

132
Capitolul 5 – Criptografia modernă

Ieşirea generatorului este 1 dacă xi < (p -1)/2 şi 0 în caz contrar.


Dacă p este suficient de mare, astfel încât calcularea logaritmilor discreţi mod p să fie
practic imposibilă, generatorul este sigur, conform [LW83] şi [Yao82].

Generatorul BBS

Cel mai simplu şi mai eficient generator bazat pe teoria complexităţii este BBS (Blum,
Blum şi Shub) [BBS83]. Teoria pe care se bazează BBS este cea a resturilor pătratice mod n şi pe
presupunerea că factorizarea întregilor mari este dificil de efectuat.
Pentru început, se aleg două numere prime mari p şi q, astfel încât p = q = 3 mod 4.
Produsul lor N este un întreg Blum (cei doi factori primi sunt diferiţi şi congruenţi cu 3 modulo
4). Se alege aleator un întreg x în grupul Z*N relativ prim cu N. Samânţa pentru generator se
calculează astfel:
s = x2 mod N

Generarea unui şir de m biţi pseudo-aleatori, m ∈ Z, se produce astfel: bi bitul i este cel mai
puţin semnificativ bit al lui xi – interpretat ca un întreg în [0, N - 1], unde xi este:

xi = x2i - 1 mod N, unde x1 := s

Secvenţa generată este: b1b2b3 … bm ∈{0, 1}m .


Generatorul BBS poate fi privit ca un caz special al generatorului Blum-Micali [BM84],
deoarece se bazează pe o permutare greu inversabilă (one-way) şi un predicat hardcore al acestei
permutări.
Un predicat hardcore al unei funcţii f este un predicat calculabil într-un timp polinomial al
lui x care este greu de aproximat din f(x). Orice funcţie one-way de forma f(x, r) = (f’(x), r) are un
predicat hardcore. Acest rezultat are un rol important în aria numerelor pseudo-aleatoare,
deoarece permite construcţia simplă a unui generator bazat pe o permutare one-way.
Existenţa funcţiilor one-way este un aspect central în criptografia modernă. Funcţiile
one-way se caracterizează prin faptul că sunt uşor de evaluat şi greu de inversat. Dar chiar dacă
inversarea lui f este dificilă, o funcţie one-way poate “scăpa” anumite informaţii despre x în f(x).
De exemplu, dându-se o valoare f(x), poate fi greu de a calcula eficient argumentul x
corespunzător, dar acelaşi lucru poate să nu se verifice pentru cel mai puţin semnificativ bit al lui

133
Capitolul 5 – Criptografia modernă

x. Problema de a arăta că f(x) ascunde cel puţin un bit al lui x se numeşte problema predicatului
hardcore. În 1989 Goldreich şi Levin au demonstrat că orice funcţie one-way poate fi modificată
astfel încât să deţină un asemenea hardcore, fără ca această modificare să producă o pierdere
semnificativă în termeni de securitate sau eficienţă [GL89]. În 1996, Naslund a demonstrat că
orice funcţie one-way se poate modifica astfel încât oricare bit al unei funcţii liniare pe Zp să fie
un hardcore al funcţiei modificate [Nas96].
Pentru un întreg N, fie QRN = (Z*N)2 subgrupul resturilor pătratice în Z*N şi fie FN: ZN →
ZN funcţia FN (x) = x2 ∈ ZN.. Pentru întregii Blum, funcţia FN este o permutare a subgrupului
resturilor pătratice QRN. Nu este dificil de arătat că FN este o permutare one-way a lui QRN , atât
timp cât factorizarea întregilor Blum nu este o operaţiune facilă. Pentru a construi generatorul de
tip Blum-Micali mai este nevoie de un bit hardcore al permutării. Considerăm predicatul B: QRN
→ {0, 1}, care pentru un argument x din QRN văzut ca un întreg în [1, N] are ca ieşire cel mai
puţin semnificativ bit al lui x. Blum arată că B(x) este un predicat hardcore al lui FN, presupunând
că este dificil să se distingă între resturile pătratice din ZN şi non-resturile din ZN cu simbolul
Jacobi 1. Aplicând construcţia Blum-Micali permutării one-way FN şi predicatului hardcore B(x)
se obţine generatorul descris. Teorema generală Blum-Micali arată că generatorul este sigur dacă
presupunerea din definiţia predicatului hardcore B(x) este îndeplinită. Vazirani şi Vazirani
[VV84] îmbunătăţesc acest rezultat arătând că B(x) rămâne un predicat hardcore în condiţiile unei
presupuneri mai slabe şi anume că factorizarea întregilor Blum este dificil de efectuat.
Proprietatea cea mai interesantă a generatorului BBS este că pentru a calcula bitul i nu
trebuie să generăm cei i - 1 biţi precedenţi. Dacă se cunosc p şi q, bitul i se poate calcula direct
astfel:
bi este cel mai puţin semnificativ bit al lui xi, unde xi = x0(2i) mod ((p-1)(q-1))

Această proprietate înseamnă că putem folosi acest generator tare criptografic de biţi
pseudo-aleatori ca un criptosistem şir pentru un fişier cu cu acces aleator.
Securitatea BBS constă în dificultatea de a-l factoriza pe n. Constanta n poate fi făcută
publică, astfel încât oricine să poată genera biţi folosind BBS. Totuşi, până când criptanalistul nu
factorizează n, nu va putea niciodată să prezică ieşirea generatorului. O afirmaţie şi mai tare decât
cea precedentă este că BBS este impredictibil la stânga şi impredictibil la dreapta, adică dacă se
dă un şir generat, criptanalistul nu poate prezice nici următorul nici precedentul bit din şir.
BBS este lent, dar există îmbunătăţiri; de exemplu se poate folosi mai mult decât un bit din
fiecare xi, şi anume cei puţin semnificativi log2n biţi, unde n este lungimea lui xi [VV83],[ AC88].
134
Capitolul 5 – Criptografia modernă

BBS rămâne totuşi lent pentru cifrurile şir, dar se foloseşte în aplicaţiile care necesită un grad
înalt de securitate, cum ar fi generarea cheilor.

Cascadarea cifrurilor şir


Dacă performanţa nu este un criteriu, se pot alege mai multe cifruri şir care se cascadează,
adică ieşirea fiecărui generator se operează XOR cu textul în clar, pentru a se obţine textul cifrat.
Dacă generatoarele au chei independente, securitatea obţinută prin cascadare este cel puţin
aceeaşi cu a celui mai tare algoritm din cascadă.
Cifrurile şir se pot combina de aceeaşi manieră ca şi cifrurile bloc, între ele sau împreună
cu cifrurile bloc. O combinaţie inteligentă este folosirea unui algoritm cifru sau bloc pentru a
re-genera cheia unui algoritm şir rapid, care poate avea un grad scăzut de securitate, deoarece
criptanalistul nu va dispune de mult text cifrat cu aceeaşi cheie.

Alegerea unui cifru şir


Cifrurile şir clasice se bazează pe o solidă fundaţie matematică, ceea ce permite
demonstrarea calităţilor necesare pentru criptare, dar permite şi criptanalistului să construiască
noi tipuri de atac. Din acest punct de vedere, este recomandabilă prezenţa unor elemente
nonliniare mai greu de analizat teoretic, cum ar fi S-box-urile din cifrurile bloc sau ca în cifruri
cum sunt RC4 şi SEAL. De asemenea se poate folosi un cifru bloc în mod OFB sau CFB pentru a
obţine un cifru şir ( vezi 5.1.1).
Câteodata şirurile de numere pseudo-aleatoare, chiar sigure criptografic, nu satisfac nevoile
de securitate şi apare cerinţa pentru numere aleatoare în adevăratul sens al cuvântului. Generarea
cheii este un prim caz. Dacă se generează chei criptografice aleatoare cu un generator de numere
pseudo-aleatoare, iar adversarul obţine o copie a acestui generator şi cheia master, el va putea
produce aceleaşi chei şi va sparge criptosistemul, oricât de sigur este algoritmul.

Alte cifruri şir


Cifrurile şir formează o categorie larg utilizată în aplicaţiile criptografice. Pe lângă
exemplele prezentate mai sus, se mai pot aminti următoarele cifruri şir:
CCG12
Generatorul CCG este un algoritm congruenţial în care, dându-se valoarea iniţială x0 de 512
biţi, următoarele valori generate se calculează cu formula de recurenţă:
xi+1 = xi3 mod 2512 , pentru i ≤ 0.

12
Cubic Congruential Generator
135
Capitolul 5 – Criptografia modernă

E0
E0 este un cifru şir proiectat de Bluetooth SIG în 1999, cu o cheie de 64/128 biţi, care
prezintă o securitate acceptabilă [FlL01].

ISAAC
Acest cifru a fost propus de R. Jenkins în 1996 [Jen96]. Foloseşte o cheie de lungime
maximă 1024 octeţi, este similar cu RC4 şi nu s-au descoperit atacuri eficiente.

LEVIATHAN
Cercetătorii David McGrew şi Scott Fluhrer [MGF00] au participat în 2000 la concursul
NESSIE cu acest cifru, care are o cheie de 126/256 biţi şi o performanţă de viteză de 10
cicli/octet. Deşi prezintă o proprietate interesantă legată de decriptarea cu acces aleator, cifrul a
fost eliminat în primul tur din cauza existenţei unui atac.

LILI-128
O echipă condusă de Dawson [DCG00] a propus acest cifru în anul 2000. Cu o cheie de
128 de biţi şi o performanţă de 1200 cicli/octet şi el a fost eliminat în priumul tur NESSIE
datorită existenţei unor atacuri mai rapide decât căutarea exhaustivă.

ORYX
Este standardul adoptat de TIA în 1995 [WSD98]. Lungimea cheii este de până la 96 de
biţi. Se foloseşte în telefonia mobilă CDMA şi TDMA, deşi este considerat nesigur.

PANAMA
Este un cifru proiectat de Daemen şi Clapp în 1998 [DaC98]. Cheia este de 256 biţi şi
viteza de 2 cicli/octet. Cifrul este o funcţie hash combinată cu un cifru şir. Pentru funcţia hash
s-au produs coliziuni, dar pentru partea de cifru şir nu se cunosc atacuri eficace.

5.3 Algoritmi cu chei publice

Conceptul de criptografie cu chei publice a fost inventat de Whitfield Diffie şi Martin


Hellman. Contribuţia lor constă în propunerea de a folosi un nou criptosistem în care cheile de
criptare şi decriptare sunt diferite, iar cheia de decriptare (care este secretă) nu poate fi dedusă din

136
Capitolul 5 – Criptografia modernă

cheia de criptare (care este publică). În anul 1976 conceptul a fost prezentat în premieră la
Conferinţa Naţională13, iar cîteva luni mai târziu lucrarea a fost publicată [DiH76].
Sistemele cu cheie publică au un mare avantaj faţă de sistemele cu chei secrete: oricine
poate transmite un mesaj secret utilizatorului (cunoscându-i cheia publică), iar mesajul rămâne
protejat faţă de interceptor. Cu un sistem cu cheie convenţională, o cheie separată secretă este
necesară pentru fiecare pereche de utilizatori.
Un canal este o cale pentru fluxul de informaţii; într-un mediu privat, calea este protejată
împotriva accesului din exterior. În general, un sistem cu n utilizatori necesită n*(n-1)/2 chei,
pentru ca oricare pereche de utilizatori să poată comunica între ei şi mesajele lor să rămână
secrete faţă de ceilalţi utilizatori. Numărul de chei creşte rapid o dată cu numărul de utilizatori;
generarea, distribuirea şi menţinerea securităţii cheilor constituie o problemă datorită numărului
lor mare.
Caracteristici
Într-un sistem cu cheie publică, un utilizator deţine două chei: o cheie publică şi o cheie
privată. Utilizatorul îşi poate face cunoscută oricui cheia publică. Fie kPRIV cheia privată şi kPUB
cheia publică corespunzătoare. Atunci:
P=D(kPRIV, E(kPUB,P))
Utilizatorul poate decripta cu cheia privată ceea ce oricine altcineva a criptat cu cheia
publică corespunzătoare.
Cu al doilea algoritm de criptare cu cheie publică
P=D(kPUB, E(kPRIV,P))
utilizatorul poate cripta un mesaj cu cheia privată, iar mesajul poate fi decriptat doar cu cheia
publică corespunzătoare.
Aceste două proprietăţi presupun că cele două chei, publică şi privată, pot fi aplicate în
orice ordine (sistemul RSA nu face distincţie între cheia publică şi cheia privată; orice cheie din
perechea de chei poate fi folosită fie ca cheie publică, fie ca cheie privată).

5.3.1 Algoritmul Merkle-Hellman

Merkle şi Hellman au dezvoltat un algoritm de criptare bazat pe problema rucsacului


publicat în anul 1978 [MeH78]. Problema rucsacului conţine o mulţime de întregi pozitivi şi o

13
National Computer Conference SUA
137
Capitolul 5 – Criptografia modernă

sumă ţintă şi constă în găsirea unei submulţimi de întregi a căror sumă coincide cu suma ţintă.
Problema rucsacului este NP completă, adică rezolvarea sa necesită un timp exponenţial funcţie
de mărimea problemei – în acest caz, numărul de întregi.
Introducere
Ideea pe care se bazează schema rucsacului Merkle-Hellman este codificarea unui mesaj
binar ca o soluţie la o problemă a rucsacului, reducând mesajul în text cifrat la suma ţintă
obţinută prin adunarea termenilor corespunzători valorilor de 1 din şirul binar.
Un rucsac este reprezentat ca un vector de numere întregi în care ordinea termenilor este
foarte importantă. Există două tipuri de rucsacuri: unul simplu, pentru care există un algoritm
rapid (de timp liniar) şi unul complicat, obţinut din cel simplu prin modificarea elementelor sale.
Modificarea este astfel proiectată încât o soluţie cu elementele oricărui rucsac este de asemenea
soluţie pentru celălalt. Această modificare se numeşte trapă, permiţând utilizatorilor legitimi să
rezolve problema simplu. Deci, problema generală este NP completă, dar există o versiune
restrânsă care are o soluţie foarte rapidă.
Algoritmul începe cu o mulţime de întregi în care fiecare element este mai mare decât suma
predecesorilor săi. Să presupunem că avem un şir în care fiecare element ak este mai mare decât
a1+a2+...+ak-1. Dacă o sumă este între ak şi ak+1, trebuie să-l conţină pe ak, deoarece nici o
combinaţie de termeni a1, a2, ..., ak-1 nu pot produce un total mai mare decât ak. Analog, dacă o
sumă este mai mică decât ak, evident nu îl va conţine ca termen pe ak.
Modificarea algoritmului schimbă elementele mulţimii din problema simplă a rucsacului,
prin alterarea acestei proprietăţi de ordonare crescătoare într-un fel care păstrează soluţia.
Modificarea se realizează prin înmulţire cu o constantă modulo n.

Detalii privind tehnica Merkle-Hellman


Problema rucsacului presupune un şir a1, a2, ..., an de întregi şi o sumă ţintă T. Problema
este de a găsi un vector de valori 0 şi 1 astfel încât suma întregilor asociaţi cu 1 să dea T.
Deci, dându-se S=[a1, a2, ..., an], şi T, să se găsească un vector V cu valori 0 şi 1 astfel
încât :
n

∑a
i =1
i ∗ vi = T

Rezolvarea se face considerând fiecare întreg din S ca participând la T şi reducând


problema corespunzător. Când o soluţie nu produce suma ţintă, se elimină întregul ales iniţial şi
se continuă cu următorul. Acest back-traking deteriorează viteza soluţiei.
138
Capitolul 5 – Criptografia modernă

Rucsacuri supercrescătoare
Să presupunem problema rucsacului cu o restricţie suplimentară: întregii din S formează un
şir supercrescător, adică unul în care fiecare întreg este strict mai mare decât suma
predecesorilor săi. Atunci, orice întreg ak satisface relaţia
k −1
ak > ∑ a j
j =1

Soluţia rucsacului supercrescător (numit şi rucsacul simplu) este uşor de găsit. Se începe
cu T, care se compară cu cel mai mare întreg din S. Dacă acesta este mai mare decât T, nu este
termen al sumei, deci valoarea corespunzătoare din V este 0. Dacă acest cel mai mare întreg din S
este mai mic sau egal cu T, el este termen al sumei, deci valoarea corespunzătoare din V este 1.
Reluăm algoritmul pentru T din care scădem sau nu termenul analizat (conform cu valoarea din
V) şi pentru întregii rămaşi.

Tehnica de criptare
Tehnica de criptare Merkle-Hellman este un criptosistem cu cheie publică. Fiecare
utilizator are o cheie publică, care poate fi distribuită oricui şi o cheie privată, care se păstrează
secretă. Cheia publică este mulţimea întregilor din problema rucsacului (nu unul supercrescător);
cheia privată este rucsacul supercrescător corespondent. Contribuţia lui Merkle şi Hellman a fost
să proiecteze o tehnică de conversie a rucsacului supercrescător într-unul normal, prin schimbarea
numerelor de o manieră reversibilă.

Principiile aritmeticii modulare


În aritmetica normală, adunarea sau înmulţirea elementelor dintr-un şir supercrescător îi
păstrează natura supercrescătoare:
dacă a > b atunci k∗a > k∗b pentru orice k întreg pozitiv
În aritmetica modulo n, produsul a două numere mari poate fi mai mic decât produsul a
două numere mici, deoarece rezultatele mai mari decât n sunt reduse la intervalul 0 şi n-1. Astfel,
proprietatea supercrescătoare a şirului poate fi distrusă prin înmulţire cu o constantă modulo n.
Aritmetica modulară este sensibilă la factorii comuni. Cum toate produsele întregilor sunt
reduse la intervalul 0, n-1, două produse diferite vor produce acelaşi rezultat modulo n. Dacă
w∗x= r modulo n, atunci w∗x + n = r modulo n, w∗x + 2n = r modulo n etc.

139
Capitolul 5 – Criptografia modernă

Dacă w şi n au un factor comun, atunci nu orice întreg între 0 şi n-1 va fi obţinut ca rezultat
al produsului w∗x modulo n, pentru x oarecare. Pentru a produce toate valorile din intervalul
0, n-1 n trebuie să fie relativ prim cu w.
Dacă w şi n sunt relativ prime, există un întreg w-1, astfel încât w∗w-1 = 1 modulo n, numit
invers al lui w.

Transformarea unui rucsac supercrescător


Pentru a efectua o criptare folosind algoritmul Merkle-Hellman, este nevoie de un rucsac
supercrescător care poate fi transformat într-un rucsac complicat.
Construim S un şir de m întregi supercrescător, numit rucsac simplu. Orice instanţă a
problemei rucsacului formată din acest rucsac are o soluţie uşor de găsit. După selectarea unui
rucsac simplu S=[s1, s2, ..., sm], se alege un multiplicator w şi un modul n. Modulul trebuie să fie
mai mare decât cel mai mare întreg sm. Multiplicatorul nu trebuie să aibă nici un factor comun cu
modulul. O cale simplă de a asigura acest lucru este alegerea unui număr prim ca modul. În final,
se înlocuieşte fiecare întreg si din rucsacul simplu cu termenul:
hi = w∗si modulo n
astfel încât H = [h1, h2, ..., hm] este un rucsac dificil. Atât rucsacul dificil, cât şi cel simplu se vor
folosi la criptare.
Algoritmul de criptare Merkle-Hellman se aplică unui mesaj în text clar, sub forma unei
secvenţe binare P=[p1, p2, ..., pk], care se împarte în blocuri de m biţi, P0=[p1, p2, ..., pm],
P1=[pm+1, pm+2, ..., p2m] etc. Valoarea lui m este numărul de termeni din rucsacul simplu, cât şi din
cel dificil.
Criptarea mesajului P este un şir de ţinte, în care fiecare ţintă este suma anumitor termeni ai
rucsacului dificil H. Termenii selectaţi sunt cei care corespund biţilor de valoare 1 din Pi, astfel
încât Pi funcţionează ca un vector de selecţie pentru elementele din H. Fiecare termen din text
cifrat este Pi∗H, ţinta derivată folosind blocul Pi ca un vector de selecţie.

Criptarea unui mesaj


Fie rucsacul simplu supercrescător S=[1, 2, 4, 9], multiplicatorul w=15 şi modulul n=17.
Rucsacul dificil se obţine prin formulele:
1∗15 = 15 modulo 17 = 15
2∗15 = 30 modulo 17 = 13

140
Capitolul 5 – Criptografia modernă

4∗15 = 60 modulo 17 = 9
9∗15 = 135 modulo 17 = 16
astfel încât H=[15, 13, 9, 16]. Numărul de elemente din rucsace este m=4. Cheia publică este H,
cheia privată este S, care se păstreză secretă.
Mesajul este P = 0100101110100101, şi este criptat cu rucsacul dificil H astfel:
P=0100 1011 1010 0101
[0,1,0,0] ∗ [15,13,9,16] = 13
[1,0,1,1] ∗ [15,13,9,16] = 40
[1,0,1,0] ∗ [15,13,9,16] = 24
[0,1,0,1] ∗ [15,13,9,16] = 29
Mesajul este criptat sub forma întregilor 13, 40, 24, 29, folosind cheia publică H=[15, 13, 9,
16].

Algoritmul de decriptare
Destinatarul legitim cunoaşte rucsacul simplu – cheia privată, precum şi valorile lui w şi n
care au folosit la transformarea sa în rucsacul dificil – cheia publică. Se determină w-1 (inversul
lui w) astfel încât w∗w-1=1 modulo n. În exemplul nostru, 15-1 este 8, deoarece 15∗8 = 120
modulo 17 = (17∗7)+1 = 1.
Ţinând cont de relaţia între rucsacuri:
H=w∗S modulo n,
mesajul în text cifrat C produs este:
C=H∗P= w∗S∗P modulo n
Pentru decifrare, înmulţim modulo n egalitatea cu w-1:
w-1 ∗ C = w-1 ∗ w ∗ S ∗ P = S ∗ P modulo n
Pentru a regăsi mesajul în text clar P, destinatarul legitim trebuie să rezolve problema
rucsacului simplu cu rucsacul S şi suma ţintă w-1 ∗Ci pentru fiecare întreg Ci din text cifrat.
Exemplul de decriptare:
8∗ 13 = 104 modulo 17 = 2 = [0100]
8∗ 40 = 320 modulo 17 = 14 = [1011]
8∗ 24 = 192 modulo 17 = 5 = [1010]
8∗ 29 = 232 modulo 17 = 11 = [0101]

141
Capitolul 5 – Criptografia modernă

Mesajul decriptat este cel iniţial 0100101110100101.

Criptanaliza
În acest exemplu, deoarece m=4, este uşor de determinat soluţia la problema rucsacului
pentru 13, 40, 24 şi 29. Rucsacuri mai lungi, care implică şi valori mari ale modulului n, sunt
mult mai dificil de rezolvat.

Implementarea practică
În mod obişnuit, valoarea lui n este aleasă astfel încât să aibă o lungime de 100 până la 200
de biţi. Dacă n are 200 de biţi, întregii din S se aleg astfel:
1 ≤ s0 < 2200
2200 ≤ s1 < 2201 etc. astfel încât pentru fiecare si există aproximativ 2200 posibilităţi de
alegere, ceea ce se poate realiza cu ajutorul unui şir de numere aleatoare. Se generează un şir de
m numere aleatoare, r1, r2, ..., rm. Fiecare ri trebuie să fie între 0 şi 2200. Fiecare valoare si a
rucsacului simplu este determinat astfel:
si = 2200+i-1+ri, pentru i = 1, 2, ...,m
Cu termeni de asemenea ordin de mărime pentru S (şi pentru H), este imposibil să se
încerce toate valorile pentru si, în scopul de a descoperi pe S, dându-se H şi C, chiar folosind o
maşină de calcul paralel cu milioane de procesoare.

Slăbiciunile algoritmului de criptare Merkle-Hellman


Metoda rucsacului a lui Merkle şi Hellman pare a fi sigură. Cu valori suficient de mari
pentru n şi m, şansele interceptorului de a sparge algoritmul printr-un atac în forţă sunt
neglijabile.
Totuşi, criptanalistul nu trebuie neapărat să rezolve problema rucsacului la modul general,
deoarece criptarea depinde de instanţele special alese ale problemei. În 1980, Shamir arată că
dacă valoare modulului n este cunoscută, este posibil să se rezolve problema rucsacului simplu.
Să observăm că, dacă toate elementele rucsacului dificil sunt cunoscute, este uşor de
determinat care element corespunde fiecărui element din rucsacul simplu. Fie h0 şi h1 primele
două elemente ale rucsacului dificil, corespunzând elementelor s0 şi s1 din rucsacul simplu. Fie:
ρ = ho / h1 modulo n

142
Capitolul 5 – Criptografia modernă

Deoarece h0 = w∗ s0 modulo n şi h1 = w∗ s1 modulo n, este de asemenea adevărat că:


ρ = (w∗ s0) / (w∗ s1) = s0 / s1 modulo n
Dându-se raportul ρ , se determină şirul:
∆ = ρ modulo n, 2∗ ρ modulo n, ..., k∗ ρ modulo n, ..., 2m∗ ρ modulo n
Pentru anumite valori ale lui k avem k∗ (1/s1) = 1 modulo n.
Atunci :
k∗ ρ modulo n = k∗ s0∗ 1/s1 modulo n = s0
Este normal să presupunem că s0 va fi cel mai mic întreg din ∆. O dată s0 cunoscut, este
simplu să-l determinăm pe w, apoi pe w-1 şi, în final, pe fiecare si.
O problemă şi mai serioasă a fost semnalată tot de Shamir. Să încercăm să deducem w şi n
doar din hi.
Mărimea aproximativă a lui n se poate deduce din faptul că va fi mai mare decât oricare hi,
deoarece hi a fost obţinut printr-o reducere modulo n; totuşi n nu va fi cu mult mai mare decât cel
mai mare hi, deoarece este de dorit ca hi modulo n să fie egal distribuit între 0 şi n-1.
Să presupunem că încercăm să îl ghicim pe w. Putem încerca diverse valori w ~ =1, 2, ...
~ ∗ h  modulo n ca funcţie având ca argument pe w
pentru w. Graficul lui w ~ este aşa numitul grafic
i
~ se
în dinţi de fierăstrău, în care panta segmentelor de dreaptă este hi. Valoarea corectă w a lui w
atinge în din punctul de discontinuitate comun al graficelor funcţiilor w~ ∗ h modulo n, i=1, 2, ...
i

Valoarea lui n este aproximată prin N, număr real. Scalând graficele cu N, problema este să se
determine w ~ / N prin aproximări succesive, ceea ce conduce la un sistem de inegalităţi liniare,

care poate fi rezolvat într-un timp polinomial. Deci, problema rucsacului Merkle-Hallman poate
fi spartă într-un timp rezonabil.
Să observăm că această soluţie nu se aplică problemei generale a rucsacului, ci numai unei
clase speciale de probleme derivată din şiruri supercrescătoare prin multiplicare cu o constantă
modulo altă constantă. Astfel, problema generală a rucsacului rămâne intactă; doar forma sa
restricţionată poate fi rezolvată. Acest rezultat subliniază ideea că un criptosistem bazat pe o
problemă dificilă nu este neapărat la fel de greu de spart ca şi problema pe care se bazează.
În momentul de faţă, chiar variantele transformate ale rucsacului nu sunt suficient de sigure
pentru o aplicaţie asupra căreia este aşteptat un atac concertat.

143
Capitolul 5 – Criptografia modernă

5.3.2 Algoritmul Rivest-Shamir-Adelman (RSA)

Un alt criptosistem bazat pe o problemă dificilă este algoritmul RSA, numit astfel după
inventatorii săi, Rivest, Shamir şi Adelman. A fost publicat în 1978 [RSA78] şi rămâne un
algoritm foarte folosit şi astăzi, în ciuda eforturilor criptanaliştilor de a-l sparge.

Introducere
Algoritmul de criptare RSA incorporează rezultate din teoria numerelor, combinate cu
dificultatea determinării factorilor primi pentru un număr ţintă. Ca în cazul algoritmului Merkle-
Hellman şi algoritmul RSA operează cu aritmetica modulo n. Un bloc în text clar este tratat ca un
întreg, iar pentru criptare şi decriptare se folosesc două chei, e şi d, care sunt interschimbabile.
Blocul de text clar P este criptat ca Pe modulo n. Deoarece exponenţierea este modulo n, este
foarte dificil să se factorizeze Pe pentru a descoperi textul original. Pentru aceasta, cheia de
decriptare d este astfel aleasă încât (Pe)d = P modulo n. Astfel P este regăsit fără a fi necesară
descompunerea în factori primi a lui Pe.
Problema pe care se bazează algoritmul de criptare este cea a factorizării numerelor mari.
Problema factorizării nu se cunoaşte a fi NP completă; cel mai rapid algoritm cunoscut este
exponenţial în timp.

Descrierea detaliată
Cu algoritmul RSA, mesajul în text clar P este criptat în, mesajul în text cifrat C prin
intermediul cheii de criptare e:
C = Pe modulo n
Mesajul în text clar este regăsit cu ajutorul cheii de decriptare d:
P = Cd modulo n
Din cauza simetriei din aritmetica modulară, criptarea şi decriptarea sunt mutual inverse şi
comutative:
P = Cd modulo n = (Pe)d modulo n = (Pd)e modulo n

Alegerea cheilor
Cheia de criptare constă în perechea de întregi (e, n), iar cheia de decriptare este (d, n).
Punctul de plecare în găsirea cheilor pentru acest algoritm este selectarea unei valori pentru n.
144
Capitolul 5 – Criptografia modernă

Valoarea lui n trebuie să fie suficient de mare, dată de un produs a două numere prime p şi q. Atât
p cât şi q trebuie să fie ele însele suficient de mari. În mod obişnuit, p şi q au aproximativ 100 de
cifre fiecare, astfel încât n are aproximativ 200 de cifre. Această lungime inhibă încercarea de a
factoriza pe n, pentru a afla pe p şi pe q.
În continuare, se alege un întreg e relativ mare, astfel încât e este relativ prim cu (p-1)(q-1).
Satisfacerea acestei condiţii se face alegându-l pe e ca un număr prim mai mare decât p-1 şi q-1.
În final, se alege d astfel încât:
e ∗ d ≡ 1 modulo (p-1)(q-1)

Fundamentele matematice ale algoritmului RSA


Funcţia lui Euler ϕ (n) este numărul întregilor pozitivi mai mici decât n care sunt relativ
primi cu n. Dacă p este prim, atunci:
ϕ (p) = p-1
Dacă n = p ∗ q, unde p şi q sunt ambele prime,
ϕ (n) = ϕ (p) ∗ ϕ (q) = (p-1) ∗ (q-1)
Identitatea Euler-Fermat afirmă că :
xϕ (n) ≡ 1 modulo n
pentru orice întreg x, dacă n şi x sunt relativ prime.
Să presupunem că mesajul în text clar P este criptat cu algoritmul RSA, astfel încât
E(P)=Pe. Trebuie să fim siguri că putem decripta mesajul. Valoarea e este astfel aleasă încât
inversa sa d să poată fi găsită uşor. Deoarece e şi d sunt inverse modulo ϕ (n),
e ∗ d ≡ 1 modulo ϕ (n)
sau
e ∗ d = k ∗ ϕ (n) + 1
pentru anumiţi întregi k.

Implementarea practică a algoritmului


Utilizatorul algoritmului RSA alege numerele prime p şi q, din care se obţine
n = p ∗ q. Apoi alege e, relativ prim la (p-1) ∗ (q-1), de obicei un număr prim mai mare decât p-1
şi decât q-1. În final, d se calculează ca inversul lui e modulo ϕ (n).
Utilizatorul distribuie e şi n, şi păstrează cheia d secretă; p, q şi ϕ (n) pot fi ignorate, dar nu
făcute publice. Chiar dacă se ştie că n este produsul a două numere prime, datorită mărimii sale –
145
Capitolul 5 – Criptografia modernă

peste 200 de cifre, nu va fi posibil să se determine factorii p şi q, şi nici cheia privată, d din e. De
asemenea, verificarea că p şi q sunt prime, presupune luarea în considerare a 1050 factori.
Solovay şi Strassen au dezvoltat un algoritm euristic de calcul a probabilităţii ca un număr
să fie prim, cu gradul de încredere dorit.
Orice număr prim satisface două teste. Dacă p este un număr prim şi r orice număr mai mic
decât p,
cmmdc(p, r)=1
unde cmmdc este cel mai mare divizor comun, şi
J(r, p) ≡ r(p-1)/2 modulo p
unde J este funcţia Jacobi, definită astfel:
1 daca r = 1
 2
J (r , p) =  J (r / 2, p) ∗ (−1) ( p −1) / 8 daca r este par
 ( r −1)∗( p −1) / 4
 J ( p modulo r, r) ∗ (−1) daca r este impar si r ≠ 1

Dacă un număr pare a fi prim, dar nu trece unul din aceste teste, în mod sigur nu este prim.
Dacă însă satisface cele două teste, numărul este prim cu o probabilitate de cel puţin 1/2.
Problema în algoritmul RSA este de a găsi două numere prime mari, p şi q. Pentru a folosi
metoda de mai sus, se alege un posibil număr mare prim, p. Se generează aleator un număr r şi se
calculează cmmdc(p,r) şi J(r,p). Dacă una din cele două condiţii nu este îndeplinită, p nu este
număr prim. Dacă ambele teste se verifică, probabilitatea ca p să nu fie prim este cel mult 1/2.
Procesul se repetă pentru noi valori ale lui r alese aleator. Dacă al doilea r verifică ambele teste,
probabilitatea ca p să nu fie prim este cel mult 1/4. După repetarea procesului de k ori astfel încât
cele două teste sunt verificate, probabilitatea ca p să nu fie prim este cel mult 1/2k.

Criptanaliza metodei RSA


Teoretic sunt trei posibilităţi de abordare a unui atac în cazul algoritmului RSA: atacul în
forţă, atacul bazat pe metode matematice (încercarea factorizării produsului a două numere prime
mari) şi atacul temporal. Analiza acestor atacuri duce la concluzia că nici unul nu are sorţi de
izbândă.
În pofida unor intense cercetări, au fost identificate doar probleme minore în comparaţie cu
cele din cazul algoritmului rucsacului a lui Merkle şi Hellman.

146
Capitolul 5 – Criptografia modernă

5.4 Concluzii

Criptografia cu chei simetrice şi cea cu chei publice prezintă diverse avantaje şi dezavantaje
pe care le prezentăm în continuare:

(i) Avantaje ale criptografiei cu chei simetrice

1. Algoritmii folosiţi permit gestionarea unor volume mari de date, cu viteză relativ
bună. În special atunci când este vorba de implementări hard.

2. Cheile folosite pentru algoritmii simetrici sunt relativ scurte.

3. Algoritmii simetrici pot fi folosiţi ca primitive pentru a construi soluţii criptografice


incluzînd generatoarele de numere pseudo-aleatoare şi funcţiile hash.

4. Algoritmii cu chei simetrice se pot compune pentru a produce algoritmi mai


puternici.

(ii) Dezavantajele criptografiei cu chei simetrice

1. Într-o comunicaţie cheia trebuie să rămînă secretă în ambele capete.

2. Într-o reţea cu mulţi utilizatori numărul cheilor care trebuie gestionate devine o
problemă majoră.

3. Pentru o comunicaţie între două părţi, practica criptografică impune schimbul


cheilor frecvent, uneori chiar la fiecare sesiune, ceea ce în condiţiile unui canal
nesigur de comunicaţie este o altă problemă.

(iii) Avantajele criptografiei cu chei publice

1. Dintre cele două chei folosite în algoritmii cu chei publice doar una trebuie ţinută
secret.

2. Administrarea cheilor într-o reţea poate fi făcută cu un singur administrator “de


încredere”.
147
Capitolul 5 – Criptografia modernă

3. În general perechile de chei publice/secrete pot fi folosite pe o perioada lungă de


timp fără a fi schimbate.

4. Într-o reţea de dimensiuni mari numărul de chei necesare este considerabil mai mic
decît în cazul criptografiei simetrice.

(iv) Dezavantajele criptografiei cu chei publice

1. Viteza algoritmilor cu chei publice (chiar şi a celor mai performanţi) este de câteva
ori mai mică decât a celor cu chei secrete.

2. Dimensiunea cheilor folosite este mai mare (1024 pentru RSA în comparaţie cu 64
sau 128 în cazul algorimilor de tip bloc).

3. Pentru nici un algoritm cu chei publice nu s-a demonstrat că ar fi “sigur”; securitatea


lor se bazează prezumţia de dificultate a unui set de probleme de teoria numerelor.

4. Istoria criptografiei cu chei publice este relativ scurtă (din 1970) .

Utilizarea algoritmilor în sisteme de criptare disponibile în Internet


Aplicaţiile şi protocoalele folosite în Internet au nevoi diferite de securitate, în funcţie de
care se utilizează diverse sisteme criptografice. Se observă că nu există un algoritm unic bun
pentru orice situaţie – în funcţie de noile rezultate obţinute în proiectarea criptografică, dar şi în
criptanaliză, se renunţă la unii algoritmi sau se dezvoltă variante îmbunătăţite din punct de vedere
al securităţii.
În Internet, sistemele criptografice pot fi grupate în două mari categorii: protocoale de reţea
şi programe/protocoale folosite pentru criptarea mesajelor trimise prin poşta electronică
(tabelul 5.3).

148
Capitolul 5 – Criptografia modernă

Principalii
Nr. Sistem Caracteristici
algoritmi
PCT (Private RSA
Protocol criptare transmisii
Communications RC4
1 TCP/IP
Technology) MD5

SSL (Secure Socket RSA


Protocol criptare transmisii
2 Layer) RC4
TCP/IP
MD5
S-HTTP – Secure- RSA
Protocol pentru criptarea cererilor şi
3 HyperText Transfer DES
răspunsurilor HTML
Protocol
RSA
SET (Secure Electronic Protocol criptare transmisii de
4 MD5
Transaction) instrucţiuni de platã prin Internet
RC2
RSA
Protocol criptare transmisii
5 CyberCash MD5
instrucţiuni de platã prin Internet
RC2
Diffie-
Protocol de nivel scãzut pentru criptarea
6 Ipsec, Ipv5 Hellman
pachetelor IP
DNSSEC (Domain Name RSA
Sistem pentru securizarea
7 System Security) MD5
DNS
Securitate în reţea pentru aplicaţiile de DES
8 Kerberos
nivel înalt
RSA
Diffie-
Protecţie pentru Telnet la
9 SSH (Secure Shell) Hellman
transferul de fişiere
Des
Triple DES
S/MIME – Secure Format pentru criptarea poştei Specificaţii
10 Multipurpose Internet Mail electronice utilizator
Extension
Aplicaţie pentru criptarea poştei MD5
PGP (Pretty Good
11 electronice IDEA
Privacy)
RSA

Tabelul 5.3 Algoritmi de criptare utilizaţi în aplicaţiile din Internet

149

S-ar putea să vă placă și