Criptografia conventionala
-
Upload
robertcozianu -
Category
Documents
-
view
71 -
download
1
description
Transcript of Criptografia conventionala
47
4. Criptografia convenţională
În cadrul acestui capitol vom trata diferite aspecte legate de criptografia convenţională,
cunoscută şi sub denumirea de criptografia simetrică, sau criptografia cu chei secrete,
datorită utilizării aceleiaşi chei atât pentru operaţia de criptare cât şi pentru cea de
decriptare. În cazul acestor criptosisteme, cheia este ţinută secretă şi folosită în comun de
către emiţător şi receptor.
4.1 Noţiuni introductive
Un cifru simetric se caracterizează prin două operaţii: criptare şi decriptare. Cheile
utilizate, i.e. ek pentru criptare şi d
k pentru decriptare, au următoarele proprietăţi:
• e dk k k= = , unde pentru cheia inversă definită prin operatorul
1_ :−
→K K
avem proprietatea că 1
e dk k
−
= iar 1
d ek k
−
= (K reprezintă mulţimea cheilor
criptografice);
• ek şi d
k sunt secrete, adică ,
e dk k ∈S , unde S reprezintă mulţimea
termenilor considerate a fi secrete.
Criptosistemele simetrice conduc la performanţe ridicate şi sunt folosite pentru
secretizarea datelor. Se pot aminti aici criptosisteme simetrice cunoscute precum DES
[NBS81] (i.e. Data Encryption Standard) sau IDEA [LM91] (i.e. International Data
Encryption Algorithm).
Majoritatea criptosistemelor simetrice utilizează algoritmi ce operează asupra unor
blocuri de text, execuţia lor fiind construită pe modelul reţelelor Feistel. Această idee
datează încă din anii 1970 şi presupune următorii paşi. Dacă considerăm un bloc de text
de lungime n şi îl împărţim în două părţi de lungime n/2: L şi R, se poate defini un bloc
iterativ de criptare unde ieşirea din runda i este o funcţie a ieşirii rundei anterioare, adică:
1−=
iiRL
( )1 1,
i i i iR L f R k
− −
= ⊕
unde iK este sub-cheia folosită în runda i, iar f este o funcţie arbitrară.
48
Acest concept este întâlnit la cifruri precum DES [NBS81], Lucifer [Smi71], FEAL
[SM88], Khufu [Mer90], Khafre [Mer90], LOKI [BPS90], GOST [GOV89], CAST
[AT93] sau Blowfish [Sch94]. Importanţa reţelelor Feistel reprezintă faptul că operaţiile
sunt reversibile. Întrucât funcţia folosită pentru combinarea părţii drepte cu partea stângă
este funcţia XOR, este adevărat că:
( ) ( )1 1 1 1, ,
i i i i i iL f R k f R k L
− − − −
⊕ ⊕ = .
Oricărui cifru care foloseşte această construcţie i se garantează că este reversibil,
atâta timp cât intrările funcţiei f pot fi refăcute. De fapt f este responsabil pentru
proprietăţile de confuzie şi difuzie a biţilor, proprietăţi pe care sunt construite cifrurile
moderne. Operaţia de decriptare se realizează prin utilizarea aceluiaşi algoritm, cu
aplicarea sub-cheilor în ordine inversă.
4.2 Studiu de caz: cifrul DES (Data Encryption Standard)
DES este un cifru bazat pe o reţea Feistel care procesează blocuri pe 64 de biţi, realizând
ieşiri de 64 biţi de text cifrat. Dimensiunea efectivă a cheii este de 64 de biţi. Mai exact,
cheia de intrare K este dată pe 64 de biţi, din care 8 biţi (biţii 8, 16, …, 64) pot fi folosiţi
pentru controlul parităţii. Astfel, cheia de 256 biţi determină 256 de posibilităţi de formare
a cheii din cele 264.
Fiind un cifru dezvoltat în anii ’70, DES a fost conceput şi optimizat pentru maşini
pe 8 biţi. Însă în zilele noastre, majoritatea calculatoarelor sunt pe 32 sau 64 de biţi,
operaţiile pe biţi din cadrul acestuia fiind destul de greu de implementat în software.
Tocmai din această cauză o serie de implementări omit paşii de pregătire a cheii de
criptare. Cu toate că aceasta nu pune în pericol securitatea cifrului, asemenea
implementări nu ar trebui să fie denumite DES deoarece nu respectă specificaţiile
standardului.
Criptarea se realizează în 16 stagii denumite runde. Din cheia de intrare, k, se
generează 16 sub-chei ik pe 48 de biţi, una pentru fiecare rundă. În cadrul fiecărei runde
se realizează 8 mapări (6 biţi la 4) ale biţilor prin folosirea cutiilor S. Textul clar este
împărţit în două părţi, partea dreaptă şi partea stângă, fiecare având dimensiunea de 32 de
49
biţi. Fiecare rundă este echivalentă cu cea precedentă, având ca intrare Li-1 şi Ri-1 din
runda precedentă şi producând la ieşire 32 de biţi Li şi Ri după cum urmează:
1−
=ii
RL
( )1 1,
i i i iR L f R k
− −
= ⊕ , unde ( ) ( )( )( )1 1,
i i i if R k P S E R k
− −
= ⊕
În relaţiile anterioare, E este o extensie-permutare a lui Ri-1 de la 32 de biţi la 48 de
biţi (toţi biţii sunt folosiţi o singură dată, unii apar de două ori). P este iarăşi o permutare
pe 32 de biţi. O permutare iniţială IP (i.e. Initial Permutation) precede prima rundă, iar
după ultima rundă, partea dreaptă şi stângă sunt interschimbate şi în final rezultatul este
supus iarăşi unei permutări, de data aceasta la inversa permutării iniţiale IP-1. Decriptarea
foloseşte aceeaşi cheie şi algoritm cu diferenţa că aceste chei sunt aplicate rundelor
interne în ordine inversă.
4.2.1 Algoritmul de pregătire a cheilor
Pentru a realiza o operaţie de criptare sau decriptare, trebuie pregătite cheile.
Algoritmul de generare a cheilor va primi ca intrare o cheie pe 64 de biţi şi va genera 16
chei a câte 48 de biţi.
INTRARE: cheie pe 64 de biţi 1 2 64k k k k= … , incluzând cei 8 biţi de paritate.
IEŞIRE: 16 chei pe 48 de biţi ik , 1 64i≤ ≤ .
• Se defineşte iv , 1 16i≤ ≤ după cum urmează: 1
iv = pentru { }1,2,9,16i =
şi
vi=2 altfel, acestea fiind valorile rotaţiilor pe 28 de biţi din tabelul 4.1;
• ( )1T PC k← , unde T este dat sub forma a două jumătăţi pe 28 de biţi (C0,
D0). Construirea PC1 se realizează conform tabelului 4.1 pentru selectarea
biţilor corespunzători din k: C0 = k57 k49 … k36, D0 = k63 k55 …k4;
• Pentru i de la 1 la 16 se calculează ki după cum urmează:
( ) ( ) ( )1 1, , 2 ,
i i i i i i i i iC C v D D v k PC C D
− −
← ⇐ ← ⇐ ← . Construirea PC2 se
realizează conform tabelului 4.1 pentru selectarea celor 48 de biţi din
concatenarea b1 b2 ... b56 din Ci şi Di: ki = b14 b17 … b32. Operatorul ‘⇐ ’
denotă deplasare circulară la stânga.
50
Tabelul 4.1 Selecţia biţilor pentru cheile de criptare în algoritmul DES
4.2.2 Algoritmul de criptare DES
Criptarea textului clar se realizează pe blocuri a câte 64 de biţi. În cazul în care
textul nu este multiplu de 64 de biţi, acesta trebuie completat cu biţi suficienţi. Rezultatul
operaţiei de criptare este un text criptat pe 64 de biţi. Algoritmul de criptare este descris
în cele ce urmează.
INTRARE: text clar 1 2 64mm m… ;
cheie pe 64 de biţi k = k1k2 … k64 , include cei 8 biţi de paritate.
IEŞIRE: text cifrat pe 64 de biţi C = c1c2 ... c64.
1. Se generează cele 16 chei pe 48 de biţi ki din k;
2. ( ) ( )642100
, mmmIPRL …← . Pentru permutarea iniţială IP se folosesc
valorile din tabelul 4.2 pentru permutarea biţilor; se împarte rezultatul în
două jumătăţi a câte 32 de biţi fiecare, astfel încât 0 58 50 8L m m m= … şi
0 57 49 7R m m m= … ;
3. Se execută 16 runde pentru i de la 1 la 16, unde se calculează Li şi Ri după
cum urmează:
a) Se extinde 32211rrrR
i…=
− de la 32 de biţi la 48 folosind valorile lui E
din tabelul 4.3: ( )1−
←i
RET , de unde rezultă 1322132rrrrrT …= ;
b) iKTT ⊕←′ . Se reprezintă T ′ ca 8 şiruri a câte 6 biţi:
( ) TBBB ′=821
,,, … .
51
c) ( ) ( ) ( )( )882211
,,, BSBSBST …←′′ . ( )ii
BS mapează 654321bbbbbbB
i=
la intrarea pe 4 biţi din rândul r şi coloana c din Si din tabelul 4.4. De
exemplu, lui ( )0110111S îi corespunde r = 1, c = 13 şi ieşirea 5;
d) ( )TPT ′′←′′′ . Valorile lui P sunt preluate din tabelul 4.3 pentru a permuta
biţii lui 3221tttT …=′′ , care va avea forma: 25716
ttt … ;
4. ( )16166421
, LRbbb ←… . Se interschimbă blocurile finale;
5. ( )6421
1bbbIPC …
−
← . Se realizează o ultimă permutare care este de fapt
inversa permutării iniţiale, după tabelul 4.2.
Tabelul 4.2 Permutarea iniţială şi permutarea finală DES
Tabelul 4.3 Funcţiile DES de expansiune E şi de permutare P
4.2.3 Algoritmul de decriptare DES
Operaţia de decriptare utilizează algoritmul de criptare cu aceeaşi cheie descrisă
anterior. Diferenţa constă în ordinea de planificare a cheilor, aceasta fiind realizată în
ordine inversă 16 15 1, , ,k k k… .
52
Decriptarea se desfăşoară după cum urmează. Efectul operaţiei IP-1 este anulată de
IP la decriptare, de unde va rămâne . Să considerăm că aplicăm prima rundă la
această intrare. Operaţia din stânga se transformă din ( )0 0 1,L f R k⊕ în ( )16 16 16
,R f L k⊕
care, întrucât 1516RL = şi ( )16 15 15 16
,R L f R k= ⊕ este egal cu
( ) ( )15 15 16 15 16 15, ,L f R k f R k L⊕ ⊕ = . Astfel, prima rundă de decriptare devine ( )
1515, LR ,
inversând rezultatul de ieşire. Din aplicarea repetată al acestui procedeu se va obţine
textul clar iniţial. De menţionat faptul că întrucât algoritmul DES se bazează pe reţele
Feistel, algoritmul de criptare este similar cu cel de decriptare şi se bazează pe aceeaşi
cheie.
4.2.4 Securitatea cifrului DES
Proiectarea oricărui cifru pe blocuri trebuie să satisfacă un set de cerinţe considerate
ai fi „standard”. Pintre acestea se numără: fiecare bit al mesajului criptat trebuie să
depindă de toţi biţii de cheie şi de toţi biţii textului clar; nu trebuie să existe relaţii
statistice evidente între mesajul clar şi cel criptat; modificarea unui singur bit al cheii
trebuie să altereze fiecare bit din textul cifrat cu o probabilitate de 0.5; alterarea unui bit
din mesajului criptat trebuie să rezulte într-un mesaj clar imprevizibil. DES satisface toate
aceste cerinţe. Cu toate acestea, cifrul are câteva slăbiciuni care trebuie menţionate.
În primul rând, din cauza modalităţii de transformare a cheii iniţiale pentru
generarea unei sub-chei pentru fiecare rundă, anumite chei iniţiale sunt considerate slabe.
De exemplu, să ne reamintim că valoarea iniţială a cheii este împărţită în două jumătăţi,
fiecare jumătate fiind deplasată independent. În acest caz, dacă toţi biţii din fiecare
jumătate sunt fie 1, fie 0, atunci cheia folosită pentru toate rundele algoritmului va fi
aceeaşi. O asemenea situaţie poate apare doar dacă întreaga cheie iniţială este formată din
biţi de 1 sau numai din biţi de 0, sau dacă o jumătate este formată doar din biţi de 1 iar
cealalta doar din biţi de 0. Câteva chei considerate a fi slabe sunt date în tabelul 4.5.
( )1616
,LR
53
Tabelul 4.4 Cutiile S din algoritmul DES
54
Tabelul 4.5 Chei DES considerate slabe
Iniţial, lungimea cheii propuse a fost de 112 biţi, însă aceasta a fost redusă de către
NBS (en. National Bureau of Standards), astăzi cunoscut sub denumirea de NIST (en.
National Institute of Standards and Technology), la 56 de biţi. S-au ridicat multe voci
împotriva acestei măsuri, dar în cele din urmă standardul a fost adoptat cu o lungime a
cheii de 56 de biţi.
În 1977, Whitfield Diffie şi Martin Hellman au afirmat că o maşină cu calcul paralel
destinată spargerii DES ar putea recupera cheia într-o zi şi toată operaţia ar costa 20
milioane de dolari. Cu toate acestea, decizia asupra înlocuirii algoritmului a venit cu
aproape 20 de ani după standardizare. Motivele care au contribuit la această decizie au
fost:
• În iulie 1998 DES pe 56 biţi este spart de către organizaţia Electronic
Frontier Foundation. Pentru aceasta s-a utilizat un calculator construit
special în acest scop, iar timpul necesar spargerii a fost de 3 zile;
• În luna septembrie al aceluiaşi an, administraţia americană acordă
companiilor producătoare de soft de securitate permisiunea de a exporta
implementări ale algoritmului DES bazate pe chei de criptare de 56 biţi.
Pornind de la aceste evenimente, la data de 20 august 1998 NIST anunţă în cadrul
unei conferinţe speciale un set de 15 algoritmi candidaţi să înlocuiască DES. Este ales şi
numele noului sistem de criptare: AES [DR02] (en. Advanced Encryption Standard). Cei
15 algoritmi au fost trimişi de membri din comunitatea criptografică mondială. Criteriile
stabilite de NIST pentru noul sistem au fost:
• Să fie un sistem de criptare simetric pe blocuri de 128 biţi;
• Să accepte chei de lungime 128, 192 şi 256 biţi;
• Să nu aibă chei slabe;
55
• Să fie eficient atât pe platforme Intel Pentium Pro cât şi pe alte platforme
software sau hardware;
• Să poate fi implementat atât pe procesoare de 32 biţi cât şi pe cartele
inteligente;
• Să fie cât mai simplu;
• Să fie mai rapid decât DES şi să ofere o securitate mult mai mare decât
variante mai sigure ale lui DES, precum 3DES.
În mai 2000 NIST anunţă drept sistem câştigător sistemul de criptare Rijndael, care
devine oficial AES, adoptat astăzi la scară largă ca standard de criptare a datelor
confidenţiale pe Internet.
4.3 Moduri de cifrare
Cifrurile simetrice trebuie să fie capabile să cripteze nu doar un bloc de text, ci texte clare
de lungime variabilă. Acestea sunt împărţite pe blocuri şi se criptează fiecare bloc în
parte. Criptarea fiecărui bloc independent de celelalte blocuri poate duce la o serie de
atacuri întrucât criptarea aceluiaşi bloc cu aceeaşi cheie va rezulta întotdeauna în acelaşi
text criptat. Din acest motiv s-au dezvoltat o serie de moduri de cifrare, date în taxonomia
din figura 4.1. În continuarea acestui subcapitol se va descrie fiecare mod de cifrare în
parte.
Figura 4.1 Taxonomia modurilor de cifrare
4.3.1 Cifrare carte de coduri (en. Electronic Codebook Mode – ECB)
Principiul de lucru al modului ECB constă în criptarea fiecărui bloc de text clar
independent de celelalte blocuri. Acest principiu este ilustrat în figura 4.2. Proprietatea sa
fundamentală este că acelaşi text criptat cu aceeaşi cheie va rezulta în acelaşi text cifrat.
56
Pentru un text clar 1 2 NP p p p= … şi o cheie k, criptarea blocului i, unde 1,i N= se
realizează prin operaţia ( )i k ic E p= , unde k
E denotă algoritmul de criptare cu cheia k.
Similar, pentru textul cifrat 1 2 NC c c c= … şi o cheie k, decriptarea blocului i, unde
1,i N= , se realizează prin operaţia ( )i k ip D c= , unde k
D denotă algoritmul de decriptare
cu cheia k.
(a)
(b)
Figura 4.2 Principiul operaţiilor prin modul de cifrare ECB: (a) criptare (b) decriptare
Datorită acestei proprietăţi, blocurile care se repetă pot fi identificate cu ușurință,
acestea corespunzând de regulă antetelor, secvenţelor de zerouri, etc., fiind foarte des
întâlnite în aplicaţii reale. Întrucât fiecare bloc cifrat corespunde, independent de celelalte
blocuri, unui bloc de text clar, reordonarea blocurilor cifrate de către un atacator va
rezulta într-o secvenţă reordonată de blocuri de text clar. Totodată, diferite blocuri de text
pot fi extrase dintr-o secvenţă şi inserate în alta, fără detectarea acestei operaţii.
Cu toate aceste dezavantaje, acest mod de cifrare vine şi cu câteva avantaje ce
merită menţionate. În primul rând, utilizarea acestuia asigură eliminarea propagării
57
erorilor la alte blocuri, singurul afectat de eroare fiind blocul în cauză. În al doilea rând,
independenţa blocurilor face posibilă implementarea facilă pe arhitecturi paralele. Cu
toate acestea, ECB nu este singurul mode de cifrare ce asigură facilităţi de implementare
pe arhitecturi paralele. În cadrul acestui capitol vom prezenta și alte moduri de cifrare cu
o structură similară, dar cu elemente esenţiale ce le asigură o rezistenţă mult mărită în
faţa atacurilor (e.g. Counter mode). Specialiştii din domeniu recomandă utilizarea ECB
numai în cazul mesajelor cu o dimensiunea maximă a unui bloc sau dacă se utilizează
chei diferite pentru fiecare bloc.
Un efect vizual al modului ECB se poate observa prin criptarea unei imagini. În
figura 4.3 (sursă: Wikipedia) s-a ilustrat un asemenea efect, unde se poate observa faptul
că printr-o criptare ECB imagine originală încă mai poate fi determinată, însă printr-o
criptare ce utilizează una din celelalte moduri, se obţine un alt efect.
Imagine originală Criptare ECB Criptare prin alte moduri
Figura 4.3 Efectul criptării ECB asupra unei imagini (sursa: Wikipedia)
4.3.2 Cifrare bloc cu înlănţuire (en. Cipher Block Chaining – CBC)
CBC asigură propagarea rezultatului criptării fiecărui bloc la următorul bloc prin
intermediul unei operaţii XOR aplicat asupra blocului de text clar următor. Astfel, blocul
cifrat ic va depinde de blocul clar i
p şi de toate blocurile anterioare. Cu toate acestea,
pentru mesaje cu blocuri clare identice pentru aceeaşi cheie va rezulta acelaşi bloc cifrat.
Pentru evitarea acestei situaţii, modul CBC introduce vectorul de iniţializare (en.
Initialization Vector, i.e. IV) care influenţează doar primul bloc şi este aplicat printr-o
operaţie XOR. IV poate să nu fie secret, dar în acest caz trebuie protejată integritatea
acesteia. O soluţie pentru transmiterea IV reprezintă criptarea acestuia în cadrul primului
bloc. IV poate să lipsească, caz în care mai multe texte clare cu aceleaşi blocuri criptate
cu aceeaşi cheie vor genera aceleaşi blocuri cifrate.
58
Pentru un text clar 1 2 NP p p p= … , o cheie k şi un IV secret, textul cifrat va fi de
forma 0 1 2 NC c c c c= … , unde ( )0 k
c E IV= , iar criptarea blocului i, unde 1,i N= se
realizează prin operaţia ( )1i k i ic E p c
−
= ⊕ . În cazul în care IV este public, textul cifrat va
fi tot 0 1 2 NC c c c c= … , unde 0
c IV= , iar ( )1i k i ic E p c
−
= ⊕ , unde 1,i N= .
Pentru un text cifrat 0 1 2 NC c c c c= … , o cheie k şi un IV secret, textul clar va fi
1 2 NP p p p= … , unde ( ) 1i k i i
p D c c−
= ⊕ . Pentru un text cifrat 0 1 2 NC c c c c= … , o cheie k şi
un IV public, 0c IV= , textul clar va avea acceaşi formă 1 2 N
P p p p= … , iar
( ) 1i k i ip D c c
−
= ⊕ , unde 1,i N= .
(a)
(b)
Figura 4.4 Principiul operaţiilor de cifrare CBC: (a) criptare (b) decriptare
Avantajul utilizării modului CBC reprezintă faptul că rearanjarea blocurilor va
afecta textul clar. Totodată, o decriptare corectă depinde doar de blocul cifrat anterior.
59
În ceea ce priveşte propagarea erorii, eronarea unui singur bit în blocul cifrat ic va
afecta blocurile clare ip şi 1i
p+ . Ca o observaţie, afectarea bitului al j-lea din cadrul i
c va
genera o eronare completă al blocului clar ip şi va afecta bitul al j-lea din cadrul 1i
p+ .
Pornind de la această observaţie, un atacator poate efectua modificări previzibile asupra
blocurilor de text clar, fără a cunoaşte cheia k. Asemenea atacuri pot introduce texte
valide în secvenţe de blocuri, rezultând în atacuri devastatoare asupra ţintei.
4.3.3 Cifrare cu reacţie (en. Cipher Feedback – CFB)
Cele două moduri de cifrare prezentate anterior, ECB şi CBC, cifrează blocuri de
text clar. Dimensiunea blocului este dat de cifrul utilizat. De exemplu, aceasta este 64 în
cazul lui DES şi 128 în cazul lui AES. În anumite cazuri însă se doreşte cifrarea unor
blocuri de text de dimensiuni mult mai reduse, de exemplu pe octet, fără posibilitatea
completării blocurilor cu octeţi în plus. În aceste cazuri soluţia reprezintă utilizarea DES
sau AES în mod CFB.
În cadrul acestui mod, dimensiunea blocului utilizat este n, însă dimensiunea
blocului de text clar este r, unde r n≤ . Principiul de utilizare presupune cifrarea nu a
textului clar, ci al conţinutului unui registru de deplasare S, de dimensiune n biţi, după
cum se poate observa şi din figura 4.5. Criptarea presupune aplicarea unei operaţii XOR
asupra a r biţi de text clar şi r biţi ai registrului de deplasare (criptat iniţial cu cheia k).
Pentru primul bloc, valoarea iniţială a registrului de deplasare va fi IV iar dimensiunea
blocurilor cifrate va fi de r biţi. Operaţia de decriptare presupune aplicarea unei operaţii
XOR asupra blocurilor cifrate şi a r biţi ai regiştrilor de deplasare.
Pentru fiecare bloc i, registrul de deplasare iS este construit prin deplasarea la
stânga de r ori şi umplerea biţilor rămaşi cu biţii din 1ic
− , 1ic
− având dimensiunea de r
biţi. iS este apoi criptat cu cheia k, iar asupra r biţi cei mai semnificativi se aplică
operaţia XOR cu cei r biţi ai textului clar.
60
(a)
(b)
Figura 4.5 Principiul operaţiilor de cifrare CFB: (a) criptare (b) decriptare
Pentru un text clar 1 2 NP p p p= … , o cheie k şi un IV public, textul cifrat va fi de
forma 1 2 NC c c c= … , iar criptarea blocului i, unde 1,i N= se realizează prin operaţia:
( )( )( )( )
, 1,
, 1.
i r k i
i
i r k
p SelectSemnif E S dacă ic
p SelectSemnif E IV dacă i
⊕ >=
⊕ =
Unde ( )1 1|
i i iS S r c
− −
= ≪, ≪ denotă deplasare la stânga, | denotă concatenare, iar
1S IV= . Pentru IV secret, se adaugă un bloc cifrat ( )0 k
c E IV= , cu ( )1 0|S IV r c= ≪ , iar
( )( )1 1 1r kc p SelectSemnif E S= ⊕ .
Pentru un text cifrat 1 2 NC c c c= … , o cheie k şi un IV public, textul clar va fi de
forma 1 2 NP p p p= … , iar decriptarea blocului i, unde 1,i N= , se realizează prin operaţia:
61
( )( )( )( )
, 1,
, 1.
i r k i
i
i r k
c SelectSemnif E S dacă ip
c SelectSemnif E IV dacă i
⊕ >=
⊕ =
Pentru un IV secret, pe baza cheii k se obţine ( )0kIV D c= , după care cu IV astfel
obţinut se construieşte ( )1 0|S IV r c= ≪ prin care se va obţine
( )( )1 1 1r kp c SelectSemnif E S= ⊕ . În continuare, se va aplica formula anterioară pentru
decriptarea celorlaltor blocuri. Ca o observaţie, atât în cazul criptării cât şi în cazul
decriptării, se utilizează doar algoritmul de criptare.
Un aspect interesant legat de acest mod reprezintă faptul că nu necesită completare,
iar sistemul nu trebuie să aştepte recepţionarea unui bloc de dimensiuni mari pentru a
începe decriptarea, sau recepţionarea întregului mesaje. Cu toate acestea, dezavantajul
utilizării CFB reprezintă faptul că este mult mai puţin eficient decât ECB sau CBC
datorită aplicării funcţiei de criptare asupra unor blocuri de text clar de dimensiuni
reduse.
În ceea ce priveşte propagarea erorii, un bit eronat din blocul ic afectează blocul
curent şi următoarele /n r blocuri criptate, întrucât eroarea se propagă prin registrul de
deplasare. La fel ca şi în cazul CBC, blocul clar ip va manifesta erori pe aceleaşi poziţii
pe care s-a eronat ic , motiv pentru care un atacator poate construi atacuri de inserare a
unor texte clare. Cu toate acestea, eroarea nu este propagată, ea fiind eliminată după /n r
blocuri.
Specificul acestui mod de criptare îl face un candidat ideal pentru implementarea
cifrurilor secvenţiale (en. Stream Ciphers).
4.3.4 Cifrare cu reacţie la ieşire (en. Output Feedback – OFB)
OFB este similar CFB, diferenţa constând în faptul că biţii blocului curent cifrat
sunt independenţi de biţii blocului cifrat anterior. După cum se poate observa şi din figura
4.6, reacţia de înlănţuire se propagă după selectarea a r biţi din rezultatul criptării
registrului de deplasare.
62
(a)
(b)
Figura 4.6 Principiul operaţiilor de cifrare OFB: (a) criptare (b) decriptare
Formula de calcul pentru criptarea blocului i se construiește similar modului CFB,
singura diferenţă fiind modul de calcul al registrului de deplasare. În acest caz
( ) ( )( )1 1|
i i r k iS S r SelectSemnif E S
− −
= ≪ , după cum se poate observa şi din figura 4.6. În
rest, formulele operaţiilor de criptare şi decriptare cu IV public şi secret sunt identice cu
formulele aplicate în modul CFB.
Spre deosebire de modul CFB, în modul OFB eroarea nu este propagată la blocurile
următoare. O eronare al bitului j în blocul ic , afectează doar bitul j al blocului clar i
p . La
fel ca şi modul de cifrare CFB, OFB este des utilizat pentru implementarea cifrurilor
secvenţiale, iar eliminarea propagării erorilor îl face un candidat mult mai puternic decât
CFB.
63
4.3.5 Cifrare cu contor (en. Counter – CTR)
Modul CTR este similar cu modul OFB, însă în acest caz nu mai există o reacţie de
propagare a rezultatelor la blocurile următoare, după cum se poate observa şi din figura
4.7. Astfel, contorul este iniţializat cu IV, iar pentru fiecare bloc valoarea acestuia este
incrementată mod 2n , unde n reprezintă dimensiunea în biţi al blocului cifrat. Pentru un
bloc de text clar de dimensiunea n biţi va rezulta un bloc cifrat de acceaşi dimensiune.
Criptarea se realizează prin criptarea contorului şi aplicarea unei operaţii XOR
asupra rezultatului şi textului clar. Decriptarea presupune criptarea contorului şi aplicarea
operaţiei XOR asupra textului cifrat. IV poate fi transmis public sau poate fi secretizat.
(a)
(b)
Figura 4.7 Principiul operaţiilor de cifrare CTR: (a) criptare (b) decriptare
64
Pentru un text clar 1 2 NC c c c= … , o cheie k şi un IV public, textul clar va fi de forma
1 2 NP p p p= … , iar criptarea blocului i, unde 1,i N= , se realizează prin operaţia
( )i i ic p E Contor= ⊕ , unde
( )11 mod 2 , 2,
, 1.
n
i
i
Contor dacă iContor
IV dacă i
−
+ ≥=
=
Decriptarea presupune utilizarea aceleiaşi metode pentru calculul contorului, iar
decriptarea blocului i, din blocul cifrat ic se realizează conform formulei
( )i i ip c E Contor= ⊕ .
Pentru un IV secret se adaugă un bloc cifrat ( )0c E IV= , noul text cifrat fiind
0 1 2 NC c c c c= … . Operaţia de decriptare în acest caz presupune decriptarea primului bloc
şi aplicarea formulelor anterioare pentru decriptarea celorlalte blocuri.
Acest mod este similar cu ECB, în sensul că asigură criptarea blocurilor de n biţi,
fără propagarea erorilor blocurilor cifrate. Cu toate acestea, pentru un IV eronat, eroarea
se va propaga la toate blocurile următoare. Dezavantajul acestui mod faţă de CFB şi OFB
este faptul că criptarea unui bloc necesită recepţionarea a n biţi. Cu toate acestea, modul
CTR poate fi aplicat în procesări paralele, în criptarea fişierelor ce necesită acces aleator
pe blocuri, ceea ce nu este posibil în modurile CBC, CFB şi OFB.
4.4 Completarea blocurilor (en. Padding)
Cifrarea pe blocuri în modurile ECB, CBC şi CTR prezintă dezavantajul că există situaţii
în care dimensiunea textului nu reprezintă un multiplu de dimensiunea blocului ales. În
aceste cazuri, blocurile de text clar trebuie completate cu octeţi. În cazul modurilor CFB
şi OFB dimensiunea unui bloc este de regulă un octet, motiv pentru care completarea, de
regulă, nu este necesară.
O metodă des întâlnită de completare reprezintă adăugarea unui octet la sfârşitul
ultimului bloc a cărui valoare să reprezinte numărul de octeţi cu care s-a completat
blocul. Acest mecanism este ilustrat și în figura 4.8, unde se poate observa că fiecare
octet de completare va avea valoarea ultimului octet. De exemplu, următoarele secvenţe
de valori poti fi octeţi de completare: 01, 02 02, 03 03 03, 04 04 04 04, 05 05 05 05 05.
65
Figura 4.8 Exemplu de completare a blocului de text clar
Dacă se utilizează completarea (cum se face de fapt în realitate), atunci chiar dacă
dimensiunea textului clar este multiplu de dimensiunea blocului utilizat, trebuie adăugat
un ultim bloc ce va conţine numai octeţi de completare.
În cazul în care dimensiunea textului cifrat trebuie să coincidă cu dimensiunea
textului clar, adică nu se utilizează completare, metoda de completare este următoarea.
Fie m biţi rămaşi pentru completare, unde 0m ≥ iar 1Nc
− reprezintă penultimul bloc. În
cazul în care nu există un penultim bloc, acesta va fi generat pe baza unui IV public, astfel
încât ( )1Nc E IV
−
= . Cei m biţi de completare vor fi aleşi dintre biţii textului cifrat obţinut
din aplicarea unei operaţii XOR asupra 1Nc
− şi asupra textului clar rămas. Astfel, dacă
n m
t− reprezintă textul clar rămas pentru ultimul bloc, cu un număr de biţi de n-m, unde n
reprezintă dimensiunea unui bloc, atunci ( )( )1|n m n m
N m Nc E t SelectBiţi c t
− −
−
= ⊕ .
Temă.
Să se proiecteze şi să se implementeze un cifru simetric didactic pe baza unei reţele
Feistel, unde funcţia f trebuie să asigure dependenţa tuturor biţilor cifraţi de cheia de
intrare. Demonstrarea dependenţei se va realiza prin generarea unui număr de min. 100 de
chei şi a unui număr de min. 50 de texte de intrare binare a câte 30KO min. fiecare (e.g.
imagini jpeg color, arhive zip, rar). Cifrul astfel construit va fi utilizat pentru cifrarea
unor fişiere de intrare binare, date de utilizator, prin toate cele 5 moduri de cifrare
prezentate în cadrul acestui capitol. Metoda de completare utilizată este la alegere.