Aspecte de Securitate In Retelele de Calculatoare

Cuprins

Cap. 1. Introducere

Prezentarea temei. Scopul lucrării.

Cap. 2. Rețele de calculatoare

2.1 Noțiuni generale

2.2 Tipuri de rețele de calculatoare și clasificarea lor.

2.3 Aspecte despre protocolul TCP/IP

2.4 Simularea unei rețele de calculatoare

Cap. 3. Aspecte de securitate în rețelele de calculatoare

3.1 Tipuri de atacuri informatice

3.2 Metode de protecție. Criptografia.

3.2.1 Criptarea cu cheie secretă

3.3.2 Criptarea cu cheie publică

Cap. 4. Aplicație parctică. Algoritmul AES.

Bibliografie

Cap. 1. Introducere

Prezentarea temei. Scopul lucrării.

O parte esențială și vitală din istoria civilizației umane este comunicarea. Fiind înzestrați cu capacitatea de a se relaționa, oamenii au comunicat din cele mai vechi timpuri, sub o formă sau alta. De la început ca și până astăzi vorbirea (capacitatea de a articula sunete) a fost instrumentul cel mai important pentru comunicare .

Dictionarul limbii române definește termenul comunicare astfel: 1. acțiunea de a comunica, 2. înștiințare, veste, știre, contact, relație, legătură.

Există o deosebire între comunicare și comunicație. Comunicația este: 1. Mijlocul de comunicare între două puncte diferite, 2. legătură, contact, sistem tehnic folosit pentru realizarea comunicației. Altfel spus comunicația este suportul fizic pe baza căruia se face posibilă comunicarea.

Dacă în vechime oamenii, care se aflau la o anumită distanță, când doreau să comunice ceva semenilor lor făceau un foc, iar fumul ce se ridica era un semn ce confirma sau infirma un anumit fapt, sau trimiteau porumbei ca și niște veritabili poștași care duceau diferite mesaje, astăzi trăim momente când metodele de a comunica sunt mult mai diversificate și sofisticate.

Odată cu dezvoltarea tehnologică au apărut noi forme de a comunica, astfel că între anii 1832-1844 apare telegrafia, mai apoi în anul 1876 telefonia, în anul 1895 radioul, apoi televiziunea în anul 1884, iar în cele din urmă în 1982 apare internetul.

Astăzi rețelele de comunicații reprezintă o realitate cotidiană pentru fiecare dintre noi indiferent de vârstă, în toate domeniile de activitate (comercial, financiar-bancar, administrativ, educațional, medical, militar etc.), dar și în mediul familial.

Fără a depinde de mediul fizic prin care se realizează (cablu metalic, fibră optică sau mediul wireless) sau de specificul rețelei de transmisie a informațiilor (de calculatoare, de telefonie fixă sau mobilă, de televiziune prin cablu, de distribuție a energiei electrice), securitatea comunicațiilor reprezintă un aspect esențial al serviciilor oferite, fiind critică în cazul informațiilor cu caracter secret din aplicații fianciar-bancare, militare, guvernamentale și nu numai acestea.

Se identifică mai multe aspecte ale securității unei rețele (securizarea accesului fizic și logic, securitatea serviciilor de rețea, secretizarea informațiilor) care se exprimă prin diverși termeni specifici: autentificare, autorizare, asociere cu un cont de utilizator și audit (AAAA – Authentication, Authorization, Accounting, Auditing), confidențialitate, robustețe.

Scopul acestei lucrări este acela de a trece în revistă câteva din aceste aspecte, de a analiza riscuri și vulnerabilități specifice unei rețele de calculatoare, precum și câteva soluții și strategii, tehnici și protocoale de securitate, punând baza pe criptografia datelor, arătată și prin partea pratică unde este prezentată aplicabilitatea algoritmului AES pentru criptare/ decriptare.

Lucrarea de diplomă are următoarea structură:

– în cap.2 voi prezenta noțiuni despre rețelele de calculatoare, de la noțiuni generale până la a prezenta practic prin mici exemple proiectarea unei astfel de rețele.

– cap.3 conține aspecte teoretice în ceea ce privește securitatea în rețele.

– iar în cap.4 aplicația concretă a algoritmului AES care este folosit pentru criptare/decriptare.

– bibliografia constituie o enumerare sub o formă bine precizată a lucrărilor folosite pentru elaborarea proiectului.

Cap. 2. Rețele de calculatoare

2.1. Noțiuni generale

O rețea de comunicații reprezintă un ansamblu de echipamente de comunicații (calculatoare, laptopuri, telefoane, PDA-uri etc.), interconectate prin intermediul unor medii fizice de transmisie (cablu torsadat, coaxial sau optic, linie telefonică, ghid de unde, mediul wireless), în scopul comunicării folosind semnale vocale, video sau de date, precum și al utilizării în comun a resurselor fizice (hardware), logice (software) și informaționale ale rețelei, de către un număr mare de utilizatori. Se disting diverse tipuri de rețele de comunicații (rețele de telefonie fixă, rețele telefonice celulare, rețele de cablu TV, rețele de calculatoare ș.a.) prin intermediul cărora se transmit informații sau se comunică în timp real. [AdR 13]

Calculatoarele personale interconectate în rețele au oferit un nivel superior de performanță în stocarea, procesarea și transmisia informațiilor. Ansamblul tuturor calculatoarelor interconectate între ele în cea mai largă rețea de calculatoare din lume reprezintă așa-numitul INTERNET (INTERnational NETwork).

Conexiuni la Internet se pot realiza în prezent nu numai prin intermediul calculatoarelor, dar și de pe alte echipamente precum telefoane mobile sau PDA-uri.

Comunicațiile între echipamentele interconectate fizic și logic într-o rețea se realizează pe baza protocoalelor de comunicații

Echipamentele de interconectare (modem, hub, switch, bridge, router, access point) sunt responsabile de transferul informațiilor în unități de date specifice (cadre, pachete, datagrame, segmente, celule) și de conversiile de format ce se impun, precum și de asigurarea securității comunicațiilor.

Principiile și ideile ce stau la baza tehnologiei internet au rezlutat din cercetările Agenției pentru Proiecte de Cercetare Avansată – Advanced Research Projects Agency (ARPA). Această tehnologie include un set de standard ce precizează detaliile privind modul în care calculatoarele comnunică, precum și un set de convenții pentru interconectarea rețelelor și dirijarea traficului. Numită official suita de protocoale internet TCP/IP (Internet Protocol Suite) [Scrip08].

Prin protocol se înțelege o suită de reguli de comunicare și formate impuse pentru reprezentarea și transferul datelor între două sau mai multe calculatoare sau echipamente de comunicație.

Tehnologia TCP/IP poate fi utilizată pentru a comunica în orice mulțime de rețele interconectate.

Astfel unele întereprinderi utilizează TCP/IP pentru a interconecta toate rețelele din întreprindere, chiar dacă nici una din ele nu are conexiune cu vreo rețea exterioară, alte grupuri utilizează TCP/IP pentru comunicația între utilizatori aflați la distanțe geografice foarte mari.

Tehnologia TCP/IP formează baza pentru un internet la scară globală ce conectează universități, întreprinderi industrial și comerciale, instituții guvernamentale, locuințe personale, etc.

Printre cei care au participat la fondarea și utilizarea unei inter-rețele globale bazate pe protocoale TCP/IP, se numără National Science Foundation (NFS), Department of Energy (DOE), Department of Defence (DOD), Health and Human Services Agency (HHS) și National Aeronautics and Space Administration (NASA), toate acestea fiind din S.U.A.

2.2. Tipuri de rețele de calculatoare și clasificarea lor.

Rețelele de calculatoare sunt de mai multe feluri în funcție de numărul stațiilor de lucru și aria lor de răspândire

Rețelele se pot clasifica după mai multe criterii, voi enumera pe scurt câteva dintre ele.

A. După tehnologia care este folosită pentru conectarea dispozitivelor.

Rețelele de calculatoare pot fi clasificate și după tehnlogia care este folosită pentru a conecta dispozitive individuale din rețea, cum ar fi:

