Aplicatie de Autentificare Bazata pe Token Tokenapp
Cuprins
Declarație de onestitate academică 5
Introducere 11
Capitolul 1. Criptografia 12
1.1. Cifruri de tip block 13
1.1.1. Electronic Codeblock (ECB) 13
1.1.2. Cipher Block Chaining (CBC) 13
1.1.3. Cipher Feedback (CFB) 13
1.1.4. Output Feedback (OFB) 14
1.2. DES ( Data Ecryption Standard) 14
1.3. AES – Advanced Encryption Standard 15
1.4. PKC – Public-key Cryptography 15
1.5. Algoritmul RSA 16
1.6. PPK Hashing 17
Capitolul 2. Funcții hash MD4, MD5, SHA-1 18
2.1. Funcția hash MD5 18
2.1.1. Securitatea funcției MD5 20
2.2. Funcția hash SHA-1 20
2.2.1. SHA-0 și SHA-1: 21
2.2.2. Modificări în SHA-1: 21
2.2.3. SHA-2 și SHA-3: 21
2.2.4. Generatorul SHA – 1 22
Capitolul 3. Vulnerabilități, amenințări și atacuri la adresa aplicațiilor software 23
3.1. Tipuri de vulnerabilități 23
3.1.1. Vulnerabilități software 23
3.1.2. Vulnerabilități hardware 24
3.1.3. Vulnerabilități de configurare 24
3.1.4. Vulnerabilități de politici 25
3.1.5. Vulnerabilități de uz 25
3.2. Tipuri de atacuri 26
3.2.1. Man-in-the-middle attack 26
3.2.2. Atac de tip reply 29
Capitolul 4. Arhitectura și securitatea unui sistem de tip client-server 30
4.1. Partea de client 31
4.2. Partea de server 32
4.3. Partea de autentificare 33
4.4. Partea de autorizare 33
4.5. Performanțe / Securitate / Costuri 34
4.5.1. Performanțe 34
4.5.2. Securitate 34
4.5.3. Costuri 34
Capitolul 5. Instalarea programelor necesare 35
5.1. VMware 35
5.2. Ubuntu 14.04 LTS 37
5.3. Programe necesare pentru crearea aplicatiei in JavaScript 39
Capitolul 6. Aplicația Tokenapp 41
6.1 Detalii despre cod 41
6.2 Detalii despre sabloanele folosite 47
Capitolul 7. Aplicatie si detalii privind rularea acesteia 51
7.1 Terminal 51
7.2 Browser 53
Bibliografie 65
Lista acronimelor utilizate:
SKC Secret Key Criptography
ECB Electronic Codeblock
CBC Cipher Block Chaining
CFB Cipher Feedback
OFB Output Feedback
DES Data Encryption Standard
AES Advanced Encryption Standard
PKC Public-key Cryptography
RSA Roland Rivest, Adi Shamir, Leonard Adleman
MD(4/5) Message-Digest algorithm
SHA Secure Hash Algorithm
MITM Man-in-the-middle
LTS Long Term Support
NIST Institutul Național pentru Standarde și Tehnologie
DSS Digital Signature Standard
SSL Secure Sockets Layer
PGP Pretty Good Privacy
IPSec Internet Protocol Security
TCP Transmission Control Protocol
HTTP Hypertext Transfer Protocol
HTTPS Secure Hypertext Transfer Protocol
DBMS database management system
Lista figurilor și tabelelor utilizate în lucrare:
Figura 1. Bucla principală MD5
Figura 2. Bucla principală SHA–1
Figura 3. Exemplu de coliziune
Figura 4. Ilustrație a atacului de tip man-in-the-middle
Figura 5. Ilustrație a unui pachet HTTP interceptat cu Paros Proxy.
Figura 6. Arhitectura client-server
Figura 7. Relație client-server
Figura 8. Rack server
Introducere
Securitatea informației se ocupă cu protecția informației și a sistemelor informatice de accesul interzis, divulgarea, utilizarea, modificarea sau ștergerea acestora. Securitatea informației este formată din trei componente și anume : confidențialitate, integritate și disponibilitate.
Criptarea informației este astfel asigurată de confidențialitate, obținerea integrității este dată folosind mecanisme și anumiți algoritmi de dispersie, iar disponibilitatea este realizată prin întărirea securității rețelei informatice precum și introducerea unui sistem de backup pentru a avea asigurate copii de siguranță.
Atacurile cibernetice reprezintă orice tip de manevră ofensivă produsă de persoane fizice sau organizații ce au ca țintă sisteme informaționale computerizate, rețele de calculatoare și/sau calculatoare personale deseori având ca origine o sursă necunoscută care, din diverse motive, fie fură, fie distruge ținta respectivă.
Aceste atacuri, în ultimii ani fiind tot mai sofisticate și periculoase reprezintă un fenomen cu o creștere exponențială, având un impact devastator asupra comunităților, națiunilor sau grupurilor din cadrul societății.
În capitolele ce urmează voi relata câteva noțiuni legate de criptografie, voi defini o parte din algoritmii de hashing, urmată de un scurt capitol legat de vulnerabilități, amenințări și atacuri la adresa aplicațiilor.
În continuarea acestor capitole voi explica cum este realizată implementarea unui sistem de autentificare client-server, în care se folosește un generator de tokeni pentru autentificarea utilizatorului pe server, sistem ce respectă următoarele cerințe:
Sistemul are o arhitectură client-server,
Suportă autentificarea mai multor utilizatori,
Rezistent la atacuri de tip replay și man-in-the-middle,
Codurile generate de către generatorul de tokeni au un anumit termen de valabilitate care expiră după un interval de timp, și/sau prima utilizare,
Canalul de comunicare între client și server este securizat.
Capitolul 1. Criptografia
Este o metodă importantă de protejare a informațiilor sensibile stocate în sistemele de calcul, dar și a celor care sunt transmise pe liniile de comunicație. [1]
Criptarea mesajelor de poștă electronică transmise prin rețea protejează informațiile în cazul în care un intrus pătrunde în rețea. Informațiile care sunt criptate rămân sigure deoarece chiar și în cazul interceptării acestea nu pot fi înțelese direct.
În multe versiuni ale unor sisteme de operare, fișierele care conțin parolele utilizatorilor se stochează în forma criptată. De asemenea, arhivele în care se păstrează datele sau documentele cu care compania sau organizația respectivă nu mai lucrează pentru o perioadă mai mare de timp sunt criptate și abia apoi puse la păstrare.
Criptarea a devenit cea mai populară metodă de protecție, atât pentru comunicații, cât și pentru datele cu caracter secret. De exemplu, rețeaua Internet oferă servicii de criptare utilizatorilor săi.
Pe măsura conștientizării beneficiilor aduse de utilizarea criptării, a dezavantajelor lipsei de protecție a informațiilor și a faptului că tehnologia de criptare a devenit mai accesibilă, criptarea devine o metodă atractivă de protejare a datelor, indiferent dacă este vorba de date secrete transmise prin rețea sau date obișnuite stocate în sistemul de calcul.
Există extrem de mulți algoritmi de criptare, unii dintre aceștia fiind extrem de simpli și este posibilă definirea unui mecanism propriu de criptare de către fiecare utilizator. O funcție de criptare poate să fie o simplă funcție matematică ce satisface unele cerințe. Cea mai importantă dintre aceste cerințe este ca funcția respectivă să fie bijectivă pentru a ne oferi posibilitatea inversării procesului și recuperării informației originale ce a stat la baza procesului de criptare. Desigur, metodele evoluate sunt departe de a fi la îndemâna fiecărui utilizator și sunt patentate de firme puternice care lucrează în acest domeniu. [1]
Nu trebuie neglijată însă fragilitatea criptărilor oferită de produsele comerciale. Algoritmii de criptare utilizați de marea majoritate a produselor software dar și de unele produse hardwarecomerciale conferă o relativă protecție față de un utilizator individual, care eventual ar încerca să decripteze anumite date. La acest nivel decriptarea ar necesita investiții mari și durata de realizare ar fi de ordinul anilor, în cazul unor algoritmi mai puternici. Același lucru nu se întâmplă însă la nivelul unor structuri de informații, care ajung să decripteze datele la nivel de secunde, unele fiind chiar creatori ai respectivilor algoritmi de criptare.
În funcție de numărul de chei ce sunt folosite pentru criptarea și decriptarea, metodele folosite intră în categoria criptării cu cheie secretă sau a criptării cu cheie publică. [1]
Criptarea cu cheie secretă (SKC- secret key criptography) folosește o singură cheie atât pentru criptare cât și pentru decriptare.
Expeditorul utilizează cheia pentru a cripta textuș normal și trimite textul criptat destinatarului. Destinatarul aplică aceiași cheie pentru a decripta mesajul și a recupera textul normal. Din cauză că este folosită o singură cheie, această metodă mai este denumită și criptare simetrică.
Cea mai mare dificultate cu acest tip de criptare este distribuirea cheii. Există câteva tipuri de metode de criptare simetrică folosite foarte frecvent și anume cifrurile stream și cifrurile block.
Cifrurile de tip stream operează pe un singur bit, byte sau word și implementează un fel de mecanism recurent datorită căruia cheia se schimbă continuu. Un cifru block este denumit așa pentru că metoda criptează informația în blocuri de date pe care le decriptează folosind aceiași cheie.
În general, criptarea aceluiași text normal utilizând un cifru block va rezulta același text cripat când se folosește aceiași cheie, în timp ce prin utilizarea unui cifru stream textele criptate vor fi diferite. Cifrurile stream sunt la rândul lor de mai multe tipuri, dar cele mai folosite sunt cifrurile stream auto-sincronizate (self-sincronizing) și cifrurile stream sincronizate (synchronous stream).
Un cifru stream auto-sincronizat calculează fiecare bit din cheie ca o funcție a celor N biți anteriori. Termenul de auto-sincronizat provine de la faptul că procesul de decriptare poate fi sincronizat cu procesul de criptare numai dacă se cunoaște valoarea lui N. O problemă care poate surveni în aplicarea acestei metode este propagarea erorii, un bit modificat rezultând în modificarea următorilor N biți din mesaj. Cifrurile sincronizate generează cheia independent de mesaj dar utilizează aceași funcție de generare a cheii atât la expeditor cât și la destinatar.
1.1. Cifruri de tip block
Cifrurile de tip block pot cripta în mai multe moduri, dintre care următoarele patru sunt cele mai importante:
1.1.1. Electronic Codeblock (ECB)
Reprezintă modelul cel mai simplu, în care cheia este utilizată pentru a transforma un bloc din textul normal într-un bloc de text criptat. Deci, două blocuri identice de text normal vor genera întotdeauna același bloc de text criptat. Deși este cel mai utilizat cifru block, el nu este foarte rezistent în cazul unor atacuri brute-force. [1]
1.1.2. Cipher Block Chaining (CBC)
Acest mod adaugă un mecanism de recurență metodei de criptare. În CBC, blocul de text normal înainte de criptare se va transforma în rezultatul unei funcții sau exclusiv între blocul de text normal și blocul de text criptat precedent. În acest mod, prin criptarea a două blocuri de text normal, nu se va obține același rezultat. [1]
1.1.3. Cipher Feedback (CFB)
Este o implementare a cifrurilor „self-synchronizing stream” în cifrurile block. Modul CFB permite datelor să fie criptate în unități mai mici decât mărimea blocului de date, fapt ce poate fi util în unele aplicații cum ar fi criptarea interactivă a datelor introduse de la un terminal.
Dacă se folosește modul CFB pe 1 byte, de exemplu, fiecare caracter ce se primește este plasat într-un registru de aceiași mărime cu blocul, este criptat, iar blocul este trimis. La destinatar, textul criptat este decriptat iar biții recurenți din bloc (tot ce este în plus fața acelui bit) sunt eliminați. [1]
1.1.4. Output Feedback (OFB)
Este o implementare în cifrurile block similară din anumite puncte de vedere cu un cifru „synchronous stream”. OFB previne generarea aceluiași text criptat din două texte normale identice utilizând un mecanism de recurență intern ce este independent atât de textul normal cât și de textul criptat. [1]
1.2. DES ( Data Ecryption Standard)
Cea mai folosită metodă de criptare cu cheie secretă este DES ( Data Ecryption Standard) conceput de IBM în anii 1970 și adoptat de Institutul Național pentru Standarde și Tehnologie, NIST din Statele Unite ale Americii, în anul 1977 pentru aplicațiile comerciale sau guvernamentale.
DES este un cifru block ce folosește o cheie pe 26 de biți și operează pe blocuri de date de 64 de biți. IBM a mai propus și o cheie de 112 biți pentru DES, dar aceasta a fost interzisă la vremea respectivă de către guvern.
Alți algoritmi care intră în categoria criptării cu cheie secretă folosiți încă la ora actuală sunt:
CAST – 128 (descris în RFC 2144) – denumirea sa, nu reprezintă un acronim ci inițialele creatorilor săi, iar 128 reprezintă un algoritm asemănător cu DES, bazat pe un algoritm de substituție și permutare, ce implică o cheie de 128 biți și lucrează pe blocuri de date de 64 biți.
International Data Encryption Algorithm (IDEA) – este încă un cifru asemănător cu DES ce lucrează pe blocuri de 64 biți și utilizează chei de 128 biți. [2]
Rivest Cipher 2 (RC2) – denumit după inventatorul său Ron Rivest, reprezintă un cifru block pe 64 biți ce utilizează chei cu lungime variabilă ce a fost proiectat să înlocuiască DES. Codul său nu a fost făcut public, chiar dacă multe companiiau cumpărat licențe pentru folosirea RC2 în aplicațiile lor. De asemenea a existat și RC1, dar acesta a fost proiectat doar teoretic fără a fi niciodată implementat. RC3 a fost abandonat după ce, în timpul dezvoltării sale s-a descoperit că poate fi spart relativ ușor. [2]
RC4 – un cifru stream ce utilizează chei de lungime variabilă este folosit mai ales în produse de criptare comerciale, chiar dacă nu pot fi exportate din SUA decât versiuni ce folosesc chei de cel mult 40 biți. Versiunea următoare, RC5, este un cifru block ce suportă o varietate de mărimi pentru blocurile de date și pentru chei și este mai sigur decât versiunile precedente. [2]
Blowfish – un cifru block simetric ce lucrează cu blocuri de 64 de biți ce a fost inventat de Bruce Schneier, este optimizat pentru procesoare pe 32 de biți ce dispun de cache mare. Este mult mai rapid decât DES pe sisteme ce utilizează procesoare din clasa Pentium sau PowerPC. Lungimea cheii poate varia între 32 și 448 biți în lungime. Blowfish este disponibil gratis pentru oricine și este folosit în destul de multe produse. [2]
Twofish – reprezintă un cifru block ce utilizează blocuri de 128 biți și folosește chei de 128, 192 sau 256 biți fiind, de asemenea, inventat de Schneier. Proiectat pentru a fi foarte sigur și flexibil este potrivit pentru microprocesoare mari, microprocesoare pentru smart cards pe 8 biți sau hardware cu aplicații speciale. [2]
1.3. AES – Advanced Encryption Standard
În 1997, NIST a inițiat un proiect ce urmărea dezvoltarea unui nou sistem de criptare sigur pentru aplicațiile guvernului american. Rezultatul este Standardul de Criptare Avansată (AES – Avanced Encryption Standard) care a devenit succesorul oficial al lui DES în decembrie 2001. AES este bazat pe o metodă de criptare cu cheie secretă denumită Rijndael.
1.4. PKC – Public-key Cryptography
Criptarea cu cheie publică (PKC – Public-key Cryptography) folosește o cheie pentru criptare și o altă cheie pentru decriptare. Acest tip de criptare este considerat a fi cel mai important pas în domeniul criptografiei în ultimii 300-400 de ani.
Metodele moderne au fost prezentate public pentru prima dată de către profesorul Martin Hellman de la Universitatea Stanford și studentul Whitfield Diffie în 1976. Lucrarea lor descria un sistem criptografic în care două persoane putea avea o comunicare sigură pe un canal de comunicare nesigur fără să schimbe o cheie secretă.
„Trucul” matematic din criptare cu cheie publică se bazează pe existența unor așa zise funcții one-way. Aceste funcții matematice sunt ușor de calculat dar, în același timp, inversa lor este foarte dificil de calculat. De exemplu, să zicem că folosim două numere: 9 și 16 și vrem să calculăm produsul.
Acestă operație ia foarte puțin timp, și găsim imediat rezultatul, 144. Dar să zicem că avem numărul 144 și trebuie să găsim perechea de numere care înmulțite dau 144. Va lua foarte mult timp să găsim toate soluțiile posibile și să alegem perechea inițială. Exemplul anterior reprezintă doar una din perechile funcționale ce sunt folosite în acest tip de algoritmi. Cele două chei folosite de acestă metodă se află într-o anume relație matematică dar cunoașterea uneia dintre chei nu presupune aflarea ușoară a celeilalte.
O cheie este utilizată pentru criptarea textului, iar cealaltă este folosită pentru descrierea textului codificat. Important este faptul că este nevoie de amândouă cheile pentru a funcționa mecanismul. Pentru că este nevoie de mai multe chei, acest tip de criptare se mai numește și criptare simetrică.
În criptarea cu cheie publică, una din chei este proiectată să fie cheie publică și poate fi publicată oriunde. Cealaltă cheie este proiectată să fie cheie privată și nu trebuie făcută cunoscută altor persoane.
Această metodă poate fi folosită și pentru a dovedi cine a trimis un mesaj. Să zicem că X criptează un mesaj folosind cheia sa privată, Y primește textul criptat pe care îl decriptează folosind cheia publică a lui X, astfel știe că X a criptat mesajul, iar X nu poate nega acest lucru.
1.5. Algoritmul RSA
Cea mai importantă implementare a unui algoritm de acest tip este metoda RSA, denumită astfel după cei trei matematicieni de la care au dezvoltat-o: Roland Rivest, Adi Shamir și Leonard Adleman.
RSA este folosită în sute de produse software și poate fi utilaztă pentru schimbul de chei, semnături digitale sau criptatrea unor blocuri mici de date.
RSA folosește un bloc de criptare de dimensiune variabilă, iar cheia este și ea de lungime variabilă. Perechea de chei este derivată dintr-un număr foarte mare, N, ce reprezintă produsul a două numere prime alese după anumite reguli speciale, aceste numere pot avea fiecare mai mult de 100 de cifre, numărul N având mult mai multe cifre.
Cheia publică folosită conține numărul N și un derivat al unuia dintre factorii folosiți pentru determinarea lui N, astfel un atacator nu poate determina factorii primi ai lui N ( deci nu poate afla cheia privată) numai din aceste informații. Unele descrieri eronate ale PKC spun că siguranța algoritmului RSA este determinată de faptul că este dificilă factorizarea unui număr prim foarte larg, ceea ce este eronat, din motiv că orice număr prim, indiferent de mărime, are numai doi factori.
Totuși există o mare abilitate a computerelor de a factoriza numere foarte mari, astfel aceasta putând fi folosită pentru atacarea metodelor de tipul RSA cu o putere care crește continuu. Sistemele de dată recentă pot găsi factorii primi ai unor numere cu aproape 140 de cifre. Protecția algoritmului RSA constă și în faptul că utilizatorii pot crește mărimea cheii anulând astfel creșterea performanței procesoarelor.
O alternativă a algoritmului RSA este metoda Diffie-Hellman care este folosită doar pentru schimbul de chei. Este folosit în combinație cu Standardul Semnăturii Digitale al NIST (DSS- Digital Signature Standard).
Menționăm că recent ( mijlocul anului 2003) un matematician indian împreună cu doi asistenți ai săi a demonstrat la o conferință internațională o metodă revoluționară care simplifică extrem de mult procesul de factorizare al numerelor foarte mari. Această descoperire va împinge cu siguranță lumea criptografiei spre inventarea unor noi tipuri de metode, care să nu se mai bazeze pe numere prime și factorizare.
Certificatele de autentificare a informațiilor vehiculate reprezintă o altă metodă folosită pentru securizarea informațiilor.
Criptarea este o metoda de protejare a informațiilor sensibile stocate în sistemele de calcul. Metodele de criptare se utilizează pentru securizarea informațiilor și pentru certificarea celor care vehiculează acele informații. [3]
În funcție de complexitatea și utilizarea lor, metodele se bazează pe chei simetrice (de exemplu metoda de criptare DES și triplu DES elaborată de IBM și care se utilizează în mediul bancar – PIN criptat în DES) sau pe chei asimetrice adică pe dualitatea chei private plus chei publice ce permite criptarea unui mesaj printr-o cheie și decriptarea prin cealaltă cheie.
1.6. PPK Hashing
O altă metodă de criptare se numește PPK Hashing și produce trunchierea mesajului – Message Digest (MD). Criptarea MD prin cheie privată și adăugarea la mesajul original codificat servește drept semnătură digitală. Este echivalent calculării unui checksum de control atât la trimiterea mesajului cât și la primirea lui, folosindu-se un același algoritm – Message Integrity Check. Cei mai cunoscuți algoritmi folosiți la astfel de criptări sunt MD5 și SHA.
Pentru certificare se poate realiza combinarea PPK cu mecanisme suplimentare de acreditare pe baza unei semnături electronice ce necesită un certificat de autorizare credibil pentru a genera certificate de încredere. Există organisme abilitate de forumuri legislative care pot emite certificate de autentificare, jucând un rol similar notarilor publici.
Astfel de instituții emit certificare speciale (Certificatele X.509) ce leagă identitatea unei persoane de o pereche de chei de criptare.
Un astfel de certificat conține:
Nume utilizator
Nume organizație
Data efectivă a emiterii certificatului
Data de expirare a certificatului
Cheia utilizatorilor publici
Numele celui care a generat certificatul de autentificare
Semnătura generatorului certificatului de autentificare
Autentificarea în cazul acestor certificate se bazează pe existența următoarelor elemente:
Stocarea de informații pentru control acces cu ajutorul browserelor web sau în smart card
Existența unor instrucțiuni de utilizare specifice
Existența semnăturii certificatului de autentificare
Orice partener de tranzactie poate verifica validitatea certificatului primit
Existența unor legi ale semnăturii electronice
Stabilirea de condiții comune pentru certificatele de autentificare
Capitolul 2. Funcții hash MD4, MD5, SHA-1
MD4 (message-digest algorithm) este o funcție hash one-way proiectată de Ronald Rivest, iar algoritmul acesteia produce o valoare hash de 128 biți. Scopurile urmărite în proiectarea algoritmului MD4 sunt:
Securitatea: din punct de vedere computațional, este imposibil de găsit două mesaje care conduc la aceiași valoare hash. Cel mai eficient atac este cel în forță.
Securitate directă: securitatea algoritmului MD4 nu se bazează pe ipoteze, cum ar fi dificultatea factorizării.
Viteză – MD4 este potrivit pentru implementări software de mare viteză, deoarece se bazează pe operațiuni simple pe șiruri de 32 de biți.
Simplu și compact
MD4 este optimizat pentru arhitectura procesoarelor Intel.
În urma criptanalizei de succes împotriva primelor două, respectiv două cicluri, Rivest a întărit algoritmul, transformându-l în MD5.
2.1. Funcția hash MD5
Este versiunea îmbunătățită a lui MD4, care procesează textul de intrare în blocuri de 512 biți, împărțite în 16 sub-blocuri de 32 de biți. Ieșirea acestui algoritm este formată din patru blocuri de 32 de biți care prin concatenare rezultă o singură valoare hash de 128 de biți.
Mai întâi mesajul este completat astfel încât lungimea sa să devină cu 64 de biți mai mică decât un multiplu de 512. Biții de completare constau dintr-o valoare de 1 urmată de valori de 0. Apoi se adaugă o reprezentare pe 64 de biți a lungimii mesajului original (înainte de completare).
Acești doi pași asigură ca mesajul să aibă o lungime multiplu de 512 și ca mesajele diferite să nu aibă aceeași terminație după completare. Patru variabile de 32 de biți, numite variabile de înșănțuire sunt inițializate astfel:
Cele patru variabile sunt copiate în alte patru variabile de lucru: a, b, c și d. Bucla principală a algoritmului care se repetă pentru fiecare bloc de 512 biți are patru cicluri similare. Fiecare ciclu folosește de 16 ori diferite operații. Fiecare operație execută o funcție neliniară având ca argument trei din valorile a, b, c, d. Apoi, rezultatul se adună cu cea de-a patra variabilă, un sub-bloc de text și o constantă. Suma obținută este rotită la dreapta un număr variabil de biți, iar rezultatul este adunat la una din variabilele: a, b, c și d. În final, acest rezultat înlocuiește una din variabile. [4]
Funcționarea buclei principale a algoritmului este prezentată în Figura 4. :
Figura 1. Bucla principală MD5 [5]
Există patru funcții neliniare, câte una folosită în fiecare operație și diferă de la ciclu la ciclu:
F(X,Y,Z) = (X and Y) or ((not X) and Z)
G(X,Y,Z) =(X and Z) or (Y and (not Z))
H(X,Y,Z) = XѲYѲZ
J(X,Y,Z) = YѲ(Xor (not Z))
Dacă „ Mj ” reprezintă sub-blocul „ j ” al mesajului, J = 0-15 și „ <<< ” reprezintă o rotație circulară la stânga de s biți, cele patru operații sunt:
FF(a,b,c,d,Mj,s,ti) semnifică a=b+F(b,c,d)+Mi+ti)<<<s)
GG(a,b,c,d,Mj,s,ti) semnifică a=b+((a+G(b,c,d)+Mi+ti)<<<s)
HHF(a,b,c,d,Mj,s,ti) semnifică a=b+((a+H(b,c,d)+Mi+ti)<<<s)
II(a,b,c,d,Mi,s,ti) semnifică a=b+((a+I(b,c,d)+Mi+ti)<<<s)
Constanta „ ti ” reprezintă constanta „ t ” la pasul „ i ” și este egală cu partea întreagă din
, unde i este în radiani.
La final, a, b, c, d sunt adăugate la A, B, C și respectiv D, după care algoritmul continuă cu următorul bloc de date. Ieșirea finală este dată de concatenarea lui A, B, C și D.
2.1.1. Securitatea funcției MD5
Îmbunătățirile lui MD5 față de MD4 constau în:
1.Adăugarea unui al patrulea ciclu
2.Fiecare pas are acum o constantă aditivă unică
3.Funcția G din ciclu 2 a devenit mai puțin simetrică
4.Ordinea în care sunt accesate sub-blocurile de mesaj în ciclurile 2 și 3 este schimbată.
5.Numărul biților de rotație din fiecare ciclu a fost optimizat pentru a crește efectul de avalanșă.
Cele patru rotații dintr-un ciclu sunt diferite de rotațiile folosite în celelalte cicluri.
Criptanaliza algoritmului MD5 arată că unul din principiile de bază din proiectarea sa – obținerea unei funcții de compresie rezistentă la coliziune nu a fost respectat, deși această slăbiciune nu pare a avea un impact practic asupra securității funcției hash.O mulțime de site-uri, mai ales cele din România, fac o mare greșeală de securitate – salvează parolele necriptate în baza de date. În modul acesta orice persoană care face rost de baza de date a site-ului pune în pericol datele confidențiale ale utilizatorilor, mai ales dacă aceștia folosesc aceleași date de logare pe multiple site-uri. Este obligația programatorilor să respecte confidențialitatea datelor clienților. Cea mai utilizată modalitate de protecție este să se cripteze parolele cu algoritmii MD5 și SHA-1 în PHP. [6]
2.2. Funcția hash SHA-1
SHA este un acronim pentru Secure Hash Algorithm, un standard de criptare inventat de Agenția Națională de Securitate și publicat de Institutul Național de Standarde și Tehnologie (NIST).
Inițial, în algoritmul SHA, au fost găsite deficiențe, mai ales în metodele sale de criptare, acesta fiind înlocuit cu SHA-1 pentru securitate mai puternică.
SHA este o funcție hash criptografică. O funcție hash are un text necriptat inițial, numit plaintext (text scris în clar), și produce un număr teoretic unic, care constituie mesajul criptat. [7]
Figura 2. Bucla SHA-1 [8]
– O iterație a funcției de compresie SHA-1.
– A, B, C, D și E ‘cuvinte’ de 32-bit;
– F este o funcție neliniară ce variază;
– <<< denotă o shiftare circulară la stânga.
– Kt este o constantă
SHA creează un număr de 160 de biți, cuprins între 0 și . Numărul generat este un număr unic pentru toate mesajele text posibile, însă șansele sunt de aproximativ , ca două mesaje obținute să aibă aceeași criptare. Dacă acest lucru se întâmplă, aceasta se numește o coliziune. O coliziune oferă un atac matematic pe un algoritm de criptare, ceea ce face posibil ca un criptograf să poată decripta mesajul criptat în plaintext. [7]
Figura 3. Exemplu de coliziune
2.2.1. SHA-0 și SHA-1:
O versiune revizuită SHA, SHA-1, a fost dezvoltată care a creat aceleași rezultate 160-biți fără defectele prezente în algoritmul original. Inițial SHA a fost redenumit retroactiv SHA-0 pentru a distinge utilizarea acestuia și utilizarea noului algoritm, SHA-1. [7]
2.2.2. Modificări în SHA-1:
Defectele originale SHA-0 nu au fost niciodată publicate, deoarece acestea prevăd un set de instrumente pentru orice atacator ce încearcă să decripteze un mesaj folosind criptare SHA-0.
Singurele informații publice cu privire la deficiențele din algoritmul original, indică faptul că, acele coliziuni hash ce existau în varianta inițială, SHA-0, sunt eliminate odată cu introducerea noului algoritm și anume SHA-1.
SHA-1 și SHA-0 oferă rezultate matematice de aceeași lungime, astfel SHA-1 poate fi utilizat ca un înlocuitor drop în programe fără a necesita rescrieri majore în restul software-ului. [6]
2.2.3. SHA-2 și SHA-3:
În 2005 criptanaliștii au observat unele atacuri asupra algoritmului SHA-1, sugerând faptul că acesta nu este destul de bine securizat. SHA-1 a fost dovedit a fi mai robust decât SHA-0, dar lasă loc de îmbunătățiri, astfel după o analiză matematică a rezultatelor oferite de SHA-1 a fost demonstrată o metodă prin care criptarea cu SHA-1 ar putea fi de 2.000 de ori mai rapidă decât ar fi teoretic posibil.
Un algoritm criptografic ideal previne îmbunătățiri ale vitezei de decriptare, însă algoritmul SHA-2 pe lângă faptul că este mult mai puternic, acesta își mărește dimensiunea hash la 512-bit, sau , în cazul algoritmului SHA-3, un algoritm de criptare mult mai puternic, ce este în prezent în continuă dezvoltare. [6]
2.2.4. Generatorul SHA – 1
Generatorul SHA-1 este cel mai folosit algoritm din familia de funcții hash criptografice SHA, fiind prezentat într-o largă varietate de aplicații de securitate cum ar fi SSL, PGP, IPSec etc.
SHA-1 este un algoritm hash sigur pentru calculul unei reprezentări condensate a unui mesaj sau a unui fișier de date, conform standardului FIPS 180-1, și a fost proiectat de către NSA.
Pentru un mesaj de lungime ^ 2 la 64 biți SHA – 1 produce un mesaj de ieșire de 160 biți, care poate fi folosit pentru a genera o semnătură digitală pentru mesajul inițial. SHA-1 este considerat singur deoarece este imposibil de găsit un mesaj care corespunde cu un mesaj de ieșire dat sau de determinat două mesaje diferite care să producă același mesaj de ieșire.
SHA-1 se bazează pe principii similare celor care stau la baza proiectării algoritmului MD4 și este considerat un generator cu bune calități statistice. [6]
Exemple de hash-uri SHA-1[8] :
SHA1("The quick brown fox jumps over the lazy dog")
gives hexadecimal: 2fd4e1c67a2d28fced849ee1bb76e7391b93eb12
gives Base64 binary to ASCII text encoding: L9ThxnotKPzthJ7hu3bnORuT6xI=
Chiar și o mică schimbare, a unei litere dintr-un cuvânt (dog – cog) rezultă un hash total diferit, datorită efectului avalanșă (schimbarea chiar și a unui singur bit oferă un hash total diferit) :
SHA1("The quick brown fox jumps over the lazy cog")
gives hexadecimal: de9f2c7fd25e1b3afad3e85a0bd17d9b100db4b3
gives Base64 binary to ASCII text encoding: 3p8sf9JeGzr60+haC9F9mxANtLM=
Hash-ul unui vector de lungime zero :
SHA1("")
gives hexadecimal: da39a3ee5e6b4b0d3255bfef95601890afd80709
gives Base64 binary to ASCII text encoding: 2jmj7l5rSw0yVb/vlWAYkK/YBwk=
Capitolul 3. Vulnerabilități, amenințări și atacuri la adresa aplicațiilor software
3.1. Tipuri de vulnerabilități
Limbajele Java și .NET care la ora actuală sunt cele mai folosite platforme de dezvoltare de noi aplicații informatice, se folosesc de o mașină virtuală care interpretează și execută cod la run-time.
Codul executat de aceste mașini virtuale nu este cod mașină ca la limbajele clasice, ci un cod intermediar foarte flexibil. În Java și .NET, prin compilare se obține acest cod intermediar ce conține și foarte multe dintre informațiile existente în codul sursă. Acest fapt face ca operația de decompliare să fie relativ ușoară, în orice caz, mai ușoară decât în cazul codului mașină.
Firmele producătoare de aplicații software trebuie să se confrunte acum cu riscul de a cheltui multe resurse pentru dezvoltarea unui proiect și de a accepta posibilitatea ca un competitor să facă reverse-engineering și să obțină fără mare efort biblioteci, algoritmi sau întregi aplicații la care pot schimba doar interfața. În același timp, utilizatori, sau alte persoane rău-voitoare pot folosi același tehnici de revers-engineering, pentru a modifica aplicațiile respective în sensul eliminării protecțiilor la copiere, verificărilor de licențe etc.
În ambele cazuri se ajunge la pierderi financiare mari și deci se impun măsuri de protecție.
Orice rețea are vulnerabilitățile ei. Este important să știm cum apar aceste vulnerabiliăți și de ce să ne ferim. La un nivel înalt putem impărții aceste vulnerabilități în următoarele categorii:
Software
Hardware
Configurație
Politici
Uz
Primele două categorii sunt mai concrete, ultimele trei fiind mai greu de explicat. [10]
3.1.1. Vulnerabilități software
Există trei tipuri de amenințări ce planează asupra unui program software:
infectarea cu un virus informatic
dezactivarea părții din program care verifică existența unei licențe pentru folosirea legală a acestuia
furtul/copierea codului unor algoritmi, module sau a întregului program cu scopul de a îl folosi în aplicații concurente
Prima amenințare are ca rezultat final imposibilitatea folosirii programului respectiv a datelor administrative cu ajutorul său. Pagubele produse în acest caz sunt suportate de utilizatorul programului, deținătorul licenței de folosire a acestuia.
Cele două tipuri de amenințări afectează compania producătoare a programului respectiv care va pierde sume de bani foarte mari. În cazul acestor două ultime amenințări, pentru a putea interveni asupra programelor țintă, atacatorii folosesc diverse tehnici de inginerie-inversă (revere-engineering).
Reverse-engineering reprezintă defapt descompunerea unui produs software pentru a determina și studia modul de funcționare al acestuia.
În sine, tehnicile de reverse-engineering nu sunt ilegale sau imorale, ele fiind folosite pe scară largă pentru a îmbunătății produsele proprii. În urma folosirii acestor tehnici se pot descoperii greșeli în designul original al sistemului, se pot detecta redundanțe sau se pot urmării fluxuri de efectuare a unor operații.
În domeniul ingineriei, reverse-engeneering-ul ia un produs finit și reconstituie cunoștințele necesare pentru a recrea acest produs. Procesele de fabricație și uneltele nu sunt deloc ușor de reprodus, în contrast cu reproducerea unui program din domeniul software unde tot ce trebuie făcut este să se reproducă o secvență de octeți ce alcătuiesc programul respectiv.
Partea dificilă a operației de reverse-engineering este însă crearea unei baze de cunoștințe despre programul analizat care să fie suficientă pentru ca acesta săpoată fi modificat, să se poată adapta părți din el sau să poată fi interfațat cu diverse alte module. [9]
3.1.2. Vulnerabilități hardware
Vulnerabilitățile hardware sunt mai puțin comune, dar importanța lor este în creștere din cauza facptului că pe piață încep sa apară din ce în ce mai multe hardware programabile.
Vulnerabilitățile în sistem precum BIOS (basic input/output system), procesoare de rețea, si procesoare (CPU) ar putea face mult mai multe stricăciuni având în vedere faptul că aceste tipuri de vulnerabilități nu se pot remedia cu un update de soft, iar schimbarea întregului calculator din cauza unei vulnerabilități hardware nu este tocmai ceva plăcut. [10]
3.1.3. Vulnerabilități de configurare
În ciuda intențiilor bune ale operatorilor de rețele, o mică greșeală de configurație este foarte comună într-o rețea. Într-un firewall (tradus mai pe scurt paravan de protecție) cu o politică de control al accesului, sunt configurate sute de intrări ce permit sau resping diferite tipuri de trafic.
Șansele sunt mari ca cineva, la un moment dat, să facă o greșeală, punând astfel întregul sistem în pericol. [10]
3.1.4. Vulnerabilități de politici
În adiție la cele trei vulnerabilități scrise anterior, ne mai putem lovi și de vulnerabilități de politici. Acestea apar atunci când un atac este făcut posibil din cauza unei implementări sau dezvoltări slabe a politicilor de securitate.
Având în vedere faptul că securitatea unei rețele într-un sistem este bună atât timp cât politica de securitate la care aderă este bună, putem spune că acest tip de vulnerabilitate poate cauza probleme ce se pot răspândii în întreaga rețea. [10]
3.1.5. Vulnerabilități de uz
Doar pentru că un sistem este făcut să fie folosit într-un mod sigur, asta nu înseamnă că un utilizator îl va folosi așa. Vulnerabilitățile de uz apar atunci când un utilizator, de obicei neexperimentat, nu neapărat cu rea intenție, “violează” / încalcă o politică de securitate cauzând astfel o vulnerabilitate în rețea.
Un exemplu comun este acela când un utilizator instalează un modem la calculatorul din firmă pentru a se putea conecta mai târziu la acesta, uitând să activeze caracteristicile de securitate pe aplicația software ce îi permite conectarea de la distanță la calculatorul din firmă. [10]
3.2. Tipuri de atacuri
3.2.1. Man-in-the-middle attack
Atacul de tip man-in-the-middle interceptează o comunicație între două sisteme. De exemplu, într-o tranzacție de tip http, ținta este conexiunea TCP dintre client și server.
Utilizând diferite tehnici, atacatorul împarte conexiunea TCP originală în două conexiuni, una între client și atacator și alta între atacator și server.
Odată ce conexiunea TCP este interceptată, atacatorul acționează ca un proxy, fiind capabil să citească, insereze și să modifice datele din comunicația interceptată. [11]
Figura 4. Ilustrație a atacului de tip man-in-the-middle [11]
Atacul MITM este foarte eficient din cauza naturii protocolului http și transferului de date care sunt complet bazate pe ASCII. În acest mod, este posibilă vizualizarea și intervievarea atât în cadrul protocolului http cât și în datele transmise.
De exemplu, este posbil să captezi o sesiune cookie citind un header (antet) http și se poate astfel schimba inclusiv tranzacția unei sume de bani în contextul unei aplicații, cum putem observa în figura de mai jos. [11]
Figura 5. Ilustrație a unui pachet HTTP interceptat cu Paros Proxy. [11]
Utilizând aceeași metodă, un astfel de atac poate fi făcut și asupra unei conexiuni http, singura diferență fiind stabilirea a două sesiuni SSL independente , una pentru fiecare conexiune TCP.
Browser-ul setează o conexiune SSL cu atacatorul, iar acesta din urmă stabilește o altă conexiune SSL cu server-ul web. În general, browser-ul avertizează utilizatorul că certificatul digital folosit este invalid, dar utilizatorul poate ignora acest avertisment din pricina neînțelegerii amenințării.
În anumite circumstanțe e posibil ca avertismentul să nu apară, un exemplu fiind atunci când un certificat de server este compromis de către atacator sau când un certificat de atacator este semnat de un CA de încredere și CN este același ca site-ul web original.
MITM nu este doar o tehnică de atac, de obicei fiind folosită și în timpul etapei de dezvoltare a unei aplicații web sau pentru evaluarea vulnerabilității web. [11]
Unelte folosite în atacuri MITM
În scopul realizării atacului MITM sunt folosite mai multe instrumente. Acestea sunt destul de eficiente în mediile de rețea LAN , deoarece implementează funcționalități extra, ca de exemplu capabilitățile oferite de ARP spoof, care permit interceptarea comunicației între două puncte emisie-recepție (gazde). [11]
PacketCreator
Ettercap
Dsniff
Cain e Abel
Unelte de tip proxy în MITM
Uneltele proxy permit doar interacțiuni cu părți ale protocolului HTTP, cum ar fi antetul și corpul unei tranzacții, dar nu au capacitatea de a intercepta conexiunea TCP între client și server.
Pentru a intercepta comunicarea, este necesar să se folosească alte instrumente de atac de rețea sau trebuie configurat browser-ul. [11]
OWASP WebScarab
Paros Proxy
Burp Proxy
ProxyFuzz
Odysseus Proxy
Fiddler (by Microsoft)
Contramăsuri
Cea mai bună apărare împotriva unui atac de tip MITM poate fi găsită doar pe partea de router sau server. În general utilizatorul nu va avea niciun control asupra securității unei tranzacții. În schimb, are posibilitatea să utilizeze o criptare puternică folosită între client și server.
În acest caz, serverul autentifică cererea clientului prin prezentarea unui certificat digital, numai apoi conexiunea va putea fi stabilită.
O altă metodă de a preveni astfel de atacuri MITM este aceea ca utilizatorul să nu se conecteze la o rețea WiFi nesecurizată. Dacă totuși se dorește o astfel de conexiune, se pot utiliza diferite module (plugin-uri) în browser, precum HTTPS Everywhere sau ForceTLS. Aceste plugin-uri vor ajuta la crearea unei conexiuni securizate.
3.2.2. Atac de tip reply
Un atac de tip replay (cunoscut și sub numele de atac playback) este o formă de atac de rețea, în care o transmisie de date valide este în mod fraudulos sau cu rea intenție repetată sau întârziată.
Acest lucru se realizează fie de inițiator sau de un adversar care interceptează datele și le retransmite, eventual ca parte a unui atac mascaradă cu substituție de pachete IP (cum ar fi “stream cipher attack”).
De exemplu, să presupunem că Alice vrea să-și dovedească identitatea lui Bob. Bob cere parola ei ca dovadă a identității, pe care Alice o oferă (eventual în urma unor transformări, gen o funcție hash), între timp, Eve interceptează conversația și păstrează parola (sau hash).
După ce schimbul este terminat, Eve (dându-se drept Alice) se conectează la Bob, iar când acesteia i se cere o dovadă a identității, Eve trimite parola lui Alice (sau hash-ul) citit de la ultima sesiune, pe care Bob o acceptă acordând astfel acces lui Eve. [12]
Contramăsuri
O modalitate prin care putem evita atacurile de tip replay este dată de utilizarea unor sesiuni cu token-uri (jetoane):
Bob trimite un token, ce poate fi folosit o singură dată, lui Alice, token pe care Alice îl folosește pentru a transforma parola și pentru a trimite rezultatul lui Bob.
Pe partea cealală, Bob efectuează același calcul. Dacă și numai dacă ambele valori se potrivesc, conexiunea este realizată cu succes.
Acum, să presupunem că Eve a capturat această valoare și încearcă să o folosească într-o altă sesiune, Bob trimite un token sesiune diferit, iar atunci când Eve răspunde cu valoarea capturată, aceasta va fi diferită de cea a lui Bob.
Token-urile de sesiune ar trebui să fie alese de către un (pseudo-) proces aleatoriu. În caz contrar Eve poate fi capabilă să pozeze în calitate de Bob, prezentând un presupus viitor token, și o convinge pe Alice de a utiliza acest token, în transformarea ei. Eve poate reda apoi răspunsul ei, într-un moment, mai târziu și Bob va accepta autentificarea. [12]
Capitolul 4. Arhitectura și securitatea unui sistem de tip client-server
Arhitectura client-server este o tehnologie ce separă calculatoarele și aplicațiile software în două categorii, clienți și servere, pentru a folosii mult mai bine resursele și puterea computațională.
Introducerea acestei arhitecturi a îmbunătățit cu mult productivitatea pe scară largă întrucât mii de angajați lucrează pe calculatoarele lor, îndeplinind diverse sarcini precum transferuri bancare, e-mail, etc. cu ajutorul serverelor ce stochează respectivele date, acestea putând fi accesate aproape de oriunde, cu o viteză incredibil de mare.
Putem spune că o astfel de arhitectură reprezintă defapt o structură consumator-producător, structură în care consumatorul, cel care solicită anumite servicii, joacă rolul de client, iar producătorul, rolul de server. Cel din urmă deține și oferă serviciile la care are acces clientul, servicii precum aplicații, stocare de date, partajare de fișiere, utilizarea imprimantelor din rețea și/sau accesul direct la controlerul serverului.
Cele două entități comunică între ele printr-o rețea de calculatoare, de obicei prin internet, acesta fiind oferit de un anumit provider, având suporturi hardware diferite, dar pot rula și pe același sistem fizic. [13]
Figura 6. Arhitectura client-server [13]
Între client și server există o relație de comandă, respectiv de control, realizându-se un transfer bidirecțional, datele fiind transmise de la client către server și invers.
Putem spune astfel că serverul și clientul nu sunt entități hardware, ci două entități software.
4.1. Partea de client
Într-o astfel de arhitectură, clientul este cel care transmite o cerere către mai multe servere, unul
dintre acestea o analizează și o execută, efectuând eventualele procesări asupra bazei de date.
Clientul nu partajează niciuna dintre resursele proprii, ci apelează la resursele serverului prin funcțiile server. Pentru menținerea legăturii între cei doi, indiferent de pauzele care intervin, se folosește conceptul de sesiune, care de obicei este limitată în timp. [13]
Figura 7. Relație client-server [13]
4.2. Partea de server
Cea de-a doua entitate, serverul, joacă un rol foarte important întrucât acesta pe lângă cererile
clienților se ocupă și de cererile altor servere.
Un server (fizic) rulează unul sau mai multe programe server, care partajează resursele existente cu clienții. [13] Serverul nu porneste niciodată o comunicație cu un client. Pentru întreținerea și stocarea datelor, acesta folosește baze de date relaționale.
Între procedura de stocare a datelor și datele în sine se folosesc referințe, referințe ce sunt indicate printr-o metodă numită integritate referențială.
Figura 8. Rack server
Pentru a creea o magazie de date, o firmă se poate folosii de mai multe servere, această magazie fiind distribuită pe servere din zone diferite.
Totodată organizația, respectiv clienții acesteia nu trebuie să aibă neapărat cunoștințe referitoare la limbajul de programare utilizat pe aceste servere pentru a accesa datele stocate în acestea. Astfel cresc performanțele, iar modelul central, client-server, nu este compromis.
4.3. Partea de autentificare
Autentificarea este utilizată de server în cazul în care acesta trebuie să știe exact cine accesează informațiile din baza sa de date.
Autentificarea este utilizată de client atunci când acesta trebuie să știe că serverul este sistemul ce pretinde a fi .
În autentificare, utilizatorul sau computerul trebuie să dovedească identitatea serverului sau clientului.
De obicei , autentificarea realizată de un server implică folosirea unui nume de utilizator și o parolă.
Alte modalități de autentificare: prin carduri, scanări de retină, recunoaștere a vocii și folosirea amprentelor digitale .
Autentificarea realizată de client implică de obicei serverul, acesta oferind un certificat clientului, în care o aplicație de încredere, cum ar fi Verisign sau Thawte afirmă că serverul aparține entității ( cum ar fi o bancă ) pe care clientul se așteaptă să fie autentificat.
Autentificarea nu determină ce sarcini poate face clientul sau ce fișiere poate vedea acesta, autentificarea doar identifică și verifică cine este persoana sau sistemul .
4.4. Partea de autorizare
Autorizarea este un proces prin care un server determină dacă clientul are permisiunea de a utiliza o resursă sau de a accesa un fișier.
Autorizarea este, de obicei însoțită de autentificare, astfel încât, serverul are unele concepte despre clientul care solicită accesul.
Tipul de autentificare necesară pentru autorizare poate varia, parolele pot fi necesare în unele cazuri, dar nu și în altele .
În unele cazuri, nu există nicio autorizație, orice utilizator poate folosi o resursă sau accesa un fișier prin simpla cere a acestuia. Cele mai multe dintre paginile web de pe internet nu necesită autentificare sau autorizare.
4.5. Performanțe / Securitate / Costuri
4.5.1. Performanțe
Capabilitatea unui server de a prelucra datele și a răspunde numărului amplu de cereri trebuie să fie una foarte mare, astfel încât performanțele sistemului să crească.
Serverul este un “calculcator” menit să prelucreze un număr limitat de cereri venite din partea clienților și/sau altor servere, astfel ca putere de calcul ele trebuie să fie dotate cu procesoare puternice.
Serverul este un computer dedicat să proceseze un set limitat de cereri de la clienți. Singura sa funcție este să proceseze cererile asupra bazelor sale de date. SQL oferă facilități eficiente de utilizare a traficului în rețea deoarece doar subseturi ale datelor sunt transmise în rețea, în plus serverele și DBMS sunt desemnate să gestioneze baze de date masive fără o degradare simțitoare a performanțelor. [14]
4.5.2. Securitate
Serverele ce lucrează pe platforme ca Windows NT, Unix sau OS/2 pot oferi o mare securitate pentru managmentul bazelor de date în comparație cu file serverele standard.
Mecanismele de duplexing, mirroring și copiere permise administratorilor asigură evitarea dezastrelor, de asemenea aceste baze de date permit definirea de utilizatori și parole care permit evitarea accesului unor persoane neautorizate. [14]
4.5.3. Costuri
Referitor la costurile unor astfel de arhitecturi, serverele sunt cele ce necesită procesoare rapide, memorie, hard-discuri mari și un sistem de operare folosit de clienții care le accesează.
Licențierea, instalarea și întreținerea unor sisteme ca Oracle, Sybase sau Informix necesită sute de mii de dolari, iar dezvoltarea unor aplicații necesită memorie, mașini noi și noi sisteme de operare.
Din acest motiv, în prezent, multe organizații care au utilizat mainframe-uri s-au acomodat foarte ușor acestui mediu Client-Server care oferă o excelentă infrastructură asigurând integritate, viteză și securitate. [14]
Capitolul 5. Instalarea programelor necesare
Tokenapp a fost dezvoltata folosind Linux ca sistem de operare pentru a beneficia de avantajele liniei de comanda. Am folosit un mediu virtual, avand la baza solutia gratuita VMware Player si folosind distributia Ubuntu.
Astfel in urmatoarele randuri voi detalia instalarea si configurarea acestui program.
5.1. VMware
In timpul instalarii aplicatiei a fost necesar selectarea unei locatii suficient de mare intrucat imaginea sistemului Ubuntu are 1GB, dar aceasta va avea nevoie de mai mult spatiu pentru a putea functiona.
Dupa terminarea instalarii, putem accesa masina virtuala creata si folosi precum un sistem de operare normal.
5.2. Ubuntu 14.04 LTS
Interfata aplicatiei VMware este destul de simpla si usor de folosit, intrucat dupa instalarea versiunii de Ubuntu 14.04, tot ce trebuie facut pentru a porni masina virtuala este accesarea butonului “Play virtual machine”.
Odata pornita, masina virtuala, pentru a avea acces trebuie introdus user-ul creat in timpul procesului de instalare cu parola aferenta.
5.3. Programe necesare pentru crearea aplicatiei in JavaScript
Sublime text
Sublime text – este un editor de text foarte sofisticat cu o interfata simplificata, insa cu performate pe masura. Acesta poate fi descarcat gratuit de pe pagina aferenta.
Terminal
Terminalul este locul/interfata in care poti scrie si executa comenzi pe baza de text. Folosirea acestuia simplifica astfel lucrurile. Cu doar cateva comenzi se pot face update-uri, instala aplicatii si multe altele. Am folosit terminalul pentru instalarea pachetelor folosite si pentru rularea aplicatiei create.
Node.js
Node.js este o platforma (framework) open-source, construita peste limbajul Javascript care ne permite sa construim aplicatii web, cu o arhitectura client-server, foarte rapid. NPM (Node.js Package Manager) ne pune la dispozitie si o mare varietate de pachete pe care noi le instalam si importam direct in aplicatia noastra, astfel incat sa folosim direct functiile pe care acestea le ofera, fara sa fie nevoie sa le rescriem. Din toate punctele de vedere, Node.js este unealta perfecta pentru realizarea aplicatiei.
Capitolul 6. Aplicația Tokenapp
6.1 Detalii despre cod
6.2 Detalii despre sabloanele folosite
Fiecare pagina este construita folosind un tamplate ce se compileaza in HTML la rularea aplicatiei folosind modulul jade.
Template folosit pentru baza de date.
Template folosit pentru pagina principala.
Template folosit pentru pagina de autentificare.
Template folosit pentru pagina de adaugare de utilizatori.
Template folosit pentru pagina de generare de tokeni.
Template folosit pentru pagina de login.
Fisierul package.json in care sunt definite toate modulele externe folosite de aplicatie, impreuna cu versiunea acestora.
Capitolul 7. Aplicatie si detalii privind rularea acesteia
7.1 Terminal
Pentru gestiunea tuturor dependintelor, am creat fisierul package.json in care sunt definite toate modulele externe folosite de aplicatie, impreuna cu versiunea acestora si care pot fi instalate usor de acolo folosind managerul de pachete NPM.
Automatizarea initializarii mediului pentru rularea aplicatiei se face folosind un Makefile, ce ruleaza automat comenzile necesare, conform cu ‘regula’ pe care noi alegem sa fie excutata.
SETUP:
update la lista cu pachete din SO;
instalarea platformei nodejs, daca aceasta nu exista;
instalarea bazei de date, mongo;
introducerea in baza de date automat a “utilizatorului”, admin, ce are privilegii precum crearea de noi useri.
RUN:
introducerea in baza de date automat a “utilizatorului”, admin;
pornirea bazei de date;
rularea aplicatiei, ( > nodejs generator.js ).
DROP:
stergerea bazei de date.
Pentru rularea aplicatiei trebuie parcursi urmatorii pasi:
Deschiderea unui terminal folosind < Ctrl+Alt+T > .
Intrarea in directorul aplicatiei (tokenapp) folosind comenzile:
< cd Desktop >, < cd tokenapp > . (folderul se afla pe desktop)
Realizarea setup-ului initial folosind comanda < make setup >
Aceasta comanda v-a rula toate comenzile din interiorul sectiunii SETUP din makefile-ul creat mai sus.
Trebuie urmarit cu atentie terminalul deoarece este posibil ca acesta sa aiba nevoie de privilegii root pentru a face anumite modificari precum update si instalarea anumitor librarii.
Pornirea aplicatiei se realizeaza folosind comanda < make run > .
Odata cu introducerea comenzii terminalul va executa comanda
( >nodejs generator.js ), cu alte cuvinte rularea efectiva a codului.
Pentru golirea bazei de date, in cazul in care este nevoie, se va folosi comanda
< make drop > .
7.2 Browser
Prezentarea grafica a aplicatiei intr-un browser:
Interfata grafica afisata in browser a aplicatiei.
Pagina publica, pagina ce poate fi accesata de orice utilizator.
Pagina privata, acesul la aceasta pagina facandu-se doar pe baza de token.
Pagina de login, in care utilizatorul isi introduce username-ul si PIN-ul aferent.
Initial doar super-userul admin are acces, acesta putand creea ulterior utilizatori noi.
Odata ce adminul este logat acesta are acces la crearea de noi useri si generare de tokeni.
Am creat user-ul vvv cu PIN-ul 111. Acesta este afisat, odata cu un token ce se genereaza automat.
Pagina in care se poate genera un token, evident dupa introducerea PIN-ului corect, cel al user-ului logat. Daca PIN-ul difera se va afisa un mesaj de eroare.
Daca PIN-ul este introdus corect token-ul este afisat. Acesta este criptat cu o functie de hash (SHA1) aplicata de doua ori pentru a creste securitatea criptarii.
Token-ul poate fi introdus o singura data, si acesta este valabil doar 10 secunde de la generare.
Daca depasim acest timp de expirare, primim un mesaj ce ne avertizeaza ca token-ul introdus este incorect sau a expirat.
Daca token-ul este introdus corect, utilizatorul are acces la pagina privata.
Bibliografie
[1] http://www.qreferat.com/referate/informatica/Proiect-atestat-Tehnician-oper824.php
[2]http://www.garykessler.net/library/crypto.html
[3] http://www.securitatea-informatica.ro/securitatea-informatica/securitatea-si-confidentialitatea-datelor-in-retelele-publice/
[4] http://www.aticmd.md/wp-content/uploads/2011/05/Zgureanu-A_Criptarea_Securitatea_Inform_Note-de-curs.pdf
[5] https://en.wikipedia.org/wiki/MD5
[6] http://www.lec-academy.ro/criptare-parole/
[7] http://www.punzakhvac.com/care-este-diferen-a-dintre-sha-i-sha-1-criptare/
[8] https://en.wikipedia.org/wiki/SHA-1
[9] Encyclopedia Of Software Engineering – „ John J. Marciniak ”
[10] Network Security Arhitectures – Expert guidance on designing secure networks Sean Convery, CCIE No.4232
[11] https://www.owasp.org/index.php/Man-in-the-middle_attack
[12]https://en.wikipedia.org/wiki/Replay_attack
[13]https://ro.wikipedia.org/wiki/Client-server
[14] http://www.preferatele.com/docs/informatica/noi/modelul-clientserver43819134.php
Toate link-urile de mai sus au fost accesate și erau funcționale în data de 01.07.2015
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: Aplicatie de Autentificare Bazata pe Token Tokenapp (ID: 161896)
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.
