Sunteți pe pagina 1din 33

3.

NOȚIUNI DE CRIPTOGRAFIE CU CHEIE


SECRETĂ

3.1. Noțiuni generale

Criptarea cu cheie simetrică, cunoscută și sub numele de criptare cu cheie simetrică sau
criptare convențională a fost, din punct de vedere istoric, prima tehnică de criptare folosită în
anii 70. Aceste tehnici sunt folosite la sursă pentru a transforma mesajul (textul original
necriptat) într-un text cifrat pe baza unei chei de cifrare secrete, pe baza operației de cifrare
(criptare); la destinație mesajul cifrat recepționat trebuie convertit în textul original, pe baza
operației de decifrare (decriptare) folosind aceeași cheia secretă folosită la emisie. Aceste
chei reprezintă informația secretă, care trebuie cunoscută doar de partenerii care participă la
schimbul de informații, motiv din care se mai numește și cheie privată. Știința care se ocupă
de studiul principiilor și dezvoltarea metodelor de criptare și decriptare poartă numele de
criptografie iar studiul și analiza metodelor de a obține textul original pe baza textului criptat
fără a cunoaște cheia se numește criptanaliza [Sta05]. Un algoritm de criptare este considerat
ca fiind unul sigur dacă un opozant nu poate determina cheia de criptare doar pe baza textului
original și cel criptat, sau o poate face doar cu un volum de calcul extrem de ridicat.
Criptarea cu cheie secretă presupune ca entitățile pereche care participă la un dialog să
cunoască cheia sau cheile secrete folosite. Un algoritm de criptare este considera ca fiind sigur
dacă un potențial opozant nu poate determina cheia de criptare doar pe baza textului original
si celui criptat. Aceasta reprezintă principala vulnerabilitate a acestui tip de criptare, și, pentru
asigurarea unui nivel ridicat de securitate, aceste chei trebuie păstrate și transmise în deplină
siguranță. Principalul avantaj al acestor tehnici este acela că folosesc un număr de operații
similare, ceea ce permite realizarea unor implementări hardware direct pe circuit integrat,
ceea ce duce la o creștere a vitezei de lucru, deci a ratei de transmisie a datelor.
Orice sistem criptografic include trei elemente [Sta1[1] și anume
 (1)Tipul de operație utilizat pentru a transforma mesajul in text cifrat – majoritatea
algoritmilor de criptare cu cheie simetrică folosesc două tehnici majore, și anume
substituția în care fiecare element al unui text (bit, litera, grup de litere) este
transformat într-un alt element din același set de elemente și transpoziția în care
elementele mesajului original sunt rearanjate într-o nouă ordine. Principala cerință
pentru orice operație sau ansamblu de operații utilizate este aceea ca informația să nu
se piardă (toate operațiile să fie reversibile). Majoritatea sistemelor implică mai
multe niveluri de substituții și transpoziții pentru a asigura un grad de securitate cât
mai mult.
 (2) Numărul de chei utilizate – și anume dacă atât sursa cât și destinația folosesc
aceeași cheie avem un sistem de criptare simetric (cu cheie unică, secretă); dacă
sursa și destinația folosesc chei diferite avem un sistem de criptare asimetric (cu
cheie publică sau dublă– dintre care una este secretă, iar cealaltă este publică pentru
utilizatorii autorizați).
 (3) Felul in care mesajul este prelucrat – și anume dacă prelucrarea datelor se face în
blocuri de lungime dată avem de-a face cu un cifru bloc, iar dacă prelucrarea se face
element cu element avem de-a face cu un cifru iterativ.
Din punct de vedere al atacatorului, obiectivele acestora sunt determinarea cheii folosite
pentru criptarea. O primă abordare folosește atacurile criptanalitice care se bazează pe
cunoașterea naturii algoritmului și pe anumite cunoștințe legate de mesajul original, putând
astfel deduce algoritmul de criptare pe baza textului criptat. O a doua abordare presupune
utilizarea atacurilor prin forța brută, caz în care atacatorul încearcă toate cheile posibile până
reușește să obțină o traducere inteligibilă a mesajului; acest tip de atacuri necesită un efort de
calcul ridicat, iar șansa de succes este de 50%.

3.2. Tehnici de criptare bloc

3.2.1. Cifrul bloc ideal


Forma cea mai generală, un cifrul bloc ideal este acela care realizează o corespondență
total aleatoare între blocul de 2n biți de intrare și cel de ieșire [FNS75]. Operațiile de criptare
și decriptare pot fi descrise prin intermediul unor tabele de corespondență, iar corespondența
trebuie să fie reversibilă pentru a se putea realiza decodarea. În figura 3.1. este ilustrat un
astfel de cifru bloc ideal pentru blocuri de lungime 4, acesta fiind descris de tabelul de
codare / decodare 3.1.

Convertor 4 la 16
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Convertor 16 la 4

Fig.3.1. Cifrul bloc ideal

2
Tabelul 3.1. Tabelul de codare / decodare
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
1011 0010 1111 0000 0111 1100 0001 1001 0011 1110 0100 1101 0101 1010 1000 0110
11 23 15 0 7 12 1 9 3 14 5 13 5 10 8 9

Operațiile de criptare / decriptare se fac pe baza tabelului de corespondență, ceea ce


înseamnă că trebuie memorată corespondența între fiecare intrare și fiecare ieșire, ceea ce face
ca dimensiunea cheii să fie ridicată. Dacă se consideră cazul în care se lucrează cu blocuri de
date de 64 biți, numărul de conexiuni ce trebuie specificate în tabelul de corespondența este
de 264=18446744073709551616, valoare care îl face greu de implementat. Din acest motiv
utilizarea codurilor bloc ideale este puțin fezabilă datorită problemelor legate de transmiterea,
memorarea și procesarea unor chei de criptare / decriptare de dimensiuni foarte mari.

3.2.2. Cifrul Feinstel


Cifrul Feistel este un cifru bloc ce operează cu blocuri de n biți, bazat pe operații
succesive de permutare și inversie [FNS75]. Esența unui astfel de cifrul este aceea de a utiliza
o cheie de k biți pentru prelucrarea unui bloc de date de n biți (n semnificativ mai mare decât
k), putând fi astfel realizate un număr de 2 k transformări, deci semnificativ mai mic decât cel
necesar cifrării bloc ideale, anume 2n. Algoritmul propus de Feinstel [FNS75], si bazat pe o
propunere inițială a lui Shannon [Sha49] utilizează o succesiune de permutări și substituții,
realizând astfel atât confuzie (relația dintre statisticile textului cifrat și cheia de cifrare sa fie
cat mai redusă) cât și difuze (relația statistică dintre mesaj și textul cifrat să fie cât mai
complexă).
Structura propusă folosește substituții și permutări alternate, pe baza unui ansamblu de
blocuri componente simple și ușor de realizat. Practic, sunt implementate mai multe „runde”,
fiecare formată dintr-o substituție urmată de o permutare. Blocul de date ce este prelucrat este
separat în două blocuri stânga (S) și dreapta (D) de dimensiune n/2; în fiecare rundă blocul
din dreapta (D) rămâne neschimbat iar blocul din stânga (S) este combinat cu blocul S în
funcție de cheia de criptare. Urmează apoi o permutare în care conținutul D si S se schimbă
între ele, și procesul se reia. Aceste operații sunt ilustrate în figura 3.2a. pentru operația de
cifrare iar în figura 3.2b pentru cea de decifrare.
Matematic, în cazul criptării, operațiile pot fi descrise astfel
CS i  CDi
(3.1.)
CDi  CS i  F  CDi 1 , K i 
unde:
 CS i , CDi - reprezintă conținutul celulelor registrelor din dreapta și din stânga la
sfârșitul rundei i;
 F – este funcția runde, adică operația de amestec a conținutului registrului CSi-1 în

3
funcție de sub-cheia Ki, generată din cheia K;
  - este operația de sau exclusiv.

(a) (b)
mesaj (n biți) mesaj cifrat(n biți)

CD0 K1 CS0 DD0 K16 DS0

F F

CD1 K2 CS1 DD1 K15 DS1

F F

CD14 K15 CS14 DD14 K2 DS14

F F

CD15 K16 CS15 DD15 K1 DS15

F F

CD16 CS16 DD16 DS16

mesaj criptat (n biți) mesaj (n biți)


Fig.3.2. Cifrul Feinstel: structura de cifrare (a) si de decifrare (b)

Avantajul acestei implementări este acela că structura de decriptare propusa de Feinstel


este identică cu cea de criptare, cheile de criptare fiind folosite in ordine inversa, astfel încât

4
se poate folosi aceeași structură atât pentru criptare cât și pentru decriptare, ceea ce reprezintă
un avantaj din punct de vedere al realizării sale practice. Pentru a demonstra funcționalitatea
decodorului, se vor nota cu DSi , DDi conținutul registrului de decodare la sfârșitul rundei i.
Ținând cont de figura 3.1, avem, al inițializare
DS 0  CD16  CS15
(3.2)
DD0  CS16  CD15
Apoi, după prima rundă avem
DD1  DS 0  CD16  CS15
DS1  DD0  F  DS 0 , K16   CS16  F  CD15 , K16  (3.3)
  CS15  F  CD15 , K16    F  RE15 , K16   CS15
deci după prima iterație conținutul decodorului este același cu penultimul conținut al
codorului. În plus, rezultatul este independent de alegerea funcției F (nu trebuie să fie
neapărat reversibilă).
Ca elemente de proiectare ale algoritmului Sta11 trebuie menționate
 alegerea dimensiunii blocului de date – o dimensiune mare a blocului de date
prelucrat duce la creșterea securității (prin creșterea difuziei) dar și la o scădere
vitezei de lucru a algoritmului; un compromis rezonabil , folosit în majoritatea
implementărilor, este acela de 64 biți, dar există variante mai noi care folosesc 128
biți (cum ar fi implementarea AES)
 alegerea dimensiunii cheii – o dimensiune mare a cheii duce la o creștere a securității
(prin creșterea confuziei și a rezistenței la atacurile prin forța brută) dar și la o
scădere vitezei de lucru; valori uzuale ale dimensiunii cheii sunt 64 sau 128 biți;
 alegerea numărului de runde – pe măsură ce numărul de runde crește, și nivelul de
securitate crește cu prețul scăderii vitezei; o alegere tipică este aceea de 16 runde;
 alegerea algoritmilor de generare a sub-cheilor și a funcției de criptare (F)– cu cât
acești algoritmi sunt mai complecși, cu atât securitatea crește, devenind mai puțin
sensibil la atacurile criptanalitice;
 viteaza și numărul de operații necesare criptării și decriptării – dacă operațiile de
criptare / decriptare sunt incluse în aplicații hardware viteza este un parametru critic ;
 simplitatea implementării și a analizei - este de dorit ca algoritmul să fie cât mai
ușor de implementat și de analizat, dar pe de altă parte cât mai sigur din punct de
vedere al utilizatorului;

3.2.3. Algoritmul DES (Data Encryption Standard)


Algoritmul DES (Data Encryption Standard) a fost dezvoltat în anii 70 pe baza
principiului prezentat de Feinstel, fiind mai apoi adoptat, în 19977 ca standard de către
Institutul Național de standardizare și Tehnologie al SUA (National Institute of Standards and
Technology – NIST) [DH77, SB88, Sta07], fiind mai apoi retras în mai 2005, deoarece a fost
considerat ca nesigur pentru multe aplicații , fiind înlocuit cu variante mai noi. Algoritmul

5
DES prelucrează blocuri de date de câte 64 de biţi, foloseşte chei de câte 56 de biţi şi face 16
iteraţii ale structurii Feistel. Cheile de iteraţie sunt generate din cheia originală de 56 de biţi
prin împărţirea acesteia în jumătate, prin rotirea fiecărei jumătăţi cu unul sau doi biţi şi prin
alegerea a câte 24 de biţi din fiecare jumătate rotită; Decriptarea utilizează aceleaşi chei în
ordine inversă şi cu jumătăţile stângă şi dreaptă ale blocului de 64 de biţi inversate. Specifi
acestui algoritm sunt modalitatea de implementare a funcției F și modalitatea de generare a
sub-cheilor. Algoritmul operează pe blocuri de text clar de 64 de biți; după o permutare
inițială blocurile de text sunt sparte în două jumătăți, dreaptă si stângă, fiecare de câte 32 de
biți; urmează apoi 16 runde identice în care datele sunt combinate cu cheia în conformitate cu
funcția de cifrare F iar după a 16a rundă cele două jumătăți sunt recombinate. Algoritmul se
încheie cu o permutare finală, reprezentând inversa permutării inițiale. Etapele algoritmului
sunt descrise în figura 3.3. și în cele ce urmează.

date 64 cheia 64

permutarea inițială permutarea /


comprimare 1
64 56
K1 permutarea /
Runda 1 deplasare circulară
48
comprimare 2 56
64 56
K1 permutarea /
Runda 2 deplasare circulară
48
comprimare 2 56

…………… …………………… ……………………………


………...
64 56
K1 permutarea /
Runda 16 deplasare circulară
48
comprimare 2 56
64

rotire 32 biți

64

permutarea inițială
inversată
64

Fig.3.3. Algoritmul DES

(A) Permutarea inițială – rearanjează biții mesajului după regula ilustrată în tabelele
3.2a, b și c

Tabelul 3.2a. Matricea inițială a datelor


m1 m2 m3 m4 m5 m6 m7 m8

6
m9 m10 m11 m12 m13 m14 m15 m16
m17 m8 m19 m20 m21 m22 m23 m23
m25 m26 m27 m28 m29 m30 m31 m32
m33 m34 m35 m36 m37 m38 m39 m40
m41 m42 m43 m44 m45 m46 m47 m48
m49 m50 m51 m52 m53 m54 m55 m56
m57 m58 m59 m60 m61 m62 m63 m64

Tabelul 3.2b. Permutarea inițială


58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 14
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7

Tabelul 3.2a. Matricea datelor permutate


m58 m50 m42 m34 m26 m18 m10 m2
m61 m52 m44 m36 m28 m20 m12 m4
m62 m54 m46 m38 m30 m22 m14 m6
m64 m56 m48 m40 m32 m24 m16 m8
m57 m49 m41 m33 m25 m17 m9 m1
m59 m51 m43 m35 m27 m19 m11 m3
m61 m53 m45 m37 m29 m21 m13 m5
m63 m55 m47 m39 m31 m23 m15 m7

(B) În cadrul fiecărei runde se efectuează operațiile clasice corespunzătoare cifrării


Feinstel, descrise matematic de
Di  S i 1
(3.4)
S i  Di 1  F  S i 1 , K i 
Implementarea funcției F se face astfel:
 se separă blocurile de lungime 64 biți ale mesajului în două blocuri de 32 de biți;
 se efectuează operația de expansiune (E) care presupune următoarele operații
 se separa blocul de 32 biți în patru blocuri de câte 4 biți;
 se adaugă la stânga fiecărui grup primul bit din grupul următor;
 se adaugă la dreapta fiecărui grup ultimul bit din grupul precedent;
în conformitate cu tabelul 3.3, ajungând de la 32 la 48 biți. Acest bloc de date
Tabelul 3.3. Expansiune și permutare
32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21

7
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 33
Modificarea ordinii și repetarea biților are ca scop
 aducerea jumătății din dreapta a blocului de date la dimensiunea cheii pentru
aplicarea unei operații de adunare modulo 2;
 furnizarea unui rezultat de lungime mai mare, care poate fi comprimat în cadrul
operației de substituție;
În acest fel, permițând unui singur bit să influențeze două substituții, dependența
biților de ieșire de cei de intrare se răspândește foarte repede, lucru numit efect de
avalanșă
 se efectuează operația de generare a cheii
 se separa cheia de 64 biți in doua jumătăți (28 biți fiecare), după care fiecare
jumătate este deplasată cu unul sau doi biți la stânga în funcție de numărul rundei,
conform tabelului 3.4.
Tabelul 3.4. Numărul de biți de deplasare în funcție de rundă
număr rundă 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
deplasare 1 1 2 2 2 2 2 2 1 2 2 2 2 2 2 1

 cheia rezultată (de 64 biți) este redusă la una de 56 biți prin ignorarea fiecărui al
8-lea bit și rearanjare, conform tabelului de permutare / combinare 2 (PC2),
conform tabelului 3.5.. Biții suplimentari pot fi folosiți pentru verificarea parității
și pentru a se asigura valabilitatea cheii.
Tabelul 3.5. Permutare combinare 2 (PC2)
57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
65 55 47 39 31 23 15
7 62 54 46 38 20 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4
Astfel, din cei 56 biți ai cheii originale se generează o sub-cheie de 48 biți pentru
fiecare din cele 16 runde ale DES
 se efectuează operația de sau exclusiv între mesajul expandat și cheia permutată;
 se efectuează comprimarea mesajului criptat de la 48 la 32 biți folosind un set de
cutii de substituție (cutii S), după cum este ilustrat în figura 3.4. Fiecare astfel de
cutie S are 6 biți de intrare și 4 biți ieșire, rezultând un total de 8 cutii diferite, date în
tabelul 3.6 a-h. Biții b2, b3, b4, b5} extrag un rezultat pe 4 biți corespunzătoare
numărului din coloana respectivă iar b1 și b6, care provin de la blocurile vecine,
selectează una din cele 4 funcții de substituție posibile în fiecare cutie S. Substituțiile
realizate cu cutiile S reprezintă elementul critic din în DES, deoarece, pe când