fibră optică,

Ethernet,

Wireless LAN (din engleză și înseamnă "fără fir"),

HomePNA sau Power line.

Metodele de conectare sunt în continuă dezvoltare și deja foarte diverse, începând cu tot felul de cabluri metalice și de fibră optică, cabluri submarine, și terminând cu legături prin radio cum ar fi Wi-Fi sau Bluetooth, prin raze infraroșii (IrDA) sau chiar prin intermediul sateliților.

Foarte răspândită este metoda Ethernet, termen care se referă la natura fizică a cablului folosit și la tensiunile electrice ale semnalului.

Cel mai răspândit protocol de comunicare în rețelele Ethernet se numește CSMA/CD ("Carrier Sense Multiple Access / Collision Detection"). Dacă sunt utilizate undele radio, atunci rețeaua se numește rețea fără fir (engleză: wireless).

"HomePNA" este un sistem de conectare între ele a calculatoarelor și aparatelor "inteligente" dintr-o locuință, bazat pe fire normale de telefon sau cablu normal de televiziune.

În fine, sistemul "Power line communication" (PLC) se bazează pe rețeaua de curent electric, atât cea de înaltă cât și cea de joasă tensiune, care practic ajung la orice loc din lume.

B. După tipologia lor

Topologia (structura) unei rețele rezultă din modul de conectare a elementelor rețelei între ele.(fig. 2.1) Ea determină și traseul concret pe care circulă informația în rețea "de la A la B". Principalele tipuri de topologii pentru rețelele LAN sunt:

topologia Bus (înseamnă magistrală) – are o fiabilitate sporită și o viteză mare de transmisie;

topologia Ring (inel) – permite ca toate stațiile conectate să aibă drepturi și funcțiuni egale;

topologia Star (stea) – oferă o viteză mare de comunicație, fiind destinată aplicațiilor în timp real.

Rețelele mai mari prezintă o topologie formată dintr-o combinație a acestor trei tipuri.

Fig. 2.1

C. După arhitectura lor

Rețelele de calculatoare mai pot fi clasificate în funcție de relațiile funcționale care există dintre elementele unei rețele, ca de exemplu: Active Networking Architecture, Client-Server Architecture și Peer-to-peer (workgroup) Architecture. [Scrip08]

O altă clasificare funcțională folosește termenii:

Storage Area Network (SAN) – o rețea dedicată interconectării eficiente a dispozitivelor de stocare a datelor.(fig. 2.2)

Fig. 2.2

Network Attached Storage (NAS) – dispozitive de stocare concepute pentru a fi atașate nu la câte un calculator particular din rețea, ci direct la rețea, putând astfel fi puse la dispoziția tuturor calculatoarelor rețelei.(fig. 2.3)

ARHITECTURA este modul de interconectare a componentelor rețelei, pentru a realiza un anumit mod de funcționare.

Arhitectura unui sistem trebuie să ne dea informații despre modul în care se conectează componentele sistemului și despre interacțiunea dintre acestea, dar oferă și o imagine generală a sistemului. Stabilirea arhitecturii sistemului, fie că este vorba despre o rețea sau despre un produs software, este una dintre cele mai importante etape ale realizării unui proiect.

Este vital să se stabilească zonele critice ale sistemului, adică acele componente ce prezintă risc mare de defectare sau care, prin defectarea lor, pot provoca oprirea parțială sau totală a sistemului. Trebuiesc luați în considerare și factorii care ar putea avea influență asupra sistemului (până și condițiile atmosferice ar putea influența funcționarea unei rețele). Pentru reducerea complexității alcătuirii, majoritatea rețelelor sunt organizate pe mai multe nivele (straturi), în sensul împărțirii stricte a sarcinilor: fiecare nivel este proiectat să ofere anumite servicii, bazându-se pe serviciile oferite de nivelele inferioare. Atunci când doua calculatoare comunică, în fapt, se realizează o comunicare între nivelele de același rang ale celor două mașini. Nivelul n al mașinii A realizează schimb de date cu nivelul n al mașinii B prin intermediul unui protocol numit protocolul nivelului n.

În realitate datele nu sunt transmise de la nivelul n aa rețelelor sunt organizate pe mai multe nivele (straturi), în sensul împărțirii stricte a sarcinilor: fiecare nivel este proiectat să ofere anumite servicii, bazându-se pe serviciile oferite de nivelele inferioare. Atunci când doua calculatoare comunică, în fapt, se realizează o comunicare între nivelele de același rang ale celor două mașini. Nivelul n al mașinii A realizează schimb de date cu nivelul n al mașinii B prin intermediul unui protocol numit protocolul nivelului n.

În realitate datele nu sunt transmise de la nivelul n al unei mașini către nivelul n al alteia. În schimb, fiecare nivel realizează prelucrările specifice asupra datelor și le transmit nivelului inferior, până la nivelul fizic unde se realizează schimbul efectiv de date.

Doar din punct de vedere logic se poate vorbi de o "conversație" între nivelele a două mașini. Între oricare două nivele adiacente există o interfață , care stabilește care sunt serviciile oferite nivelului superior. În momentul proiectării arhitecturii rețelei trebuie să se specifice clar numărul de nivele și interfețele aferente [AdR13].

D. După răspândirea geografică

În functie de raspândirea geografică, implicit de dimensiuni, rețelele se clasifică în:

Rețele locale (LAN) – lucrează la nivelul unei clădiri sau al unui grup de clădiri având distanța între statiile de lucru de 10 – 1000 m;

Pentru că rețelele de tip LAN sunt de dimensiuni reduse, timpul de transmisie poate fi prevăzut cu ușurință și nu există întârzieri mari în transmiterea datelor. Atfel administrarea rețelei se simplifică.

Cea mai frecventă tehnologie de transmisie folosește un singur cablu la care sunt atașate toate mașinile. Vitezele de funcționare variază între 10 și 100 Mbps (bps = biți pe secundă), în unele rețele mai noi aceasta viteză este mult mai mare. Întârzierile de transmisie sunt mici iar erorile sunt puține . În măsurătorile de viteză preluate din bibliografie [Tan 97], se consideră că 1 Mbit=106 biti.

Rețelele locale cu difuzare folosesc diverse tipuri de tipologii, cele mai frecvente fiind tipul magistrală (bus) și tipul inel (ring).

Rețele metropolitane (MAN) – lucrează la nivelul unui oraș.

Sunt de fapt versiuni extinse de LAN-uri și utilizează tehnologii similar cu acestea. Ele se pot întinde pe câteva birouri sau pe suprafața unui întreg oraș și pot fi private sau publice. Permit transmiterea de secvențe sonore și pot fi conectate cu rețele locale de televiuziune prin cablu.

Au un mod simplu de proiectare, bazat pe unul sau două cabluri de legătură (o vresiune de magistrală), fără să conțină elemente de comutare care să devieze pachetele.

Rețele teritoriale (WAN) – lucrează la nivelul unei regiuni sau la nivel mondial având distanța între stațiile de lucru de ordinul miilor de kilometri.

Rețeaua conține mașini care execută programele utilizatorilor (aplicații), numite mașini gazdă sau sisteme finale. Gazdele sunt conectate printr-o subrețea de comunicație care transportă mesajele de la o gazdă la alta (ca în sistemul telephonic, între doi vorbitori).

Separarea activitățiilor de comunicare (subrețele) de cele referitoare la aplicații (gazde) simplifică proiectarea rețelei.

O subrețea este formată din linii de transmisie (circuite, canale, trunchiuri) care asigură transportul datelor și elemente de comutare (noduri de comutare a pachetelor, sisteme intermediare, comutatoare de date), numite cel mai frecvent routere. Când sosesc date pe o anumită linie și ajung într-un nod de comutare, aceasta trebuie să aleagă o nouă linie pentru transmiterea datelor.

WAN-urile pot conține cabluri sau linii telefonice între routere. Două routere pot comunica între ele nu numai direct, ci și prin intermediul altor routere, acestea rețin fiecare pachet primit în întregime și îl retransmit când linia de ieșire cerută devine liberă[AdR13].

