Securitatea Retelelor de Calculatoare Si Criptografie
Securitatea retelelor de calculatoare si criptografie
Cuprins
1 Criptografie
1.1 Scurta introducere
1.2 Algoritmi criptografici simetrici
1.2.1 Moduri de operare ale cifrurilor bloc
1.2.1.1 Electronic codebook (ECB)
1.2.1.2 Cipher-block chaining (CBC)
1.2.1.3 Cipher feedback (CFB)
1.2.1.4 Output feed-back (OFB)
1.2.2 AES 15
1.2.2.1 Informatii preliminarii
1.2.2.1.1 Definitii
1.2.2.1.2 Parametrii si functii ale algoritmului AES
1.2.2.1.3 Preliminarii Matematice
1.2.2.2 Descrierea algoritmului
1.2.2.2.1 Cipher()
1.3 Algoritmi criptografici asimetrici
1.3.1 RSA
1.3.1.1 Informatii preliminarii
1.3.1.2 Descriere algoritm
2 Securitatea retelelor
2.1 Introducere
2.2 Cerintele securitatii datelor in contextul securitatii retelelor
2.3 Metode de autentificare
2.3.1 Nume utilizator si parola
2.3.2 Certificate (X509.3)
2.3.3 Tehnici biometrice
2.3.4 Smart cards
3 Prezentarea aplicatiei
3.1 Descrierea cerintelor aplicatiei
3.2 Descrierea aplicatiei
3.2.1 Instalarea JRE si a aplicatiei
3.2.2 Utilizarea aplicatiei
3.2.2.1 Pornirea si oprirea aplicatiei
3.2.2.2 Prezentarea generala a aplicatiei
3.2.2.3 Generarea unei sume de control SHA-1
3.2.2.4 Generarea unei sume de control MD5
3.2.2.5 Criptarea si decriptarea utilizand AES
3.2.2.6 Criptarea si decriptarea utilizand RSA
3.3 Masuratori ale performantei
3.4 Viitoare imbunatatiri
4 Bibliografie
1 Criptografie
1.1 Scurta introducere
Criptografia este o disciplina a matematicii si a informaticii care se preocupa de securitatea informatiei, mai exact criptare si autentificare si aplicatii precum cele destinate controlului acesului.
Din punct de vedere istoric, criptografia s-a referit mai mult la criptare, insemnand conversia inversabila a informatiei dintr-o forma inteleasa in una neinteleasa, criptata, facand-o de neinteles daca nu posezi cheia cifrului. Insa in ultimele decenii, domeniul s-a extins si in afara confidentialitatii, acum cuprinde arii precum autentificare, semnaturi, dovezi interactive, computatii sigure, stenografia, si altele.
Criptografia moderna poate fi impartita in mai multe campuri, precum criptografia simetrica, asimetrica, criptanaliza, primitive criptografice si protocoale criptografice.
Datorita potentialului de a asista activitatile malitioase, criptografia este de mult timp in interesul structurilor nationale din fiecare stat. Deoarece faciliteaza intimitatea, criptografia constituie un interes si pentru cei care sunt comisi drepturilor omului. Criptografia este punctul central si pentru managementul drepturilor digitale (Digital Rights Management – DRM), ce se doreste a fi una din metodele tehnologiei de a impune drepturile de autor.
1.2 Algoritmi criptografici simetrici
1.2.1 Moduri de operare ale cifrurilor bloc
In criptografie, cifrurile bloc opereaza pe blocuri de lungime fixa, de regula 64 sau 128 de biti. Pentru a cripta mesaje de dimensiuni mai lungi, trebuie utilizat unul din modurile de operare. Acestea se impart in doua categorii mari:
cele care ofera doar confidentialitate, dar nu ofera si integritatea mesajelor
si cele care ofera atat confidentialitate cat si integritatea mesajelor
Noi vom descrie doar unele din cele mai cunoscute moduri de operare care ofera confidentialitate:
electronic codebook (ECB)
cipher-block chaining (CBC)
cipher feedback (CFB)
output feedback (OFB)
1.2.1.1 Electronic codebook (ECB)
Acesta este cel mai simplu mod de operare. In acest caz, mesajul care urmeaza a fi criptat este impartit in blocuri de 64 sau 128, in functie de algoritmul in cauza, iar apoi fiecare bloc este criptat independent unul fata de celalalt.
Figura 1: ECB
Un lucru evident in cazul acestui mod de operare este faptul ca criptarea blocurilor identice din mesajul original va rezulta in blocuri criptate identice. Am putea ilustra acest lucru cel mai simplu prin criptarea unei imagini:
Figura 2: Imaginea criptata cu alt mod
Figura 3: Imaginea iriginala
Figura 4: Imaginea criptata utilizand modul ECB
Prima imagine (Fig. 3) este cea originala, care urmeaza a fi criptata. Cea de-a doua (Fig. 4) este cea criptata utilizand un cifru pe blocuri in modul de operare ECB, iar a reia fiind originalul criptat utilizand CBC. Se observa foarte clar in acest caz imaginea criptata pastreaza multe din asemanarile imaginii originale, ceea ce face ca acest mod de criptare sa fie caracterizat pe de o parte de o viteza sporita, iar pe de alta parte de un grad de securitate inadecvat.
Cei care opteaza pentru utilizarea acestui mod de operare o fac pentru a obtine un grad mai putin decat minimal al securitatii, sa spunem in cazul unei retele LAN, pentru criptarea de voce/video, unde balanta dintre cantitatea de date care necisita operatii de criptare/decriptare si nivelul de securitate tinde foarte mult spre prima din acestea.
1.2.1.2 Cipher-block chaining (CBC)
In modul cipher-bloc chaining, fiecare bloc al mesajului in clar este XOR cu precedentul bloc criptat inainte de a fi criptat. In acest fel, fiecare bloc este dependent de blocurile mesajului in clar pana in acel punct.
Criptarea in modul CBC:
Figura 5: Criptarea in mod CBC
Decriptarea in modul CBC:
Figura 6: Decriptarea in mod CBC
1.2.1.3 Cipher feedback (CFB)
Cipher feedback este apropiat de CBC. Decriptarea CFB este aproape identica cu criptarea CBC efectuata invers:
Figura 7: Criptarea in mod CFB
Figura 8: Decriptarea in mod CFB
1.2.1.4 Output feed-back (OFB)
Modul output feed-back face din cifrul orientat pe blocuri un cifru orientat pe stream-uri.
Figura 9: Criptarea in mod OFB
Figura 10: Decriptarea in mod OFB
1.2.2 AES
1.2.2.1 Informatii preliminarii
Algoritmul Advanced Encryption Standard (standardul avansat de criptare), sau prescurtat AES, cunoscut si sub numele de Rijndael, este un standard de criptare pe 128 de biti, cu trei dimensiuni posibile ale cheii (128, 192 si 256), adoptat de guvernul Statelor Unite.
AES vine sa inlocuiasca vechiul Data Encryption Standard (DES) si, intr-o anumita masura, chiar si 3DES, o versiune "fortificata" a lui DES, realizata prin adaugarea mai multor runde.
Organizatia care se ocupa cu desemnarea standardelor in Statele Unite poarta denumirea National Institute of Standards and Technology (Institutul national al standardelor si tehnologiei) – NIST, si este entitatea care dezvolta Federal Information Processing Standards (Standardele federale de procesare a informatiei) – FIPS.
Fiecare standard dezvoltat de NIST are o durata de viata relativ medie, de regula intre 2-8 ani, exceptand cazurile cand se produc anumite descoperiri, cum ar fi, spre exemplu, reusirea identificarii unei chei DES, asa cum a fost ea demonstrata de catre Electronic Frontier Foundation, in anul 1998, cand, cu o masina alcatuita din 1.536 procesoare special construite si al carei cost s-a ridicat la aproximativ US$250.000 s-a reusit aflarea unei chei DES in mai putin de doua zile de cautare prin metoda "brute-force", care practic trece prin toate combinatiile posibile, neapeland la nici o "slabiciune" particulara algoritmului respectiv. Iata mai jos o parte din acea masina:
Figura 11: Masina care a reusit spargerea cheilor DES, in anul 1998
Dupa mai multe reusite ale criptanalistilor de a recupera cheile DES , nu numai prin brute-force ci si prin criptanaliza diferentiala, liniara si atacul Davies, guvernul Statelor Unite a inceput o asa-zisa competite, al carei rezultat sa se incheie prin dezvoltarea unui nou standard, care sa fie mult mai rezistent in fata atacurilor.
Problema principala nu o constituie neaparat crearea unui algoritm care sa produca o criptare foarte puternica, ci sa se gaseasca un algoritm care sa ofere o balanta intre un algoritm puternic si unul rapid, deoarece utilizarea acestor algoritmi este mult mai prezenta in mediul de afaceri si cel guvernamental, unde accentul cade pe viteza, deoarece si cantitatea de date este din ce in ce mai mare.
Pentru selectarea noului standard, la rundele de calificare s-au inscris urmatorii algoritmi:
CAST-256
CRYPTON
DEAL
DFC
E2
FROG
HPC
LOKI97
MAGENTA
MARS
RC6
Rijndael
SAFER+
Serpent
Twofish
Dupa un proces de standardizare de 5 ani, castigatorul selectiei AES a fost desemnat Rijnadael, deci acesta fiind selectat in calitate de noul standard avansat de criptare. De notat este faptul ca AES nu este identic cu Rijndael, ci este un subset al acestuia, acceptand ca dimensiuni ale cheii marimi de 128, 192 si 256 de biti, numarul de runde fiind diferit pentru fiecare in parte.
Cifrul a fost dezvoltat de catre doi criptografi belgieni, Joan Daemen si Vincent Rijmen, si a fost trimis procesului de selectie sub numele de "Rijndael", nume alcatuit din combinatia celor doi inventatori. Rijndael se pronunta "Rhine dahl" (citit in eng.), cu "i" lung si un "e" scurt.
Rijndael este un rafinament al unui design putin mai vechi, realizat tot de catre Daemen si Rijmen, numit Square, care la randul lui s-a dezvoltat din cifrul Shark.
Spre deosebire de DES, Rijndael este o retea substitutie-permutare, nu o retea Feistel. AES este rapid atat in software cat si in hardware, este relativ usor de implementat, si necesita memorie putina. Fiind un standard adoptat inca din 26 Noiembrie 2001, este adoptat pe o scara larga.
Algoritmul AES foloseste trei dimensiuni de chei: 128, 192 si 256, fapt pentru care cele trei arome de AES poarta numele de "AES-128", "AES-192" si "AES-256".
1.2.2.1.1 Definitii
Transformare Afina
O transformare alcatuita din produsul dintre o matrice urmata de adunarea unui vector.
Key Expansion
Rutina utilizata pentru a genera o serie de Round Keys din Cipher Key.
Round Key
Round Keys sunt valori derivate din Cipher Key utilizand rutina Key Expansion, si care este aplicata blocului State atat in Cipher cat si in Inverse Cipher.
State
Un rezultat intermediar al Cipher-ului care poate fi privit ca o matrice de bytes, avand patru linii si Nb coloane (Nb este definit mai jos).
S-box
Tabela de substitutie non-lineara utilizata in cateva transformari pe bytes prin substitutie si in rutina Key Expansion pentru a efectua o substitutie unu-la-unu asupra unei valori byte.
Word
Un grup de 32 de biti care sunt tratati ca o singura entitate, sau ca un vector (array) de 4 bytes.
1.2.2.1.2 Parametrii si functii ale algoritmului AES
K
Cipher Key
Nb
Numarul de coloane (un word de 32 de biti) din care este alcatuit State. Pentru acest standard, Nb=4.
Nk
Numarul de word-uri pe 32 de biti din care este alcatuit Cipher Key. El poate lua valori din multimea
.
Nr
Numarul de runde, care variaza in functie de Nk si Nb (care este fixat). Nr ia valori din multimea
.
Rcon[]
Un tablout de word-uri pe 32 de biti care contine constante corespunzatoare fiecarei runde.
AddRoundKey()
Transformare in Cipher si Inverse Cipher in care este adaugata un Round Key blocului State utilizand o operatie XOR. Lungimea unui Round Key este egala cu lungimea lui State (i.e. Nb = 4).
InvMixColumns()
Transformare in Inverse Cipher care reprezinta inversul operatiei din Cipher, MixColumns().
InvShiftRows()
Transformare in Inverse Cipher care reprezinta inversul operatiei din Cipher, ShiftRows().
InvSubBytes()
Transformare in Inverse Cipher care reprezinta inversul operatiei din Cipher, SubBytes().
MixColumns()
Transformare in Cipher care ia toate coloanele din State si combina datele (independent una de cealalta) pentru a produce noi coloane.
ShiftRows()
Transformare in Cipher care proceseaza blocul State si deplaseaza ciclic ultimile trei linii cu diferite offset-uri.
SubBytes()
Transformare in Cipher care proceseaza blocul State utilizand o tabela de substitutie non-liniara pe bytes ce opereaza independent pe fiecare byte din blocul State.
SubWord()
Functie utilizata in rutina Key Expansion care ia ca intrare un word de patru bytes si aplica pe fiecare byte o subtitutie S-box, pentru a produce, in fine runde, care variaza in functie de Nk si Nb (care este fixat). Nr ia valori din multimea
.
Rcon[]
Un tablout de word-uri pe 32 de biti care contine constante corespunzatoare fiecarei runde.
AddRoundKey()
Transformare in Cipher si Inverse Cipher in care este adaugata un Round Key blocului State utilizand o operatie XOR. Lungimea unui Round Key este egala cu lungimea lui State (i.e. Nb = 4).
InvMixColumns()
Transformare in Inverse Cipher care reprezinta inversul operatiei din Cipher, MixColumns().
InvShiftRows()
Transformare in Inverse Cipher care reprezinta inversul operatiei din Cipher, ShiftRows().
InvSubBytes()
Transformare in Inverse Cipher care reprezinta inversul operatiei din Cipher, SubBytes().
MixColumns()
Transformare in Cipher care ia toate coloanele din State si combina datele (independent una de cealalta) pentru a produce noi coloane.
ShiftRows()
Transformare in Cipher care proceseaza blocul State si deplaseaza ciclic ultimile trei linii cu diferite offset-uri.
SubBytes()
Transformare in Cipher care proceseaza blocul State utilizand o tabela de substitutie non-liniara pe bytes ce opereaza independent pe fiecare byte din blocul State.
SubWord()
Functie utilizata in rutina Key Expansion care ia ca intrare un word de patru bytes si aplica pe fiecare byte o subtitutie S-box, pentru a produce, in final, un word.
RotWord()
Functie utilizata in rutina Key Expansion care are ca intrare un word de patru bytes si executa o permutare ciclica.
XOR
Operatia XOR.
⊕
Operatia XOR
·
Produsul intr-un camp finit.
1.2.2.1.3 Preliminarii Matematice
Definitie: Seturi (Multimi)
Un set este o colectie finita sau infinita de obiecte in care ordinea nu are nici o relevanta, iar elementele identice sunt ignorate. Membrii unui set sunt numiti elemente si notatia este utilizata pentru a denota faptul ca a este un element al setului A.
Studiul seturilor si al proprietatilor acestora sunt obiectul teoriei seturilor sau teoriei multimilor.
Proprietati Seturi:
Fie E, F, si G seturi. Atunci operatiile utilizate cu ajutorul operatorilor si sunt caracterizate prin urmatoarele proprietati:
comutativitate
asociativitate
distributivitate
Definitie: Inel
Un inel este un set S impreuna cu doi operatori binari, + si *, (cunoscuti sub numele de operatorii de aditivitate si multiplicabilitate), si care in acelasi timp satisface conditiile:
1. Asociativitatea adunarii:
2. Comutativitatea adunarii:
3. Identitatea adunarii:
4. Inversa adunarii:
5. Distributivitatea la stanga si la dreapta:
6. Asociativitatea inmultirii:
Inelele ar mai putea satisface si conditiile:
7. Comutativitatea inmultirii:
8. Identitatea inmultirii:
9. Inversa inmultirii:
unde 1 este elementul identitate.
Definitie: Camp
Un camp este orice set de elemente care satisface axiomele campului atat pentru adunare cat si pentru produs si care in acelasi timp constituie si o algebra comutativa.
Un inel care satisface proprietatile 1-9, poarta denumirea de camp.
O denumire arhaica pentru un camp este si “domeniu rational”.
Deoarece conditia de identitate este in general necesara si aceasta se doreste a fi diferita atat pentru adunare cat si pentru inmultire, fiecare camp trebuie sa aibe cel putin doua elemente. Exemple: multimea numerelor complexe ©, a numerelor rationale (Q), a numerelor reale ( R ), insa nu si cea a numerelor intregi (Z), care formeaza doar un inel, nu si un camp!
Axiomele unui Camp
Axiomele campului sunt in general scrise in perechi alcatuite din adunare si inmultire:
Definitie: Camp prim
Un camp prim este un camp finit
, unde
este un numar prim.
Definitie: Camp finit
Un camp finit este un camp cu ordinul (numarul de elemente) finit. Aceasta mai poarta si denumirea de camp Galois, de unde si notatia
(Galois field). Ordinul unui camp finit este intotdeauna un numar prim sau o putere a unui numar prim.
este numit camp prim de ordin
, si este campul claselor modulo
, unde elementele
sunt notate
.
in
este echivalent cu
.
Exemplu: Campul finit
este alcatuit din multimea elementelor formate din
, care deasemenea satisfac urmatoarele tabele de adunare si inmultire:
Algoritmul AES este conceput sa lucreze cu bytes. Cu toate acestea, fiecare byte este interpretat ca o reprezentare a polinomului:
unde este fie 1 sau 0.
Elementele unui camp finit pot fi adunate sau inmultite. Vom descrie mai jos cateva caracteristici ale celor doua operatii, precum si cum se efectueaza ele in cadrul polinoamelor cu patru coeficienti din
, ce vor avea aplicatie in algoritmului AES.
Adunarea
Adunarea a doua elemente dintr-un camp finit este realizata “adunand” coeficientii puterilor corespunzatoare celor doua elemente din polinom. Asemanator, scaderea polinoamelor este identica.
Adunarea este realizata utilizand operatia XOR, desemnata prin simbolul ⊕. Pentru doi bytes,
si
, suma este
, unde fiecare
( i.e.
).
Spre exemplu, urmatoarele expresii sunt echivalente una cu cealalta:
(notatie polinomiala)
(notatie binara)
(notatie hexazecimala)
Produsul
In reprezentare polinomiala, multiplicarea in
(notata cu ·), corespunde cu produsul polinoamelor modulo cu un polinom ireductibil de grad 8. Mai exact, produsul a doua elemente dintr-un camp finit este definita ca multiplicare polinomiala modulo
, unde
,
sau
in notatie hexazecimala.
De exemplu, produsul dintre cele doua numere
(numerele sunt scrise in hexazecimal) va fi calculat dupa cum urmeaza, tinand cont deasemenea si de faptul ca
:
(1)
Scopul final fiind acela de a se ajunge la un polinom al carui grad este 8, pentru a putea mai apoi a fi readus la reprezentarea unui “byte”, polinomul (1) este impartit cu un polinom ireductibil de grad 8. Pentru algoritmul AES, acest polinom este:
Aplicand acest fapt pentru polinomul nostru, vom avea:
modulo =
Polinomul poate fi readus la forma “binara”:
Algoritmul Euclidian extins ne ajuta sa calculam produsul si astfel incat:
De aici,
Putem deduce de aici ca cele 256 valori posibile ale unui byte, cu operatia XOR utilizata pentru adunare impreuna cu produsul definit ca mai sus, are structura campului finit .
Polinoame cu coeficienti in
Polinoamele cu 4 termeni ai caror coeficienti fac parte din campul finit pot fi exprimate in felul urmator:
care va denota un “word” sub forma . Trebuie mentionate cateva diferente fata de cazul precedent (produsul in reprezentarea polinomiala): faptul ca acesti coeficienti ai polinomului sunt elemente ale campului finit, adica bytes, si nu biti. O alta diferentiere este aceea ca produsul dintre polinoamele cu patru termeni folosesc un alt polinom pentru reducere. Sa ilustram un exemplu, insa mai intai consideram inca un polinom cu patru coeficienti,
Asadar, dorim sa obtinem polinomul rezultat prin inmultirea celor doua polinoame:
Dupa efectuarea calculelor, va rezulta polinomul de grad 6:
unde coeficientii ai polinomului sunt:
In momentul de fata, polinomul nu poate fi adus la forma unui “word”, motiv pentru care vom reduce polinomul modulo un polinom de grad 4, restul fiind un polinom al carui grad este mai mic decat 4. Polinomul care ne va ajuta sa efectuam aceast lucru este
Produsul modular dintre si este notat prin “x” este dat de polinomul :
unde coeficientii acestuia sunt:
Cand este un polinom dat, putem rescrie ecuatia de mai sus sub forma urmatoare:
Standardul AES specifica faptul ca polinomul utilizat pentru reducere nu este ireductibil, deci el nu are neaparat si un invers. Insa algoritmul AES defineste un polinom dat cu patru termeni care are un invers:
Si inversul acestuia este:
Desi prima vedere aruncata asupra produsului dintre cele doua polinoame de mai sus ne-ar face sa afirmam ca eficienta unei astfel de abordari are mult de suferit, trebuie observat ca toate inmultirile sunt cu o constanta, deci acestea pot fi calculcate in avans utilizand algortimul Euclidian extins si apoi luate dintr-o tabela de corespondente.
1.2.2.2 Descrierea algoritmului
Algoritmul AES opereaza cu blocuri de date pe 128 biti. Blocurile utilizate in timpul executiei poarta denumirile Input, State si Output.
Dimensiunea blocurilor Input, Output si State este de 128 de biti. Aceasta este reprezentata prin Nb=4, care arata faptul ca avem 4 word-uri in blocul State (adica 4 * 32 biti).
Pentru algoritmul AES, lungimea cheii, K, este de 128, 192, sau 256 biti. Lungimea cheii este reprezentata prin Nk=4,6, sau 8 si care reflecta numarul secventelor de 32 de biti (denumite “word”). In functie de lungimea cheii, ne putem referii la cele trei variante ale AES specificate in FIPS-197: “AES-128”, “AES-192” si “AES-256”. Pentru fiecare varianta AES, Nk si Nr variaza, doar Nb fiind constant. Combinatiile permise Nb, Nk si Nr care se conformeaza standardului AES sunt descrise ulterior.
Numarul de runde, Nr, specifica de cate ori trebuie repetate operatiile descrise in algoritmul AES pe blocul State. Numarul de runde efectuat in timpul executiei este direct proportional cu lungimea cheii.
Figura 12: Aranjarea datelor in cele trei blocuri: Input, State si Output. O patratica reprezinta un byte.
In figura de mai sus, observam, la nivel de byte, aranjarea datelor in cele trei blocuri: Input, State si Output. Blocul Input are rolul de a retine urmatoarea secventa de 128 de biti care urmeaza a fi prelucrata. Trebuie precizat faptul ca la citirea de pe mediu, datele sunt stocate in blocul Input, ele sunt asezate pe coloana, si nu pe linie. Blocul State va contine initial o copie a blocului Input, cu care apoi va parcurge setul de operatii descrise de algoritmul AES si pe care le vom descrie mai jos.
Singurele combinatii Key/Block/Round care sunt conforme ale standardului AES sunt cele de ma jos:
Figura 13: Combinatiile Key/Block/Rounds permise de AES
Cele doua functii principale ale algoritmului AES, criptarea ( Cipher() ) si decriptarea ( InvCipher() ), se folosesc de patru transformari pe bytes:
substitutia bytes-ilor utilizand tabela de substitutie S-box (SubBytes())
interschimbarea randurilor tabelei State cu diferite marje (ShiftRows())
amestecarea pe coloane a datelor din blocul State (MixColumns)
adaugarea unei “Round Key” blocului State (AddRoundKey())
1.2.2.2.1 Cipher()
Functia Cipher() opereaza pe blocul State, avand ca rezultat o secventa de 128 de biti, stocata in blocul Output, care reprezinta cei 128 de biti din blocul Input criptati cu ajutorul cheii. Pseudo-codul rutinei Cipher() este cel de mai jos:
Figura 14: Cipher()
Ca parametrii ai functiei Cipher(), avem tabloul Input, Output, si un Key schedule, w[], de dimensiune Nb*(Nr+1), a carui elemente sunt fiecare 32 de biti. De precizat faptul ca Nb este constant pe tot parcursul acestei prezentari, avand valoarea 4, insa, pentru a abstractiza design-ul algoritmului si pentru a-l face mai flexibil la posibilele schimbari din viitor, s-a recurs la aceasta varianta.
Prima instructiune din cadrul rutinei Cipher() aloca o matrice de 4 linii si Nb coloane in care se vor stoca datele pentru State. Apoi se copiaza datele din tabloul Input in matricea State, astfel incat . Procesarea propriu-zisa incepe si se termina cu un apelul functiei AddRoundKey(). Dupa aceasta, se efectueaza Nr-1 cicluri in care se apeleaza functiile:
SubBytes()
ShiftRows()
MixColumns()
AddRoundKey()
In ultima runda, cu indicele Nr, sunt apelate aceleasi rutine ca si in primele Nr-1 runde, mai putin rutina MixColumns(). In final, rezultatul (care este in acest moment stocat in State) va fi copiat in tabloul Output, astfel incat .
Transformarea SubBytes()
Transformarea SubBytes() este o substitutie non-lineara, care opereaza independent pe fiecare byte al blocului State-ului, utilizand o tabela de substitutie, care poarta denumirea de S-box.
Tabela de subtitutie S-box trebuie sa fie inversabila pentru a se permite apoi decriptarea. Aceasta tabela este construita din urmatoarele doua “constructii”:
Se ia multiplicativa inversa din
Se aplica transformarea afina (peste ):
unde este bitul cu indicele al byte-ului, si este bitul cu indicele al byte-ului a carui valoare este sau .
Daca am alege reprezentarea matriceala, elementul S-box al transformarii afine poate fi exprimat sub forma:
Astfel, tabela S-box corespunzatoare criptarii este cea de mai jos:
Figura 15: Tabela S-box corespunsatoare criptarii
Reprezentarea de mai sus a tabelei S-box este in forma hexazecimala, dupa cum se poate observa si din valorile pe care iau x si y.
Spre exemplu, daca in blocul State la pozitia [2,2] gasim valoarea exprimata in hexa (sau altfel spus ) atunci pentru a gasi noua valoarea corespunzatoare vom retine valoarea obtinuta prin intersectia liniei cu indexul '6' cu cea a coloanei cu indexul 'e'. In acest fel vom obtine noua valoare pe care o va avea : . Daca aruncam o privire asupra tabelei S-box corespunzatoare criptarii, vom observa cu usurinta ca, la intersectia liniei cu indexul '9' cu cea a coloanei cu indexul 'f' vom obtine valoarea de la care am plecat, adica , ceea ce atesta faptul ca oricare ar fi byte-ul pe care l-am considera, “trecerea” acestuia prin S-box-ul destinat criptarii ne va da inversul acestuia.
Transformarea ShiftRows()
In transformarea ShiftRows(), bytes-ii din ultimele trei randuri din blocul State sunt interschimbate ciclic cu un numar diferit de offset-uri, dupa formula:
iar valoarea shift(r,Nb) depinde de numarul de linie r, dupa cum urmeaza:
Trebuie mantionat faptul ca prima linie ramane neschimbata!
Figura 16: Transformarea ShiftRows()
Transformarea MixColumns()
Transformarea MixColumns() opereaza pe blocul State, coloana cu coloana, tratand fiecare coloana ca un polinom cu patru termeni, asa cum a fost descris la sectiunea “Preliminarii matematice”. Coloanele sunt considerate ca polinoame peste si inmultite modulo cu un polinom . Aceasta poate fi rescrisa, asa cum a fost descris in sectiunea precedenta, ca o multiplicare intre matrici:
Ca rezultat al acestei multiplicari, cei patru bytes dintr-o coloana sunt inlocuiti de urmatoarea secventa de bytes:
Mai jos este ilustrata transformarea MixColumns():
Figura 17: Transformarea MixColumns()
Transformarea AddRoundKey()
In transformarea AddRoundKey, un “Round Key” este adaugat blocului State printr-o operatie simpla XOR. Fiecare Round Key este alcatuit din 4 word-uri dintr-un “key schedule” w[] care este generat la inceputul procesarii de algoritmul:
Figura 18: Algoritmul de expansiune al cheii
Formula dupa care Round Key-urile sunt adaugate coloanelor din State este:
Aceasta ar putea fi ilustrata in felul urmator:
Figura 19: AddRoundKey
Decriptarea se va face utilizand alte patru functii, cu prefixul Inv, care vor fi exact inversul celor prezentate pana acum.
1.3 Algoritmi criptografici asimetrici
1.3.1 RSA
1.3.1.1 Informatii preliminarii
Algoritmul asimetric RSA a fost dezvoltat de Ronald L. Rivest, Adi Shamir, si Leonard M. Adleman la MIT in anul 1977. Algoritmul este patentat inca din 1977, acesta expirand in anul 2000.
Spre deosebire de celelalte criptosisteme bazate pe cheie publica, RSA incorporeaza atat un sistem de criptare asimetric cat si un sistem de semnare digitala. Asta inseamna ca acelasi set de algoritmi pot fi utilizati pentru e cripta si a decripta mesajele, cat si pentru a semna mesajele digitale si respectiv a verifica semnaturile.
Functia oferita depinde intr-un final de cheia criptografica utilizata. Daca cheia publica este utilizata pentru a cripta un mesaj, atunci sistemul la care ne referim este cu cheie publica. In acest caz, cheia privata trebuie utilizata pentru a decripta cifrul (mesajul criptat). Daca o cheie privata este utilizata pentru a cripta un mesaj, atunci criptosistemul RSA este un sistem bazat pe semnatura digitala (Digital Signature Sistem).
1.3.1.2 Descriere algoritm
Algoritmul de generare a cheii
Inainte de a putea utiliza criptarea asimetrica RSA, trebuie executat algoritmul Generate pentru a genera o pereche de chei. Prin natura lui, algoritmul RSA este probabilistic: are ca intrare lungimea pe biti a modulus-ului RSA, si genereaza ca iesire o pereche de chei. Mai exact, sunt doi pasi:
Initial se selecteaza aleator doua numere prime p si q a caror dimensiune este aproximativ aceeasi, si se calculeaza modulus-ul RSA n=p*q. Tinand cont de puterea de calcul actuala, se recomanda ca marimea modulus-ului RSA sa fie de cel putin 1024 sau chiar 2024 biti. Asta inseamna ca fiecare din numelere prime p si q trebuie sa fie de cel putin 512 sau 1024 de biti!
Urmatorul pas il consta selectarea aleatoare a unui intreg in intervalul cu iar apoi se compune un alt intreg , . Pentru aceasta se poate folosi algoritmul euclidian extins.
Iesirea algoritmului Generate este o cheie publica compusa din perechea (n,e) si o cheie privata corespunzatoare acesteia, compusa din perechea (n,d). Cheia publica este in principal utilizata la criptare, iar cheia privata la decriptare. In unele situatii e este numit exponentul public de criptare, iar d este numit exponentul privat de decriptare.
Sa consideram un exemplu care sa ilustreze ceea ce sa intampla in functia Generate din cadrul algoritmului RSA:
mai intai, se selecteaza p=11 si q=23, iar apoi se face calculul n=p*q=11*23=253 si Ø(253) = 10*22 = 220.
apoi se selecteaza e=3 si se utilizeaza algoritmul extins al lui Euclid pentru a calcula pe d=147 modulo 220 (atentie: 3*147 = 441 = 1 (mod 220)), si de aici d=147 reprezinta inversul elementului e=3 modulo 220).
Asta inseamna ca perechea (253,3) reprezinta cheia publica si perechea (253, 147) reprezinta cheia privata.
Algoritmul de criptare
Algoritmul RSA pentru criptare este deterministic. Avem la intrare o cheie publica (n,e) si un mesaj text si ca iesire avem textul cifrat
Pentru a calcula c, algoritmul RSA pentru criptare trebuie sa utilizeze un algoritm modular exponential (cum ar fi square-and-multiply).
Merita precizat faptul ca criptarea RSA nu dispune nici de autentificarea sursei datelor, si nici de integritatea datelor. Pentru a dispune de aceste servicii, trebuie utilizate mecanisme complementare.
Algoritmul de decriptare
La fel ca si in cazul algoritmului de criptare, algoritmul de decriptare este deterministic. Ca intrare avem cheia privata (n,d) si cifrul c, si genereaza ca output mesajul decriptat corespunzator:
Ca si in cazul criptarii RSA, decriptarea trebuie realizata cu un algoritm modular exponential care sa ne ajute sa calculam mesajul in clar (decriptat) m.
2 Securitatea retelelor
2.1 Introducere
Odata cu aparitia si dezvoltarea fara precedent a retelelor de calculatoare a crescut dependenta noastra fata de ele. Astazi activitatile unor organizatii sunt de neconceput fara retele. Din aceasta cauza, securitatea retelelor de calculatoarelor trebuie sa fie prioritatea numarul unu pentru cei care se ocupa de aceasta.
O retea de calculatoare este in general o structura deschisa la care sunt conectate fizic un numar mare de echipamente si de aceea numarul de persoane care au posibilitatea de a accesa resursele retelei este mare si greu de controlat.
2.2 Cerintele securitatii datelor in contextul securitatii retelelor
Motivul principal pentru care calculatoarele sunt legate in retele este acela de a comunica la distanta, in scopul de a transmite informatii. Dat fiind cantitatea (volumul) anumitor informatii si caracterul lor confidential, securitatea informatiilor este o cerinta necesara (in unele cazuri este un imperativ, alteori, din pacate, nu este nici macar o cerinta). Pentru a indeplini acest rol, retelele de calculatoare trebuie sa raspunda la patru cerinte fundamentale privind securitatea informatiilor ce sunt interchimbate:
Asigurarea urmaririi activitatilor in sistem (accountability)
Astfel incat sa se poata afla cine a facut o anumita activitate in sistem pentru aputea fi eventual tras la raspundere (accountability). Aceasta presupune un sistem de autentificare pentru identificarea utilizatorilor (authentification system) si un jurnal al activitatilor care au relevanta pentru securitatea datelor (audit trail).
Disponibilitatea (availability), este cerinta ca informatiile si/sau serviciile sa fie disponibile utilizatorilor autorizati la cerere.
Confidentialitatea, este cerinta ca numai utilizatorii autorizati sa aiba acces la informatii.
Integritatea. Are ca scop protejarea datelor si resurselor de modificari neautorizate.
Vulnerabilitatea retelelor se manifesta in doua moduri:
posibilitatea modificarii sau distrugerii informatiei – adica atacul la integritatea ei fizica
posibilitatea obtinerii neautorizate de informatii
Integritatea resurselor unei retele este constransa de doua cerinte:
toate resursele retelei sunt intotdeauna disponibile utilizatorilor indiferent de defectele de functionare hard sau soft sau de incercarile neautorizate de sustragere de informatii
toate resursele retelei sunt intotdeauna disponibile indiferent de incercarile care pot aparea de modificare neautorizata a informatiilor.
Securitatea resurselor unei retele inseamna ca toate operatiile cu aceste resurse se fac sub controlul unor reguli bine stabilite.
Definim o retea sigura ca acea retea ale carei componente furnizeaza servicii de calitate si corecte. Pentru aceasta, trebuie satisfacute urmatoarele:
Autentificarea
Aceasta reprezinta posibilitatea de a stabili persoana, sau mai bine formulat identitatea persoanei cu care comunicam
Confidentialitatea
Aceasta se refera la prevenirea accesului la date de catre utilizatori neautorizati.
Controlul integritatii
Acesta se refera la prevenirea modificarii mesajelor
Nonrepudierea
Reprezinta cerinta care asigura transmitatorul unei informatii cu dovada livrarii informatiei si receptorul informatiei cu dovada identitatii transmitatorului, astfel incat nici una din parti sa nu poata nega ulterior trimiterea sau receptionarea informatiei. Aceasta conditie e imperativa in cazul tranzactiilor efectuate pe Internet.
2.3 Metode de autentificare
2.3.1 Nume utilizator si parola
In general, mecanismul de autentificare prin nume utilizator si parola sunt usor de configurat si implementat. Cele mai multe dintre sistemele de operare au un anume tip de autentificare in aceasta modalitate. Se mai pot seta si alte atribute pentru aceste tipuri de conturi, precum:
lungimea parolei
expirarea parolei
calitatea parolei (cat de bine este ea aleasa, daca este alcatuita din metacaractere, din mai mult de un anumit numar de caractere – de regula 6-8, etc.)
timpul de expirare al contului
metoda de stocare (utilizand diferiti algoritmi de hashing)
informatii despre utilizatorul contului (nume, date de contact -atat fizice cat si logice) si altele.
Este cea mai raspandita forma de autentificare, atat pe Internet cat si in mediul “local”.
Avantajele acestei forme de autentificare sunt:
Usor de implementat si de administrat
Costuri reduse
Nu trebuie nici o pregatire prealabila ampla
Dezavantajele ar fi:
susceptibilitatea la “directory atacks”
securitatea scazuta, mai ales pe Internet, unde majoritatea combinatiilor utilizator/parola sunt trimise necriptate
managementul greoi atunci cand sunt mai multe parole pentru acelasi utilizator, aceasta problema fiind rezolvata de software-ul dedicat
2.3.2 Certificate (X509.3)
Acestea pot fi utilizate de catre utilizatorii finali, pentru a-si dovedi identitatea. Aceasta tehnologie este putin implementata la momentul actual, insa jucatorii majori de pe piata au inceput sa ofere suport pentru acest tip de autentificare. Si unele browser-e ofera suport pentru certificate X509.3. Unele companii utilizeaza aceste certificate chiar si in cadrul retelelor interne.
Avantaje:
abilitatea de a cripta datele si de a le semna digital
suportat de unele browser-e populare si clienti e-mail
legarea intre certificat si utilizator
greu de efectuat un “directory attack”
abilitatea de a cripta date/email si de a semna digital cu un singur certificat, desi se recomanda folosirea de certificate cat mai multe (diferite, desigur)
Dezavantaje:
costurile pot fi moderate, insa mult mai mari decat pentru utilizarea mecanismului bazat pe nume utilizator/parola
trebuie efectuata o anume pregatire/adaptare a utilizatorilor cu noua tehnologie
de regula necesita o structura de suport (suport tehnic pentru utilizatori)
neexistenta unei adoptari masive, acest standard fiind adoptat relativ recent
2.3.3 Tehnici biometrice
Un sistem de autentificare bazat pe tehnicile biometrice, care utilizeaza sisteme hard precum scaner-ele de amprente sau recunoasterea retinei. Acest tip de device asigura o securitate sporita pentru mediile cu risc foarte mare care necisata limitarea si controlul sistemelor senzitive. Acest tip de sisteme nu permit scenarii in care un utilizator poate transmite unui alt utilizator numele de utilizator/parola pentru a-i utiliza calculatorul.
Avantaje:
persoana este chiar autentificarea – este relativ greu sa “trisezi”
“directory atacks” sunt aproape imposibile
ofera unele mecanisme pentru “single sign-on”
Dezavantaje:
nu multi vendori suporta aceste tehnologii
foarte putine exemple de implementari ale acestor tehnologii
costurile sunt foarte ridicate, de regula aceste tehnologii sunt utilizate in mediul de business, in special corporatii, precum si in mediile guvernamentale
2.3.4 Smart cards
Sunt mici card-uri de plastic care contin un cip integrat. Se pot stoca diverse informatii pe aceste cip-uri, care pot fi transferate printr-o interfata electronica ce se contecteaza la calculator. Accesul este controlat via un PIN sau o parola.
Avantaje:
efectuarea legaturii dintre persoana si card
pot fi stocate diverse informatii
daca cheile sunt stocate, e usor sa criptezi date si e-mail
usor de utilizat de catre oricine
solutia ideala de roaming
Dezavantaje:
costuri foarte ridicate, desi acestea sunt in scadere
totusi usor de dat card-ul si PIN-ul altei persoane
necesita un sistem de suport si poate si hardware suplimentar pentru fiecare PC
3 Prezentarea aplicatiei
3.1 Descrierea cerintelor aplicatiei
In prima parte a lucrarii au fost prezentate cateva dintre cei mai utilizati algoritmi la ora actuala, trecand apoi la cateva aspecte ale securitatii retelelor.
In aceasta sectiune vom descrie caror categorii de utilizatori le este destinata aplicatia, precum si constrangerile/cerintele care ne sunt impuse.
In partea “practica” a lucrarii, am propus spre implementare cativa algoritmi criptografici in limbajul Java, integral implementati utilizand standardele pentru fiecare din acestea.
Asta inseamna ca munca dezvoltatorului de software este in primul rand studierea si intelegerea conceptelor descrise, precum cele matematice, trecand apoi la studierea algoritmului, apoi la o faza de design al acestuia pentru a incheia cu implementarea propriu-zisa in limbajul Java.
Scopurile acestei aplicatii sunt:
demonstrarea intelegerii algoritmilor propusi spre implementare
implementa algoritmilor alesi in limbajul Java, cu accent pe performanta (viteza)
oferirea unei interfete grafice minimale care sa permita folosirea si testarea algoritmilor implementati
Printre algoritmii propusi spre implementare, se afla urmatorii:
Message Digest 5 (MD5)
Secure Hash Algorithm 1 (SHA-1)
Advanced Encryption Standard cu chei de dimensiuni pe 128, 192 si 256 de biti (AES-128, AES-192 si AES-256)
Rivest Shamir Adleman (RSA)
Aplicatia se doreste a avea o interfata utilizator usor de utilizat, pentru a facilita o operare usoara si simpla din punctul de vedere al utilizatorului. Interfata utilizator trebuie sa ofere o metoda facila si ajutatoare de a lucra cu principalele functionalitati ale aplicatiei.
Este evident ca, in cazul in care ar fi utilizata in lumea reala, aceasta aplicatie s-ar adresa mai multor categorii de utilizatori, precum:
Utilizatorii simpli, care nu au cunostinte tehnice legate de criptografia datelor, si a caror dorinta este aceea de a cripta/decripta si/sau a verifica sume de control (MD5/SHA-1)
Utilizatorii avansati, care au cunostinta de anumite informati generale de criptografie si care pot utiliza aplicatia cu o mai mare “responsabilitate” decat utilizatorii simpli
Utilizatorii profesionisti, includ acea categorie alcatuita din persoanele care cunosc pana la un anumit nivel chiar si modul de procesare al datelor in cazul unui anumit algoritm; acestia se situeaza, din punct de vedere al cunostintelor de criptografie, deasupra utilizatorilor obisnuiti
Dezvoltatorii software, al caror interes principal este de a analiza din diverse unghiuri si puncte de vedere anumiti algoritmi sau anumite rezultate de iesire ale aplicatiei in scopul implementarii sau testarii de noi algoritmi. Spre exemplu, ea poate fi utilizata in scopul testarii aplicatiilor care folosesc algoritmi criptografici implementati de catre acestia, avand optiunea de a compara “iesirea” (output-ul) din aceasta aplicatie cu “iesirea” din aplicatia lor.
Criptografi/criptanalisti, al caror scop este de a analiza corectitudinea implementarii algoritmilor din aceasta aplicatie, precum si metode prin care se pot exploata diverse variabile legata de tipul criptarii/decriptarii, dimensiunea cheilor, tipul arhitecturii/procesorului pe care ruleaza aplicatia, platforma pe care a fost creata/compilata aceasta, precum si sistemul de operare pe care ea lucreaza.
Pe langa aceste considerente legate de diferitele tipuri de “utilizatori” carora ne adresam, trebuie precizate prioritatile tehnice ale aplicatiei. In functie de acestea, urmatorul pas va fi stabilirea resurselor precum si cea a utlizarii acestora in scopul atingerii obiectivelor propuse. In acest caz, fiind un singur dezvoltator software, acest considerent are o si mai mare importanta, deoarece lipsa unui plan clar si precis nu va realiza aplicatia dorita, in timpul si cu resursele impuse.
Mai exact, in acest caz particular, prioritatile tehnice ale aplicatiei care se doreste a fi implementata sunt, in ordine descrescatoare din punctul de vedere al importantei:
Securitatea
Securitatea este prima si cea mai importanta dintre “caracteristicile” tehnice ale aplicatiei de fata. Prin securitate, in acest context, ne referim la toate tipurile de mecanisme/proceduri pe care limbajul Java (mai precis, Java Virtual Machine – JVM – masina virtuala Java) le pune la dispozitia dezvoltatorilor software, fara ca acestia sa recurga la metode “low-level”, asa cum o fac cei care programeaza in limbajul “C”. Desigur, cand vorbim despre securitate, in cazul unei platforme bazate pe o masina virtuala, discutam despre trei arome ale securitatii:
securitatea masinii virtuale
securitatea aplicatiei
securitatea la nivel de retea
Ultima dintre ele, securitatea la nivel de retea, in cazul de fata nu se regaseste, deoarece aplicatia nu foloseste nici o resursa a vreo unei retele, datele de intrare fiind obtinute de pe discul local al utilizatorului. Aplicatia fiind una strict legata de procesarea unor date specificate de utilizator, nu se impun masuri suplimentare, precum autentificarea/autorizarea utilizatorului.
Securitatea aplicatiei se refera la modul in care aplicatia acceseaza/utilizeaza unele resurse puse la dispozitie de sistem. Din acest punct de vedere nu trebuie sa ne facem prea multe calcule, deoarece aplicatia fiind orientata doar catre efectuarea unor calcule matematice, ea nu presupune munca suplimentara pe partea de management a utilizatorilor, ca in cazul unei aplicatii multi-utilizator.
In final, securitatea masinii virtuale este cea care ne fereste de unele din cele mai periculoase si in acelasi timp neplacute vulnerabilitati software: acelea legate de coruperea memoriei, prin diversele arome pe care aceasta le poarta (“buffer overflow”, “stack overflow”, etc.) precum si a unor vulnerabilitati generate din cauza design-ului minimal acordat sistemului de verificate a tipurilor “type system”.
O astfel de implementare, in care securitatea este cel mai important factor, este cautata in general de catre organizatiile/persoanele pentru care imaginea publica, interesele investitorilor si, nu in ultimul rand, securitatea datelor, nu sunt doar niste cuvinte scrise pe site-urile oficiale ale acestora, ci sunt procese riguros urmate si verificate, in toate fazele de dezvoltare (“requirements, analisys, design, implementation, support”).
Multe organizatii, indiferent de marime, in efortul lor de a reduce drastic costurile, atat de proiectare cat si de intretinere software, “uita” si de cea mai importanta veriga a intregului lant – securitatea, veriga care confera produsului final, in cele din urma, calitate.
In cazul de fata, pentru a avea cel mai mare grade de securitate (pentru ca securitatea deplina este doar un ideal) vom implementa pe platforma Java.
Viteza
Al doilea factor pe care aplicatia trebuie sa-l respecte este viteza. Deoarece uneori dorim sa aplicam diferiti algoritmi pe cantitati (uneori) mari de date, viteza are si ea un rol important. Pentru a indeplini si aceasta cerinta, va trebui limitata folosirea obiectelor atunci cand pasam date. Mai exact, sa utilizam tipurile de baza, precum byte, int, etc, si nu Byte, Int, etc. Alti factori care influenteaza viteza sunt: viteza procesorului pe care ruleaza aplicatia, memoria RAM
Resursele utilizate de aplicatie sistemului (fie ele legate de timp sau de costuri)
Cerintele pentru resursele utilizate de aplicatie se incadreaza in cele obisnuite. Pentru a atinge o performanta marita, sistemul pe care ruleaza aplicatia trebuie sa posede multa memorie RAM, pentru a facilita citirea/scrierea rapida a datelor.
Platforma pe care se dezvolta aplicatia este Java, iar pachetului software este Java Development Kit, utilizand cea mai recenta aparitie (la data de 20 Mai 2006), versiunea 1.5.0_07.
3.2 Descrierea aplicatiei
In aceasta sectiune vom descrie aplicatia care a fost implementata. Aceasta sectiune poate fi considerata si ca un “Ghid al utilizatorului”, deoarece explicarea pasilor va putea fi executata ce usurinta de catre orice utilizator, indiferent de pregatirea acestuia in materie de operare a calculatorului, ea fiind insotita de multe exemplificari grafice, tocmai pentru a ajuta utilizatorul final sa instaleze componentele necesare rularii aplicatiei.
Vom incepe cu exemplificarea instalarii masinii virtuale Java (JRE), fara de care rularea aplicatiei nu ar fi posibila, iar apoi vom continua cu instalarea si prezentarea aplicatiei.
3.2.1 Instalarea JRE si a aplicatiei
Inainte de a utiliza aplicatia, utilizatorul trebuie sa se asigure ca are versiunea corespunzatoare a masinii virtuale Java. Daca se doreste doar rularea de aplicatii Java si nu se doreste si compilarea acestora, este necesara instalarea doar a masinii virtuale Java. Daca se doreste si compilarea aplicatiilor Java, atunci este necesara si instalarea kit-ului pentru dezvoltator Java, Java Developer Kit.
Pentru a verifica daca exista deja instalata pe masina Dvs. JRE 1.5, mergeti in Start->Run si tastati “cmd” apoi <Enter>, apoi tastati in terminal urmatoarea comanda java -version:
Figura 20: Testarea existentei JRE-ului pe o masina Linux
Daca la rularea comenzii ati primit informatii asemanatoare cu cele de mai sus, atunci sariti peste instalarea JRE si continuati cu instalarea aplicatiei.
Pasii pe care trebuie sa-i urmeze utlizatorul pentru a instala masina virtuala Java (JRE), versiunea 1.5.0_07, sunt urmatorii:
vizitati adresa web www.java.sun.com cu ajutorul browser-ului preferat (Mozilla Firefox, Opera, Internet Explorer) si apoi selectati din partea lateral dreapta-sus (acolo unde este indicat si de catre sageata rosie), “J2SE”:
Figura 21: Selectati J2SE
apoi va trebui sa aleageti platforma Java, operatie efectuata prin selectarea J2SE:
Figura 22: Selectarea platformei Java
dupa aceasta, trebuie selectata versiunea masinii virtuale java, “JRE 5.0 update 7”:
Figura 23: Selectarea versiunii JRE
urmatorul pas implica selectarea optiunii “Accept”, care solicita aprobarea licentei de catre utilizator, dupa care se va selecta sistemul de operare al utilizatorului si se va astepta pana se va descarca pachetul de instalare al masinii virtuale Java (se va descrie procedura doar pentru sistemul de operare Windows, urmand ca o versiune ulterioara a aplicatiei sa ofere o descriere detaliata a instalarii masinii virtuale Java si pentru alte sisteme de operare, precum Linux, Mac OS, etc.):
Figura 24: Acceptarea Licentei si selectarea pachetului de instalare pentru sistemul de operare corespunzator
dupa ce s-a terminat descarcarea kit-ului de instalare, se instaleaza JRE (desigur, avand drepturi de administrator); instalarea acestuia decurge usor, mesajele ajutatoare fiind prezente pe tot parcursul procesului de instalare. Pentru a testa daca JRE este instalat, tastati intr-un terminat (Start->Run si tastati “cmd” apoi <Enter>) comanda java -version si ar trebui sa va apara versiunea JRE-ului.
Dupa ce aveti deja instalat JRE-ul, pentru a “instala” aplicatia, efectuati simpla operatie de a copia programul de pe CD-ul pe care este stocata aplicatia pe hard-disk-ul Dvs., sa spunem in directorul C:\Program Files\Algoritmi_criptografici.
Pentru a usura pornirea aplicatiei, este recomandat sa efectuati o scurtatura pe “Desktop”, facand click dreapta pe arhiva algoritmi_criptografici.jar apoi click pe “Send to…” si iarasi click pe “Desktop as Shortcut”!
3.2.2 Utilizarea aplicatiei
Aceasta sectiune descrie modul in care se poate utiliza aplicatia, din punctul de vedere (sau prin prisma) utilizatorului. Sunt prezentate in detaliu operatiile care pot fi efectuate cu aceasta aplicatie, fiecare operatie fiind insotita de imagini, pentru a ajuta utilizatorul in intelegerea si efectuarea acestora.
3.2.2.1 Pornirea si oprirea aplicatiei
Pentru a porni aplicatia, trebuie sa efectuati clic de doua ori pe arhiva algoritmi_criptografici.jar sau pe scurtatura aplicatiei de pe desktop.
Dupa ce aplicatia a pornit, trebuie sa va apara in zona text “Status general” din cadrul ferestrei principale mesajul “Aici_data_si_ora_de_azi – Aplicatia este pornita”, ceea ce denota faptul ca aplicatia a pornit.
Figura 25: Aplicatia imediat dupa lansarea in executie
Pentru a inchide aplicatia, se pot utiliza doua variante: fie apasand butonul “Close” reprezentat de patratelul cu un “x” in mijloc din dreapta-sus a ferestrei principale, fie selectand din meniul aplicatiei “File->Exit”:
Figura 26: Inchiderea aplicatiei
Cand se opteaza pentreu inchiderea aplicatiei, toate operatiile care sunt in curs de desfasurare, precum generarea unei sume de control, sunt intrerupte fara a avertiza utilizatorul.
3.2.2.2 Prezentarea generala a aplicatiei
Aplicatia este alcatuita din “componente” cu care utilizatorul poate interactiona, fie prin introducerea sau extragerea de date:
Prima Componenta permite minimizarea precum si inchiderea aplicatiei
A doua componenta o constituie meniu aplicatiei, care, dupa cum se poate observa este utilizat doar pentru a efectua doua operatii, si anume:
iesirea din aplicatie, selectand File->Exit:
Figura 27: Meniul File->Exit
afisarea datelor informative despre aplicatie, selectand Help->About
Figura 28: Meniul Help->About
A treia componenta, si in acelasi timp si cea mai importanta, reprezentata printr-un sir de 4 sub-ferestre, este cea care ofera acces la operatiile caracteristice acestei aplicatii. Concentrand functionalitatea doar in aceste sub-ferestre, obtinem o interfata utilizator mult mai usor de utilizat decat atunci cand recurgem la inglobarea anumitor setari in meniul aplicatiei (componenta 2 de mai sus).
Figura 29: Cele patru sub-ferestre ale aplicatiei
Cele patru sub-ferestre ne permit efectuarea urmatoarelor operatii (toate acestea sunt efectuate pe fisiere):
a) criptarea/decriptarea utilizand algoritmul simetric AES, cu chei de dimensiuni 128, 192 si 256
b) criptarea/decriptarea folosind RSA
c) calcularea sumei de control MD5
d) calcularea sumei de control SHA-1
In toate cele patru sub-ferestre avem dou butoane: “Start” si “Stop”, care desigur, declanseaza inceperea procesarii respectiv oprirea acesteia. In momentul in care utilizatorul apasa butonul start, in sub-fereastra respectiva se poate observa o bara de progres (progress bar), care ne informeaza despre stadiul procesarii. Aceasta bara de progres este prezenta in fiecare din aceste patru subferestre, deci daca pornim generarea unei sume de control MD5 pentru un fisier mai mare, sa spune de 500MB, si mai pornim generarea unei sume SHA-1, bara de progres anexata ferestrei MD5 va fi diferita de cea a ferestrei SHA-1.
Toate aceste operatii se desfasoara pe un alt fir de executie, astfel incat este posibila efectuarea simultana a mai multor operatii (spre exemplu, putem cripta un fisier de dimensiuni mari si, in acelasi timp, putem afla suma de control a unui alt fisier).
Ultima dintre componente ne informeaza despre status-ul aplicatiei, cu evenimente precum ar fi:
pornirea aplicatiei
selectarea unui fisier pe care urmeaza sa se efectueze una din cele patru operatii
derularea procesarii, operatie declansata prin apasarea pe butonul “Start”
intreruperea imediata a procesarii de catre utilizator, operatie declansata prin apasarea butonului “Stop”
terminarea procesarii pentru fiecare din cele patru operatii, eveniment semnalat de catre aplicatie
Figura 30: Statusul aplicatiei
3.2.2.3 Generarea unei sume de control SHA-1
Pentru a genera o suma de control SHA-1, se vor efectua urmatorii pasi:
Se selecteaza sub-fereastra corespunzatoare algoritmului “SHA-1”:
Figura 31: Generarea unei sume de control SHA-1
Se selecteaza fisierul caruia se doreste a se calcula suma de control SHA-1, apasand butonul “Rasfoieste”
Dupa selectarea fisierului, se initiaza procesul de calculare prin apasarea butonului “Start”. In cazul in care se doreste intreruperea procesarii, se apasa butonul “Stop”.
Se asteapta pana ce bara de progres dispare si in componenta “Statusul aplicatiei” este anuntata terminarea procesarii. Rezultatul, insemnand suma de control, se afla in casuta text cu numele “Suma decontrol SHA-1”
3.2.2.4 Generarea unei sume de control MD5
Pentru generarea unei sume de control MD5, se vor efectua urmatorii pasi:
1. Se selecteaza sub-fereastra corespunzatoare algoritmului “MD5”:
Figura 32: Generarea unei sume de control MD5
2. Se selecteaza fisierul caruia se doreste a se calcula suma de control MD5, apasand butonul “Rasfoieste”:
Figura 33: Selectarea fisierului
3. Dupa selectarea fisierului, se initiaza procesul de calculare prin apasarea butonului “Start”. In cazul in care se doreste intreruperea procesarii, se apasa butonul “Stop”:
Figura 34: Inceperea procesarii
4. Se asteapta pana ce bara de progres dispare si in componenta “Statusul aplicatiei” este anuntata terminarea procesarii. Rezultatul, insemnand suma de control, se afla in casuta text cu numele “Suma de control MD5”:
Figura 35: Finalizarea procesarii
3.2.2.5 Criptarea si decriptarea utilizand AES
Pentru criptarea sau decriptarea unui fisier utilizand AES, se vor efectua urmatorii pasi:
Se selecteaza sub-fereastra corespunzatoare algoritmului “AES”
Figura 36: Panoul AES
Se selecteaza fisierul de intrare pe care se doreste a se efectua operatia de criptare sau decriptare, apasand butonul “Rasfoieste”
Se selecteaza fisierul ce contine cheia
Se selecteaza modul de operare (criptare sau decriptare) pentru algoritmul AES
Dupa selectarea fisierului, se initiaza procesul de calculare prin apasarea butonului “Start”. In cazul in care se doreste intreruperea procesarii, se apasa butonul “Stop”
Se asteapta pana ce bara de progres dispare si in componenta “Statusul aplicatiei” este anuntata terminarea procesarii. Rezultatul, insemnand fisierul criptat sau decriptat, are numele compus din fisierului de intrare si ora la care a inceput criptarea/decriptarea. Spre exemplu, daca fisierul de intrare se numeste “chitante.doc” si se efectueaza criptarea, atunci fisierul de iesire se va numii “chitante.doc.10.32” daca ora la care s-a inceput criptarea acestuia este “10:32”
3.2.2.6 Criptarea si decriptarea utilizand RSA
Pentru criptarea sau decriptarea unui fisier utilizand RSA, se vor efectua urmatorii pasi:
Se selecteaza sub-fereastra corespunzatoare algoritmului “RSA”
Figura 37: Panoul RSA
Se selecteaza fisierul de intrare pe care se doreste a se efectua operatia de criptare sau decriptare, apasand butonul “Rasfoieste”
Se selecteaza fisierul ce contine cheia
Se selecteaza modul de operare (criptare sau decriptare) pentru algoritmul RSA
Dupa selectarea fisierului, se initiaza procesul de calculare prin apasarea butonului “Start”. In cazul in care se doreste intreruperea procesarii, se apasa butonul “Stop”
Se asteapta pana ce bara de progres dispare si in componenta “Statusul aplicatiei” este anuntata terminarea procesarii. Rezultatul, insemnand fisierul criptat sau decriptat, are numele compus din fisierului de intrare si ora la care a inceput criptarea/decriptarea. Spre exemplu, daca fisierul de intrare se numeste “chitante.doc” si se efectueaza criptarea, atunci fisierul de iesire se va numii “chitante.doc.11.25” daca ora la care s-a inceput criptarea acestuia este “11:25”
3.3 Masuratori ale performantei
Testele au fost efectuate pe un calculator cu urmatoarele caracteristici:
procesor: AMD Barton 2500+, cu viteza procesorului de 1833MHz
memorie: 512 DDR @ 333Mhz
hard-disk: S-ATA Maxtor, model 6Y120MO, capacitate 120GB
Sistemele de operare pe care au fost efectuate calculele sunt:
Slackware Linux 10.2, cu kernel 2.6.16, cu toate update-urile la zi
Windows XP, Service Pack 2, cu toate update-urile la zi
Si, nu in ultimul rand, Java Runtime Environment 1.5.0_07.
Performantele obtinute de catre aceasta aplicatie au fost comparate cu cele obtinute de catre implementarile deja existente in “C” sub Linux, precum si cu cele obtinute de Java Cryptography Extension (JCE).
Fara indoiala ca performanta obtinuta in cazul implementarii in C este mult mai buna, insa intrebarile care se pune sunt urmatoarele:
Care este diferenta de viteza dintre implementarea in C si cea Java? Cum poate fi aceasta imbunatatita?
In functie de care situatie este justificata folosirea in Java fata de cea in C?
Rezultatele testarii vor fi prezentate in cadrul sustinerii lucrarii.
3.4 Viitoare imbunatatiri
Ca viitoare imbunatatiri ce pot fi aduse acestei aplicatii am putea enumera:
Adaugarea de noi facilitati, precum largirea numarului de algoritmi suportati
Posibilitatea de a alege modul de operare in cazul cifrurilor tip “bloc”:
Chipher-block chaining (CBC)
Propagating Chipher-block chaining (PCBC)
Chiper Feedback (CFB)
Output Feedback (OFB)
Counter (CTR)
Adaptare si integrare cu Java Cryptography Architecture, pentru ca implementarea API-urilor sa poata fi utilizata intr-un mod standardizat
Adaugarea posibilitatii de a cripta mai multe fisiere intr-unul singur.
Crearea posibilitatii de a utiliza aplicatia in mod “server”, care in acest caz ar “asculta” cererile de conexiune pe un anumit port. Acest lucru ar implica crearea unui mic protocol sau utilizarea unor “servicii” deja implementate gen Service Oriented Architecture (SOA) si integrarea cu un serviciu de directoare, gen Lightweight Directory Access Protocol (LDAP)
Adaugarea unei interfete grafice pentru configurarea aplicatiei
Design-ul si implementarea tuturor configuratiilor in format Extensible Markup Language (XML)
Adaugarea facilitatii de a putea stoca datele de iesire intr-o baza de date, sau la distanta printr-un serviciu gen FTP/SSH sau e-mail.
4 Bibliografie
Complexity and Cryptography – An Introduction
Autori: John Talbot, Dominic Welsh
Cambridge University Press, 2006
Information Security Principles and Practice
Autor: Mark Stamp
John Wiley & Sons, 2006
Network Security Technologies, 2nd ed
Autori: Kwok T. Fung
Auerbach Publications, 2005
Computer Security: Art and Science
Autor: Matt Bishop
Addison Wesley, 2002
Applied Cryptography, 2nd ed
Autor: Bruce Schneier
John Wiley & Sons, 1996
Internet Security: A Jumpstart for System Administrators and IT Managers
Autori: Tim Speed, Juanita Ellis
Digitall Press, 2003
http://en.wikipedia.org/wiki/Main_Page (Modurile de operare ale cifrurilor bloc, unele informatii despre AES)
http://mathworld.wolfram.com (Unele definitii/proprietati utilizate in AES)
4 Bibliografie
Complexity and Cryptography – An Introduction
Autori: John Talbot, Dominic Welsh
Cambridge University Press, 2006
Information Security Principles and Practice
Autor: Mark Stamp
John Wiley & Sons, 2006
Network Security Technologies, 2nd ed
Autori: Kwok T. Fung
Auerbach Publications, 2005
Computer Security: Art and Science
Autor: Matt Bishop
Addison Wesley, 2002
Applied Cryptography, 2nd ed
Autor: Bruce Schneier
John Wiley & Sons, 1996
Internet Security: A Jumpstart for System Administrators and IT Managers
Autori: Tim Speed, Juanita Ellis
Digitall Press, 2003
http://en.wikipedia.org/wiki/Main_Page (Modurile de operare ale cifrurilor bloc, unele informatii despre AES)
http://mathworld.wolfram.com (Unele definitii/proprietati utilizate in AES)
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Securitatea Retelelor de Calculatoare Si Criptografie (ID: 150420)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