8
celelalte operații ale algoritmului sunt liniare (deci ușor de analizat), cutiile S sunt
neliniare și oferă securitatea DES, realizând practic funcția de cifrare.
48

6 6 6

S1 S2 …….. S8
4 4 4

32

P
32

Fig.3.4. Comprimarea cu cutii de substituție (cutii S)

Tabelul 3.6. Cutiile de substituție


14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7
0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8
S1 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0
15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13
15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10
3 13 4 7 5 2 8 14 12 0 1 10 6 9 11 5
S2 0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15
13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9
10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8
13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1
S3 13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7
1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12
7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15
13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9
S4 10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4
3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14
2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9
14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6
S5 4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14
11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3
12 11 10 15 9 2 6 8 0 13 3 4 14 7 5 11
10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8
S6 9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6
4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13
4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1
13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6
S7 1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2
6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12
13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7

9
1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2
S8 7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8
2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11

O diagrama bloc a operațiilor efectuate într-o rundă, corespunzătoare implelemntării


funcției F este ilustrată în figura 3.5.

(C) În final se efectuează operația de permutare finală (PF) care trebuie să fie inversul
permutării inițiale, în care cele 8 blocuri de 4 biți sunt recombinate într-un singur bloc de 32
de biți și reordonați conform tabelului 3.7.
Tabelul 3.2b. Inversul permutării inițiale
50 8 14 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25