O problemă care apare este cea legată de tipologia de conectare a routerelor din subrețele : stea, inel, arbore, inele intersectate, neregulată. Rețelele locale astfel proiectate folosesc de obicei

tipologii neregulate. Comunicarea între routere se mai poate face prin intermediul satelițiilor de comunicații sau folosind sisteme radio terestre (routerele fiind dotate cu antene de emisie-recepție).

În cadrul rețelei WAN se folosesc anumite protocoale de rețea pentru a putea transmite date în cadrul unui asemenea gigant. Se folosesc de asemenea adrese de locație numite IP (Internet Protocol) cu ajutorul cărora serverele de internet găsesc mult mai ușor calculatoarele din rețea.

E. După complexitatea lor.

O altă clasificare este în funcție de complexitatea organizarii retelei:

Rețele reale – care necesită la instalare și administrare prezența unor specialiști. Exemplu: reteaua NetWare a firmei Novell.

Rețele false – arată și lucrează ca o rețea, dar nu folosesc echipamente speciale de rețea. Calculatoarele sunt conectate direct prin intermediul porturilor seriale sau paralele. Ele oferă aceleași facilități, dar exploatarea este mai lentă. Acest tip de rețea se recomandă pentru conectarea unui laptop la un calculator desktop pentru copiere ocazională de fișiere.

Rețelele peer sau peer-to-peer (fig. 2.4). Se numesc „rețele între egali“ întrucât toate calculatoarele sunt tratate la fel, fără a se mai insista pe faptul că unele sunt mai bune decât altele. Rețelele peer-to-peer sunt numite și grupuri de lucru (Workgroups), acest termen desemnând un număr mic de persoane. De obicei, o rețea peer-to-peer este formată din cel mult 10 calculatoare.

Fig. 2.4

Rețele bazate pe server (client/server) (fig.2.5) Rețelele bazate pe server au devenit modelul standard pentru interconectarea în rețea. Un server dedicat este un calculator care funcționează doar ca server, nefiind folosit drept client sau stație de lucru. Calculatorul central (serverul) poate fi un calculator obișnuit pe care este instalat un sistem de operare pentru rețea: NetWare, Unix, Linux, OS/2, Windows NT/2000/Server 2003/2008. Acest calculator central controlează toate resursele comune (unități de discuri, imprimante, scanere, modemuri, fișiere, etc), asigură securitatea datelor și sistemului, realizează comunicații între stațiile de lucru

Serverele se numesc "dedicate" deoarece sunt optimizate să deservească rapid cererile clienților din rețea și să asigure securitatea fișierelor și a directoarelor.

Fig.2.5

2.3. Aspecte despre protocolul TCP/IP.

Protocolul TCP/IP este standard pentru Internet datorită unor caracteristici, și anume:

permite comunicarea într-un mediu eterogen, deci se preteaza foarte bine pentru conexiunile din Internet (care este o rețea de rețele eterogene atât din punct de vedere hardware, cât si software);

furnizează un protocol de rețea rutabil, pentru rețele mari, fiind folosit din acest motiv drept protocol de interconectare a acestor rețele.

TCP/IP este o suită de protocoale, dintre care cele mai importante sunt TCP și IP, care a fost transformat în standard pentru Internet de către Secretariatul pentru Apărare al Statelor Unite, și care permite comunicația între rețele eterogene (interconectarea rețelelor). Modelul de referință ISO/ OSI definește șapte niveluri pentru proiectarea rețelelor, pe când modelul TCP/ IP utilizează numai patru din cele șapte niveluri, după cum se vede din figura de mai jos.

Familia de protocoale TCP / IP are o parte stabilă, dată de nivelul Internet (rețea) și nivelul transport, și o parte mai puțin stabilă, nivelul aplicație, deoarece aplicațiile standard se diversifică mereu.

Modelul OSI Modelul TCP/IP

Fig. 2.6 Comparație între modelele OSI și TPC/IP

În ceea ce privește nivelul gazdă-la-rețea (echivalentul nivelul fizic si legătură de date din modelul OSI), cel mai de jos nivel din cele patru, aceasta este mai puțin dependent de TCP/ IP

și mai mult de driver-ele de rețea și al plăcilor de rețea. Acest nivel face ca funcționarea nivelului imediat superior, nivelul Internet, să nu depindă de rețeaua fizică utilizată pentru comunicații și de tipul legăturii de date. Protocoalele din familia TCP/ IP tratează toate rețelele la fel[Tan97].

De aici rezultă un concept fundamental pentru rețelele TCP/ IP, și anume acela că, din punct de vedere al unei rețele globale, orice sistem de comunicații capabil să transfere date contează ca o singură rețea, indiferent de caracteristicile sale. Strategia de a construi nivelurile unui protocol se numește layering.

Toată rețeaua TCP/ IP (Internet-ul) este organizată dintr-un număr foarte mare de rețele mici care comunică între ele prin așa numitele porți (gateway), care sunt calculatoare ce se ocupă de interconectarea rețelelor care vor ieși în Internet, una dintre atribuțiile lor fiind si aceea de a ruta informația. TCP/ IP este construit ca fiind o secventă de datagrame. O datagramă este o colecție de date ce sunt trimise ca un singur mesaj; este o unitate de date si reprezintă obiectul cu care lucrează protocolul. Un pachet este un cumul de datagrame, ce apare pe Ethernet, linii telefonice sau alte tipuri de conexiuni fizice.

Fig. 2.7 Nivelurile modelului TCP/IP

O comparație între modelul OSI și modelul TCP/IP, precum și protocoalele mai importante din suita de protocoale TCP/IP este evidentiată în fig 2.8.

Fig.2.8. Arhitectura de protocoale TCP/IP

Nivelul gazdă- la-rețea

Despre acest nivel (numit și interfață- rețea) modelul TCP/ IP nu spune mare lucru despre ceea ce ar trebui să se întâmple aici, singura mențiune este aceea că o gazdă trebuie să se lege la rețea, pentru a putea transmite date, folosind un anumit protocol. Acest protocol nu este definit și nu variază de la gazdă la gazdă și de la rețea la rețea. Acest nivel face ca funcționarea nivelului superior, numit Internet si respectiv, rețea, să nu depindă de rețeaua fizică utilizată în comunicatie și de tipul legăturii de date. Internet-ul constă din calculatoare individuale (gazde si ruter-e) și o infrastructură de comunicație care le conectează. În cadrul unei singure clădiri sunt utilizate LAN-uri pentru interconectare, dar infrastructura este construită din linii închiriate, punct-la-punct.

În practică, comunicația punct-la-punct este utilizată în principal în două situații:

în primul rând, mii de organizații au una sau mai multe LAN-uri, fiecare cu un anumit număr de calculatoare gazdă și un ruter. Internet-ul este construit din aceste ruter-e și liniile lor închiriate care realizează subrețelele de comunicație;

a doua situație în care liniile punct-la-punct joacă un rol major în Onternet o reprezintă milioanele de utilizatori individuali care au conexiuni de acasă la Internet folosind modemuri și linii telefonice commutate.

Indiferent de modul de conectare la Internet, este necesar un protocol de legătură de date

punct-la-punct pentru încadrare, controlul erorilor și ale funcții.

La acest nivel evoluția protocoalelor este impulsionată de evoluția extrem de rapidă a tehnologiilor de comunicație, care introduc tipuri de legături cu viteze din ce în ce mai mari. Astefel, vom întâlnii linii telefonice închiriate, lucrând la viteze de 57,5 Kbps, cât si fibre optice de 1,544 Mbps. În momentul de față majoritatea calculatoarelor care utilizează TCP/ IP în rețele locale folosesc conexiuni Ethernet cu viteze cuprinse între 10 Mbps și 100 Mbps (rețele Fast-Ethernet).

Protocoalele de la acest nivel gestionează conexiunea la Internet, începând cu sistemele de autentificare la server și terminând cu modemurile de transmisiea pachetelor de date.

La acest nivel sunt utilizate două protocoale, utilizate pentru conectarea la Internet și Web prin intermediul modemului:

