Documente Academic
Documente Profesional
Documente Cultură
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%.
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
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
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)
F F
F F
F F
F F
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;
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
rotire 32 biți
64
permutarea inițială
inversată
64
(A) Permutarea inițială – rearanjează biții mesajului după regula ilustrată în tabelele
3.2a, b și c
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
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
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
(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
Exp E
48
48
PC2
48
Cutii S
32
PF
32
32
Di Si CDi CSi
64 56
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
K3 K2 K1
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)
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
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]);
SubBytes(state);
ShiftRows(state);
AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]);
out = state;
end
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]
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].
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
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
19
(a)
128, 192
date 16 octeți cheie sau 256 biți
Runda inițială
substituția
Runde
substituția
deplasarea rândurilor
Rundă finală
date cifrate 16 octeți
(b)
128, 192
date cifrate 16 octeți cheie sau 256 biți
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
substituția inversă
deplasarea inversă a
rândurilor
20
Fig.3.12. Operațiile de criptare (a) și decriptare (b) ale algoritmului AES
Î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 ACC=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.
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
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
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
22
Inițializare
S 0 1 2 ••• 255
Generare flux
j=0 j j
TT[0]T[1]• • •T[i]•(4))
• •T[255]
(1)
i=0 i i
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.
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
A := (A+S[0])mod 2w;
B := (B+S[1])mod 2w;
for i=1:r Deplasare
circulară la stânga
A := ((AB)<<B)+S[2i])mod 2w;
B := ((BA)<<A)+S[2i+1])mod 2w;
end for
+ (mod 2w)
Fig.3.17. Pseudocodul asociat operației de cifrare RC5
24
c:=max(b,1)/u;
for i=(b-1):0
L[i/u] := (L[i/u]<<8)+K[i];
end for
25
compromiterea securității date de algoritmul de bază.
C1 C2 CN
C1 C2 CN
DECRIPTARE
M1 M2 MN
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
C1 C2 CN
DECRIPTARE
M1 M2 MN
IV MN-1
XOR XOR XOR
P1 P2 PN
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.
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
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
M1 M2 MN
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
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
M1 M2 MN
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
M1 M2 MN
XOR XOR XOR
C1 C2 CN
DECRIPTARE
i i+1 i+N-1
C1 C2 CN
XOR XOR XOR
M1 M2 MN
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