64 56

Di-1 Si-1 CDi-1 CSi-1


32 28 28

Exp E  
48

48
PC2
48
Cutii S
32

PF
32

32

Di Si CDi CSi

64 56

Fig.3.5. Implementarea funcției F în cadrul unei runde

Din punct de vedere al decifrării, se poate utiliza același algoritm sau structură
hardware, cu modificări minime. Cheile trebuie utilizate în ordine inversă K16, K15, … K1,

10
iar în algoritmul de generare a cheilor deplasarea cheii se face în sens opus (spre dreapta) cu
același număr de biți ca la criptare (tabelul 3.4)
Algoritmul DES a funcționat cu succes timp de aproape 20 de ani, fiind susținut de
standardele ANSI X3.92 și X3.106 respectiv FIPS 46 și 81 în SUA.. Dintre avantajele acestui
standard pot fi menționate
 eficiența din punct de vedere al difuziei – schimbarea unui singur bit din blocul de
intrare de 64 biți alterează în medie 34 biți ai textului cifrat;
 eficiența din punct de vedere al confuziei – schimbarea unui singur bit din cheia de
control alterează în medie 35 biți ai textului cifrat; acesta două fenomene produc
efectul in avalanșă
 capacitatea sa este de 256~=7,2 1016chei posibile;
El a fost spart în 1998 printr-un atac prin forță brută, realizat în 56 de ore [EFF98], fiind apoi
retras în 2005. El a stat la baza dezvoltării unei serii de algoritmi dintre care pot fi amintiți
DES triplu și AES

3.2.4. Algoritmul DES triplu (3DES)


Algoritmul DES triplu presupune efectuarea mai multor operații de criptare și decriptare
succesive, cu chei diferite, după cum este ilustrat în figura 3.6., pentru a crește nivelul de
siguranță al algoritmului [FIPS99, SJA11].
K1 K2 K3
m a b c (a) codor 3DES
E D E

K3 K2 K1

ĉ b̂ â m̂ (a) decodor 3DES


D E D
Fig.3.6. Implementarea funcției F în cadrul unei runde

Matematic, operația de codare poate fi descrisă prin


c  E  K1 , b   E  K 1 , D  K 2 , a    E  K1 , D  K 2 , E  K1 , m    (3.4)
unde:
 m – este mesajul original;
 c – este mesajul criptat 3DES;
 E  K , x  - este operația de criptare pe baza algoritmului DES, ce folosește cheia K și
este aplicat mesajului x;

11
 D K , y  - este operația de decriptare DES, ce folosește cheia K și este aplicat
mesajului y;
Decriptarea se efectuează în ordine inversă
 
mˆ  D K 3 , bˆ  D K 3 , E  K 2 , aˆ    D K 3 , E  K 2 , D K1 , cˆ    (3.4)
unde m ˆ,c ˆ sunt mesajul estimat după decriptare respectiv mesajul criptat recepționat.
Utilizarea operației de decriptare intermediară nu are o semnificație criptografică anume,
decodorul putând fi folosit și cu un semnal criptat DES. Fiecare etapă operează pe blocuri de
date de 64 biți și în fiecare caz operația din mijloc este inversa operațiilor laterale. Standardele
prevăd trei opțiuni pentru alegerea cheilor, anume:
 opțiunea 1 – toate cele trei chei sunt independente;
 opțiunea 2 – K1=K3 și K2 este independentă;
 opțiunea 2 – toate cele trei chei sunt identice.
Dintre acestea opțiunea 1 este cea mai puternică, deoarece folosește 3 × 56 = 168 biți de cheie
independenți. Opțiunea 2 oferă 2 × 56 = 112 biți de cheie independenți, fiind mai slabă din
punct de vedere al securității decât cea anterioară, dar mai puternică decât o criptare DES cu
chei diferite aplicată de 2 ori, fiind mai eficientă la atacuri de tip preluare [SM11, Bha12]. Cea
de-a treia opțiune este echivalentă cu DES simplu, deoarece etapele de criptare – decriptare
succesive se anulează reciproc. Din acest motiv această opțiune a fost exclusă din standardele
ISO/IEC 18033-3.
3.2.5. Algoritmul AES (Advanced Encryption Standard)

Algoritmii prezentați anterior au o serie de dezavantaje, dintre care pot fi amintite:


 modalitatea de implementare și viteza de lucru
 algoritmul DES a fost dezvoltat în anii 70, fiind optimizat pentru hardware; există
posibilitatea de a realiza implementări software echivalente, dar acestea sunt lente
și consumatoare de resurse;
 algoritmul 3DES este mai sigur decât DES dar folosește trei rulări ale DES cu
chei diferite, ceea ce duce la o scădere a vitezei de lucru și la o complexitate a
implementării, atât hardware cât și software, mult mai mare decât DES simplu.
 dimensiunea blocului de date prelucrat – atât DES cât și 3DES lucrează, conform
standardelor, cu blocuri de date de 64 biți, dar aplicațiile mai noi necesită lucrul cu
blocuri de date mult mai mari.
În 1997 Institutul Național de standardizare și Tehnologie al SUA (NIST) a propus
dezvoltarea standardului AES (Advanced Encryption Standard) [FIPS01] cu următoarele
cerințe
 să aibă un nivel de securitate cel puțin egal cu algoritmul 3ES;
 să fie un cifru bloc ce operează cu blocuri de 128 biți, cu extensii posibile la 192 și
256 biți;
În prima rundă de evaluare au fost propuși 15 algoritmi, din care, în cea de-a doua rundă, au
fost selectați 5 dintre aceștia. Evaluarea a avut în vedere [NIST07] nivelul de securitate oferit,

12
rezistența la diferite tipuri de atacuri, eficiența din punct de vedere al efortului de calcul și de
memorie necesare in cazul implementărilor hardware respectiv facilitățile oferite pentru
implementările de tip software, gradul de similitudine între operațiile de criptare și decriptare
precum și versatilitatea și flexibilitatea algoritmului. În noiembrie 2001 NIST a selectat un
algoritm propus de Dr. Joan Daemen și Dr. Vincent Rijmen din Belgia, anume algoritmul
Rijndael [DR98].
Algoritmul utilizează blocuri de date 128 biți (16 octeți) și chei de lungime 128 biți, cu
posibile extensii la 192 biți respectiv 256 biți (varianta cu 192 biți reprezintă implementarea
standard). Datele sunt înscrise într-un registru de stare care este modificat în fiecare etapa de
criptare sau decriptare, iar ieșirea este înscrisă într-un registru de ieșire. Cheia de128 biți este
expandată în 44 cuvinte de cate 4 octeți. Spre deosebire de DES, structura n. u este de tip
Feinstel, deoarece procesarea datelor nu se mai face în două blocuri paralele ci într-unul
singur. Există mai multe variante de implementare, cu următorii parametrii (tabelul 3.3)
Tabelul 3.3. Matricea de substituție[NIST07]
Lungimea cheii Dimensiunea blocului Numărul de runde
(Nk cuvinte) (Nb cuvinte) (Nr)
AES-128 4 4 10
AES-192 6 4 12
AES-256 8 4 14
Algoritmul de criptare – presupune următoarelor operații
 Expandarea cheii – care reprezintă algoritmul prin care se generează cheile aferente
rundelor din cheia generală a cifrului K, care este împărțită în Nb cuvinte de lungime
Nk =32 biți (4 octeți), Nb=4,6 sau 8 și generează o cheie de lungime Nb (Nr + 1)
cuvinte, unde Nr este numărul de runde efectuate (Nr=10 pentru cheie de 128 biți,
Nr=12 pentru cheie de 192 biți respectiv Nr=14 pentru cheie de 256 biți)
 cheia este încărcată în primele patru cuvinte ale registrului temporal;
 pentru primele 4 cuvinte, cheia expandată este calculată aplicând funcția XOR
între 4 cuvinte precedente;
 pentru următoarele cuvinte se efectuează un XOR între conținutul celulei curente
și rezultatul aplicării unei funcții de rotire sau substituire acestuia;
 funcția RotWord efectuează o rotire circulară cu un octet, înlocuind succesiunea