SLIP (Serial Line Internet Protocol-protocol Internet pe linie serială)

Permite legături seriale asincrone, este cel mai vechi protocol și el definește o secvență de caractere pentru pachetele IP.

Dintre lipsurile acestui protocol enunțăm: nu face nici un fel de detecție sau corecție a erorilor; suportă doar protocolul IP; fiecare sistem trebuie să cunoască dinainte adresa IP a celuilalt sistem, nici o adresă nu poate fi ascociată dynamic; nu este un standard Internet aprobat; nu furnizează nici o formă de autentificare. Ceea ce trebuie reținut, din punct de vedere al unui utilizator al Internet-ului, este faptul că acest tip de legătură necesită o adresă fixă Internet pentru calculator, care este atribuită de provider-ul de servicii Internet. Acest protocol este utilizat în mod normal pentru linii dedicate și uneori pentru dial-up, iar ca viteză variază între 1200 bps si 19,2 Kbps;

PPP (Point to Point Protocol- protocol punct-la-punct) este un protocol mai robust decât SLIP, care rezolvă toate deficiențele protocolului SLIP și reprezintă un standard Internet. Acest protocol este definit de RFC-urile 1661,1662 si 1663. Este un protocol pentru comunicații între două calculatoare care folosește o interfață serială, utilizat în mod frecvent pentru conectarea la un server. Protocolul PPP, spre deosebire de SLIP, poate coordona mai multe tipuri de protocoale în același timp. Este utilizat din ce în ce mai mult, datorită faptului că permite legarea atât pe legături seriale asincrone, suportă mai multe

protocoale, permite ca adresele IP să fie negociablile în momentul conectării, permite autentificarea, etc. În cazul utilizării acestui tip de legătură, acordarea unei adrese se realizează automat, în momentul stabilirii legăturii la Internet [PilPop 94].

Un posibil scenariu ar arăta în felul următor: calculatorul apelează mai întâi ruter-ul ISP-ului prin intermediul unui modem. După ce modemul a răspuns apelului telephonic si s-a stability o conexiune fizică, calculatorul trimite ruter-ului o serie de pachete LCP (Link Control Protocol- este un protocol de legătură pentru a obține liniile, a le testa, a negocia opțiunile și pentru a elibera liniile atunci când nu mai este nevoie de ele).

După ce parametrii s-au stability de comun accord, sunt trimise mai multe pachete NCP (Network Control Protocol) pentru a negocia opțiunile nivelului rețea într-un mod independent de protocol folosit pentru nivelul rețea; avem câte un NCP pentru fiecare nivel de rețea suportat. Presupunem că sistemul vrea să ruleze o suită de protocoale TCP/ IP si va avea nevoie de adresa IP. Furnizorul asociază o adresă IP dinamică sistemului. NCP pentru IP este folosit pentru a realiza asocierea adreselor IP. Din acest moment calculatorul este un calculator gazdă Internet si poate trimite si primi pachete IP. Când utilizatorul termină transmisia, NCP este folosit pentru a întrerupe conexiunea la nivelul legăturii de date. Trebuie subliniat faptul că între adresa IP și cea de rețea nu se află nici o legătură. Nivelul gazdă-la-rețea depinde mai puțin de protocolul TCP/ IP și maqi mult de driver-ele de rețea și al plăcilor de rețea.

Nivelul Internet

Scopul nivelului Internet este de a trimite pachetele sursă din orice rețea către o alta și să facă astfel încât acestea să ajungă la destinație indiferent de ruta și rețeaua din care au fost transmise.

Nivelul Internet încapsulează pachetul într-o datagramă IP, completează antetul datagramei, utilizează algoritmul de dirijare pentru a determina dacă să livreze datagrama direct sau să o trimită unui router și pasează datagrama interfeței de rețea corespunzătoare pentru a fi transmisă.

Tot nivelul internet este cel care tratează datagramele care sosesc, verificându-le validitatea, și utilizează algoritmul de dirijare pentru a decide dacă datagrama trebuie prelucrată local sau trebuie trimisă mai departe.

Acest nivel corespunde nivelului Rețea al modelului OSI.

Adresele IP sunt date static de către administrator sau dinamic de DHCP sau BOOTP și depind de soft-ul de rețea .

Când se trimit sau primesc date, mesajul este împărțit în părți mai mici numite pachete sau datagrame . Fiecare pachet cuprinde adresa celui care trimite datele, dar și a celui care le primește.

O datagramă IP arată conform fig.2.9.

Fig. 2.9. Diagrama IP

Pe lângă protocolul IP, care este utilizat pentru transferul de date, la acest nivel mai pot funcționa și alte protocoale, în vederea unei bune functionări a transmisiei, ele fiind de fapt protocoale de control la nivel de rețea.

Acestea sunt:

ICMP – Internet Control Message Protocol (protocolul mesajelor de control în Internet);

ARP – Address Resolution Protocol (protocolul de rezoluției a adresei), de menționat faptul ca acest protocol este utilizat atunci când cele două calculatoare (sursă și destinație) fac parte din aceeași rețea fizică, deci nu este necesară utilizarea routere-lor.

RARP – Reverse Address Resolution Protocol (protocolul de rezoluție inversă a adresei) – permite unui calculator să-și obțină, atunci când n-o cunoaște, adresa IP proprie;

Nivelul Transport

TCP ( Transmission Control Protocol) este un protocol orientat pe conexiuni, care permite ca un flux de octeți trimiși de un calculator să ajungă fără erori pe orice alt calculator din rețeaua Internet.

Pentru a realiza transferul de date, TCP fragmentează fluxul de octeți în pachete și transmite fiecare pachet la nivelul Internet. La destinație, procesul TCP receptor reasamblează pachetele primite într-un flux de ieșire.

Înainte de a începe transferul datelor, între cele două procese utilizator (programe de aplicație) se stabilește, prin intermediul rețelei, o conexiune logică numită circuit virtual.

Livrarea la destinație a fluxului de octeți în ordinea în care au fost emiși, fără pierderi și fără duplicate, se realizează prin folosirea unei tehnici de confirmare pozitivă cu retransmitere (dacă confirmarea de primire nu a fost transmisă într-un timp prestabilit, pachetul este transmis din nou) , combinată cu fereastră glisantă (sistem de confirmare în espectativă) . Mecanismul ferestrei glisante, utilizat de TCP, operează la nivelul octeților și nu al pachetelor, permițând o transmisiune eficientă și un control al fluxului.

Principiul ferestrei glisante:

Emitentul transmite pachete către receptor fără să primească o confirmare, dar pornește un cronometru pentru fiecare pachet transmis

Receptorul transmite o confirmare pentru fiecare pachet primit, prin indicarea numărului de secvență al ultimului pachet primit corect

Emițătorul deplasează fereastra la fiecare mesaj de confirmare („glisează” fereastra)

Fereastra înainte de glisare

Fereastra după glisare

În cazul protocolului TCP principiul ferestrei glisante este folosit la nivel de octet; segmentele transmise și confirmările transportă numere de secvență pentru fiecare octet. Dimensiunea ferestrei este exprimată în număr de biți și nu în număr de pachete, și este determinată de către receptor după ce conexiunea a fost stabilită. Fiecare mesaj de confirmare include și dimensiunea ferestrei pe care receptorul o poate să o manipuleze.

unde:

A – octeți transmiși pentru care s-a primit confirmare

B- octeți transmiși pentru care nu s-a primit confirmare

C- octeți ce pot fi transmiși fără a se aștepta confirmare

D- octeți ce nu pot fi încă transmiși

Nivelul Aplicație

Nivelul Aplicație are rolul de a face legătura dintre o aplicație și serviciile oferite de rețea pentru acea aplicație. Are ca scop traducerea informațiilor în formate pe care mașinile care comunică între ele le pot înțelege.

Printre protocoalele care funcționează la acest nivel se regăsesc cele pentru: terminalul virtual (TELNET), transferul de fișiere (FTP) , poșta electronică (SMPT), serviciul numelor de domenii (DNS), folosit pentru stabilirea corespondenței dintre numele gazdelor si adresele rețelelor.

