Sunteți pe pagina 1din 13

Criptarea informațiilor

Disciplina: Informatică aplicată


Realizat de: Ciprian Floare, Ciprian Ionel, Răzvan Leaș

1
Cuprins

I. Definiție. Terminologie……………………………………………..3.
II. De ce avem nevoie de criptare……………………………………..3.
III. Clasificarea algoritmilor de criptare……………………………....4.
IV. Standarde de criptare……………………………………………...7.
V. Standardul AES…………………………………………………….8.
VI. Descrierea algoritmului AES……………………………………...9.
VI. Exemple de algoritm AES în C/C++……………………………..12.
VII. Bibliografie……………………………………………………....13.

2
I. Definiție. Terminologie
Criptarea reprezintă transformarea unui mesaj clar într-un format care nu poate fi uşor
interpretat de către o persoană neautorizată. La modul general, criptarea reprezintă conversia
datelor dintr-un format uşor interpretabil de către oricine, într-un format dificil, sau chiar
imposibil de interpretat de către o persoană, sau un sistem, dar uşor de interpretat de către
persoanele autorizate. Operaţiunea inversă de transformare a mesajului codificat în mesajul clar,
original, pentru a putea fi interpretat se numeşte decriptare.
Criptologia (cryptology), constituită ca o ramură interdisciplinară este domeniul ştiinţific
care se ocupă cu studiul codurilor secrete. Termenul vine din cuvintele greceşti kryptos=ascuns,
secret şi logia=studiu, teorie. Cuprinde două mari componente: criptografia (cryptography) (din
cuvintele greceşti kryptos si graphia=scriere) este partea care se ocupă cu studiul tehnicilor,
algoritmilor, metodelor matematice referitoare la diverse aspectele ale securităţii informaţiei,
incluzînd proiectare, construirea şi analiza diverselor protocoale, şi criptanaliza (cryptanalysis)
(din cuvintele greceşti kryptos si analyein) este ştiinţa şi arta care se ocupă cu analiza sistemelor
informatice din punct de vedere al securităţii, îndeosebi a aspectelor ascunse ale acestora.
Din punct de vedere istoric, criptologia a fost asociată exclusiv cu criptarea si decriptarea
mesajelor, cu scopul de a ascunde informaţia. Abia dupa apariţia sistemelor de calcul in sec.
XIX-XX, domeniul s-a dezvoltat foarte mult, au apărut noi metode bazate pe teorii matematice
complexe şi necesitatea folosirii calculatoarelor din ce în ce mai performante, precum şi noi
cerinţe pentru sistemele informatice.
Un algoritm criptografic (cryptographic algorithm), sau cifru (cipher) pe scurt, este o funcţie
matematică folosită în procesul de criptare şi de decriptare. Un astfel de algoritm de criptare este
folosit de obicei în combinaţie cu o cheie (key), care poate fi de exemplu un cuvînt, o frază, un
text mai lung sau un numar. Aceasta cheie este folosită pentru criptarea unui text clar. Folosind
acelaşi algoritm pentru un text clar, dar chei diferite de criptare, se obţine texte codificate
diferite.

II. De ce avem nevoie de criptare?


Criptarea datelor este o metodă de a vă proteja datele, împiedicând alte persoane să ajungă la
acestea. Dacă aveţi un fişier pe computer pe care doriţi să-l păstraţi secret, să-l puteţi vizualiza
sau edita doar dumneavoastră, îl puteţi cripta astfel încât nimeni să nu poată deschide fişierul fără
a cunoaşte o anumită parolă. Necesitatea de a cripta informaţiile a existat dintotdeauna. Astăzi,
mai mult ca niciodată, informaţii confidenţiale se transmit zilnic între instituţii guvernamentale
şi/sau companii. În fiecare minut, mii de cetăţeni ai planetei îşi introduc datele de identificare ale
cardurilor de credit/debit pentru a face cumpărături online. Datele reprezintă cel mai important
element al economiei digitale. Angajații care transportă un laptop plin cu informații delicate ale
companiei în timpul călătoriilor de afaceri sunt expuși riscului de pierdere a acestora sau de furt.
Dacă un dispozitiv mobil pierdut poate fi înlocuit la un cost relativ redus, pierderea datelor poate
duce la pierderea clienților, reputație deteriorată sau pierderi financiare semnificative.