[B0, B1, B2, B3] cu [B1, B2, B3, B0].
 funcția SubWord efectuează o substituire a fiecărui octet din cvatruplul de intrare
în conformitate cu tabelele S, descrise în cele ce urmează.
Pseudocodul corespunzător funcției de expansiune a cheii este ilustrat în figura 3.7.
[NIST07]

13
begin
word=temp;
i = 0
while (i < Nk)
w[i] = word(key[4*i], key[4*i+1], key[4*i+2], key[4*i+3])
i = i+1
end while

i = Nk
while (i < Nb * (Nr+1)]
temp = w[i-1]
if (i mod Nk = 0)
temp = SubWord(RotWord(temp)) xor Rcon[i/Nk]
else if (Nk > 6 and i mod Nk = 4)
temp = SubWord(temp)
end if w[i] = w[i-Nk] xor temp
i = i + 1
end while
end

Fig.3.7. Pseudocodul asociat funcției de expansiune a cheii.

 Runda inițială – în care mesajul de intrare este copiat în registrul de stare și se aplică
operația de adăugare a cheii rundei – funcția AddRoundKey;
 Runde intermediare - în număr de 10 pentru cheie de 128 biți, 12 pentru cheie de
192 biți respectiv 14 pentru cheie de 256 biți, care conțin patru operații
 substituția – funcția SubBytes;
 deplasarea rândurilor – funcția ShiftRows;
 amestecul coloanelor– funcția MixColumns;
 adăugarea cheii rundei – funcția AddRoundKey;
 Runda finală - care conține operațiile de
 substituția– funcția SubBytes;
 deplasarea rândurilor– funcția ShiftRows;
 adăugarea cheii rundei – funcția AddRoundKey;
Pseudocodul operației de cifrare este ilustrat în figura 3.8 [NIST07], iar operațiile vor
fi descrise în cele ce urmează

14
begin
byte state[4,Nb];
state = in;
AddRoundKey(state, w[0, Nb-1]);

for round = 1 step 1 to Nr–1,


SubBytes(state);
ShiftRows(state);
MixColumns(state);
AddRoundKey(state, w[round*Nb, (round+1)*Nb-1]);
end for

SubBytes(state);
ShiftRows(state);
AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]);
out = state;
end

Fig.3.8. Pseudocodul asociat criptare AES

Funcția de substituție (SubBytes) este o operație neliniară în care fiecare octet de date
este înlocuit cu in alt octet in conformitate cu matricea de substituție a algoritmului Rijndael
(S-box). Aceasta poate fi descrisă matematic prin relația
b'í  bi  b( i  4 ) mod 8  b( i 5 ) mod 8  b( i 6 ) mod 8  b( i 7 ) mod 8  ci
(3.5)
0  i  8, ci  bitul i din sirul  01100011   63
Operația este ilustrată în figura 3.9 iar regula de transformare este dată in Tabelul 3.4.
[FIPS197, Sta11]

S0,0 S0,1 S0,2 S0,3 S’0,0 S’0,1 S’0,2 S’0,3


x Matricea de y
S1,0 S1,1 S1,2 S1,3 substituție S’1,0 S’1,1 S’1,2 S’1,3
(S-box)
S2,0 S2,1 S2,2 S2,3 S’2,0 S’2,1 S’2,2 S’2,3

S3,0 S3,1 S3,2 S3,3 S’3,0 S’3,1 S’3,2 S’3,3


Fig.3.9. Funcția de substituție (SubBytes)
Tabelul 3.4. Matricea de substituție (S-box)
x
0 1 2 3 4 5 6 7 8 9 a b c d e f
0 63 7c 77 7b f2 6b 6f c5 30 01 67 2b fe d7 ab 76
1 ca 82 c9 7d fa 59 47 f0 ad d4 a2 af 9c a4 72 c0
2 b7 fd 93 26 36 3f f7 cc 34 a5 e5 f1 71 d8 31 15
3 04 c7 23 c3 18 96 05 9a 07 12 80 e2 eb 27 b2 75
4 09 83 2c 1a 1b 6e 5a a0 52 3b d6 b3 29 e3 2f 84
5 53 d1 00 ed 20 fc b1 5b 6a cb be 39 4a 4c 58 cf
6 d0 ef aa fb 43 4d 33 85 45 f9 02 7f 50 3c 9f a8
y 7 51 a3 40 8f 92 9d 38 f5 bc b6 da 21 10 ff f3 d2
8 cd 0c 13 ec 5f 97 44 17 c4 a7 7e 3d 64 5d 19 73

15
9 60 81 4f dc 22 2a 90 88 46 ee b8 14 de 5e 0b db
a e0 32 3a 0a 49 06 24 5c c2 d3 ac 62 91 95 e4 79
b e7 c8 37 6d 8d d5 4e a9 6c 56 f4 ea 65 7a ae 08
c ba 78 25 2e 1c a6 b4 c6 e8 dd 74 1f 4b bd 8b 8a
d 70 3e b5 66 48 03 f6 0e 61 35 57 b9 86 c1 1d 9e
e e1 f8 98 11 69 d9 8e 94 9b 1e 87 e9 ce 55 28 df
f 8c a1 89 0d bf e6 42 68 41 99 2d 0f b0 54 bb 16
De exemplu, dacă Si,j are valoarea f2 S’i,j va lua valoarea aflată în tabel la intersecția liniei f
cu coloana 2, adică a1
Funcția de deplasarea rândurilor (ShiftRows) este o operație de permutare ciclică
efectuată rând cu rând, astfel: primul rând rămâne neschimbat, al doilea rând este decalat o
poziție la stânga, iar rândurile 2,3 sunt decalate cu două, respectiv cu trei poziții la stânga.
Operația este ilustrată în figura 3.10 [NIST07, Sta11].

S0,0 S0,1 S0,2 S0,3 S0,0 S0,1 S0,2 S0,3


Deplasarea
S1,0 S1,1 S1,2 S1,3 rândurilor S1,1 S1,2 S1,3 S1,0
(ShiftRows)
S2,0 S2,1 S2,2 S2,3 S2,2 S2,3 S2,0 S2,1

S3,0 S3,1 S3,2 S3,3 S3,3 S3,0 S3,1 S3,2


Fig.3.10. Funcția de deplasarea rândurilor (ShiftRows)

Funcția de amestec a coloanelor (MixColumns) substituie fiecărui grup de patru octeți


corespunzător unei coloane asociate unei anumite stări cu unul obținut prin transformarea
liniară [NIST07, Sta11]
 s ' 0 ,c  02 03 01 01  s0 ,c 
    
01
 s '1,c   01
(3.6)
02 03 s
  1,c , 0  c  Nb
s'  01 01 02 03  s 2 ,c 
 2 ,c
   
 s ' 3 ,c 
  03 01 01 02  
 s 3 ,c 

Ca rezultat al acestei operații cei 8 octeți ai unei coloane sunt înlocuiți prin
s '0,c    02  s0,c     03  s1,c   s2,c  s3,c
s '0,c  s0,c    02  s1,c     03  s2,c   s3,c
(3.7)
s '0,c  s0,c  s1,c    02  s2,c     03  s3,c 
s '0,c    03  s0,c   s1,c  s2,c    02  s3,c 
În acest fiecare octet din fiecare coloană va fi afectat de toți octeții din toate celelalte coloane.
Operația de amestec a coloanelor este ilustrată în figura 3.11.

16
Amestecul
coloanelor
(MixColumns)
S0,c S’0,c
S0,0 S0,1 S0,3 S’0,0 S’0,1 S’0,3
S1,c S’1,c
S1,0 S1,1 S1,3 S’1,0 S’1,1 S’1,3
S2,c S’2,c
S2,0 S2,1 S2,3 S’2,0 S’2,1 S’2,3
S3,c S’3,c
S3,0 S3,1 S3,3 S’3,0 S’3,1 S’3,3
Fig.3.11. Funcția de amestec al coloanelor (MixColumns)
S3,3
Funcția de adăugare a cheii rundei (AddRoundKey) – corespunde amestecului datelor
cu cheia rundei, de dimensiune Nb cuvinte de dimensiune Nk, generate din cheia principală a
algoritmului, așa cum a fost descris mai sus. Cheia sesiunii este combinată cu starea curentă
printr-o operație de tip XOR [NIST07, Sta11]
 s' 0 ,c s '1,c s '2,c s '3,c    s0,c s1,c s2,c s3,c   wround  Nb c
(3.8)
0  c  N b , 0  round  N r
În runda inițială indicatorul round=0, acesta fiind incrementat până la runda finală unde ia
valoarea Nr. Aceasă operație este ilustrată în figura 3.12

Observații:
 singura etapă care utilizează cheia este cea de adăugare a cheii rundei
(AddRoundKey) care trebuie plasată la începutul sau la sfârșitul acesteia;
 toate celelalte operații efectuate în cadrul unei runde sunt reversibile și nu adaugă
elemente de securitate in plus;
 eficiența cifrului constă în alternarea operațiilor de criptare cu amestecul datelor