FTP – File Transfer Protocol (FTP) este serviciul ce dă posibilitatea utilizatorilor de a transfera fișiere de la un calculator aflat în Internet, care se numește remote host, pe calculatorul local.

FTP este cea mai folosită metodă pentru transferul fișierelor de la un calculator la altul, prin intermediul Internetului, indiferent de tipul și dimensiunea acestora.

Transferul poate fi de două tipuri:

Upload – fișierele sunt transferate de pe calculatorul local pe cel de la distanță;

Downlod- fișierele sunt transferate de pe calculatorul aflat la distanță pe cel local; și este realizat în format text sau binar.

TELNET Remote Login – este un program simplu, pe bază de text, care permite clientului să se conecteze la alt computer, utilizând Internetul.

DNS (Domain Name Service) este un protocol care traduce adresele Internet literale în adrese Internet numerice, adrese utilizate de un calculator pentru a găsi un calculator receptor.

Caracteristicile sistemului de nume (DNS) sunt:

folosește o structură ierarhizată;

deleagă autoritatea pentru nume;

baza de date cu numele și adresele IP este distribuită.

PING – Packet InterNet Groper – este un serviciu care poate fi utilizat pentru testarea conectivității între două sisteme. Este utilizat pentru controlarea configurațiilor și testarea conexiunilor.

2.4. Simularea unei rețele de calculatoare

Cu toate că nu este subiectul principal tratat de lucrarea de față, voi exemplifica în cele ce urmează, folosind programul GNS 3, cum se poate configura o rețea de calculatoare [NG11].

Pentru aceasta, într-o primă instanță trebuie configurat GNS3-ul de așa manieră încât la finalul fiecărei sesiuni de lucru proiectul să fie salvat într-un același fisier. Setările pentru proiectul curent se gasesc sub meniul Edit/Preferences.(fig.2.10)

Fig. 2.10

Este de recomandat să folosim ca imagini IOS – c7200-advipservicesk9-mz.122-33.SRE6.bin

IOS vine de la Internetwork Operating System și este sistemul de operarare care rulează pe routere și switchuri.

Nu este recomandat folosirea de imagini din serii mai mici de c2600 și absolut exclus c1700. Sunt sisteme în general instabile în GNS3.

Asocierea imaginilor cu echipamentele se face din aplicația GNS3, în meniu, la Edit -> IOS Images and Hypervisors (fig.2.11) se poate asocia un router cu o imagine asemeni exemplului alăturat. La Idle PC se lasă gol deocamdată iar dacă memoria RAM minim necesară nu este suficientă vom folosi tool-ul din partea de jos a ferestrei – “Verifică capacitatea minimă de RAM cerută”.

Fig.2.11

Apoi vom trece la generarea unei valori Idle PC.

Routerul are propriul procesor iar emularea unui sistem de operare de router va tinde sa ocupe întreaga putere de procesare a sistemului gazdă.

Astfel, fără Idle PC, în momentul în care vom porni un router, utilizarea procesorul calculatorului se va ridica la 100%, fapt care va îngreuna folosirea lui. Prin Idle PC se atribuie routerului putere de procesare doar în mod secvențial și nu continuu. Astfel, după atribuirea unei valori Idle PC, utilizarea procesorului va scădea înapoi la 2-3%.

Pentru generarea unei valori Idle PC, trebuie efectuați următorii pași:

se pornește routerul cu Start,

intrăm în consolă

introducem comenzile subliniate așa cum sunt in fig 2.12 – (cele subliniate cu roșu)

Fig.2.12

Vom proiecta în GNS3 topologia formată din două rutere R1, R2 si switch-ul SW1.(fig 2.13).

Fig. 2.13

Următorul pas va fi cel în care vom automatiza configurația inițială. Atunci când un nou ruter este adus în fereastra de lucru vine cu o configurație predefinită care poate fi găsită în fișierul baseconfig.txt, și care poate fi completat cu setări pe care le dorim default. Calea către baseconfig.txt este setată din meniul la Edit -> IOS Images and Hypervisors[1]

baseconfig.txt

!

hostname %h

!

no ip domain lookup

no ip icmp rate-limit unreachable

ip tcp synwait 5

!

line con 0

exec-timeout 0 0

logging synchronous

privilege level 15

no login

line aux 0

exec-timeout 0 0

logging synchronous

privilege level 15

no login

!

!

End

setari predefinite posibile

enable

conf t

alias exec c config t

no ip domain-lookup

ip tcp synwait 5

no service time log

no service time debug

line con 0

no login

no exec-timeout

logging synchronous

privilege level 15

exit

line vty 0 4

no login

privilege level 15

exit

După salvarea, modificările efectuate pot fi vizualizate prin adăugarea unui nou ruter -> Start -> Terminal, iar în terminalul deschis se rulează comanda show run. Considerând topologia din (Fig. 2.13) cele două rutere pot fi configurate[1] din terminalele asociate celor două rutere urmând comenzile marcate în chenar roșu din (Fig 2.14) în final configurația poate fi testată utilizând comanda ping.

Fig.2.14

În cele ce urmează vom adăuga host-uri folosindu-ne de VPCS poate simula pana la 9 PC-uri. Fiecare din ele utilizeaza pereche porturi UDP care comunică cu routerele Cisco care rulează sub mediul GNS3[NG11].

Vom rula fisierul executabil vpcs. Din comand line se poate selecta Virtual PC-ul dorit de la 1…n si implicit se pot atribui ip-uri VPCS. (fig.2.15).

Fig.2.15

Vom modifica tipologia din fig.2.13, adăugând încă un nod și un terminal de tip cloud(fig.2.16)

Fig.2.16

Routerele R1 și R2 le vom configura așa cum arată fig.2.17 (textul subliniat în roșu)

Fig.2.17

Vom testa rețeaua rezultată în VPCS folosind comenzile PING și TRACE.(fig.2.18).

Fig.2.18

Cap. 3. Aspecte de securitate în rețelele de calculatoare

Introducere

Securitatea informatică este o problemă vitală pentru toți utilizatorii de internet, fie că sunt furnizori de servicii fie că sunt utilizatori. Nevoia tot mai mare de comunicare, pe de o parte și nevoia de protecție și securitate a informațiilor pe de altă parte sunt două cerințe diferite și chiar opuse care trebuie asigurate în rețelele și sistemele informatice [Scrip08].

În condițiile în care milioane de ceățeni folosesc în mod curent rețelele de comunicații și calculatoare pentru operațiuni bancare, cumpărături, plata taxelor și serviciilor etc. problema securității este de maximă importanță. Au apărut multe organizații și organisme internaționale care se ocupă de cele mai diverse aspecte ale securității informaționale, de la aspectele legislative, la cele organizatorice, procedurale și funcționale.

Pentru a se putea înțelege ceea ce dorește a se „apăra” în cadrul rețelei, se vor prezenta mai întâi natura atacurilor ce pândesc o rețea de calculatoare.

Acestea se identifică în trei mari categorii:

confidențialitate

disponibilitate

integritate.

Între acestea există o interdependență foarte strânsă, evidențiindu-se faptul că disponibilitatea și confidențialitatea sunt efectiv legate de integritate.

3.1 Tipuri de atacuri informatice

Mai jos voi expune doar câteva dintre tipurile (cât și formele) de ”atacuri” la securitatea unei rețele de calculatoare.

Atacuri care se referă la integritatea rețelei ca sumă de echipamente interconectate și a legăturilor dintre acestea și/sau la integritatea datelor ce circulă în cadrul ei.

Această categorie generează politici diferite prin prisma celor două forme de integritate: fizică – a echipamentelor și legăturilor dintre acestea și informațională – relativ la date și folosirea lor. Ca definiții acceptate pentru integritate deosebim: integritatea datelor – se referă la calitatea, autenticitatea, corectitudinea și acuratețea informațiilor stocate într-un sistem informatic și integritatea sistemelor – drept posibilitatea operării corecte și cu succes a resurselor informatice.

Atacuri care atentează la confidențialitatea sistemului.