3
Criptarea este utilizată pentru a stoca informații importante în surse nesigure și a le transfera
prin canale de comunicare neprotejate. Acest transfer de date reprezintă două procese reciproc
inverse:
 Înainte de a trimite date prin linia de comunicație sau înainte de a le depozita, acestea
sunt 'criptate'.
 Pentru a restaura datele originale de la acestea criptate, se aplică procedura de
'decriptare'.
Criptarea a fost inițial utilizată numai pentru transferul de informații confidențiale. Cu toate
acestea, ulterior informațiile au fost criptate în scopul stocării în surse nesigure. Se folosește
acum criptarea informațiilor în scopul stocării, evitând astfel necesitatea stocării protejate fizic.
În prezent există o mulțime de metode de criptare. Majoritatea acestor metode sunt împărțite,
în funcție de structura cheilor utilizate, de metodele simetrice și de metodele asimetrice. În plus,
metodele de criptare pot avea rezistențe criptografice diferite și pot gestiona datele de intrare în
diferite moduri - cipuri bloc și cipuri de flux. Prin toate aceste metode, crearea și analiza acestora
este angajată în știința criptografiei.

III. Clasificarea algoritmilor de criptare

Fig 1. Clasificarea algoritmilor de criptare


Exista mai multe criterii după care se pot clasifica algoritmii de criptare. Cel mai important
criteriu este după felul în care se foloseşte cheia la criptarea, respectiv decriptarea mesajului.
Algoritmii se împart în două mari clase: cu chei simetrice (sau chei private) şi cu chei publice
(sau chei asimetrice).
Criptarea simetrică utilizează aceeași cheie pentru criptare și decriptare.
Criptarea asimetrică utilizează două chei diferite: una pentru criptare (care se mai numește
și deschisă), cealaltă pentru decriptare (numită închisă).

4
Criptarea simetrică
În criptosistemele simetrice, aceeași cheie este folosită pentru criptare și decriptare. Prin
urmare, numele este simetric. Algoritmul și cheia sunt selectate în prealabil și cunoscute de
ambele părți. Menținerea unei chei în secret este o sarcină importantă pentru stabilirea și
menținerea unui canal de comunicare securizat. În această privință există o problemă a
transferului cheie inițial (sincronizarea cheii). În plus, există metode de atacuri cripte care permit
într-un fel sau altul să decripteze informațiile fără a avea o cheie sau prin utilizarea intercepției
sale în etapa de coordonare. În general, aceste momente reprezintă problema tăriei criptografice a
unui algoritm specific de criptare și reprezintă un argument atunci când se alege un anumit
algoritm.
Schema de implementare
Sarcina. Există doi interlocutori - Alice și Bob, doresc să facă schimb de informații
confidențiale.
 Generarea cheii.
Bob (sau Alice) selectează cheia de criptare d și algoritmii E, D (funcții de criptare și
decriptare).
 Criptare și trimitere a unui mesaj.
Alice criptează mesajul m folosind cheia obținută d.
E (m, d) = c
Și trimite lui Bob textul rezultat c. Bob face același lucru dacă dorește să trimită lui Alice
un mesaj.
 Decriptarea mesajului.