efectuate pe rânduri și pe coloane, conferind atât confuzie cât și difuziune.
Wround*Nb+2
Wround*Nb+1

Wround*Nb+2
Wround*Nb

S0,c S’0,c
S0,0 S0,1 S0,3 S’0,0 S’0,1 S’0,3
S1,c S’1,c
S1,0 S1,1 S1,3 S’1,0 S’1,1 S’1,3
S2,c S’2,c
S2,0 S2,1 S2,3 S’2,0 S’2,1 S’2,3
S3,c S’3,c
S3,0 S3,1 S3,3 S’3,0 S’3,1 S’3,3
Fig.3.11. Funcția de adăugare a cheii rundei (AddRoundKey)
S3,3
Decriptarea AES presupune parcurgerea operațiilor inverse criptării. Pseudocodul

17
operației de cifrare este ilustrat în figura 3.12 [NIST07], iar operațiile vor fi descrise în cele ce
urmează.
begin
byte state[4,Nb]
state = in;
AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]);
for round = Nr-1: -1: 1
InvShiftRows(state);
InvSubBytes(state);
AddRoundKey(state, w[round*Nb, (round+1)*Nb-1]);
InvMixColumns(state) ;
end for
InvShiftRows(state);
InvSubBytes(state);
AddRoundKey(state, w[0, Nb-1]);
out = state;
end
Fig.3.12. Pseudocodul asociat decriptare AES

Funcția de inversă de deplasare a rândurilor (InvShiftRows) este o operație de


permutare ciclică inversă cele efectuate în cazul criptării. Astfel, primul rând rămâne
neschimbat, al doilea rând este decalat ciclic cu o poziție la dreapta, iar rândurile 2,3 sunt
decalate cu două, respectiv cu trei poziții la dreapta. Operația este ilustrată în figura 3.13

S0,0 S0,1 S0,2 S0,3 Deplasarea S0,0 S0,1 S0,2 S0,3


inversă a
S1,0 S1,1 S1,2 S1,3 rândurilor S1,3 S1,0 S1,1 S1,2

S2,0 S2,1 S2,2 S2,3 (InvShiftRows) S2,2 S2,3 S2,0 S2,1

S3,0 S3,1 S3,2 S3,3 S3,1 S3,2 S3,3 S3,0


Fig.3.10. Funcția de deplasarea inversă a rândurilor (InvShiftRows) [FIPS01, Sta11].
Funcția de inversă de substituție (InvSubBytes) în care fiecare octet de date este înlocuit
cu in alt octet in conformitate cu matricea inversă de substituție a algoritmului Rijndael
(Inverse S-box) descrisă în tabelul 3.5.

Tabelul 3.5. Matricea de substituție inversă (Inv S-box)


x
0 1 2 3 4 5 6 7 8 9 a b c d e f
0 52 09 6a d5 30 36 a4 38 bf 40 a3 9e 81 f3 d7 fb
1 7c e7 39 82 8b 9f ff 87 34 8e 43 44 c4 de e9 cb
2 54 7b 94 32 a6 c2 23 3d ee 4c 95 0b 42 fa c3 4e
3 08 2e a1 66 28 d9 24 b2 76 5b a2 49 6d 8b d1 25
4 72 f8 f6 64 86 68 96 16 d4 a4 5c cc 5c 65 b6 92
5 6c 70 48 50 fd ed b9 da 5e 15 46 57 a7 8d 9d 84

18
y 6 90 d8 ab 00 8c bc d3 0a f7 e4 58 05 b8 b3 45 06
7 d0 2c 1e 8f ca 3f 0f 02 c1 af bd 03 01 13 8a 6b
8 3a 91 11 41 4f 67 dc ea 97 f2 cf ce f0 b4 e6 73
9 96 ac 74 22 e7 ad 35 85 e2 f9 37 e8 1c 75 df 6e
a 47 f1 1a 71 1d 29 c5 89 6f b7 62 0e aa 18 be 1b
b fc 56 3e 4b c6 d2 79 20 9a db c0 fe 78 cd 5a f4
c 1f dd a8 33 88 o7 c7 31 b1 12 10 59 27 80 ec 5f
d 60 51 7f a9 19 b5 4a 0d 2d e5 7a 9f 93 c9 9c ef
e a0 e0 3b 4d ae 2a f5 b0 c8 eb bb 3c 83 53 99 61
f 17 2b 04 7e ba 77 d6 26 e1 69 14 63 55 21 0c 7d

Funcția de inversă de amestec a coloanelor (InvMixColumns) este inversul funcției


descrise de relațiile (3.6-3.7) [FIPS01], anume
 s ' 0 ,c   0e 0b 0d 09  s 0 ,c 
    
0e 0b 0d 
 s '1,c
(3.9)
  09 s
  1,c , 0  c  Nb
s'  01 01 02 03   s 2,c 
 2 ,c    
 s ' 3 ,c
 
 03 01 01 02  
 s 3, c 

s '0,c   0e  s0,c    0b  s1,c    0d   s2,c     09  s3,c 


s '0,c   09  s0,c    0e  s1,c    0b  s2,c    0d   s3,c 
(3.10)
s '0,c   0d   s0,c    09  s1,c     0e  s2,c     0b  s3,c 
s '0,c   0b  s0,c    0d   s1,c    09  s2,c     0e  s3,c 
Operațiile de criptare / decriptare AES sunt ilustrate în figura 3.13 a, respectiv b.

19
(a)
128, 192
date 16 octeți cheie sau 256 biți

adăugarea cheii rundei expansiunea cheii

Runda inițială

substituția

numărul de runde deplasarea rândurilor


10 – pentru cheie de 128b
12 – pentru cheie de 192b
14 – pentru cheie de 256b amestecul coloanelor

adăugarea cheii rundei

Runde

substituția

deplasarea rândurilor

adăugarea cheii rundei

Rundă finală
date cifrate 16 octeți

(b)
128, 192
date cifrate 16 octeți cheie sau 256 biți

adăugarea cheii rundei expansiunea cheii

Runda inițială

substituția inversă

deplasarea inversă a
numărul de runde rândurilor
10 – pentru cheie de 128b
12 – pentru cheie de 192b
14 – pentru cheie de 256b amestecul invers al
coloanelor

adăugarea cheii rundei


Runde

substituția inversă

deplasarea inversă a
rândurilor

adăugarea cheii rundei


Rundă finală
date 16 octeți

20
Fig.3.12. Operațiile de criptare (a) și decriptare (b) ale algoritmului AES

3.3. Tehnici de criptare iterative

3.2.1. Cifrarea iterativa – cazul general