Prin aceasta înțelegem informația care este disponibilă doar în cazurile în care politicile de securitate sunt îndeplinite. De multe ori această proprietate este atât de importantă încât este cerută de lege sau prin contract.

Atacuri care atentează la disponibilitatea de a folosi sistemul de calcul.

Se referă la acele forme de atac care încearcă sau chiar reușesc să facă inutilizabil sistemul prin privarea posibilității de a-și oferi disponibilitatea (răspunsul și tratarea cererilor existente) utilizatorilor înregistrați sau pur și simplu prin punerea sistemului în forma de „negare a serviciilor” [Dab09].

Tot în cadrul categoriilor de atacuri asupra rețelelor putem să vorbim despre atacuri pasive sau atacuri active.

Atacurile pasive sunt acele atacuri în care intrusul observă informația care trece prin canal, fără să interfereze cu fluxul sau conținutul mesajelor. Se face doar analiza traficului, descoperirea identității a entităților care comunică, descoperă lungimea și frecvența mesajelor chiar dacă conținutul acestora rămâne ascuns. Aceste atacuri nu cauzează pagube și nu încalcă regulile de confidențialitate. Scopul lor este de a asculta datele care sunt vehiculate prin rețea.

Atacurile active sunt acelea în care intrusul se angajează în furtul mesajelor, modificarea lor, ștergerea, rularea, schimbarea conținutuli sau a adreselor, redirecționarea, substituirea, refuzul unui serviciu, repudierea etc. Acestea sunt serioase, cauzează perjudicii mari și consecințe juridice. Tot în categoria atacurilor active intră și programele create cu scop distructiv care afectează serios, uneori catastrofal, securitatea calculatoarelor și a informațiilor. În această categorie intră: virușii, bombele logice, viermii, trapele, programele tip cal troian, etc.

Când spunem tip de atac ne referim la modul în care un hacker(cracker) reușește să preia controlul unui sistem și ce poate el să facă după ce a reușit penetrarea lui. Făcând o paranteză hackerul este este un expert în informatică, care se ocupă cu studiul în profunzime al programelor informatice (sisteme de operare, aplicații), adesea folosind tehnici de inginerie inversă (demontare), cu scopul de a obține cunoștințe care nu sunt accesibile publicului larg. Cei ce folosesc aceste cunoștințe în scopuri ilegale, pentru a compromite securitatea sistemelor informatice sau a aplicațiilor, sunt de fapt crackeri (spărgători), însă în percepția publicului (formată de obicei de mass-media) noțiunile de hacker și cracker adesea se confundă[2].

Cele mai des întâlnite tipuri de atacuri sunt următoarele[Dab09]:

atacuri social engineering;

atacuri DoS;

scanări și spoofing;

source routing și alte exploituri de protocoale;

exploituri de software;

troieni, viruși și worms;

Atacurile de tip social engineering. Social engineering aduce în prim plan omul și greșelile lui. Atacatorul trebuie doar să posede “people skills” sau carismă. Ei câștigă încrederea utilizatorilor (sau și mai bine, a administratorilor) și obțin drepturi cu ajutorul cărora se pot conecta pe sisteme. În multe cazuri, această metodă este cea mai ușoară formă de obținere de acces la un sistem informațional.

Atacuri Denial-of-Service (DoS). Atacurile DoS sunt printre cele mai “populare” printre hackeri(crackeri) atunci când este vizată întreruperea serviciilor unei rețele sau ale unui server. Scopul unui atac DoS este de a genera o cantitate foarte mare de trafic care pune în imposibilitatea de a mai răspunde într-un timp rezonabil a serverelor, routere-lor sau altor echipamente, astfel ele nemaifiind capabile să funcționeze normal.

Distributed Denial-of-Service. Acest tip de atac face cam același lucru ca și DoS-ul, numai că se folosește în atingerea scopului său de computere intermediare, numite agenți, pe care rulează unele aplicații (zombies) care au fost instalate pe calculatoare anterior.

Atacul Ping of Death. Mai este cunoscut și sub numele de large packet ping. Se creează un pachet IP mai mare decât valoarea admisă de specificațiile protocolului IP, adică 65 536 bytes. Sistemul țintă este compromis, soluția fiind un reboot (de multe ori forțat – sistemul blocându-se).

Scanning-ul și spoofing-ul. Termenul de scanner, în contextul securității în IT, se referă la o aplicație software folosită de către hackeri pentru determinarea porturilor TCP sau UDP deschise pe un sistem.

3.2 Metode de protecție. Criptografia.

Există mai multe metode de a ne proteja împotriva acestor atacuri, atât la nivelul de personal computer cât și în cadrul unei rețele.(fig.3)

Fig.3 Nivele distincte pentru creșterea nivelului securității[Dab09]

Una dintre metode este folosirea de password-uri. Poate pare hazliu dar cei din cadrul Universității Carnegie Mellon din Statele Unite ale Americii au descoperit soluția perfectă pentru o parolă (password) care să fie greu de spart sau de aflat. Nu este vorba despre un algoritm complex si nici măcar despre o ecuație ce trebuie memorată, ci despre simple greșeli.

Cercetătorii Universității Carnegie Mellon din Statele Unite ale Americii spun ca o banală greșeală gramaticală și un typo fac dintr-o parolă foarte simplu de ghicit una extrem de greu de spart.

De o securitate îmbunătățită putem beneficia folosind și ultima versiune a aplicației "Windows Firewall" inclusă încă din sistemul de operare Windows Vista. Dar securitate înseamnă mult mai mult decât updatarea sistemului de operare, o aplicație antispyware/antivirus sau o aplicație firewall. Un sistem de operare trebuie să ofere încredere utilizatorilor și să protejeze datele (mai mult sau mai puțin confidențiale) stocate pe aceste sisteme. În acest domeniu al securității (protecția datelor, identitate și control acces) intră și tehnologiile "User Account Control" sau "Internet Explorer 7 – Protected Mode"[Dab09].

"User Account Control" – tehnologie care nu există în Windows XP, apărând prima dată în Windows Vista și în Windows Server 2008 – reduce posibilitatea că o aplicație cu privilegii minime (low) să dobândească în mod automat și necontrolat privilegii sporite și să aibă acces la fișierele utilizatorului fără consimțământul acestuia.

Antivirusul – un software instalat cu scopul clar de a te proteja de viruși, viermi și alte coduri malițioase. Majoritatea aplicațiilor antivirus monitorizează traficul în fiecare moment, scanând în timp ce se navighează pe Internet sau scanând mesajele primite pe mail (cu tot cu atașamente) și periodic oferind posibilitatea rulării unei scanări la nivelul întregului sistem în căutarea de cod malițios[Dab09];

Dar secretul transmisiei, confidențialitatea mesajelor și autentificarea surselor de informație se asigură prin diverși algoritmi de criptare a datelor. Criptografia reprezintă o ramură a matematicii, care se ocupă cu securizarea informației, precum și cu autentificarea și restricționarea accesului într-un sistem informatic.

În realizarea acestora se utilizează metode matematice, bazate de exemplu pe dificultatea factorizării numerelor foarte mari.

Criptarea [Scrip08] (encryption) reprezintă procesul de conversie a informației obișnuite (text în clar – plaintext – M) într-un text neinteligibil (text cifrat – ciphertext – C), cu ajutorul unei chei de criptare, Ke :

C = E Ke (M)

Decriptarea (decryption) este inversul criptării, adică, trecerea de la textul cifrat, neinteligibil, la textul original, cu ajutorul unei chei, Kd

M =D Kd (C)

Există două categorii de tehnici de criptare, definite în funcție de tipul de cheie utilizat:

• criptarea cu cheie secretă;

• criptarea cu cheie publică.

Se cunosc numeroase tehnici de criptare bazate pe algebră (Laplace), topologie matematică și geometrie (Poincaré) sau combinatorică. Multe dintre acestea utilizează sisteme liniare, relativ ușor predictibile.

Algoritmii de criptare utilizați în prezent sunt:

AES

DES

3DES

RSA

MD4

MD5

SHA-1