Bob (Alice), folosind aceeași cheie d, decriptează textul cifric c
D (c, d) = m
Dezavantajele cripțiunii simetrice sunt problema transferului cheii către interlocutor și
incapacitatea de a stabili autenticitatea sau autoritatea textului. Prin urmare, de exemplu în
centrul tehnologiei semnăturii digitale sunt schemele asimetrice.
Criptare asimetrică (cu cheie publică)
În sistemele cu cheie publică sunt utilizate două chei - deschise și închise, conectate într-
un mod matematic unul cu celălalt. Cheia publică este transmisă printr-un canal deschis (adică,
neprotejat, vizibil) și este folosit pentru a cripta mesajul și pentru a verifica EDS. O cheie secretă
este utilizată pentru a decripta mesajul și a genera EDS.
Această schemă rezolvă problema circuitelor simetrice asociate transferului inițial al cheii
către cealaltă parte. Dacă atacatorul interceptează cheia în scheme simetrice, poate atât să
"asculte", cât și să corecteze informațiile transmise. În sistemele asimetrice, o cheie publică este
transmisă celeilalte părți, ceea ce vă permite să criptați, dar nu să decriptați informațiile. Astfel se
rezolvă problema sistemelor simetrice, legate de sincronizarea cheilor.
Primii cercetători care au inventat și descoperit conceptul de criptare open-source au fost
Whitfield Diffie și Martin Hellman de la Universitatea Stanford și Ralph Merkle de la
Universitatea Berkeley din California. În 1976, lucrarea lor "New Directions in Cryptography

5
Modern" a deschis un nou domeniu în criptografie, acum cunoscut sub numele de criptografie cu
chei publice.
Schema de implementare
Sarcina. Există doi interlocutori - Alice și Bob, Alice dorește să transfere informații
confidențiale lui Bob.
 Generarea unei perechi de chei.
Bob selectează algoritmul (E, D) și perechea cheilor private deschise este (e, d) și trimite
lui Alice cheia publică peste canalul deschis.
 Criptare și transmitere de mesaje.
Alice criptează informațiile utilizând cheia publică a lui Bob e.
E (m, e) = c
Și trimite lui Bob ciphertextul primit c.
 Decriptarea mesajului.
Bob, folosind cheia privată d, decriptează textul cipher c.
D (c, d) = m
Dacă este necesar să se stabilească un canal de comunicare în ambele direcții, primele
două operațiuni trebuie făcute pe ambele părți, astfel încât toată lumea să știe cheile publice
private și cheia publică a interlocutorului. Cheia privată a fiecărei părți nu este transmisă pe un
canal neprotejat, rămânând astfel în secret.
Clasificarea algoritmilor de criptare se poate face şi după felul în care se procesează
textul clar/criptat la criptare/decriptare. O primă metodă este procesarea pe blocuri, iar algoritmii
se numesc de obicei cifruri bloc. Textul clar este împărţit în blocuri cu lungime fixă de caractere,
după care fiecare bloc este criptat rînd pe rînd. În cazul în care lungimea textului clar nu este
multiplu întreg de lungimea blocului, se foloseşte un algoritm de completare a acestuia cu
caractere pînă la lungimea blocului folosită. Acest lucru se numeşte padding (din cuvîntul englez
to pad=a căptuşi), iar cea mai simplă variantă este completarea cu caractere zero sau spaţii.
Cele mai cunoscute moduri de operare ale cifrurilor bloc sînt: ECB (electronic code
block) şi CBC (chiper block chaining). Modul ECB este cel mai simplu şi cel mai uzual şi
presupune codificarea independentă a fiecărui bloc Bi al mesajului clar într-un bloc cifrat Ci de
aceeaşi mărime, folosind chei diferite Ki pentru fiecare pas. Modul CBC foloseşte un mecanism
de feedback în care rezultatul cifrării unui bloc anterior Ci-1 este folosit pentru cifrarea blocului
curent Bi, textul cifrat nemaifiind dependent doar de textul clar ci şi de textul cifrat.

Fig 2. Codificarea pe blocuri de tip ECB

6
Fig 3. Codificarea pe blocuri de tip CBC
Pentru decriptare se foloseşte în mod similar împărţirea în blocuri de aceeaşi lungime.
Lungimea blocurilor este relativ mare, şi poate avea valori tipice de 64, 128 sau 256 bits. Spre
deosebire de cifrurile de tip bloc, cifrurile stream codifică mesajele folosind blocuri foarte mici,
de un character (sau o literă din alfabet) sau chiar şi de 1 bit lungime.

IV. Standarde de criptare