În cazul tehnicilor de cifrare iterative, datele sunt prelucrate bit cu bit, sau în grupuri
mici de biți, prin însumarea printr-o operație XOR cu un cod pesudoaleator, generat pe baza
cheii de criptare [DN96. Pentru decriptare se folosește același generator de cod și aceeași
cheie, astfel încât, dacă codul general la recepție este identic cu cel de la emisie și sincronizat
cu mesajul cifrat recepționat, mesajul original se reface deoarece ACC=A.
Pentru ca o secvență pseudoaleatoare să poată fi folosită pentru criptare trebuie să aibă
un număr de proprietăți specifice [Ku97 dintre care pot fi amintite:
 să fie deterministă pentru a putea fi generată identic la recepție;
 să fie periodică, cu o perioadă cât mai lungă pentru a asigura un nivel de securitate
cât mai ridicat; pe de altă parte, dacă perioada este foarte lunga crește efortul de
generare și necesarul de prelucrare, astfel încât această lungime trebuie aleasă ca un
compromis între nivelul de securitate cerut și complexitatea implementării;
 să fie cât mai apropiată de un număr aleatoriu pur, ceea ce înseamnă că numărul de
biți de 0 și 1 în secvența generată trebuie să fie aproximativ egal;
 ieșirea generatorului depinde de lungimea cheii, deci și aceasta trebuie aleasă ca un
compromis între nivelul de securitate cerut și complexitatea implementării; o valoare
tipică este cea de 128 biți.
Dacă alegerea codului pseudoaleator este bine realizată, tehnicile de cifrare iterative pot
fi la fel de sigure ca și codurile bloc pentru chei de aceeași lungime. Principalul avantaj al
tehnicilor iterative este acela că sunt în general mai rapide și mai simplu de implementat atât
din punct de vedere hardware cât și software. De asemenea permit reutilizarea cheilor dacă se
folosesc generatoare de secvențe pseudoaleatoare diferite pentru cifrare / decifrare.

3.2.2. Tehnica de cifrare RC4


Tehnica de cifrare RC4 a fost dezvoltată în 1987 de Ronald Rivest pentru Compania
RSA Security Inc., fiind orientat să lucreze pe structuri organizate sub formă de octeți [Sta05,
Ri01]. El este utilizat într-o gamă largă de aplicații, cum ar fi protocoalele de securitate
folosite în rețelele wireless IEEE 802.11 (Wired Equivalent Privacy -WEP), protocoalele de
acces în rețelele fără fir (Wi-Fi Protected Access - WPA) precum și pentru asigurarea
securității la nivelul transport în rețeaua Internet (Transport Layer Security -TLS).
Tehnica RC4 se remarcă prin faptul că este simplu de implementat și ușor de înțeles.
Vor fi folosite:
 o matrice de stare S de 256 octeți S[0], S[1], … S[255];
 un vector temporar T ce conține 256 de valori întregi;

21
 două numărătoare de 8 biți, notate cu i și j;
Cheia, de lungime variabilă (între 1 și 256 octeți) este utilizată pentru a inițializa
Etapa (1) – Inițializare
 matricea S se inițializează cu valori de la 0 la 255 in ordine ascendenta;
 vectorul T se initializeaza cu cheia K; dacă această cheie are o lungime de 256 biți,
ea este transferată în T; dacă aceasta lungime este mai mică, se repetă de câte ori este
necesar pentru a umple registrul T;
Pseudocodul operației de inițializare este ilustrat în figura 3.13.
for i = 0 :255
S[i] = i;
T[i] = K[i mod keylen];
end for

Fig.3.13. Pseudocodul asociat operației de inițializare RC4


unde keylen este lungimea cheii K.

Etapa (2) – Permutarea inițială – de la S[0] la S[255] conținutul fiecărei celule S[i] este
schimbat cu cel al celulei S[j], unde indicele j este dictat de valoarea registrului T[i].
Deoarece în această etapă se face doar o permutare, S va conține în continuare toate numerele
de la 0 la 255, ordinea fiind însă schimbată. Pseudocodul asociat operației de permutare
inițială este ilustrat în figura 3.14. După permutarea inițială cheia nu mai este folosită.
j = 0;
for i = 0:255
j = (j + S[i] + T[i]) mod 256;
Swap (S[i], S[j]);
end for

Fig.3.14. Pseudocodul asociat operației de permutarea inițială RC4

Etapa (3) – Generarea șirului de date – algoritmul trece prin fiecare celula S[i] și
schimbă conținutul acesteia cu un octet dintr-o alta celulă, al cărei număr depinde de starea
curentă a matricei S. După ce i ajunge la 255, se reia din nou de la 0 astfel încât starea se
schimba dinamic pe măsură ce numărul este generat. Pseudocodul asociat este ilustrat în
figura 3.15.
i := 0
j := 0
while (true)
i := (i + 1) mod 256;
j := (j + S[i]) mod 256;
swap (S[i], S[j]);
t := (S[i] + S[j]) mod 256;
K :=S(t);
end while
output K;
Fig.3.15. Pseudocodul asociat operației de generare a șirului de date în RC4

Operațiile efectuate în cazul RC4 sunt ilustrate și in figura 3.16

22
Inițializare
S 0 1 2 ••• 255

K K[0] K[1] K[2] K[3] • • • K[klen-2] K[klen-1]

0 1 ••• klen-1 klen ••• 255


T K[0] K[1] ••• K[klen-1] K[1] ••• K[klen-1] ••• K[255 mod klen]

Permutare inițială S S[i]=S[j]

01• • •i• • •j• • •255SS[0]S[1]• • •S[i]• • •S[j]• • •S[255]

Generare flux

j=0 j j
TT[0]T[1]• • •T[i]•(4))
• •T[255]
(1)

i=0 i i

01• • •i• • •j• • •t• • •255SS[0]S[1]• • •S[i]• • •S[j]• • •S[t]• • •S[255]

S[i]=S[j] (3)
(5)
(2) )
)
j=0 j k
j
http://www.ietf.org/rfc/rfc2040.txt
o Many stream ciphers are based on linear feedback shift registers (LFSRs), which,
while efficient in hardware, are less so in software. The design of RC4 avoids the use of
Fig.3.16. Operațiile efectuate în algoritmul RC4

Pentru criptare se efectuează o operație XOR între codul K și mesaj, iar pentru
decriptare o operație XOR între mesajul cifrat și cod.
Din punct de vedere al implementării software, acest cod este foarte avantajos deoarece
necesită doar operații cu octeți de date. El va utiliza 256 octeți pentru memorarea matricei S,
keylen octeți pentru memorarea cheii și patru valori întregi pentru i, j, t și K.

3.2.2. Tehnica de cifrare RC5


Pe baza tehnicii de cifrare RC4 au fost dezvoltate ulterior tehnici mai performante. În
1994, a dezvoltat varianta RC5 [Ri94, Ri98], care a fost mai apoi adoptată ca standard
[RFC2040]. Această variantă utilizează blocuri de date de lungime variabila, organizate în
cuvinte de lungime w (unde w = 32, 64 și respectiv 128 biți), chei K de lungime r , cu r=0 -
2040 biți și un număr de runde r între 0 și 255. Valori tipice sunt dimensiunea blocului w=64
biți, cheie de r=128 biți si r=12 runde.

23
Principiul care stă la baza criptării RC5 este rotirea
dependenta de date, combinată cu realizarea de sume
XOR
modulare și operații de tip XOR. Structura generală este de
tip Feinstel, cu separarea datelor în două fluxuri paralele și
repetarea a trei rutine: expansiunea cheii, criptare și Deplasare
decriptare [Ri94]. O schemă bloc a algoritmului RS5 este circulară la stânga

sugerată în figura 3.17.


Criptarea folosește 2r+2 cuvinte de 32 de biți deduse + (mod 2w)
din cheia de criptare după expansiunea acesteia S[0], S[1],
S[2], ..., S[2r+1], unde r este numărul de runde. Se folosesc
două registre A și B în care sunt inițial stocate datele
mesajului. În continuare operația de criptare se desfășoară
conform pseudocodului din figura 3.17. XOR

A := (A+S[0])mod 2w;
B := (B+S[1])mod 2w;
for i=1:r Deplasare
circulară la stânga
A := ((AB)<<B)+S[2i])mod 2w;
B := ((BA)<<A)+S[2i+1])mod 2w;
end for
+ (mod 2w)
Fig.3.17. Pseudocodul asociat operației de cifrare RC5

unde  reprezintă operația de sau exclusiv iar x << y


semnifică operația de deplasare circulară la stânga a lui x cu
y biți. Se observă că fiecare rundă RC5 va modifica
Fig.3.16. Criptarea RC6
conținutul ambelor registre A și B, spre deosebire de
algoritmul DES unde numai unul dintre ele era modificat. În final rezultatul va fi preluat
concatenând conținutul celor două registre.
În cazul decriptării blocul de text cifrat se separă în două cuvinte A și B după care se
efectuează operațiile inverse criptării, conform pseudocodului din figura 3.18.
for i=r:1
B := ((B-S(2i+1)>>A)A) mod 2w;
A := ((A-S(2i)>>B)B) mod 2w;
end for
B := (B-S[1])mod 2w;
A := (A-S[0])mod 2w;

Fig.3.18. Pseudocodul asociat operației de cifrare RC5

unde >> este deplasare circulară spre stânga.


Pentru expansiunea cheii se efectuează următoarele etape:
 se convertește cheia secretă K[0…b-1] din octeți în cuvinte de lungime w inițializând
un vector L[0…c-1] unde c   b / u  iar u  w / 8 este numărul de octeți/ cuvânt, în
conformitate cu pseudocodului din figura 3.19.

24
c:=max(b,1)/u;
for i=(b-1):0
L[i/u] := (L[i/u]<<8)+K[i];
end for

Fig.3.19. Pseudocodul asociat operației conversie

 se inițializează un vector S în conformitate cu pseudocodului din figura 3.20.


S[0]=Pw;
for i=1:(t-1)
S[i] := S[i-1]+Qw;
end for

Fig.3.20. Pseudocodul asociat operației de inițializare

unde w=16, 32, 64 și


P16=b7e1, Q16=9e37;
P32=b7e15163, Q32=9e3779b3;
P64 =b7e151628aed2a6b, Q64=9e3779b97f4ac15
 in final se amestecă conținutul registrelor L și S
i := 0;
j := 0;
A=0;
B=0;
for i=1:2*max(2(r+1),c)
A=S[i] := (S[i]+A+B)<<3;
B=L[j] := (L[j]+A+B)<<(A+B);
i:=(i+1) mod 2(r+1);
j:=(j+1) mod c
end for
Fig.3.20. Pseudocodul asociat operației de inițializare

3.3. Moduri de criptare. Utilizarea algoritmilor criptografici

Există două moduri principale de utilizare în practică a algoritmilor simetrici Sta11,


anume:
 cifrarea bloc care operează cu blocuri de text clar si cifrat – de regulă de 64 biți dar,
uneori, chiar mai mari; același bloc de text clar va fi cifrat de fiecare dată în același
bloc de text cifrat, folosind aceeași cheie;
 cifrarea secvențială care operează cu secvențe de text clar și cifrat de un bit, un octet
sau chiar cuvinte de 32 de biți; secvențe similare de text clar vor fi cifrate diferit, în
cazul unor cifrări repetate.
Modurile de criptare prezentate în cele ce urmează presupun combinații ale celor două
tipuri de bază, folosind metode feedback și pe baza unor operații simple [MOV96, FSC10,
Sta11] și sunt standardizate de ISO/IEC [ISO06]. Securitatea este atributul cifrării, nu al
modului în care se realizează schema de cifrare, iar modul de realizare a cifrării nu duce la