Astăzi, se dezvoltă noi algoritmi de criptare a datelor mai performanți, cu timp redus de procesare și diversitate mare a cheilor de criptare, bazați pe noi teorii matematice și fizice (criptografie cuantică, criptografie haotică).

Metodele bazate pe teoria haosului pot fi aplicate cu succes pentru secretizarea și pot fi aplicate și în spații multidimensionale (ca în cazul imaginilor digitale 2D și 3D, respectiv pentru transmisii simultane de date-voce, audio-video etc) [Scrip08].

Principiul criptografiei bazate pe teoria haosului este dat de difuzia și confuzia parametrilor traiectoriilor generate pe baza cheii de criptare și a mesajului transmis.

La mici variații ale cheii de transmisie trebuie să apară modificări extreme ale traiectoriei din spațiul fazelor pentru sistemul dinamic utilizat. Astfel se asigură rezistența criptosistemului față de atacurile brute bazate pe încercarea tuturor cheilor posibile de transmisie.

3.2.1 Criptarea cu cheie secretă

Criptosistemele convenționale au fost concepute pe principiul cheii secrete, cu o funcție de criptare inversabilă cunoscută doar de utilizatori. Cheia secretă constituie punctul vulnerabil al sistemului deoarece odată aflată, securitatea tuturor informațiilor transmise este compromisă. Decriptorul aplică funcția inversă pentru deducerea secvenței originale, folosind aceeași cheie ca la criptare.(fig. 3.1)

Fig.3.1 Schema de principiu a unui sistem de comunicații cu criptare cu cheie secretă

Criptarea cu cheie secretă, cunoscută sub numele de criptare simetrică, utilizează o singură cheie, K, pentru a cripta și decripta datele.

Algoritmii cu chei secrete se împart în două mari categorii:

• algoritmi bloc (block cipher), care procesează blocuri de date de lungime fixă;

• algoritmi de șiruri (stream cipher), care procesează la un moment dat un singur bit sau simbol.

.

3.2.2 Criptarea cu cheie publică

Un criptosistem cu cheie publică, bazat pe funcții greu inversabile, folosește de fapt o funcție inversabilă într-un singur sens (one-way function), a cărei inversă nu poate fi calculată practic întrucât acest calcul implică depașirea fie a capacității sistemelor de calcul utilizate, fie a timpului în care informațiile transmise sunt valabile și considerate secrete. (fig.3.2)

Acest principiu de criptare a fost propus în 1976 de doi cercetători, Diffie și Hellman (DH).

Fig.3.2. Schema de principiu a unui sistem cu criptare asimetrică

Criptarea cu cheie publică sau criptarea asimetrică utilizează o pereche de chei. Una dintre aceste chei, cheia publică ( Ke ) este utilizată pentru criptarea informațiilor și se caracterizează prin faptul că este distribuită în rețeaua publică de comunicații, în timp ce cealaltă cheie, numită cheia secretă ( Kd ) folosită pentru decriptarea informațiilor trebuie să aibă caracter secret. Din cheia publică, este imposibil să se determine cheia secretă [Scrip08].

Algoritmii cu cheie publică se bazează, cel mai adesea, pe complexitatea calculelor și operațiilor care trebuie realizate. Ele pot fi utilizate pentru generarea semnăturilor digitale.

Cheile private corespunzătoare cheilor publice trebuie întotdeauna securizate și transmise pe canale de comunicații securizate.

Cap. 4. Aplicație parctică. Algoritmul AES.

Exemplu al folosirii algoritmului AES(Rijndael) pentru criptarea fișierelor.

Linia de comandă este:

aesxam input_file_name_output_file_name[D|E] hexadecimalkey

unde E reprezintă criptarea iar D decriptarea fișierului pe care îl dorim să-l folosim cu cheia hexadecimală cu secvențe de 32,48 și 64 de cifre:

Exemplu de criptare sau decriptare aes.enc:

esxam file.c file.enc E 0123456789abcdeffedcba9876543210

aexam file.enc file2.c D 0123456789 abcdeffedcba9876543210

care ar trebui să returneze un fișier ”file2.c” identic cu ”file.c”

Aplicație:

#include <stdio.h>

#include <stdlib.h>

#include<memory.h>

#include ” aes.h”

#define BLOCK_LEN 16

#define READ_ERROR -7

#define WRITE_ERROR -8

void cycles (unsigned long *rtn)

{

_asm // read the Pentium Time Stamp Counter

{

_emit 0x0f // complete pending operations

_emit 0xa2

_emit 0x0f //read time stamp counter

_emit 0x31

mov ebx,rtn

mov [ebx],eax

mov [ebx + 4],edx

_emit 0x0f // complete pending operations

_emit 0xa2

}

}

#define RAND (a,b) (((a = 36969* (a & 65535) + (a >>16))<<16)+\

(b = 18000 * (b & 65535) + (b >> 16 )) )

void fillrand (char *buf, cons int len)