O metodă pentru a păstra securitatea informaţiei este folosirea unor algoritmi secreţi. Dacă
doar Alice şi Bob cunosc algoritmul, atunci am putea presupune că oricine ascultă mesajele
schimbate între ei nu va putea să le înţeleagă. În realitate însă este dificil acest lucru. Pe de o
parte ei vor trebui să-şi scrie singuri programele software care implementează algoritmul
respectiv, lucru destul de dificil, iar pe de altă parte, de-a lungul timpului s-a constatat că nici un
algoritm nu este infailibil, şi că mai devreme sau mai tîrziu acesta poate fi spart, fără chiar ca
Alice şi Bob să ştie acest lucru. Daca Alice va dori să comunice şi cu alte persoane, atunci va
trebui să aibă cîte un algoritm pentru fiecare persoană, lucru deja extrem de dificil. Cu toate
acestea, folosirea unor astfel de algoritmi secreţi care nu se cunosc public este practicată chiar şi
în zilele noastre. Foarte multe sisteme, inclusiv sisteme de operare şi diverse dispozitive folosesc
acest lucru în mod curent, fără a lua foarte în serios implicaţiile din punct de vedere al securităţii.
Deoarece este dificilă proiectarea şi implementarea unui algoritm bun de criptare, implicînd
un efort considerabil, iar sistemele informatice fiind foarte diferite, s-a impus de-a lungul
timpului necesitatea standardizării în criptografie, în special a algoritmilor şi a protocoalelor
folosite. Avantajele majore oferite de standardizare sint compatibilitatea şi interoperabilitatea
sistemelor. Avînd un algoritm de criptare care este standardizat, iar dacă implementarea acelui
algoritm pe diferite sisteme respectă acel standard, atunci vom fi siguri ca un acelaşi mesaj
codificat pe ambele sisteme, cu aceleaşi chei, vom obţine acelaşi rezultat. Este mult mai uşor să
avem un algoritm standard care este deja implementat în diferite sisteme pe care să-l putem
folosi. E drept că va trebui să avem încredere în cei care au proiectat algoritmul şi că nu există
nici un punct slab în algoritm care să poată fi exploatat de un eventual criptanalist. De obicei

7
standardizarea este făcută de organizaţii care ne asigură că acest lucru nu este posibil, sau foarte
puţin probabil.
Există diferite standarde pentru diferite aspecte din criptografie:
 standarde pentru algoritmi: DES, AES, 3DES, RSA, RC4
 standarde pentru funcţii matematice de tip hash: MD5,SHA1,HMAC
 standarde pentru semnături digitale: DSA, RSA
 standarde pentru criptarea în reţele wireless: WEP, WPA, WPA2
 standarde pentru criptarea în reţele GSM: A5/1, A5/2
 standarde pentru securitatea reţelelor Internet: documente RFC
 standarde pentru autentificare: Kerberos, RADIUS
 standarde pentru protocoale de conectare la servere: SSH

V. Standardul AES

Fig 4. Schema standard AES


AES (Advanced Encryption Standard, traducere: Standard Avansat de Criptare), cunoscut și
sub numele de Rijndael, este un algoritm standardizat pentru criptarea simetrică, pe blocuri,
folosit astăzi pe scară largă în aplicații și adoptat ca standard de organizația guvernamentală
americană NIST. Standardul oficializează algoritmul dezvoltat de doi criptografi belgieni, Joan
Daemen și Vincent Rijmen și trimis la NIST pentru selecție sub numele Rijndael.