25
compromiterea securității date de algoritmul de bază.

3.3.1. Cifrarea folosind carte de coduri (ECB)


Tehnica cărții de coduri (Electronic CodeBook – ECB) este cea mai obișnuită
modalitate de cifrare bloc, în care fiecare mesaj (text clar) se transformă într-un bloc de text
cifrat; teoretic este posibilă crearea unei cărți de coduri în care să se facă asocierea între
fiecare mesaj și textul cifrat corespondent. Această tehnică este ilustrată în figura 3.21.
CRIPTARE M1 M2 MN

K CRIPTARE K CRIPTARE K CRIPTARE

C1 C2 CN

C1 C2 CN
DECRIPTARE

K DECRIPTAR K DECRIPTARE K DECRIPTARE


E

M1 M2 MN

Fig.3.21. Cifrarea folosind carte de coduri (ECB)

Această metodă prezintă câteva dezavantaje majore, anume


 dimensiunea foarte mare a cantității de informație care trebuie memorată și
manipulată, chiar și pentru blocuri de date de dimensiuni reduse (de exemplu pentru
blocuri de 64 biți trebuie memorate 264 de elemente în cartea de coduri);
 fiecare cheie necesită propria carte de coduri în care fiecare bloc mesaj este cifrat
independent;
Se asemenea un criptanalist care deține textul clar și textul cifrat echivalent pentru un
număr de mesaje poate realiza o carte de coduri fără a cunoaște cheia. În general există
fragmente de mesaj care se repetă (cum ar fi mesajele de inițializarea a unei comunicații între
calculatoare, poșta electronică, etc.) care au structuri regulate și redundante, putând fi folosite
de un criptanalist permițând atacuri prin substituție.

3.3.2. Cifrare bloc cu înlănțuire (CBC)


Tehnica de cifrare bloc cu înlănțuire (Cipher Block Chaining -CBC) adaugă
mecanismului de criptare un bloc de reacție, astfel încât rezultatul criptării unui bloc anterior
intervine în criptarea blocului curent [NC95] În acest fel textul cifrat nu mai depinde doar de
mesaj, ci și de modul de cifrare al blocului anterior prin intermediul reacției. Fiecare bloc de

26
date este trecut printr-un sau exclusiv cu mesajul obținut prin cifrarea blocului anterior,
înainte de a fi el însuși criptat. Pentru ca mesajul să fie unic primul bloc va fi trecut prin sau
exclusiv cu un vector de inițializare notat cu IV. Tehnica CBC este ilustrată în figura 3.22.

CRIPTARE
M1 M2 MN

IV CN-1
XOR XOR XOR

K CRIPTARE K CRIPTARE K CRIPTARE

C1 C2 CN

DECRIPTARE

M1 M2 MN

K DECRIPTARE K DECRIPTARE K DECRIPTARE

IV MN-1
XOR XOR XOR

P1 P2 PN

Fig.3.22. Cifrare bloc cu înlănțuire (CBC)

Se observă că, în cazul criptării


 primul blocul din mesaj este trecut prin sau exclusiv cu vectorul de inițializare și este
memorat într-un registru de reacție;
 înainte ca următorul bloc de text clar să fie criptat, este trecut prin sau exclusiv
(XOR) cu blocul din registrul de reacție și devine următoarea intrare în rutina de
criptare;
 în acest fel astfel, criptarea blocului i depinde de toate cele i-1 blocuri anterioare.
Matematic, această operație poate fi descrisă prin

C j  E  K , C j 1  M j   (3.11)
unde E este operația de criptare, K este cheia, M este mesajul original iar C este textul criptat.
Decriptarea este procesul invers:
 textul cifrat este decriptat normal și, de asemenea, păstrat în registrul de reacție;
 după ce următorul bloc este decriptat, el este trecut prin sau exclusiv (XOR) cu
conținutul registrului de reacție;

27
ceea ce poate fi tradus matematic prin

D K , C j   D K , E  K , C j 1  M j    C j 1 Mj (3.12)
deci
C j 1  D  K , C j   C j 1  C j 1  M j  M j (3.13)
Ca principal dezavantaj poate fi menționat faptul că două mesaje care încep la fel vor fi
criptate identic până la prima diferență. Vectorul de inițializare nu are alta semnificație decât
aceea de a produce o criptare unică a oricărui mesaj, chiar si a mesajelor identice. Nu este
obligatoriu ca acest vector să fie secret; el poate fi transmis în clar împreuna cu mesajul cifrat;
cu toate acestea pentru creșterea securității este bine ca (IV) să fie protejat ca și cheia de
criptare.

3.3.3. Cifrare cu reacție (CFB)


Orice cifru bloc poate fi transformat într-unul secvențial folosind cifrarea cu reacție
(Cipher feedback - CFB). În acest caz nu mai este obligatoriu ca mesajul să fie format dintr-
un număr întreg de blocuri, putând opera cu un număr variabil de caractere în reacție [BR97].
El poate opera în timp real, astfel încât fiecare caracter poate fi imediat cifrat și transmis
folosind un cifru secvențial orientat pe caracter. Cu toate acestea este de dorit ca textul cifrat
să aibă aceeași lungime cu mesajul, deoarece în caz contrar se pierde din capacitate și scade
viteza de operare. În figura 3.23 este sugerată o posibila implementare a unui cifru cu reacție
ce lucrează pe blocuri de s biți (o valoare uzuală este s=8).
În cazul criptării:
 Intrarea este registru de deplasare cu b poziții ce poate fi inițializat cu un vector de
inițializare (IV) cu aceeași dimensiune cu cea a blocului de date ce urmează a fi
criptat cu cheia K;
 primii s biți din mesaj (cei mai semnificativi) sunt trecuți prin sau exclusiv (XOR) cu
primul bloc (caracter / octet) din mesajul inițial P1, producând primul bloc de text
cifrat C1 care se transmite, iar restul conținutului registrului se pierde;
 simultan conținutul textului cifrat C1 este încărcat în dreapta registrului de deplasare
(cei mai puțin semnificativi s biți), este criptat, și apoi primii s biți din noul mesaj
sunt trecuți prin sau exclusiv (XOR) cu următorul caracter din mesaj;
 procesul continuă până când întregul text este cifrat.
În cazul decriptării se folosește aceeași procedură: textul cifrat este trecut prin sau
exclusiv (XOR) cu ieșirea blocului de criptare pentru a obține textul original. Este imporatnt
de observat că atât operația criptare cat si decriptare folosesc funcția de cifrare. Ca explicație,
se vor considera primii s biți din mesaj (cei mai semnificativi) , notați cu SS(X) astfel încât,
pentru primul bloc vom avea, în cazul criptării
C1  M 1  S S  E  K , IV   (3.14)
iar în cazul decriptării
M 1  C1  S S  E  K , IV   (3.15)

28
după care se continua in mod similar pentru restul blocurilor.
CRIPTARE
(IV) Registru de deplasare la Registru de deplasare la stânga b Registru de deplasare la stânga b
stânga b biți biți CN-1 biți

b-s s b-s s b-s s


64 64 64

K CRIPTARE K CRIPTARE K CRIPTARE


s s 64
64 64

s b-s s b-s s b-s


ss ss ss

M1 M2 MN
XOR XOR s XOR
s s
s
s s

C1 C2 CN

DECRIPTARE
(IV) Registru de deplasare la Registru de deplasare la stânga b Registru de deplasare la stânga b
stânga b biți biți CN-1 biți
s
b-s s b-s s b-s s
64 64 64

K CRIPTARE K CRIPTARE K CRIPTARE


s s 64
64 64

s b-s s b-s s b-s


ss ss ss
CN
XOR XOR C2 XOR
s
C1 s s
s

M1 M2 MN

Fig.3.23. Cifrare cu reacție (CFB) ce lucrează pe blocuri de s biți

3.3.4. Cifrare cu reacție la ieșire (OFB)


Tehnica de cifrare secvențială cu reacție la ieșire (Output Feedback – OFB) lucrează cu
cea cu reacție la intrare (CFB) prezentată în capitolul 3.3.3., dar folosește în bucla de reacție
ieșirea circuitului de cifrare, nu mesajul cifrat [Dw01, XG05]. Această schimbare are ca
avantaj faptul că în această configurație se combate propagarea erorilor, deoarece apariția unei
erori în blocul cifrat (de exemplu în C1) va afecta, la decodare, doar blocul de mesaj M1 nu și
restul blocurilor, cum se întâmpla în cazul CFB. pe de altă parte această tehnică este mai
vulnerabilă la modificări ale mesajului cifrat, deoarece inversarea (negarea) unui bit din
textul cifrat duce la inversarea bitului corespunzător din textul refăcut; în acest context un
oponent poate imagina atacuri cu erori controlate asupra biților detectori și/sau corectori de
eroare sau a mesajului astfel încât codurile corectoare nu mai pot funcționa cum trebuie. Un