{ static unsigned long a [2], mt=1, count =4;

static char r[4];

int i;

if (mt) {mt=0;cycles (a); }

for (i=0; i<len; ++i)

{

If(count =4)

{

*(unsigned long *) r =RAND (a [0], a [1];

count =0;

}

buf [i]=r[count++];

}

}

int encfile(FILE *fin, FILE * fout, aes_ctx* ctx, const char* ifn, const char * ofn)

{ char but [BLOCK_LEN], dbuf[2* BLOCK_LEN];

fpos_t flen;

unsigned long i, l, rlen;

fillrand(dbuf,BLOCK_LEN) //set a random IV

fseek(fin, 0, SEEK_END) // get the file length

fgetps(fin, & flen); rlen=(unsigned long) flen;

fseek (fin, 0, SEEK_SET); // reset to start

if (rlen<BLOCK _ LEN) // file length of less than one block

{

1= fread(dbuf+BLOCK_LEN ,1, BLOCK_LEN, fin), rlen -=1;

If(rlen) // read bytes and verify length

return READ_ERROR;

for(i=0; i<1; ++i) // xor file bytes with IV bytes

dbuf [i+BLOCK_LEN] ^=dbuf[i];

aes_enc_blk(dbuf, dbuf, ctx); // ecncrypt lower half of buffer

// encrypt bytes from position 1 to position 1+ BLOCK_LEN-the

//file bytes plus a second encryption of some of the IV bytes

aes_enc_blk(dbuf+1, dbuf+1,ctx);

1+=BLOCK_LEN; // write the encrypted bytes

if(write (dbuf, 1, 1 fout!=1) // (IV + file bytes)

return WRITE_ERROR;

}

else

{

aes_enc_blk(dbuf, buf, ctx); // encrypt and write IV block

if (fwrite(buf, 1, BLOCK_LEN, fout) ! =BLOCK_LEN)

return WRITE_ERROR;

while(!feof(fin) && rlen)

{ //read a block and reduce remaining

1= fread(buf, 1, BLOCK_LEN, fin), rlen -=1; // byte count

if(1!=BLOCK_LEN && rlen) // verify length of read(only

return READ_ERROR; // last read can be part block)

for(I =0; i<BLOCK_LEN;++i) // do CBC chaining prior to

buf [i] ^=dbuf[i]; // encryption

aes_enc_blk(buf, dbuf, ctx);

if(rlen<BLOCK_LEN) // if only a part block remains

{

if (rlen&&fread (dbuf+BLOCK_LEN,1,BLOCK_LEN!=rlen)

return READ_ERROR; // read it into top half if dbuf[]

//encrypt from position rlen to rlen + BLOCK_LEN-the last

// file bytes plus a part of the last encrypted block –this

// is called ‘ciphertext stealing’

for (i=0; i<rlen; ++i) // do CBC chaining prior to

dbuf[ I + BLOCK_LEN] ^ = dbuf[i]; // encryption

aes_enc_blk(dbuf + rlen, dbuf + rlen, ctx);

1=rlen+BLOCK_LEN); //set final buffer length

}

if(fwrite(dbuf,1,1, fout) !=1)

return WRITE_ERROR; // write encrypted block

}

}

return 0;

}

int decfile (FILE*fin, FILE * fout, aes_ctx*ctx, const char * ifn, const char *ofn)

{ char buf[BLOCK_LEN], buf2[BLOCK_LEN), dbuf[2*BLOCK_LEN];

char *b1, *b2, *bt;

fpos _t flen;

unsigned long i, l, rlen;

fseef(fin, 0, SEEK_END);

fgetpos (fin, &flen); rlen =(unsigned long)flen;

fseek(fin, 0, SEEK_SET);

if (rlen<2*BLOCK_LEN) //original length of less than one block

{

1=fread (dbuf, 1, 2 * BLOCK_LEN, fin), rlen-=1;

If (rlen) // read bytes in and verify length

return READ_ERROR // ( encrypted IV + file bytes)

1-=BLOCK_LEN // original file length

// decrypt from position 1 to position 1+BLOCK_LEN

aes_dec_blk(dbuf+1, dbuf+1, ctx);

aes_dec_blk(dbuf, dbuf, ctx); // decrypt lower halt of buffer

for(i= 0; I < 1;++i) // remove IV xor

dbuf[i] ^= dbuf [i+BLOCK-LEN];

if (fwrite(dbuf, 1, 1, fout)!=1) // write out decrypted bytes

return WRITE_ERROR;

}

else

{ // we need two buffers because we have to keep the previous

// ciphertext block- the pointers b1 and b2 are swapped once per

// loop so that b2 points to new ciphertext block and b1 to the

// last ciphertext block

rlen-=BLOCK_LEN; b1=buf1; b2 =buf2;

if(fread(b1, 1, BLOCK_LEN, fin)!= BLOCK_LEN)

return READ_ERROR; // input the IV block

aes_dec_blk(b1, b1, ctx); // and decrypt it

while (!feof(fin) && rlen)

{

1=fread(b2, 1 , BLOCK_LEN,fin), rlen-=1; // byte count

if(1!=BLOCK_LEN && rlen) // verify length od read(only

return READ_ERROR; // last read can be part block)

If (rlen<BLOCK_LEN) // if only a part block remains

{

for(i=0; i<BLOCK_LEN; ++i) // move bytes from last but

dbuf[i] = b2[i]; // one block into lower half of dbuf

if(rlen++ fread (dbuf+ BLOCK_LEN, 1, BLOCK_LEN, fin)! = rlen)

return READ_ERROR; // read remaining bytes into upper

// half of dbuf

// decrypt from position rlen to rlen + BLOCK_LEN –that is

// the file bytes plus a part of the last but one encrypted

// block

aes_dec_blk(dbuf + rlen, dbuf + rlen, ctx)

for (i=0; i < rlen; ++i) // unchain the CBC using the

dbuf [i+BLOCK_LEN] ^= dbuf[i]; // last ciphertext block

// set output buffer and correct final length

b2 =dbuf; 1= rlen + BLOCK_LEN;

}

aes_dec_blk(b2, dbuf, ctx); // decrypt the input buffer

for(I = 0, i <BLOCK_LEN; ++i) // unchain the CBC using the

dbuf [i] ^= b1[i]; // last chphertext block

if(fwrite(dbuf, 1, 1, fout) !=1)

return WRITE_ERROR; //and write the decrypted block

bt =b1, b1=b2 ,b2=bt; // swap the imput buffer pointers

}

}

return 0

}

int main (int arge, char *argv[])

{ FILE *fin=0, *fout=0;

char *cp, ch, key [32];

int i, by, key_len, err =0;

aes_ctx ctx[1];

if(arge ! =5 || toupper(* argv [3]) ! = ‘D’ && toupper (* argv[3]) ! = ‘E’)

{

printf (“usage : aesxam in _ filename out _ filename[d/e] key_in_hex\n”);

err = -1; goto exit;

}

ctx-> n_md = 0; // ensure all flags are initially set to zero

ctx->n_blk=0;

cp = argv[4]; // this is a pointer to the hexadecimal key digits

i=0; // this is a count for the input digits processed

while (i<64 && *cp) // the maximum key length is 32 bytes and

{ // hence at most 64 hexadecimal digits

ch = toupper (*cp++); // process a hexadecimal digit

if (ch>=’0’&& ch <=’9’)

by = (by <<4) + ch – ‘0’;

else if (ch>= ‘A’&& ch <=’F’)

by = (by <<4) + ch – ‘A’ + 10;

else // error if not hexadecimal

{

printf (“key must be in hexadecimal notation \n”);

err = -2; goto exit;

}

// store a key byte for each pair of hexadecimal digits

if (I ++ & 1)

key [i/2-1]= by & 0xff;

}

if(*cp)

{

printf(“The key value is too long\n”);

err=-3, goto exit;

else if ( I <32||(i & 15))

{

printf (‘The key length must be 32,48 or 64 hexadeciamal digits’n”);

err=-4; goto exit;

}

key_len=i/2;

if (!(fin = fopen(argv[1],”rb”))) // try to the input file

{

printf (“The inputb file :%s could not be epened\n”, argv [1]);

err=-5, goto exit;

}

if(!fout=fopen(argv[2], “wb”))) // try to open the output file

{

printf (“The input file %s could not be epened\n”,argv[1];

err=-6, goto exit;

}

if (toupper(*argv[3])=’E’) // encryption in Cipher Block Chaining mode

{

aes_enc_key(key, key_len, ctx);

err=encfile(fin, fout, ctx, argv[1], argv[2]);

}

else // decryption in Chiper Block Chaining mode

{

aes_dec_key(key,key_len,ctx);

err = decfile(fin, fout, ctx, argv[1], argv[2]);

}

exit:

if (err == READ_ERROR)

printf(”Error reading to output file: %s\n”, argv[1]);

if (err == WRITE_ERROR)

printf (“Error writing to output file: %s\n”, argv[2]);

if (fout)

fclose(fout);

if (fin)

fclose(fin);

return err;

}

Bibliografie

[Tan97] Andrew S. Tanenbaum, „Rețele de calculatoare”, Ed. Computer Press Agora, 1997.

[PilPop 94] Florin Vladimir Pilat, Sorin Popa, Sorin Deaconu, Florin Radu, ”Introducere în interenet”, Ed. Teora 1994.

[Scrip08] Luminița Scripcariu, Ioan Bogdan, Ștefan Victor Nicolaescu, Cristina Gabriela Gheorghe, Liliana Nicolaescu. ”Securitatea rețelelor de informații”, Ed. Venus Iași 2008.

[Dab09] Dabija George ” Securitatea sistemelor de calcul și a rețelelor de calculatoare”

[IoD07] Ionescu Dan. ”Rețele de calculatoare”, Ed. All, Alba Iulia 2007.

[NG 11] Narcis Ghita. “Simularea rețelelor de calculatoare” UPT Timișoara 2011.

[AdR 13] Adrian Runceanu ”Rețele de calculatoare” Univ. Constantin Brâncuși Tg. Jiu 2013

[1] Microsoft Corporation https://onedrive.live.com

[2] www.wikipedia.org

Bibliografie

[Tan97] Andrew S. Tanenbaum, „Rețele de calculatoare”, Ed. Computer Press Agora, 1997.

[PilPop 94] Florin Vladimir Pilat, Sorin Popa, Sorin Deaconu, Florin Radu, ”Introducere în interenet”, Ed. Teora 1994.

[Scrip08] Luminița Scripcariu, Ioan Bogdan, Ștefan Victor Nicolaescu, Cristina Gabriela Gheorghe, Liliana Nicolaescu. ”Securitatea rețelelor de informații”, Ed. Venus Iași 2008.

[Dab09] Dabija George ” Securitatea sistemelor de calcul și a rețelelor de calculatoare”

[IoD07] Ionescu Dan. ”Rețele de calculatoare”, Ed. All, Alba Iulia 2007.

[NG 11] Narcis Ghita. “Simularea rețelelor de calculatoare” UPT Timișoara 2011.

[AdR 13] Adrian Runceanu ”Rețele de calculatoare” Univ. Constantin Brâncuși Tg. Jiu 2013

[1] Microsoft Corporation https://onedrive.live.com

[2] www.wikipedia.org

Similar Posts