8
Deoarece DES devenise vulnerabil din cauza lungimii prea mici a cheii, NIST a recomandat
utilizarea 3DES, un algoritm care constă în esență în aplicarea de trei ori a DES. Deși 3DES s-a
dovedit a fi un algoritm puternic, el este relativ lent în implementările software, motiv pentru
care NIST a lansat în 1997 o cerere de propuneri pentru un algoritm care să-l înlocuiască. S-a
pornit de la 21 de propuneri acceptate inițial, apoi prin eliminări numărul lor a fost redus la 15, și
apoi la 5, din care a fost ales în cele din urmă algoritmul propus de doi criptografi belgieni, Joan
Daemen și Vincent Rijmen. La votarea finală, algoritmul, denumit de autorii săi Rijndael, a
învins la vot patru alte propuneri, printre care și algoritmul RC6, propus de o echipă de
criptografi în care se afla și reputatul informatician Ron Rivest.
Criteriile pe baza cărora au fost evaluate propunerile pentru AES au fost securitatea
(rezistența la atacuri criptanalitice), costurile (eficiența computațională, complexitatea spațială,
precum și licențierea liberă și gratuită) și particularitățile algoritmului (flexibilitatea, simplitatea,
și ușurința de realizare a implementărilor atât software cât și hardware).
În propunerea avansată NIST, cei doi autori ai algoritmului Rijndael au definit un algoritm de
criptare pe blocuri în care lungimea blocului și a cheii puteau fi independente, de 128 de biți, 192
de biți, sau 256 de biți. Specificația AES standardizează toate cele trei dimensiuni posibile pentru
lungimea cheii, dar restricționează lungimea blocului la 128 de biți. Astfel, intrarea și ieșirea
algoritmilor de criptare și decriptare este un bloc de 128 de biți. În publicația FIPS numărul 197,
operațiile AES sunt definite sub formă de operații pe matrice, unde atât cheia, cât și blocul sunt
scrise sub formă de matrice. La începutul rulării cifrului, blocul este copiat într-un tablou
denumit stare (în engleză state), primii patru octeți pe prima coloană, apoi următorii patru pe a
doua coloană, și tot așa până la completarea tabloului.

VI. Descrierea algoritmului AES


Pasul SubBytes

La pasul SubBytes, fiecare octet din blocul state este înlocuit cu un altul, conform unui cifru
cu substituție
Pasul SubBytes este un cifru cu substituție, fără punct fix, denumit Rijndael S-box, care
rulează independent pe fiecare octet din state. Această transformare este neliniară și face astfel
întreg cifrul să fie neliniar, ceea ce îi conferă un nivel sporit de securitate.
Fiecare octet este calculat astfel:

9
Unde bi este bitul corespunzător poziției i din cadrul octetului, iar ci este bitul
corespunzător poziției i din octetul ce reprezintă valoarea hexazecimală 63, sau, pe
biți, 01100011. Maparea octeților se poate reține într-un tabel, explicitat în FIPS PUB 197, în
care este specificat rezultatul operației de mai sus efectuată pe fiecare din cele 256 de valori
posibile reprezentabile pe un octet.
Pasul ShiftRows

Pasul ShiftRows
Pasul ShiftRows operează la nivel de rând al matricii de stare state. Pasul constă în
simpla deplasare ciclică a octeților de pe rânduri, astfel: primul rând nu se deplasează; al doilea
rând se deplasează la stânga cu o poziție; al treilea rând se deplasează la stânga cu două poziții;
al patrulea se deplasează la stânga cu trei poziții. Rezultatul acestui pas este că fiecare coloană
din tabloul state rezultat este compusă din octeți de pe fiecare coloană a stării inițiale. Acesta
este un aspect important, din cauză că tabloul state este populat inițial pe coloane, iar pașii
ulteriori, inclusiv AddRoundKey în care este folosită cheia de criptare, operațiile se efectuează
pe coloane.
Pasul MixColumns

În pasul MixColumns, fiecare coloană este înmulțită cu un polinom, notat în figură cu


c(x).
În acest pas, fiecare coloană a tabloului de stare este considerată un polinom de gradul 4
peste corpul Galois F28. Fiecare coloană, tratată ca polinom, este înmulțită, modulo x4 +1 cu
polinomul a(x) = 3x3 + x2 + x + 2. Operația se poate scrie ca înmulțire de matrice astfel:

10
unde s’i sunt elementele de pe un vector coloană rezultate în urma înmulțirii, iar si sunt
elementele de pe același vector înaintea aplicării pasului.
Rezultatul are proprietatea că fiecare element al său depinde de toate elementele de pe
coloana stării dinaintea efectuării pasului. Combinat cu pasul ShiftRows, acest pas asigură că
după câteva iterații, fiecare octet din stare depinde de fiecare octet din starea inițială (tabloul
populat cu octeții mesajului în clar). Acești doi pași, împreună, sunt principala sursă de difuzie în
algoritmul Rijndael. Coeficienții polinomului a(x) sunt toți 1, 2 și 3, din motive de performanță,
criptarea fiind mai eficientă atunci când coeficienții sunt mici. La decriptare, coeficienții pasului
corespunzător acestuia sunt mai mari și deci decriptarea este mai lentă decât criptarea. S-a luat
această decizie pentru că unele din aplicațiile în care urma să fie folosit algoritmul implică numai
criptări, și nu și decriptări, deci criptarea este folosită mai des.
Pasul AddRoundKey și planificarea cheilor

În pasul AddRoundKey, se efectuează o operație de sau exclusiv pe biți între octeții stării
și cei ai cheii de rundă
Pasul AddRoundKey este pasul în care este implicată cheia. El constă într-o simplă
operație de „sau” exclusiv pe biți între stare și cheia de rundă (o cheie care este unică pentru
fiecare iterație, cheie calculată pe baza cheii secrete). Operația de combinare cu cheia secretă este
una extrem de simplă și rapidă, dar algoritmul rămâne complex, din cauza complexității
calculului cheilor de rundă (Key Schedule), precum și a celorlalți pași ai algoritmului.
Optimizarea cifrului
În cazul sistemelor cu 32 de biți sau mai mari, este posibilă accelerarea execuției acestui
cifru combinând pașii SubBytes și ShiftRows cu pasul MixColumns transformându-i într-o
secvență de căutări în tabel. Acest lucru necesită patru tabele de 256 intrări pe 32 de biți
(împreună ocupând 4096 octeți). O rundă poate fi apoi executată cu 16 operațiuni de căutare a
tabelelor și 12 operații de 32 de biți exclusiv-sau, urmate de patru exclusiviste pe 32 de biți sau
operațiuni în pasul AddRoundKey. În mod alternativ, operația de căutare a tabelelor poate fi
efectuată cu o singură tabelă pe 256 de biți de 32 de intrări pe 32 de biți (care ocupă 1024 de
octeți) urmată de operații de rotație circulară. Folosind o abordare orientată pe octeți, este
posibilă combinarea pașilor SubBytes, ShiftRows și MixColumns într-o singură operație rotundă.

11
Securitatea
Rijndael, ca și toți ceilalți algoritmi ajunși în etapa finală de selecție pentru standardul
AES, a fost revizuit de NSA și, ca și ceilalți finaliști, este considerat suficient de sigur pentru a fi
folosit la criptarea informațiilor guvernamentale americane neclasificate. În iunie 2003, guvernul
SUA a decis ca AES să poată fi folosit pentru informații clasificate. Până la nivelul SECRET, se
pot folosi toate cele trei lungimi de cheie standardizate, 128, 192 și 256 biți. Informațiile TOP
SECRET (cel mai înalt nivel de clasificare) pot fi criptate doar cu chei pe 256 biți.
Atacul cel mai realizabil împotriva AES este îndreptat împotriva variantelor Rijndael cu
număr redus de iterații. AES are 10 iterații la o cheie de 128 de biți, 12 la cheie de 192 de biți și
14 la cheie de 256 de biți. La nivelul anului 2008, cele mai cunoscute atacuri erau accesibile la 7,
8, respectiv 9 iterații pentru cele trei lungimi ale cheii.

VII. Exemple de algoritm AES în C/C++

1. Criptarea AES

AES_Encrypt.cpp

2. Decriptarea AES

AES_Decrypt.cpp

12
VIII. Bibliografie

 http://www.utgjiu.ro/revista/ec/pdf/2010-04.I/15_LUMINITA_DEFTA.pdf
 http://www.unde.ro/zoran/books/Criptarea-Informatiei.pdf
 https://ro.wikipedia.org/wiki/Criptare#cite_note-isaev-1
 https://en.wikipedia.org/wiki/Advanced_Encryption_Standard
 https://ro.wikipedia.org/wiki/AES
 http://www.hoozi.com/posts/advanced-encryption-standard-aes-implementation-
in-cc-with-comments-part-2-decryption/

13

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