29
alt dezavantaj al acestei configurații este aceea că este mai sensibil la aspecte legate de
sincronizare, fiind necesară utilizarea unor circuite specifice pentru sincronizare. În figura
3.24 este sugerată o posibila implementare a unui cifru cu reacție pe ieșire ce lucrează pe
blocuri de s biți (o valoare uzuală este s=8).
CRIPTARE
(IV) Registru de deplasare la Registru de deplasare la stânga Registru de deplasare la stânga
stânga b biți b biți ON-1 b biți

b-s s b-s s b-s s


64 64 64

K CRIPTARE K CRIPTARE K CRIPTARE


s s 64
64 64

s b-s s b-s s b-s


ss ss ss

M1 M2 MN
XOR XOR s
XOR
s s
s
s s

C1 C2 CN

DECRIPTARE
(IV) Registru de deplasare la Registru de deplasare la stânga b Registru de deplasare la stânga
stânga b biți biți ON- b biți
s
1
b-s s b-s s b-s s
64 64 64

K CRIPTARE K CRIPTARE K CRIPTARE


s 64
64 64

s b-s s b-s s b-s


ss ss s ss
CN
XOR XOR C2 XOR
s
C1 s s
s

M1 M2 MN

Fig.3.24. Cifrare cu reacție pe ieșire(CFB) ce lucrează pe blocuri de s biți

3.3.5. Cifrare cu contor


Ca și în cazul tehnicilor OFB și CFP, tehnica de cifrare cu contor (Counter Mode)
transformă un cifru bloc într-unul secvențial. Acesta utilizează ca intrări în blocul de criptare
secvențe de numere succesive generate de un contor (aceste secvențe trebuie să fie diferite și
să nu se repete decât după un interval de timp suficient de lung) [DH79, GV05]. În general
valoarea contorului este incrementată cu o unitate pentru fiecare bloc de date. Ieșirea blocului
de criptare este apoi trecută printr-un sau exclusiv (XOR) cu mesajul pentru a realiza operația
de criptare propriu zisă. Pentru decriptare aceleași valori criptate ale contorului trebuie trecute
printr-un sau exclusiv cu mesajul criptat pentru a reface mesajul original. Tehnica criptării cu

30
contor este mai puțin sensibilă decât OFB, având proprietăți comparabile cu CFB. În plus,
permite un grad mai mare de aleatorizare a mesajului în timpul criptării. Pentru un plus de
securitate valoarea contorului poate fi concatenata cu o valoare unica, predefinită (nonce) care
are rolul vectorului de inițializare în CFB ți OFB, anume acela de a realiza o cifrare unica a
fiecărui bloc de date. În figura 3.25 este sugerată o posibila implementare a unui sistem de
cifrare cu contor.
CRIPTARE

i i+1 i+N-1

K CRIPTARE K CRIPTARE K CRIPTARE

M1 M2 MN
XOR XOR XOR

C1 C2 CN

DECRIPTARE

i i+1 i+N-1

K CRIPTARE K CRIPTARE K CRIPTARE

C1 C2 CN
XOR XOR XOR

M1 M2 MN

Fig.3.25. Cifrare cu contor


Bibliografie
Sta11 William Stalings, ” Netwok Security Essentials – Applications and Standards”- fourth
edition, Prentice Hall, Upper Saddle River, New Jersey, 2011.
[Ta03] A. S. Tanenbaum, „Computer Communications” fourth edition, 2003 Pearson / Prentice Hall,
Upper Saddle River, New Jersey, 2003
[Sta05]W. Stallings „Cryptography and Network Security Principles and Practices”, Fourth Edition,
Prentice Hall, Upper Saddle River, New Jersey, 2005
[Sta07]W. Stallings, „Data and Computer Communications”, eigth edition, Pearson/ Prentice Hall,
Upper Saddle River, New Jersey, 2007
[FNS75] Feistel, H. "Cryptography and Computer Privacy." Scientific American, Vol. 228, May 1973,
p. 15-23.
[Sha49] C.E. Shannon, “Communication theory of secrecy systems”, Bell System Technical Journal,
Vol. 28, No.4, 1949, p.656-715.
[DH77] W. Diffie, M. E. Hellman, “Special feature exhaustive cryptanalysis of the NBS Data
Encryption Standard”, IEEE Computer, Vol. 10, No. 6, 1977, p.74-84.

31
[SB88] M. E. Smid, D. K. Branstad, “Data encryption standard: past and future”, Proceedings of the
IEEE, Vol. 76, No. 5, 1988, p. 550-559.
[EFF98]Electronic Frontier Foundation, “Cracking DES: secrets of encryption research, wiretap
politics & chip design”, O'Reilly Media, 1998.
[FIPS99]FIPS, PUB, “46-3: Data Encryption Standard (3DES)”, National Institute of Standards and
Technology, Vol. 25, No. 10, 1999
[SJA11] C. Sajeev, G Jai Arul, “Linear and differential cryptanalysis of DES” 2011.
[SM11] S. M. Singh, R. Maini, “Comparison of data encryption algorithms”, International Journal of
Computer Science and Communication, Vol. 2, No. 1, 2011, p. 125-127.
[Bha12] C. S. Bhardwaj, “Modification of Des Algorithm”, Vol. 1, No.9, 2012, p. 495-505.
PUB FIPS - National Institute of Standards and Technology, 1999
[FIPS01]FIPS, PUB 197, “Advanced encryption standard (AES)”, National Institute of Standards and
Technology, 2001
[NBD99] J. Nechvatal, E. Barker, D. Dodson, M. Dworkin, J. Foti, E. Roback,” Status report on the
first round of the development of the Advanced Encryption Standard” JOURNAL OF RESEARCH-
NATIONAL INSTITUTE OF STANDARDS AND TECHNOLOGY, Vol. 104, No. 5, 1999 p. 435-
460. (http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf)
[NIST07] National Institute of Standards and Technology. "Request for Candidate Algorithm
Nominations for the Advanced Encryption Standard." Federal Register, September 12, 1997.
[DR98] J. Daemen, V Rijmen, “AES proposal: Rijndael”, First Advanced Encryption Standard (AES)
Conference, 1998(http://nvlpubs.nist.gov/nistpubs/jres/104/5/j45nec.pdf)
[Ku97] I. Kumar, “Cryptology” CA. Aegean Park Press, Laguna Hills, 1997
[DN96] E. Dawson, L. Nielsen, “Automated cryptanalysis of XOR plaintext strings”, Cryptologia,
Vol. 20, No. 2, Taylor & Francis 1996, p.165-181
[Ri01] R. Rivest,” RSA security Response to weaknesses in key scheduling algorithm of RC4”,
Technical note, RSA Data Security, Inc., 2001
[Ri94]R. L. Rivest, "The RC5 Encryption Algorithm" (pdf). Proceedings of the Second International
Workshop on Fast Software Encryption (FSE) 1994e. pp. 86–96.
[Ri98] Rivest, R. L, "Block Encryption Algorithm With Data Dependent Rotation", U.S. Patent
5,724,428, issued on 3 March 1998.
[RFC2420] R. Baldwin, R. Rivest, “The RC5, RC5-CBC, RC5-CBC-Pad, and RC5-CTS Algorithms”
RFC 2420, October 1996 (http://tools.ietf.org/html/rfc2040)
[NC95] J. O. Normile, K. C. Chu,”Method and apparatus for improving the security of an electronic
codebook encryption scheme utilizing an offset in the pseudorandom sequence” US Patent 5,438,622,
1995 (http://www.google.ro/patents?
hl=en&lr=&vid=USPAT5438622&id=Yu4dAAAAEBAJ&oi=fnd&dq=Electronic+Codebook+Mode
&printsec=abstract#v=onepage&q=Electronic%20Codebook%20Mode&f=false)
[BR97] M. Bellare, P. W. Rogaway,” Block cipher mode of operation for secure, length-preserving
encryption”, US Patent 5,673,319, 1997
[Ho88] K. E. Holmquist, “Method and device of increasing the execution speed of cipher feedback
mode of the DES by an arbitrary multiplier”, US Patent 4,731,843, 1988
[Dw01] M. Dworkin, NIST Special Publication 800-38A “Recommendation for block cipher modes of
operation. Methods and techniques”, DTIC Document, 2001(http://www.dtic.mil/cgi-bin/GetTRDoc?
AD=ADA400014)
[XG05]Y. Xiao, M. Guizani, “Optimal Stream-based Cipher Feedback Mode in Error Channel”, IEEE

32
Globecom, New York, Vol.3, 2005, p. 1660
[DH79] W. Diffie, M. Hellman, "Privacy and Authentication: An Introduction to Cryptography"
Proceedings of the IEEE, Vol. 67, No. 3, March 1979, p. 397-427.
[GV05] D. A. McGrew, J. Viega, “The security and performance of the Galois/Counter Mode (GCM)
of operation”, Progress in Cryptology-INDOCRYPT 2004, Springer, 2005, p. 343—355.

33

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