Protocoale de Securitate

CUPRINS

1. INTRODUCERE

Fiecare din ultimele trei secole a fost dominat de o anumită tehnologie. Secolul al XVII-lea a fost secolul marilor sisteme mecanice care au însoțit Revoluția Industrială. Secolul al XIX-lea a însemnat era mașinilor cu aburi. În secolul XX, tehnologia cheie este legată de colectarea , prelucrarea și distribuirea informației. Printre alte realizări, am asistat la instalarea rețelelor telefonice mondiale, la invenția radioului și a televiziunii, la nașterea și creșterea nemaivăzută a industriei de calculatoare și la lansarea sateliților de comunicații.

Datorită progresului tehnologic rapid, aceste domenii converg în ritm alert, iar diferențele între colectarea, transportul, stocarea și prelucrarea informației dispar pe zi ce trece. Pe măsură ce posibilitățile noastre de a colecta, prelucra și distribui informația cresc tot mai mult, cererea pentru o prelucrare și domeniul calculatoarelor a cunoscut un progres spectaculos într-un timp scurt. În primele decenii de existență sistemele de calcul erau foarte centralizate, de obicei în interiorul unei singuri încăperi. O companie de mărime mijlocie sau o universitate ar fi putut avea unul sau două calculatoare, în timp ce instituțiile mari aveau cel puțin câteva zeci. Ideea că în mai puțin de 20 de ani calculatoarele la fel de puternice, mai mici decât un timbru poștal, vor fi produse pe scară largă în milioane de exemplare părea desprinsă dintr-un scenariu științifico-fantastic.

Întrepătrunderea dintre domeniul calculatoarelor și cel al comunicațiilor a avut o influență profundă asupra modului în care sunt organizate sistemele de calcul Conceptul de „centru de calcul”- în accepțiunea sa de cameră unde există un calculator mare la care utilizatorii vin să-și ruleze programele-este total depășit. Vechiul model al unui singur calculator care servește problemelor de calcul ale organizației a fost înlocuit de un model în care munca este făcută de un număr mare de calculatoare separate, dar interconectate Aceste sisteme se numesc rețele de calculatoare.

În primele decenii ale existenței lor, rețelele de calculatoare au fost folosite de cercetătorii din universități pentru transmiterea poștei electronice și de către funcționarii corporațiilor pentru a partaja imprimantele. În aceste condiții, problema securității nu atrăgea de loc atenția. Dar acum, când milioane de cetățeni obișnuiți folosesc rețele pentru operațiuni bancare, cumpărături și plata taxelor, securitatea rețelei apare la orizont ca o mare problemă potențială.

Securitatea este un obiect vast și acoperă o multitudine de imperfecțiuni. În forma sa cea mai simplă, ea asigură că persoane curioase nu pot citi sau, și mai rău, modifica mesajele destinate altor utilizatori. Se ocupă de cei care încearcă să apeleze servicii la distanță pe care nu sunt autorizați să le folosească. Securitatea se ocupă de problemele legate de capturarea și falsificarea mesajelor autorizate și de cei ce încearcă să nege faptul că au trimis anumite mesaje.

Majoritatea problemelor de securitate sunt cauzate intenționat de persoane răuvoitoare ce încearcă să obțină anumite beneficii sau să provoace rău cuiva. Câțiva dintre cei care comit în mod obișnuit astfel de fapte sunt menționați în următoarea figură:

Problemele securității rețelei pot fi împărțite, în mare, în patru domenii: confidențialitate, autentificare, nerepudiere și controlul integrității. Confidențialitatea se referă la păstrarea informației de parte de neautorizați. Autentificarea reprezintă determinarea identității persoanei cu care vorbești înainte de a dezvălui informații importante sau de a intra într-o afacere. Nerepudierea implică semnături: cum să dovedești că un client a făcut într-adevăr o comandă pentru zece milioane de nimicuri de 89 de cenți fiecare, dacă, mai târziu, el pretinde că prețul era 69 de cenți? În fine, cum poți fi sigur că un mesaj pe care l-ai primit a fost cel trimis cu adevărat și nu unul pe care un adversar răutăcios l-a modificat în tranzit?

Toate aceste aspecte (confidențialitate, autentificare, nerepudiere și controlul integrității) apar și în sistemele tradiționale, dar cu câteva diferențe semnificative. Confidențialitatea și integritatea sunt realizate prin folosirea poștei înregistrate și prin sigilarea documentelor.

1.1. MODELUL GENERAL AL UNEI REȚELE DE CALCULATOARE

O rețea de calculatoare reprezintă un ansamblu format din mai multe tipuri de echipamente:

– calculatoare (gazdă, host)

-procesoare frontale (front-end)

-terminale

care sunt legate împreună prin intermediul unor subrețele de comunicații. Acestea din urmă sunt formate din liniile de comunicație și calculatoarele de comutație. Rolul subrețelelor de comunicație este de a asigura dirijarea (rularea) mesajelor de la entitatea sursă la cea destinație. Un model general al unei rețele de calculatoare este prezentat în figura 1.1. Se observă existența și a unor procesoare de tip poartă (gateway) care au rolul de a interconecta între ele rețele diferite, făcând conversii necesare de formate și protocoale.

Figura1.1. Modelul general al unei rețele

Pentru a reduce complexitatea rețelelor, sistemul lor de operare este proiectat sub forma unor niveluri, ale căror număr și funcții diferă de la o rețea la alta (figura 1.2). Scopul fiecărui nivel este de a oferi servicii nivelurilor superioare, fără ca acestea să cunoască detalii de implementare a serviciilor. Ca urmare, între două niveluri succesive, există o interfață care este definită prin operațiile primitive și serviciile oferite de nivelul inferior celui superior. Fiecare nivel arhitectural de pe un nod conversează cu nivelul corespunzător din alt nod pe baza unui protocol specific acelui nivel. Ansamblul de niveluri și protocoale aferente alcătuiesc arhitectura unei rețele.

Figura 1.2. Prelucrarea pachetelor de date într-o comunicație inter-procese

Fiecare nivel din stiva de protocoale are o anumită contribuție la securitatea rețelei. În nivelul fizic, ascultarea firelor poate fi zădărnicită prin închiderea liniilor de transmisie în tuburi sigilate conținând gaz de argon la presiuni înalte. Orice încercare de a sfredeli tubul va duce la pierderi de gaz, reducând presiunea și trăgând alarma. Anumite sisteme militare folosesc această tehnică.

La nivelul legătură de date, pachetele transmise pe o linie punct-la-punct pot fi codificate când părăsesc una dintre mașini și decodificate când intră în cealaltă. Toate detaliile pot fi manipulate la nivelul legătură de date, fără ca nivelurile mai înalte să aibă cunoștință de ceea ce se petrece. Această soluție eșuează, totuși, atunci când pachetele trebuie să traverseze mai multe rutere, deoarece pachetele trebuie decriptate în fiecare ruter, făcându-le astfel vulnerabile la atacurile din interiorul ruterelor. De asemenea, ea nu permite ca anumite sesiuni să fie protejate (de exemplu, acelea ce implică cumpărăturile on-line prin cărți de credit), iar altele nu. Cu toate acestea, criptarea legăturii (link Encryption), cum este numită această metodă, poate fi adăugată cu ușurință la orice rețea și este adeseori utilă.

La nivelul rețea, pot fi instalate ziduri de protecție pentru a păstra pachetele în interior sau pentru a păstra pachetele în afara acestuia. La nivelul transport, conexiuni întregi pot fi criptate de la un proces la celălalt. Cu toate că aceste soluții conduc la realizarea confidențialității și mulți oameni muncesc pentru a le îmbunătăți, nici una dintre ele nu soluționează problema autentificării sau nerepudierii într-un mod suficient de general. Pentru a rezolva aceste probleme, soluțiile trebuie să se găsească la nivelul aplicație.

ISO a elaborat un standard numit OSI (Open Sistem Interconection) care reprezintă cadrul general de dezvoltare a rețelelor neomogene. De-a lungul ultimilor ani, noi și noi standarde au venit să precizeze structura serviciilor și protocoalelor corespunzătoare celor șapte nivele ala arhitecturii OSI.

1.2. VULNERABILITATEA REȚELELOR DE CALCULATOARE

O rețea de calculatoare este în general o structură deschisă, la care se pot conecta noi tipuri de echipamente. Acest lucru conduce la o lărgire necontrolată a cercului utilizator cu acces nemijlocit la resursele (programe, fișiere, baze de date etc.).

Vulnerabilitatea rețelelor se manifestă cu pregnanță pe două planuri: posibilitatea modificării sau distrugerii informației, adică atacul la integritatea ei fizică și, pe de altă parte, posibilitatea folosirii neautorizate a informațiilor, adică scurgerea lor din cercul limitat de utilizatori stabilit. Trebuie definiți câțiva termeni cu care se va opera în continuare [ISO89a].

Integritatea resurselor unei rețele înseamnă că toate resursele.

a) sunt întotdeauna disponibile utilizatorilor indiferent de defectele de funcționare hard sau soft, sau ale încercărilor ilegale de sustragere a informațiilor (apărarea împotriva pierderilor de date);

b) sunt totdeauna disponibile indiferent de încercările care pot apărea privind modificarea informațiilor (apărarea împotriva alterării datelor).

Securitatea resurselor unei rețele înseamnă că toate operațiile cu aceste resurse să fie făcute întotdeauna sub controlul unor reguli strict definite.

Caracterul privat reprezintă dreptul individual de a controla sau influența ce informație referitoare la acea persoană poate fi memorată în fișiere sau baze de date și cine are acces la aceste date.

O rețea sigură este aceea în ale cărei componente (resurse și operații) se poate avea încredere, adică furnizează servicii de calitate și corecte (care funcționează conform cerințelor și specificațiilor). Deoarece o rețea este alcătuită din componente diferite, ea reprezintă o zonă convenabilă pentru diferite atacuri cu operații ilegale, lucru care conduce la concluzia că protecția a devenit unul din aspectele operaționale vitale ale unei rețele [HELL76], [HOFF87].

Securitatea și în special caracterul privat trebuie să constituie obiectul unei analize eficiente în cazul rețelelor din următoarele motive:

(1) Rețelele sunt ansambluri foarte complexe de calculatoare. Este foarte dificil să se obțină o schemă completă a tuturor entităților și a operațiilor existente la un moment dat, astfel încât rețelele sunt vulnerabile la diferite tipuri de atacuri sau abuzuri. Complexitatea este generată de:

– dispersarea geografică, uneori internațională a componentelor (nodurilor) rețelei;

– implicarea mai multor organizații în administrarea unei singure rețele;

– existența unor tipuri diferite de calculatoare și sisteme de operare;

– existența unui număr mare de entități.

(2) În viitorul imediat rețelele de calculatoare vor deveni o parte esențială din viața socială și individuală. De funcționarea lor corectă depinde activitatea guvernamentală, comercială, industrială și chiar personală.

(3) Pe măsură ce calculatoarele personale pot fi conectate de acasă în rețele, o parte de activități pot fi făcute de persoane particulare. Trebuie avute în vedere tipurile de date pe care persoanele le pot citi, care sunt celelalte persoane cu care pot comunica, la ce programe au acces etc.

(4) Tot mai multe informații memorate în fișiere separate devin posibil de corelat în intermediul rețelelor.

(5) Se poate pleca de la premiza că informația este vulnerabilă la atac în orice punct al unei rețele, de la introducerea ei până la destinația finală. În particular informația este mai susceptibilă la atac atunci când trece prin liniile de comunicații. Măsurile puternice de control ale accesului în entitățile externe, bazate pe parole, scheme de protecție în sisteme de operare etc. fac mai atractive atacurile asupra liniilor rețelei, decât asupra calculatoarelor gazdă (host).

1.3. CLASIFICAREA ATACURILOR ASUPRA REȚELELOR

În general un (calculator) intrus se poate plasa în orice punct al unei rețele, având ca obiec1) Rețelele sunt ansambluri foarte complexe de calculatoare. Este foarte dificil să se obțină o schemă completă a tuturor entităților și a operațiilor existente la un moment dat, astfel încât rețelele sunt vulnerabile la diferite tipuri de atacuri sau abuzuri. Complexitatea este generată de:

– dispersarea geografică, uneori internațională a componentelor (nodurilor) rețelei;

– implicarea mai multor organizații în administrarea unei singure rețele;

– existența unor tipuri diferite de calculatoare și sisteme de operare;

– existența unui număr mare de entități.

(2) În viitorul imediat rețelele de calculatoare vor deveni o parte esențială din viața socială și individuală. De funcționarea lor corectă depinde activitatea guvernamentală, comercială, industrială și chiar personală.

(3) Pe măsură ce calculatoarele personale pot fi conectate de acasă în rețele, o parte de activități pot fi făcute de persoane particulare. Trebuie avute în vedere tipurile de date pe care persoanele le pot citi, care sunt celelalte persoane cu care pot comunica, la ce programe au acces etc.

(4) Tot mai multe informații memorate în fișiere separate devin posibil de corelat în intermediul rețelelor.

(5) Se poate pleca de la premiza că informația este vulnerabilă la atac în orice punct al unei rețele, de la introducerea ei până la destinația finală. În particular informația este mai susceptibilă la atac atunci când trece prin liniile de comunicații. Măsurile puternice de control ale accesului în entitățile externe, bazate pe parole, scheme de protecție în sisteme de operare etc. fac mai atractive atacurile asupra liniilor rețelei, decât asupra calculatoarelor gazdă (host).

1.3. CLASIFICAREA ATACURILOR ASUPRA REȚELELOR

În general un (calculator) intrus se poate plasa în orice punct al unei rețele, având ca obiectiv interceptarea traficului de mesaje (figura 1.3). Acțiunile pe care le poate executa sunt de două tipuri:

(1) Atacuri pasive în cadrul cărora intrusul observă informația ce trece prin canal, fără să interfere cu fluxul sau conținutul mesajelor. Ca urmare se face doar analiza traficului, prin citirea identității părților care comunică și „învățând” lungimea și secvența mesajelor vehiculate pe un anumit canal logic, chiar dacă conținutul acestora este neinteligibil.

(2) Atacuri active în care intrusul se angajează fie în furtul mesajelor fie în modificarea, rularea sau inserarea de mesaje false. Aceasta înseamnă că el poate șterge, întârzia sau modifica mesaje, poate să facă inserarea unor mesaje false sau vechi, poate schimba ordinea mesajelor, fie pe o anumită direcție, fie pe ambele direcții ale unui canal logic.

Ca urmare se pot identifica până acum două tipuri de atacuri: atacuri de modificare a șirului de mesaje și atacuri asupra serviciilor cu mesaje (cum sunt înlăturarea sau întârzierea mesajelor). Aceste atacuri presupun existența unor conexiuni între două entități. Inițial conexiunea trebuie stabilită într-o manieră sigură, prin verificarea identității celor două părți precum și a integrității în timp a conexiunii. Atacurile asupra conectării inițiale, ce includ reluarea unor date din conexiuni anterioare valide, se numesc atacuri asupra conexiunii inițiale.

Figura 1.3. Interceptarea traficului într-o rețea

Noul concept de sistem distribuit ridică la un nivel superior problemele circumscrise securității rețelelor. Cercetările în domeniul arhitecturii sistemelor distribuite, a sistemelor de operare distribuite, a limbajelor de programare pentru aplicații distribuite, noile tipuri de comunicații (one-to-many, broadcasting etc.) ca și integrarea comunicațiilor multimedia, pun și vor pune cu siguranță probleme cu totul speciale de securitate și protecție a entităților, datelor, programelor și operațiilor.

1.4. SECURITATEA CALCULATOARELOR PERSONALE ȘI A REȚELELOR LOCALE

Nu toate calculatoarele personale sunt legate în rețea. Dar virtual, toate calculatoarele, în rețea sau nu, conțin informații senzitive, care fac invitații la un compromis între ușurința accesului și securitatea datelor memorate în fișiere și baze de date. Este foarte ușor pentru cineva familiarizat puțin cu lucrul pe PC – azi acest lucru este valabil pentru multă lume – să umble la calculator și să copieze o listă cu clienți, fișiere personale sau orice alte informații care sunt considerate confidențiale.

Multă lume consideră că securitatea pe un PC este problematică și prea scumpă. Nu toate aceste scuze sunt valabile întotdeauna. Securitatea pe un PC care nu este conectat în rețea este ușor de instalat, folosit și întreținut. Adesea, adăugând un program de securitate se rezolvă o serie de probleme. Dar este acest lucru necesar? Datele s-ar putea încuia într-un birou sau fișet, dacă sunt pe hârtie, atunci, când sunt într-un calculator, trebuie protejate cu un program special de securitate.

1.4.1. Securitatea în centre mici de prelucrare a datelor

Se obișnuia ca securitatea să fie destul de simplă în centrele mici de calcul, cu minicalculatoare sau mici mainframe-uri. Administratorul centrului de calcul ținea camera calculatorului sub cheie și folosea parole pentru controlul accesului la datele din sistem. Adesea măsurile de securitate constau în mai puțin de câteva ansambluri de proceduri. Adaptarea pe scară largă a microcalculatoarelor în lucrările făcute la firme și departamente a adăugat măsuri complexe de protecție. Administratorii centrelor de calcul și-au revăzut procedurile și și-au dezvoltat măsuri de securitate. Motivul principal pentru dezvoltarea politicii de securitate este folosirea informaticii ca instrument pentru comunicații. O politică de securitate adecvată constă în a comunica personalului utilizator al facilităților de calcul și administrației, cerințele de securitate. Dezvoltarea politicii de securitate necesită o analiză a riscurilor: nu puteți determina măsurile împotriva riscurilor până nu știți care sunt acestea. Pentru fiecare amenințare identificată, politica ar trebui nu numai să descrie protecțiile ce vor fi puse la punct, ci și acțiunile ce vor fi adoptate dacă amenințarea este concretizată. O politică de securitate va servi ca un ghid de control al avariilor dacă se întâmplă realizarea unui risc.

Introducerea microcalculatoarelor în întreprinderi sau departamente a realizat o diferențiere: calculatorul central este plasat, de obicei, într-un loc sigur, adesea încuiat într-o cameră specială. Programele și datele sunt salvate prin copiere, printr-o procedură aplicată periodic. Uzual, accesul la date este controlat prin parole: de multe ori sistemul de parole este administrat centralizat astfel încât administratorul centrului de calcul controlează toate cererile de acces. Dar chiar dacă aceste controale sunt active în uz, microcalculatoarele le fac mai puțin efective, datorită posibilităților de acces la structurile interne ale sistemului de operare.

Principalele două caracteristici care fac microcalculatoarele așa de mult folosite astăzi sunt: memorarea locală a datelor și prelucrarea acestora în locul unde sunt memorate. Aceste caracteristici dau însă și cele mai multe bătăi de cap legate de securitate. Datele locale creează necesitatea salvării lor în diferite compartimente unde sunt memorate informațiile. Și dacă microcalculatorul are un Floppy-disc sau un modem, datele pot fi scoase sau introduse în microcalculatoare fără orice posibilitate de control centralizat.

În analiza riscurilor, inerente în folosirea microcalculatoarelor, trebuie considerat nu numai costul daunelor, dacă sau produs stricăciuni, ci și probabilitatea riscului. Cea mai mare atenție trebuie acordată acelor riscuri a căror probabilitate și efecte sunt ridicate. Cele mai curente și cele mai costisitoare sunt acelea datorate greșelilor umane. Nu există limite ale tipurilor de erori ce pot fi făcute de utilizatori și nu te poți păzi de toate acestea. Dar dacă implementezi o politică de securitate bine gândită, aceasta va permite o recuperare a datelor și în cele mai rele cazuri.

Probabil zona de risc cea mai largă în folosirea microcalculatoarelor este ușurința cu care pot fi manipulate datele. Datele pot fi șterse din sistem, date persoanelor neautorizate și chiar distruse. Anumite companii au încercat să rezolve problema ștergerii neautorizate a datelor folosind LAN-uri cu stații de lucru fără disc. Înlăturarea unităților de Floppy-disc, reduce expunerea la furtul datelor. Totuși scurgerea informațiilor din LAN poate rămâne o problemă mare. Un utilizator poate introduce date și apoi să le memoreze pe calculatorul server al LAN făcând astfel ca acestea să devină disponibile și altor utilizatori, care altfel nu ar avea acces la ele. Acest tip de eșec al securității este mult mai probabil să fie rezultatul unei greșeli decât al unui act intenționat.

Larga folosire a comunicațiilor de date creează altă zonă de preocupare. Orice microcalculator care are un port serial poate fi echipat cu un modem. La 2400 bps sau mai mult, cantități mari de date pot fi exportate sau importate într-un timp scurt. Spre deosebire de „spargerea” sistemului de protecție din LAN, transmiterea neautorizată a datelor nu este posibil să fie accidentală.

Programele sunt la fel de vulnerabile furtului ca și datele. Dacă cineva vinde software furat, este posibil ca un program pentru care se plătesc sute sau chiar mii de dolari să ajungă pe mâinile unor utilizatori neautorizați. Un producător de soft care identifică o copie a programelor sale în mâini neautorizate poate încerca să obțină despăgubiri financiare de la cumpărătorul original. Introducerea neautorizată a programelor sau a datelor este un risc la fel de mare ca și ștergerea neautorizată. De asemenea introducerea neautorizată a programelor creează o cale de penetrare pentru programe rău intenționate (viruși, viermi și cai troieni) care pot dăuna datelor sau programelor.

După analizarea riscurilor inerente în folosirea microcalculatorului, se poate crea o politică de securitate. Se elaborează politica de securitate informatică în scris, într-un singur document. Dar colecția de proceduri care poate fi suficientă pentru un centru de calcul, nu este suficientă și pentru prelucrare distribuită cu microcalculatoare LAN sau în rețele de arie largă (WAN). Politica de securitate care a fost redactată, trebuie dată spre înștiințarea tuturor celor care lucrează cu calculatoarele și sunt afectați de riscurile de securitate.

1.4.2. Modelul de securitate în rețele locale (LAN)

Principalul model de securitate pentru un calculator, o bancă sau altceva seamănă cu o ceapă. Niveluri de securitate înconjoară subiectul ce trebuie protejat. Fiecare nivel izolează subiectul și îl face mai greu de accesat în alt mod decât în cel în care a fost planificat.

(1) Securitatea fizică

Securitatea fizică este nivelul cel mai exterior al modelului de securitate și constă, în general, în încuierea echipamentelor informatice într-un birou sau într-o altă incintă. Securitatea fizică merită o considerație specială. Problema cea mai mare o constituie salvările pentru copii de rezervă ale datelor și programelor; siguranța păstrării acestor suporți de salvare este o mare problemă. În aceste situații rețelele locale sunt de mare ajutor: dacă toate fișierele schimbate frecvent rezidă pe un server, aceleași persoane care lansează salvările pentru minicalculatoare sau mainframe-uri, pot face același lucru și la server. Microcalculatorul, ca orice piesă costisitoare, ar trebui să fie protejat și de pericolul furtului. Păstrarea în afara zonelor publice este una dintre cele mai bune forme de protecție. Simpla încuiere a echipamentelor va preveni mutările ascunse precum și furtul.

Într-un sistem în care prelucrarea este distribuită, prima măsură de securitate fizică care trebuie avută în vedere este prevenirea accesului la echipamente.

(2) Niveluri logice de securitate

Cele mai interioare niveluri ala modelului de securitate sunt privite ca securitate logică, adică acele metode care asigură controlul accesului la resursele și serviciile sistemului.

Securitatea logică are mai multe niveluri, împărțite în două grupe mari: în niveluri de securitate a accesului (NSA) și niveluri de securitate a serviciilor (NSS). NSA constau în disponibilitatea de a controla, de a verifica identitatea și de a stabili drepturile de acces ale utilizatorului; ele sunt de nivel mai înalt decât NSS. NSS sunt însărcinate cu controlul drepturilor de accesare a serviciilor sistemului.

(a) Niveluri de securitate a accesului (NSA)

Cel mai înalt NSA este nivelul de acces la sistem (NAS). Acest sistem este răspunzător de a determina dacă și când rețeaua este accesibilă tuturor utilizatorilor, unor grupuri sau numai unor stații individuale. El poate fi , de asemenea, răspunzător pentru decuplarea unei stații, ca și de gestiunea evidenței accesului. NAS execută de asemenea deconectarea forțată, dictată de supervizor. NAS poate, de exemplu, să prevină conectarea în afara orelor de serviciu și să întrerupă toate sesiunile după un anumit timp. În spatele NAS se află nivelul de acces la cont (NAC). Acest nivel verifică dacă utilizatorul care se leagă cu un anumit nume și cu o parolă, există și are un profil utilizator valid.

Nivelul cel mai interior în NSA este nivelul drepturilor de acces (NDA). După ce se trece prin NAS și NAC, NDA determină ce privilegii de conectare are utilizatorul (de exemplu, contul poate avea sesiuni care totalizează 4 ore pe zi sau contul poate utiliza doar stația 27). Câteva din aceste funcții care se pot implementa cu NSA sunt acordarea de conturi (pentru timpul de conectare, utilizarea discului și așa mai departe) și gestiunea evidenței accesului utilizatorilor.

(b) Niveluri de securitate a serviciilor (NSS)

Nivelul de securitate a serviciilor (NSS), care se află sub (NSA), controlează accesul la serviciile sistem, cum ar fi fire de așteptare, I/O la disc și gestiunea serverului. Cel mai înalt NSS este nivelul de control al serviciilor (NCS), care este responsabil cu funcțiile de avertizare și de raportare a stărilor serviciilor. De asemenea el activează și dezactivează diferite servicii.

Odată ce NCS a stabilit un serviciu, nivelul de drepturi la servicii (NDS) determină exact cum folosește un anumit cont, un serviciu dat. De exemplu, un cont poate avea dreptul de a adăuga fișiere numai imprimantei nr. 1 dar are drepturi depline de a adăuga și șterge fișiere imprimantei nr. 3. NDS administrează, de asemenea, drepturile specifice unui cont. Dacă contul este un membru al unuia sau mai multor grupuri, atunci NDS se va asigura ca acest cont să moștenească drepturile grupului. De exemplu, un cont poate avea doar drepturile de a citi, deschide și căuta fișiere în subdirectoarele operatorului.

Se pot include și servicii de înalt nivel specifice software-ului (SIS) precum și servicii la nivel scăzut specifice hardware (SSH). SIS sunt operațiuni care nu sunt limitate hardware – de exemplu, cererea de a deschide un fișier după nume. Alte servicii sunt accesul la fire de așteptare și la cutiile poștale. SIS sunt de fapt construite prin SSH și pot necesite mai multe funcții de nivel scăzut pentru a se executa. SSH sunt dependente de hardware. Aceste servicii sunt „cărămizile” fundamentale de construcție ale sistemului și acoperă nivelurile de I/O la sectoarele de disc și de alocare/eliberare a blocurilor de memorie.

(3) Conectare sigură

Odată stabilită conexiunea, NSA validează și definește contul. Operațiile actuale ce trebuie executate sunt controlate de NSS, care împiedică cererile ce nu sunt specificate în profilul utilizatorului. Accesul într-un sistem de securitate perfect trebuie să se facă prin aceste niveluri de securitate, de sus (NAS) în jos (SSH). Dar când serverele folosesc doar NSA pentru a controla accesul la sistem, pentru ca apoi să permită execuția apelurilor directe la SSH, nivelurile NSS sunt ușor de evitat iar operațiunile neautorizate pot fi executate fără a fi detectate. Această se întâmplă când toate celelalte niveluri ale NSS sunt implementate și executate în serverul client.

Orice sistem care lasă să se evite unul sau mai multe niveluri ale modelului de securitate implică riscul de a fi nesigur.

1.4.3. Securitate prin parole și cifrare

(1) Sisteme cu parole

Cel mai simplu sistem de parolă este un program care rulează când se face încărcarea sistemului de operare, cere o parolă și nu va lăsa să se continue încărcarea sistemului până când nu se introduce parola corectă. O metodă obișnuită pentru a activa programul corespunzător este folosirea unei linii ca SERVICE=PASSWORD.SYS în fișierul CONFIG.SYS. O schemă atât de simplă poate avea deficiențe evidente – de exemplu, calculatorul rămâne permanent vulnerabil după ce a fost încărcat cu succes sistemul de operare.

Un atac frontal la orice sistem de parole, chiar dacă este vorba de unul simplu, este greoi; a repeta pornirea calculatorului și a aștepta ghicirea parolei este un lucru mare consumator de timp.

Oricum, și IBM și Microsoft vând un program care „sparge” orice sistem cu parolă de control al accesului sub DOS, care nu folosește cifrarea: IBM îl numește PC–DOS; Microsoft îl numește MS-DOS. Încărcând sistemul de operare de pe un Floppy-disc care nu are fișierele CONFIG.SYS și nici AUTOEXEC.BAT, orice protecție posibilă prin parolă este evitată și se poate elimina sau altera orice fișier de pe disc.

Problema sistemelor cu parolă constă în faptul că ele nu reprezintă o caracteristică a securității – ele sunt o caracteristică a insecurității, urmărind permiterea unui acces controlat într-un sistem, altfel (fără cunoașterea parolei) de nepătruns.

(2) Cifrare autonomă transparentă

Restrângerea accesului poate fi logică, impusă de echipamente sau programe special destinate, făcând accesul imposibil fără cunoștințe speciale. Cifrarea este cel mai simplu mod de restrângere a accesului. Utilizarea datelor cifrate, prin intermediul unui program de descifrare, poate părea ca și folosirea unei parole sistem – chiar pare același lucru utilizatorului, care nu poate face distincția între o parolă și o cheie de descifrare. Dar bineînțeles că nu este același lucru. Dacă se depășește sau se desființează parola sistem, totul este accesibil; pe când chiar dacă se înlătură programul de descifrare tot nu se poate citi nimic din fișierele cifrate.

O remarcă importantă este că: nu calculatorul trebuie protejat, ci datele memorate de acesta. Folosirea cheilor sau parolelor de acces constituie căi adecvate pentru a proteja calculatorul, însă problema nu poate fi rezolvată doar așa; datele, care trebuiesc de fapt protejate, nu există numai în calculator, dar și în multe alte copii pe suporți de arhivare, plasați în alte incinte.

Pentru a asigura securitatea datelor, trebuie luată în considerare nu numai prevenirea accesului neautorizat, ci și evitarea pierderii datelor. Prevenirea accesului neautorizat este cel mai bine realizată prin a nu avea copii ale fișierelor peste tot; prevenirea pierderii datelor cere cât mai multe copii posibile. Cifrarea poate rezolva această contradicție, simplu și eficient. Dacă copiile de arhivare pe discuri sunt cifrate într-un mod sigur, se poate face un număr nelimitat de duplicate, fără a compromite datele confidențiale. De aceea, chiar dacă nu se folosește cifrarea datelor în activitatea zilnică, s-ar putea folosi în realizarea copiilor.

(a) Cea mai simplă cale de a implementa cifrarea pe un microcalculator este un program autonom de cifrare – descifrare. În funcție de comandă, el va cifra sau descifra un fișier specificat, cu parola (cheia) furnizată de utilizator. Astfel de programe sunt simplu de scris, dar nepractic de utilizat. De exemplu, pentru a edita un document confidențial, cifrat anterior, în timpul unei sesiuni tipice de editare, trebuie:

– să se părăsească editorul;

– să se apeleze programul de descifrare; să se specifice numele fișierului și cheia de cifrare potrivită, apoi să se aștepte ca întregul fișier să fie descifrat;

– să se reintre în editor;

– să se editeze documentul;

– să se părăsească editorul;

– să se apeleze programul de cifrare, să-i se specifice numele fișierului și cheia de cifrare potrivită, apoi să se aștepte până ce întregul fișier este cifrat;

– să se reintre în editor.

În plus, trebuie să se rescrie toți suporții de salvare. Dacă editorul a creat și șters singur toate fișierele temporare, trebuie să se suprascrie tot spațiul liber de pe disc pentru eventualitatea în care date importante ar fi lăsate aici.

O rafinare a unui astfel de program de cifrare-la-cerere (autonom) este de-al face rezident, activat de o singură combinație de taste. Aceasta înlătură pașii de „ieșire din editor” și „reintrare în editor”, dar lasă procedura la fel de greoaie ca și înainte. În fața frecventelor modificări aduse unui document, nerăbdarea umană va impune lăsarea fișierului necifrat. O alta slăbiciune în aceste scheme este greșirea cheilor. Trebuie să se introducă chei de cifrare și descifrare în mod frecvent, așa încât multă lume va selecta chei scurte – și de aceea nesigure – pentru ușurarea introducerii. De asemenea, nu există protecție încorporată împotriva greșelilor de introducere.

(b) Cifrarea transparentă rezolvă aceste probleme. Un sistem de cifrare transparentă este un program TSR (Terminal and Stay Rezident), care rămâne permanent timp în memoria RAM, după lansarea sa în execuție. Aceasta monitorizează toate accesele la disc, pentru fișierele importante. Sistemul cifrează informațiile înainte ca ele să fie puse pe disc și descifrează înainte de a le pune la dispoziția programului ce rulează. Un sistem de cifrare transparentă este invizibil pentru programul de aplicație, care nu știe cum se face vreo cifrare. Aceasta elimină toate problemele de compatibilitate posibile. De asemenea, întreaga protecție automată se extinde la fișierele temporare pe care aplicația le-ar putea crea și șterge fără știrea nimănui. Cheile de cifrare sunt hotărâte odată și pentru totdeauna la începutul fiecărei sesiuni și rămân ascunse, dar și cifrate potrivit, în memoria proprie programului TSR. Cu cifrarea transparentă, introducerea unei chei greșite nu are efect catastrofic la ceea ce este deja stocat. Tot ce se întâmplă este faptul că ceea ce se citește de pe disc cu cheia greșită pare a fi corupt; odată introdusă cheia corectă, totul este bun și lizibil. Un avantaj major al cifrării transparente este eficiența sa în aplicații de baze de date. În loc să se descifreze și apoi să se cifreze o întreagă bază de date – care poate avea o mărime de mai mulți megaocteți, de fiecare dată când este cerută o înregistrare, un sistem de cifrare transparentă descifrează doar datele de care este de fapt nevoie; probabil un index de intrare, câțiva pointeri și însăși înregistrarea cerută. Creșterea de viteză rezultată este evidentă și vizibilă în mod practic.

Ceea ce trebuie de apreciat într-un sistem de cifrare transparentă este viteza, granularitatea, transferabilitatea și securitatea.

Viteza este o cerința evidentă. Dacă cifrarea sau descifrarea durează mult, calculatorul va părea lent.

Granularitatea se referă la gradul de detaliere care se folosește în specificarea cheilor de cifrare. Sistemele de cifrare la comandă se pot obișnui ușor cu granularitatea la nivel de fișier, cu o cheie diferită pentru fiecare fișier, dacă este nevoie; sistemele de cifrare transparentă au dificultăți mai mari în a face aceasta. Granularitatea la nivel de disc, cu toată informația cifrată identic, este ușor de realizat, dar nu este eficientă. Pe un hard-disc sistem unele fișiere cum ar fi CONFIG.SYS și drivere periferice (și desigur programul de cifrare însuși) trebuie să fie citite înainte de a putea instala orice program de cifrare, astfel că, cel puțin, trebuie să se facă o diferențiere între fișierele necifrate folosite în procesul de încărcare a sistemului și fișiere cifrate folosite după aceea. Un program de cifrare transparentă util trebuie să ofere cel puțin granularitate la nivel de fișier.

Transferabilitatea este o cerință foarte importantă. Întotdeauna trebuie să existe posibilitatea să se schimbe fișiere între calculatoare. Aceasta înseamnă că trebuie să se utilizeze mai multe chei, excepție făcând cazul când toți utilizatorii diferitor calculatoare din departamentul unde se lucrează, folosesc aceleași chei. Unele pachete de programe comerciale generează o cheie în mod aleator la fiecare instalare, făcând pirateria singurul mod practic de a asigura libertatea schimburilor.

Securitatea este cel mai dificil criteriu dintre toate. Prea mulți distribuitori de sisteme de securitate subestimează subtilitățile și capcanele criptografiei, mai multe din ele putând fi „sparte” fără conștiințe speciale criptografice. Din nefericire algoritmul de cifrare pare să fie ultimul lucru luat în considerație în proiectarea celor mai multe sisteme de securitate. Evaluând un număr de sisteme de securitate s-a descoperit că unele folosesc niște algoritmi banali sau greșit aplicați sau folosesc cifruri secvențiale pentru a cifra în mod repetat blocuri de date, cifruri care se utilizează corect doar o singură dată în transmisiile de date.

Cel mai periculos lucru în privința acestor greșeli este faptul că ele sunt complet invizibile pentru utilizatorul care nu are experiență criptografică. Într-un sistem de securitate, tot ce se poate face este să se verifice dacă fișierele continuă să fie lizibile după ce au fost cifrate și descifrate.

(3) Standarde criptografice

Zonele tradiționale de funcționalitate unde sunt necesare compatibilități între echipamente și programe sunt acoperite de standarde, și e normal ca aceasta să se întâmple și cu algoritmii de cifrare. Într-adevăr există un standard de cifrare a Datelor în S.U.A. (DES), cu o suită de standarde aferente care descriu cum să fie utilizat cifrul într-o multitudine de contexte. Din păcate, DES este un standard hardware mai curând decât unul software. El constă în principal în prelucrarea biților și de aceea rulează lent în implementările software: este greu să se depășească 100.000 bps chiar cu cele mai rapide IBM PS/2. Mai mult DES este un cifru secvențial cu o mărime a blocului redusă (8 octeți), potrivită pentru transmisii de date mai curând decât pentru stocare de date, așa încât nu este prudent să fie folosit pentru securitatea transparentă a datelor.

DES este mai vechi de 10 ani, dar este de așteptat că va apărea un standard care să-l înlocuiască, mai ales unul mai potrivit stocării de date decât transmiterii de date. Standardele consolidează progresul, dar și stimulează dezvoltarea ulterioară.

Securitatea absolută este de neatins. Grade foarte înalte de securitate sunt disponibil comercial, dar ele pot fi nepotrivite. În evaluarea diferitor abordări posibile trebuie să se ia în considerare de câtă securitate este nevoie . În multe cazuri o simplă parolă la pornire este suficientă. În cazul în care ea poate fi ocolită de cineva care știe cum, acest lucru în sine poate fi un avantaj, ca să nu apară mari complicații în caz că se uită parola. Ar trebui de gândit că marea majoritate a atacatorilor potențiali, împotriva cărora trebuie să ne protejăm, nu au priceperea tehnică pentru a ocoli chiar și aceste măsuri de protecție atât de simple – sau nu au răbdarea sa încerce.

Orice situație n-ar fi, este importantă evaluarea riscului. Dacă riscul îl prezintă în principal persoane din afară, atunci cifrarea și controlul fizic al accesului ar putea fi mai utile; dacă riscul îl prezintă persoane din interior, atunci gestiunea evidenței accesului poate fi o unealtă puternică. A nu face nimic pentru securitatea datelor calculatorului ă este periculos, dar și o schemă de protecție supraîncărcată este la fel de iresponsabilă, deoarece nimeni n-o va folosi. Încrederea și panica fac la fel de rău. Un raționament echilibrat este esențial.

1.5. METODOLOGIA ABORDĂRII SECURITĂȚII REȚELELOR

Se va încerca în continuare să se răspundă la întrebarea: ce este o rețea sigură?

În prima etapă, se va considera că o rețea de calculatoare este sigură dacă toate operațiile sale sunt întotdeauna executate conform unor reguli strict definite, ceea ce produce o protecție completă a entităților, resurselor și operațiilor. Lista de probleme (amenințări) constituie baza definirii cerințelor de securitate. Odată acestea cunoscute, trebuie elaborate regulile conform cărora să se controleze operațiile rețelei. Aceste reguli operaționale se numesc servicii de securitate, iar implementarea serviciilor se face prin protocoale de securitate.

Pentru a defini lista cerințelor de securitate, trebuie elaborată o listă exhaustivă a variatelor operații, a entităților și a resurselor rețelei, împreună cu posibilele probleme, operații ilegale, defecte de funcționare.

O mulțime de mecanisme de securitate [VOYD83], [COOP89], conform setului de reguli definite, face ca o rețea să fie sigură. O astfel de rețea se numește rețea sigură de calculatoare. Pentru a o defini trebuie elaborate:

– lista cerințelor de securitate;

– regula de protecție și securitate;

– mecanismele de securitate corespunzătoare celor de sus.

Există o literatură de specialitate bogată care analizează problemele de securitate ale rețelelor, dar definițiile securității diferă chiar în viziunea instituționale internaționale de standardizare:

– securitatea este totalitatea mecanismelor și tehnicilor care protejează componentele unui sistem (ISO);

– securitatea minimizează riscul expunerii componentelor și resurselor în fața unor vulnerabilități variate (ISO);

– securitatea se referă la un complex de măsuri procedurale, logice sau fizice destinate prevenirii , detectării și corectării diferitor tipuri de accidente, sau căderi ale sistemelor (ECMA).

Ca urmare nu putem găsi în literatură o definiție unanim acceptată în ceea ce privește securitatea rețelelor. În [MUFT89] se încearcă o definire exhaustivă a conceptului de rețea sigură de calculatoare, sub o formă însă structurată ca o listă de servicii de securitate pentru o rețea de calculatoare. Intenția a fost ca această listă să fie cât mai completă, astfel că o rețea care conține toate serviciile descrise poate fi numită rețea sigură.

(1) Pentru a proiecta și implementa un sistem integrat de securitate al unei rețele, este necesar mai întâi să identificăm toate amenințările împotriva cărora este cerută protecția. Acest proces este unul de analiză și care constă din trei etape:

– analiza vulnerabilităților, adică identificarea elementelor potențial slabe ale rețelei;

– evaluarea amenințărilor, adică determinarea problemelor care pot apărea datorită elementelor slabe ale rețelei;

– analiza riscurilor, adică a posibilelor consecințe pe care aceste probleme le pot crea.

Rezultatul acestei faze de analiză îl constituie cerințele de securitate ale rețelei.

(2) Următoarea etapă constă în definirea politicii de securitate, ceea ce înseamnă să se decidă:

– care amenințări trebuie eliminate și care se pot tolera;

– care resurse trebuie protejate și la ce nivel;

– cu ce mijloace poate fi implementată securitatea;

– care este prețul măsurilor de securitate care poate fi acceptat.

(3) Odată stabilite obiectivele politicii de securitate, următoarea etapă constă în selecția serviciilor de securitate. Acestea sunt funcții individuale care sporesc securitatea rețelei. Fiecare serviciu poate fi implementat prin metode variate, numite mecanisme de securitate. Pentru implementarea și utilizarea eficientă a mecanismelor de securitate este nevoie de o sumă de activități numite funcții de gestiune a securității. Gestiunea securității într-o rețea constă în controlul și distribuția informațiilor către toate sistemele deschise în scopul:

– utilizării serviciilor și mecanismelor de securitate;

– raportarea către administratorul rețelei a evenimentelor de securitate relevante care pot apărea;

– raportarea către serviciile și mecanismele de securitate.

1.6. METODOLOGIA GESTIUNII RISCURILOR ÎN REȚELE

În cazul riscului, există o distribuție a probabilității acestuia în funcție de daunele produse. Putem vorbi de pierdere probabilă maximă (adică cea cu probabilitatea cea mai mare) și pierdere posibilă maximă (adică cea care produce pagubele cele mai mari). În funcție de politica de risc adoptată se poate merge fie pe linia unor măsuri împotriva pierderilor posibile maxime, ceea ce duce la o evaluare totală a costurilor tuturor riscurilor, fie pe una mai rațională împotriva pierderilor posibile maxime.

Evaluarea riscurilor pentru o companie trebuie să fie un obiectiv general de conducere, evaluarea fiind folosită apoi pe nivelurile inferioare de decizie. Coordonare cerințelor de securitate și impulsul inițial se face la nivelul superior de conducere, în termenii unor principii și standarde cu valabilitatea de lungă durată.

(a) Activitatea la nivel managerial înalt trebuie să conducă la elaborarea unor directive aplicabile într-un mare număr de sectoare, la elaborarea unor standarde de lungă durată care trebuie folosite la nivelurile inferioare ca suport de decizie. Politica de securitate elaborată la acest nivel trebuie să conțină:

– parametrul folosit ca bază pentru abordarea riscurilor (pierdere posibilă maximă, pierdere probabilă maximă etc.);

– parametrul folosit pentru clasificarea riscurilor în reduse, medii și înalte;

– stabilirea unui prag de risc acceptabil;

– metodologia de apreciere a costurilor măsurilor de securitate;

– criterii de determinare a securității optime (cost minim, siguranță totală etc.);

– fonduri;

– delegările de competențe.

(b) Activitatea în procesul de decizie se execută în nivelurile subordonate conducerii ți constă în selecția măsurilor de securitate adecvată. Ea poate fi divizată în mai multe subprocese:

– analiza riscului (analiza slăbiciunilor, evenimentele care produc pierderi, politica de risc, lista riscurilor);

– determinarea efectivă a măsurilor de securitate (catalogul criteriilor de securitate, analiza beneficiilor, lista măsurilor, descrierea produsului de securitate);

– generarea unui portofoliu de măsuri și riscuri;

– calculul eficienței fiecărei măsuri de portofoliu;

– evaluarea riscurilor reziduale (sunt tolerabile?); dacă nu se reia procesul de la început.

* În prima fază se face evidențierea amenințărilor asupra sistemului;

* Pasul al doilea constă în evaluarea efectelor (E) pentru fiecare măsură individuală (Mi). O măsură a efectului acesteia este riscul rezidual (RR):

E(Mi)=R-RR(Mi)

unde R este riscul inițial. Atât efectele cât și riscurile se pot evalua în bani sau timp necesar refacerii datelor afectate.

O măsură este eficientă dacă riscul rezidual RR, după implementarea măsurii Mi, este mai mic ca R.

* Pasul trei constă în evaluarea portofoliilor (combinații de măsuri). În general sunt preferabile portofoliile cu un efect superior sumei efectelor individuale:

E(Mi)+E(Mj)<E(Mij)

* În pasul patru se evaluează costurile măsurilor individuale și a portofoliilor (C). O măsură este acceptabilă dacă eficiența ei (e) respectă condiția:

e(Mi)=E(Mi)-C(Mi)=R-RR(Mi)-C(Mi)

Se preferă acele portofolii de măsuri pentru care:

C(Mi)+C(Mj)>C(Mij)

Abordări similare ele analizei și gestiunii riscurilor, cu scopul elaborării unor metodologii de evaluare calitativă și cantitativă a securității rețelelor se găsesc și în [LOBE90], [ROUX90], [WOOD90], [SAR91].

2. ROLUL CRIPTOGRAFIEI ÎN SECURITATEA REȚELELOR

2.1. EVOLUȚIA ISTORICĂ A CRIPTOGRAFIEI

Criptografia este știința scrierilor secrete. Criptografia are o istorie lungă și pitorească. Primele informații referitoare la criptografie datează de acum circa patru mii de ani și provin din Egiptul Antic sub forma unor formule funerare care conțin, într-o modalitate incipientă, elementele constitutive ale științei de azi.

Mai târziu, ]n jurul anului 1440, descoperirea tiparului – eveniment de o însemnătate deosebită pentru progresul omenirii – a dat un nou impuls preocupărilor pentru dezvoltarea criptografiei. Dezvoltarea criptografiei a luat avânt în strânsă legătură cu extinderea și amplificarea relațiilor diplomatice dintre diferitele state feudale.

În anul 1518 a apărut prima carte asupra criptografiei – „Poligraphiae libri sex” – în care metoda de cifrare descrisă era denumită tablou de transpoziție.

De numele lui Vigenere se leagă dezvoltarea unor metode noi de cifrare. El a scris o carte „Tratatul cifrurilor sau modalităților secrete de a scrie” (1586), mult citată de criptologi. Metoda lui Vigenere a fost incorporată în mai multe mașini de cifrat moderne.

Dezvoltarea criptografiei a fost mult stimulată datorită inventării telegrafului. Acest dispozitiv de transmitere a informației avea menirea să satisfacă nevoile crescânde de comunicare în condițiile dezvoltării impetuoase a industriei și comerțului, a vieții sociale în general.

Din punct de vedere istoric, la arta criptografiei au contribuit patru grupuri de oameni: armata, corpurile diplomatice, cei ce au ținut jurnale și îndrăgostiții. Dintre acestea, armata a avut rolul cel mai important și a structurat domeniul. În interiorul organizațiilor militare, mesajele ce trebuiau criptate erau de obicei date unor funcționari codori prost plătiți, pentru criptare și transmitere. Volumul de mesaje nu permitea ca această muncă să fie făcută doar de câțiva specialiști de elită.

2.1.1. Criptografia tradițională

Până la apariția calculatoarelor, una din marile constrângeri ale criptografiei a fost capacitatea funcționarilor codori de a realiza transformările necesare, adeseori pe câmpul de luptă, cu echipament redus. O constrângere suplimentară a fost dificultatea de comutare rapidă de la o metodă criptografică la alta, deoarece aceasta implică reantrenarea unui număr mare de oameni. Totuși, pericolul ca un cod să fie capturat de către un inamic a făcut să devină esențială posibilitatea de a schimba metoda criptografică imediat, în caz de nevoie. Aceste necesități antagoniste au dat naștere modelului din (figura 2.1).

Figura 2.1. Modelul de criptare

Mesajele ce trebuie criptate, cunoscute sub numele de text clar (plain text), sunt transformate printr-o funcție parametrizată de o cheie (key). Ieșirea procesului de criptare, cunoscută sub numele de text cifrat (ciphertext), este apoi transmisă, adeseori prin curier sau radio. Presupunem că inamicul ascultă și copiază cu acuratețe întreg textul cifrat. Totuși, el nu știe care este cheia de decriptare și astfel nu poate decripta prea ușor textul cifrat. Uneori intrusul poate nu numai să asculte canalul de comunicație (intrus pasiv), ci și să înregistreze mesajele și să le retransmită mai târziu, să injecteze propriile sale mesaje sau să modifice mesajele legitime înainte ca ele să fi fost preluate de receptor )intrus activ). Arta de a sparge cifruri se numește criptanaliză (cryptanalysis). Arta de a concepe cifruri (criptografia) și de cea de ale sparge (criptanaliza) sunt cunoscute sub numele colectiv de criptologie (criptology).

Va fi adesea util să avem o notație pentru a pune în relație textul clar, textul cifrat și cheile. Vom folosi C=Ek(P) pentru a simboliza că în urma criptării textului clar P, folosind cheia k, a rezultat textul cifrat C. Similar P=Dk(C) reprezintă decriptarea lui C pentru a obține din nou textul clar. Rezultă că:

Dk(Ek(P))=P.

Această notație sugerează că E și D sunt funcții matematice, ceea ce, de altfel, și sunt. Singurul artificiu este acela că ambele sunt funcții cu doi parametri, iar noi am scris unul din parametrii (cheia) ca indice, nu ca argument, pentru a face distincție între el și mesaj.

O regulă fundamentală a criptografiei este aceea că trebuie presupusă cunoașterea de către orice criptanalist a metodei generale utilizate pentru criptare. Cantitatea de efort necesară pentru a inventa, teste și instala o metodă nouă, ori de câte ori vechia metodă este compromisă sau se crede a fi compromisă, a făcut întotdeauna nepractic a o păstra secretă și a o crede secretă atunci când nu este; face mai mult rău decât bine.

Aici apare cheia. Cheia constă dintr-un șir relativ (scurt) care selectează una dintre mai multe criptări potențiale. În contrast cu metoda generală, care poate fi schimbată doar la câțiva ani, cheia poate fi schimbată oricât de des este nevoie. Astfel modelul nostru de bază este stabil în metoda generală, cunoscută de toată lumea, este parametrizată cu o cheie secretă și ușor de schimbat.

Caracterul nesecret al algoritmului nu poate fi subliniat eficient. Prin publicarea algoritmului, criptograful dă libertatea ca acesta să fie consultat de un număr mare de criptologi din mediul academic. Dacă mulți experți au încercat să spargă algoritmul timp de cinci ani după publicarea sa și nici unul nu a reușit, probabil că algoritmul este destul de solid.

Adevăratul secret este cheia, iar lungimea sa reprezintă un aspect foarte important. Să considerăm o simplă combinație de seif. Principiul general este că se introduc cifre în secvență. Oricine știe aceasta, dar cheia este secretă. O lungime a cheii de două cifre înseamnă că există 100 de posibilități, de trei cifre înseamnă 1000 de posibilități și o lungime a cheii de șase cifre înseamnă un milion. Cu cât cheia este mai lungă, cu atât este mai mare volumul de muncă (work factor) cu care are de-a face criptanalistul. Factorul de muncă pentru a sparge sistemul prin căutare exhaustivă în spațiul cheilor este exponențial cu lungimea cheii. Secretul provine din a avea un algoritm puternic (dar public) și o cheie lungă. Pentru a păstra la distanță inamici puternici, sunt necesare chei de cel puțin 256 biți.

Din punctul de vedere al criptanalistului, probleme sa are trei variante principale. Când are la dispoziție o cantitate de text cifrat și nici un fel de text clar, el este confruntat cu problema textului cifrat (ciphertext only problem). Criptogramele care apar la secțiunea de enigme a ziarelor pun acest tip de problemă. Când criptanalistul are ceva text clar și textul criptat corespunzător, probleme este cunoscută sub numele de problema textului clar cunoscut (known plaintext problem). În sfârșit atunci când criptanalistul poate cripta bucăți de text clar la propria sa alegere, avem de-a face cu problema textului clar ales (chosen plaintext problem).

Novicii în domeniul criptografiei presupun adeseori că dacă un cifru poate rezista unui atac „ciphertext only” el este sigur. Această presupunere este foarte naivă. În multe cazuri criptanalistul poate ghici unele părți ale textului clar. De exemplu, primul lucru pe care multe sisteme cu divizarea timpului (time-sharing) îl spun când sunt invocate este „PLEASE LOGIN”. Având câteva perechi text clar – text criptat, sarcina criptanalistului devine mult mai ușoară. Pentru a realiza securitatea, criptograful trebuie să fie prudent și să se asigure că sistemul este rezistent, chiar dacă inamicul său poate cripta cantități arbitrare de text clar ales.

2.2. SISTEME CRIPTOGRAFICE

Dezvoltarea calculatoarelor electronice din ultimele decenii a schimbat rapid evoluția criptografiei în două direcții fundamentale:

(1) utilizarea criptografiei – numită în acest caz și computațională – pentru protecția datelor memorate și transmise între calculatoare;

(2) utilizarea calculatoarelor pentru descifrarea unor sisteme criptografice complexe, deci în criptanaliză.

Obiectivul principal al măsurilor de protecție într-un sistem de calcul îl constituie eliminarea posibilităților de distrugere accidentală sau voită a informațiilor, precum și de consultare neautorizată a acestora. Accesul neautorizat la informații poate avea serioase daune prin afectarea caracterului privat al transmisiilor, introducerea unor date false sau trunchiate, falsificarea identității unor calculatoare, terminale ori utilizatori. Dintre obiectivele importante care trebuie avute în vedere la proiectarea unor mecanisme – hardware și software – pentru protecția informațiilor într-o rețea menționăm pe cele de prevenire a dezvăluirii conținutului în clar al mesajelor, a inserării de mesaje false, a analizei traficului de mesaje, precum și pe cele de detectare a modificării, ștergerii sau înlocuirii conținutului mesajelor, a încercărilor de conectare neautorizată în rețea.

Obiectivele de prevenire pot fi atinse prin cifrarea informațiilor, soluție eficientă când memorarea sau transmiterea de date se efectuează prin metode nesigure. Obiectivele de detectare sunt realizate dacă se folosesc protocoale specifice, colaborate cu metode criptografice, care asigură schimburile de mesaje între entitățile rețelei.

Cifrarea conferă protecție informației transmise pentru canalele ce sunt ascultate sau interceptate. În acest scop emițătorul alege un algoritm de cifrare și o cheie, pe care le comunică receptorului pe cale sigură, – de exemplu, prin curier. Criptografia modernă protejează datele pe linii de mare viteză ți memorate în calculatoare. Ea urmărește două obiective principale, și anume, protecția sau confidențialitatea și autenticitatea sau integritatea.

Un sistem criptografic (criptosistem) are cinci componente:

– spațiul mesajelor în text clar, {M} ;

– spațiul mesajelor în text cifrat, {C};

– spațiul cheilor, {K};

– familia transformărilor de cifrare, Ek:M→C; unde k{K};

– familia transformărilor de descifrare, Dk:C→M; unde k{K}.

Fiecare transformare de cifrare, Ek, este definită de un algoritm de cifrare, E, comun tuturor transformărilor familiei, și o cheie K, distinctă de la o transformare la alta. În mod similar, fiecare transformare de descifrare, Dk, este definită de un algoritm de descifrare, D, și de cheia K. Pentru un K dat, Dk reprezintă inversa lui Ek, adică:

Dk(Ek(M))=M, pentru orice MЄ{M}

Datele trebuie astfel protejate încât utilizatorii neautorizați să nu poată reconstitui textul clar dintr-un text cifrat interceptat. În acest sens este necesar să se asigure ca:

– utilizatorul neautorizat să nu poată determina sistematic transformarea de descifrare, Dk, din textul cifrat interceptat, C, chiar dacă se cunoaște textul clar, M, corespondent;

– utilizatorul neautorizat să nu poată reconstitui textul clar, M, din textul cifrat, C, fără cunoașterea transformării Dk.

Autentificarea datelor cere ca un utilizator neautorizat să nu fie capabil în mod obiectiv să substituie textul cifrat, C, cu un text cifrat fals, C′, fără ca acest lucru să fie detectat. Nu trebuie să i se permită utilizatorului neautorizat:

– să determine sistematic transformarea Ek, cunoscând pe C și textul clar corespunzător, M;

– să găsească în mod sistematic C′, astfel ca Dk(C′) să fie un text clar valid în M. Cerințele de autentificare impun doar ca transformarea Ek să fie protejată.

2.3. CRIPTOSISTEME CU CHEI PUBLICE

Conceptul de criptosistem cu două chei (asimetric) a fost introdus de Diffie și Hellman în 1976. Ei propuneau o nouă metodă de cifrare, numită cifrare cu cheie publică, în cadrul căreia doi utilizatori (procese) pot comunica cunoscând fiecare doar cheia publică a celuilalt.

În criptosistemele cu chei publice fiecare utilizator A, deține o transformare de cifrare publică, printr-o transformare greu inversabilă (one-way). În sistemele cu chei publice, protecția și autentificarea sunt realizate prin transformări distincte. Să presupunem că utilizatorul (procesul) A dorește să emită un mesaj, M, unui alt utilizator (proces) B. Dacă a cunoaște transformarea publică EB, atunci A poate transmite M la B sub forma C=EB(M), asigurându-se astfel funcția de protecție (confidențialitate).

La recepție, B, va descifra criptograma C utilizând transformarea secretă DB, cunoscută doar de el:

DB(C)= EA(DA(M))=M.

Autentificarea este realizată deoarece numai A poate realiza transformarea DA.

Protecția nu este asigurată, întrucât este posibil ca M sa fie obținut de oricine aplicând transformarea publică EA. Pentru a se realiza simultan protecția și autentificarea informațiilor spațiului {M} trebuie sa fie echivalent spațiului {C}, așa încât orice pereche (EA, DA) să fie în măsură să opereze atât asupra textului clar, cât și asupra textului cifrat; în plus se cere ca DA și EA să fie mutual inverse, adică:

EA(DA(M))=DA(EA(M))=M

Emițătorul de mesaj A va aplica mai întâi transformarea secretă a sa, DA, mesajului M. Apoi A va cifra rezultatul – utilizând transformarea fizică a lui B, EB și trimite către receptor criptograma:

C=EB(DA(M)).

Receptorul B îl obține pe M aplicând la început propria-i funcție de descifrare, DB, iar apoi transformarea publică a lui A, EA, cea care furnizează autentificarea:

EADB(C)=EA(DB(EB(DA(M)))=EA(DA(M))=M.

2.4. CONCEPTUL DE SEMNĂTURĂ DIGITALĂ

Semnătura digitală reprezintă un atribut al unui utilizator sau proces, fiind folosită pentru recunoașterea acestuia. Fie B un receptor de mesaj semnat de A. Semnătura lui A trebuie să satisfacă următoarele proprietăți:

(1) B să fie capabil să valideze semnătura lui A;

(2) să fie imposibil pentru oricine, inclusiv B, să falsifice semnătura lui A;

(3) în cazul în care A nu recunoaște semnarea unui mesaj M, trebuie să existe un „judecător” care să poată rezolva disputa dintre A și B.

Semnătura digitală rezolvă atât problema autentificării emițătorului cât și pe cea a autentificării datelor. Sistemele de autentificare cu chei publice permit o implementare simplă a semnăturilor digitale. Deoarece este deținută doar de A, transformarea DA, poate servi ca semnătură digitală pentru A. Receptorul B al mesajului m semnat este sigur atât de autenticitatea emițătorului, cât și de aceea a datelor. Deoarece transformarea inversă EA este publică, receptorul B va putea valida semnătura. Procesele se desfășoară astfel:

A semnează pe M calculând S=(DA(M));

(b) B validează semnătura lui A, verificând dacă EA(S)=M;

(c) Un „judecător” rezolvă eventuala dispută dintre A și B controlând dacă EA(S) conduce la M, în aceeași manieră ca și B.

2.5. CRIPTOGRAFIA ÎN SECURITATEA CALCULATOARELOR PERSONALE

Multă lume consideră că securitatea unui PC este prea complicată, prea scumpă și deci nu se justifică luarea unor măsuri speciale. Securitatea unui PC care nu este conectat în rețea este ușor de instalat, folosit și întreținut. Deși sunt disponibile multe produse program și echipamente pentru a „încuia cabinetul PC”, ele se împart în câteva categorii computaționale. Puteți cifra datele pe discul hard, puteți preveni accesul la date sau puteți supraveghea fișierele importante pentru contaminarea cu viruși.

Una din soluțiile pentru asigurarea PC este cifrare fișierelor de date este cea mai simplă linie de apărare.

Unul dintre cele mai rapide și ieftine exemple de cifrare a fișierelor este File Encrypt al firmei Wisdom Software. Aceasta folosește DES pentru a cifra fișiere, simplu și rapid. File Encrypt este un criptosistem convențional cu o singură cheie.

O variație pe tema cifrării fișierelor este dată de Secret-Disk-II al firmei Lattice. Acest program, pe lângă cifrarea datelor selectate creează și un disc invizibil unde memorizează fișierele cifrate. Puteți cifra fișiere folosind ori algoritmul DES, ori FAST – care este mult mai rapid ale firmei Lattice. Discurile logice invizibile ale lui Secret-Disk-II conțin doar datele cifrate în fișiere ascunse. Secret-Disk-II este un sistem cu o singură cheie. O singură parolă încuie și descuie discurile secrete.

Un produs însoțitor, Secret-Disk-II Security Administrator, este un set de facilități de gestiune a discurilor secrete printr-o cheie principală (master). Dacă cineva a uitat organizarea sau a uitat parola, cu acest program puteți descuia fișierele și să afectați o altă cheie.

Anumite produse facilitează transmisia în siguranță a datelor între două modem-uri, incluzând programe și echipamente integrate. Unul dintre cele mai bune este MailSafe al firmei RSA Data Security. Securitatea transmisiei de date între două puncte ale unei rețele are trei cerințe importante. Prima este să se garanteze că ceea ce se recepționează este ce sa transmis (autenticitatea mesajelor). Aceasta asigură că datele nu au fost interceptate și alterate pe parcurs. A doua cerință este să se determine identitatea autorului mesajelor ( autenticitatea emițătorului). Iar a treia cerință este să vă asigurați că traficul este sigur și confidențial pe parcurs. MailSafe prevede aceste trei măsuri de siguranță într-un program care rezidă la ambele capete ale legăturii de comunicație.

Deoarece la date trebuie să aibă acces mai mult de un utilizator, MailSafe folosește un sistem de chei publice și private. Utilizatorii care vor trimite date folosesc chei publice pentru a verifica semnătura digitală a destinatarului și pentru cifrarea traficului pentru transmisie. Destinatarul folosește o cheie privată pentru a semna fișierele emise și pentru a descifra mesajele primite. MailSafe folosește un set de meniuri pentru a selecta fișierele de transmis. Expeditorul creează chei publice și private folosind utilitarul KeyGen. Acest proces instalează și parolele utilizatorilor, care pot avea până la 80 caractere lungime. MailSafe nu poate folosi parola pentru a genera o cheie. În schimb, utilitarul KeyGen creează chei noi, în orice moment în care este apelat. MailSafe creează semnături digitale.

Toți experții în securitate sunt de acord că cel mai bun mod de protejare a datelor rezidente pe calculator este interzicerea accesului la calculator. cât timp cifrarea datelor reprezintă o anumită măsură de securitate, ea trebuie să fie parte dintr-un program larg de securitate care include mai multe bariere pentru intruși. sunt două căi de ridicare a acestor bariere, folosind programe sau echipamente.

Sistemele software proiectate să împiedice furtul de date sunt cel mai ușor de instalat și folosit, dar pot permite intrușilor avizați să intre „pe ușa din spate”. Un sistem de securitate software , care închide aproape toate „deschizăturile” este Watchdog, al lui Fisher International Systems. Watchdog este unul dintre cele mai bine cunoscute programe de securitate.

Totuși, barierele software, puse în calea intrușilor, pot cădea în fața celor îndemânatici și perseverenți. Cea mai bună protecție posibilă împotriva tuturor formelor de încălcare a securității este combinarea securității hard cu cea soft. Watchdog Armor adaugă acest sistem suplimentar de protecție. Armor este o placă care funcționează cu programul Watchdog pentru a adăuga câteva caracteristici noi de securitate și de creștere a vitezei.

ACSI (American Computer Security Industries) asigură produse de securitate hardware, prin intermediul propriului produs de securitate COMPSEC-II, care este o placă ce prevede facilități de securitate și administrative.

Azi, când accesul la datele din calculator este aproape universal, informația proprie poate fi furată așa cum copiezi o dischetă. Sistemele de securitate au devenit nu tocmai ușor de folosit și întreținut, dar absolut de necesare pentru o utilizare sigură a calculatoarelor.

3. CRIPTOGRAFIA COMPUTAȚIONALĂ CONVENȚIONALĂ (SIMETRICĂ)

3.1. SUBSTITUȚII ȘI PERMUTĂRI ÎN CRIPTOGRAFIA CLASICĂ

La baza cifrurilor simetrice, deci a celor care folosesc pentru cifrare o singură cheie, secretă, stau cifrurile elementare: transpoziția și substituția.

(1) Cifruri transpoziție

Cifrurile transpoziție realizează o permutare a caracterelor din textul clar. Cheia de cifrare este perechea K=(d,f), unde d reprezintă lungimea blocurilor succesive de caractere care vor fi cifrate conform permutării f,

F: Zd → Zd

Zd={1,2,…,d},

De forma:

1 2……….d

f(1) f(2)…….f(d)

unde, f(i)f(j), cu i j

Mulțimea funcțiilor astfel definite este de cardinal d!. În acest fel mesajul clar:

M=m1m2…mdmd+1…md+d…

este cifrat astfel:

Ek(M)=mf(1)…mf(d)md+f(1)…md+f(d)

Descifrarea se obține prin permutare inversă.

Cifrarea prin transpoziție este o transformare a textului clar prin care se modifică poziția caracterelor în mesaj. Transpozițiile se pot aplica întregului mesaj sau blocurilor de lungime d obținute prin împărțirea mesajului întreg. În metoda de cifrare transpozițională alfabetul textului clar rămâne neschimbat. O metodă des folosită pentru implementarea acestui tip de transformări este scrierea mesajului într-o anumită matrice după care textul clar se obține prin citirea caracterelor pe linie, pe coloană sau după un anumit traseu în matrice. Cifrurile transpoziție se pot clasifica după numărul lor de aplicare, în transpoziții monofazice, când se aplică o singură dată, și transpoziții polifazice, când se aplică de mai multe ori. De asemenea, dacă în procesul de transformare elementul unitate este litera, atunci transpoziția este monografică, iar dacă se transpun grupe de litere (simboluri) transpoziția se numește poligrafică.

Cele mai simple transpoziții monografice se obțin prin împărțirea textului clar în două jumătăți care se scriu una sub alta, după care se citesc coloanele de la stânga la dreapta. De exemplu, cuvântul CALCULATOR se cifrează astfel:

C A L C U

C L A A L T C O U R

L A T O R

Dacă se împarte cuvântul calculator în două:

C L U A O

A C L T R

citirea rândurilor de sus în jos, conduce la criptograma: CLUAOACLTR. Acest sistem este ușor de atacat, deoarece frecvența de apariție a literelor rămâne invariantă în procesul cifrării.

De asemenea se obține o transpoziție de caractere dacă literele textului clar se scriu ca elemente ale unei matrice. Se completează matricea cu literele textului clar plecând de la un element oarecare al matricei, pe un anumit traseu. Se obține textul cifrat parcurgând întreaga matrice pe un alt traseu. Astfel, textul clar CALCULATOR UNIVERSAL FELIX se poate scrie sub forma matricială:

CALCU

LATOR

UNIVE

RSALX

FELIX

Mesajul se poate cifra în următoarele moduri:

– prin citirea elementelor matricei pe coloane de la stânga la dreapta, ceea ce conduce la următoarele criptograme:

CLURF AANSE LTIAL COVLI UREXX;

– prin citirea elementelor matricei pe diagonală de jos în sus începând cu primul element al matricei:

CLAUA LRNTC FSIOU EAVRL LEIXX.

În practica cifrării, stabilirea traseelor de citire din matrice se face în mod frecvent cu ajutorul unui cuvânt cheie. Cheia are un număr de litere egal cu numărul de coloane din matrice. Literele cheii, numerotate în ordine alfabetică, se scriu deasupra matricei; coloanele matricei, în ordinea stabilită de cheie, furnizează textul cifrat. În următorul exemplu cheia este MEGABUCK. Scopul cheii este să numeroteze coloanele, coloana 1 fiind sub litera de cheie cea mai apropiată de începutul alfabetului ș.a.m.d. Textul clar este scris orizontal, pe înduri. Textul cifrat este citit pe coloane, începând cu coloana a cărui număr de sub literă este mai mic.

M E G A B U C K

7 4 5 1 2 8 3 6

p l e a s e t r

a n s f e r o n

e m i l l i o n

d o l l a r s t

o m y s w i s s

b a n k a c c o

u n t s i x t w

o t w o a b c d

Text clar:

Pleasetransferonemilliondollarstomyswissbankaccountsixtwotwo

Textul cifrat:

AFLLSKOSELAWAIATOOSSCTCLNMOMANTESILYNTWR

NNTSOWDPAEDOBUOERIRICXB

De asemenea se pot realiza și alte tipuri de transpoziții, cum ar fi cele operate asupra unor grupuri de litere – transpoziții poligrafice.

În cazul cifrurilor computaționale, adică a celor care se folosesc la protejarea datelor în sistemele informatice, transpoziția se realizează prin cutii P (P vine de la permutare).

(2) Cifruri substituție

Cifrurile substituție înlocuiesc fiecare caracter din alfabetul mesajelor A cu un caracter din alfabetul criptogramelor C. Dacă A={a1,…,an}, atunci C={f(a1),…,f(an)}, unde: f:A→C este funcția de substituție, constituind cheia cifrului.

Cifrarea unui mesaj M=m1,…,mn se face astfel:

Ek(M)=f(m1),…,f(mn)

Deci substituțiile sunt transformări prin care caracterele (literele) sau grupurile de caractere ale alfabetului primar sunt înlocuite cu caracterele sau grupurile de caractere ale alfabetului secundar. În practică se aplică frecvent substituția care se poate descrie cu ajutorul transformării liniare de forma:

C=aM+b(modN)

În acest scop se stabilește o corespondență biunivocă între literele alfabetului primar și numerele întregi 0,1,…,N-1 care furnizează un inel, ZN, față de operațiile de adunare modulo N și înmulțire modulo N. În relație, a se numește factor de amplificare, iar b coeficientul de deplasare. Prin particularizarea coeficienților a și b se obțin cazuri particulare de transformări liniare.

(a) Substituții monoalfabetice

Transformările cu o singură lege de corespondență între literele alfabetului primar și cele ale alfabetului secundar se numesc substituții monoalfabetice. Cea mai simplă substituție monoalfabitică este cunoscută sub denumirea de Cifrul lui Cesar. În cifrul lui Cesar atât alfabetul primar, cât și cel secundar coincid cu alfabetul latin de 26 de litere. Corespondența biunivocă între literele celor două alfabete se stabilește scriind în ordine alfabetică literele și trecând sub fiecare literă corespondența acesteia din alfabetul secundar, obținută prin deplasarea ciclică cu trei poziții la stânga a literelor alfabetului primar. Corespondența în cifrul Cesar este:

A B C … X Y Z

D E F … A B C

Folosind corespondența biunivocă între literele alfabetului latin (mi) și echivalentele lor numerice (ei), unde (ei)Є{0,1,…,25}, cifrul lui Cesar se poate scrie sub forma:

C(ei)=ej+3(mod26)

Ulterior, cifrul lui Cesar a fost generalizat, prin alegerea în calitate de cheie a oricărei litere din alfabet. În acest caz corespondența invariabilă este stabilită prin funcția:

C(ei)=ej+bj(mod26),

unde ej, bj{0,1,…,25}.

Prin particularizarea coeficienților, punând b=0, se obține o substituție de litere de forma:

C(ej)=a*ej(mod26).

Alegând a astfel încât să fie relativ prim cu N=26, relația stabilește o permutare a alfabetului primar. De exemplu, luând a=3, se obține următoarea corespondență:

Litere primare: A B C…X Y Z

Numere echivalente, ei: 0 1 2…23 24 25

3*ej(mod26): 0 3 6…17 20 23

Cifru: A D G…R U X

Literele cifrului se pot obține din alfabetul primar și prin următorul proces de selectare: se alege prima literă A și apoi, în ordinea ciclică fiecare a treia literă: deci D,G,…,Y. După Y șirul cifrului se continuă cu B, deoarece, în ordinea ciclică, a treia literă după Y în alfabetul primar este B ș.a.m.d., motiv pentru care factorul de amplificare a=3 se numește și factor de selectare.

Cifrurile prezentate anterior sunt simple și slabe la atacurile criptanalitice. Ele sunt simple deoarece cheile prin care aceste substituții se definesc sunt numerele a și b. Cifrurile sunt slabe la atacurile criptanalitice , deoarece este suficient pentru criptanalist să stabilească o cheie simplă, pe baza căreia apoi să obțină substituția tuturor literelor. Cifrul de substituție cel mai puternic și cel mai rezistent la atacurile criptanalitice este cifrul aleator de substituție, în care literele alfabetului de substituție se obțin printr-un proces aleator. Cifrul aleator de substituție, pe lângă avantajele referitoare la dificultățile sporite ale decriptării, prezintă însă un dezavantaj în privința generării, transmiterii și păstrării cheii. Memorarea cheii de cifrare de către cifrator și descifrator fiind imposibilă, se parcurge la înregistrarea cheii într-o anumită modalitate ce determină însă apariția pericolului pierderii sau furtului cheii.

Un sistem cifrat bazat pe substituție se poate obține și prin folosirea unei chei mnemonice. Spre exemplu, dacă alegem cheia literală CERNEALA sub care se scrie cheia numerică, care se obține prin numărarea literelor cuvântului – cheie, după așezarea lor în ordine alfabetică, deci: Cheia literală: C E R N E A L A

Cheia numerică: 3 4 8 7 5 1 6 2

În continuare se vor scrie literele alfabetului primar sub cheia numerică sub forma:

C E R N E A L A

3 4 8 7 5 1 6 2

A B C D E F G H

I J K L M N O P

Q R S T U V W X

Y Z

Corespondența monoalfabetică. Corespunzătoare cuvântului cheie CERNEALA se obține prin scrierea sub literele alfabetului primar a literelor coloanelor de mai sus în ordinea crescătoare, adică:

P=A B C…X Y Z

F N V…C K S

Cu ajutorul acestei corespondențe se poate cifra orice text clar, obținând textul cifrat.

Un cifru de substituție se poate obține și cu ajutorul unui tabel sub formă de scară. Pentru aceasta se scriu toate literele alfabetului, în ordinea alfabetică, sub literele cheii, cu condiția ca linia i să se completeze începând cu coloana i=1,2,…. Apoi permutarea fixă sau alfabetul cifrat rezultă din scrierea sub literele alfabetului primar a literelor coloanelor tabelului scrisă în ordinea crescătoare.

(b) Substituția omofonică

Cifrurile bazate pe substituție simplă sunt în general ușor de spart prin atac cu text-cifrat, utilizând însă și frecvențele de apariție a caracterelor. O variantă de substituție este cea omofonică, prin care se înlocuiește fiecare caracter dintr-o mulțime f(A). Funcția f se definește astfel:

F:A→2n

Un mesaj clar M=m1,…,mn va fi cifrat sub forma C=c1,…,cn unde nj este ales aleator din mulțimea f(mj).

Cifrurile omofonice sunt mai greu de spart decât cele bazate pe substituție simplă, în special atunci când cardinalul mulțimii f(mj) este proporțional cu frecvența caracterului mj. În acest fel se realizează o aplatizare a frecvențelor de apariție a diferitor caractere, îngreunând munca de criptanaliză.

(c) Substituția polialfabetică

Cifrurile bazate pe substituție polialfabetică constau din utilizarea periodică a unor substituții simple diferite.

Fie d alfabete de cifrare c1,…,cd și d funcții fi care realizează substituția de forma:

Fi:A→ci, 1<=i<d.

Un mesaj clar:

M=m1…mdmd+1…m2d

Va fi cifrat prin repetarea secvențelor de funcții f1,…,fd la fiecare al d-lea caracter:

Ek(M)=f1(m1)…fd(md)f1(md+1).

Utilizarea unei secvențe periodice de substituții ale alfabetului, mărește în mod semnificativ securitatea criptogramei prin nivelarea caracteristicilor statistice ale limbii. Aceeași literă din textul cifrat poate reprezenta mai multe litere din textul clar, cu diverse frecvențe de apariție. În acest caz numărul cheilor posibile se mărește de la 26!, câte erau la substituția monoalfabetică la (26!)n

O versiune cunoscută de substituție polialfabetică o constituie cifrul Vigenere, când cheia este o secvență de litere de forma:

K=k1…kd.

Funcțiile fi de substituție se definesc astfel:

Fi(a)=(a+ki)(modulo n), unde n este lungimea alfabetului.

Un cifru Vigenere cu o perioadă n, deși mult mai puternic decât un cifru bazat pe substituția monoalfabetică, poate fi spart dacă criptanalistul dispune de cel puțin 2n caractere din textul cifrat.

O variantă mai nouă a acestui cifru peste un alfabet binar, este cifrul Vernam care se diferențiază prin cheia de cifrare care este reprezentată de o secvență de caractere aleatoare care nu se repetă.

(d) Substituția poligramică

Cifrurile bazate pe substituție poligramică realizează substituirea unor blocuri de caractere (poligrame) din textul clar, distrugând astfel semnificația, atât de utilă în criptanaliză, a frecvențelor diferitor caractere.

În cazul cifrării literelor singulare frecvența de apariție a literelor în textul cifrat este aceeași cu frecvența de apariție a literelor corespunzătoare din textul clar. Această invarianță a frecvențelor furnizează o cantitate de informație suficientă criptanalistului pentru spargerea sistemului de secretizare. Pentru minimizarea informației colaterale furnizate de frecvența de apariție a literelor s-a procedat la cifrarea grupurilor de n litere (n-grame).În cazul când un grup de n litere este substituit printr-un alt grup de n litere, substituția se numește poligramică.

(3) Cifruri produs

Un algoritm produs (cifru produs) reprezintă o compoziție a t funcții (cifruri) f1,…,ft, în care fiecare funcție poate fi o substituție sau o permutare. Cifrurile produs se bazează pe rețele de cutii S-P, în care se obține criptograma:

C=Ek(M)=StPt-1…S2P1S1(M),

unde fiecare si este dependentă de o cheie k, parte din cheia cifrului K.

3.2. ALGORITMI CU CHEIE SECRETĂ

Criptografia modernă utilizează aceleași idei de bază ca și criptografia tradițională, transpoziția și substituția dar conceptul diferit. Tradițional, criptografii foloseau algoritmi simpli și se bazau pe chei foarte lungi pentru securitatea lor. În zilele noastre este adevărat contrariul: obiectivul este de a face algoritmii de criptare atât de complecși și ireversibili, încât, dacă un criptanalist achiziționează cantități imense de text cifrat la alegerea sa, el să nu fie capabil să facă ceva cu ele.

3.2.1. DES

Sistemul DES (Data Encryption Standard) este primul standard dedicat protecției criptografice a datelor de calculator. În ianuarie 1977, guvernul SUA a adoptat ca standard oficial pentru informațiile nesecrete cifrul DES, produs și dezvoltat de IBM. DES a fost larg adoptat în industrie pentru a fi utilizat în produsele de securitate. El nu mai este de mult sigur în forma sa originală (Wayner, 1995), dar într-o formă modificată el este încă util. Vom explica acum cum lucrează DES.

Figura 3.1. Schema generală a cifrului DES

Textul clar este criptat în blocuri de câte 64 de biți, rezultând blocuri de 64 de biți de text cifrat. Algoritmul, care este parametrizat cu o cheie de 56 de biți, are 19 runde distincte. Prima rundă este o transpoziție independentă de cheie, aplicată asupra textului clar de 64 de biți. Ultima rundă este exact inversa acestei transpoziții. Penultima rundă schimbă cei mai din stânga 32 de biți cu cei mai din dreapta 32 de biți. Cele 16 runde rămase sunt funcțional identice dar sunt parametrizate de funcții de cheie diferite. Algoritmul a fost proiectat pentru a permite ca decriptarea să se facă cu aceeași cheie ca și criptarea, dar pașii sunt parcurși în ordine inversă.

Fiecare rundă ia două intrări de 32 de biți. Ieșirea din stânga este o singură copie a intrării din dreapta. Ieșirea din dreapta rezultă în urma unui SAU EXCLUSIV (XOR) bit cu bit între intrarea din stânga și o funcție depinzând de intrarea din dreapta și de o cheie pentru această rundă Ki. Toată complexitatea rezidă în această funcție.

Funcția constă din patru pași, parcurși în secvență. În primul rând, este construit un număr de 48 de biți, E, prin expandarea celor 32 de biți ai lui Ri-1 în concordanță cu o transpoziție fixă și o regulă de duplicare. În al doilea rând, E și Ki sunt combinate prin XOR. Ieșirea este apoi împărțită în 8 grupuri de câte 6 biți și fiecare dintre acestea este introdus într-o cutie S diferită. Fiecare dintre cele 64 de intrări posibile într-o cutie S este pusă în corespondență cu o ieșire de 4 biți. În final, acești 4×8 biți sunt trecuți printr-o cutie P.

În fiecare din cele 16 iterații este folosită o cheie diferită. Înainte de începerea algoritmului este aplicată o transpoziție de 56 de biți asupra cheii. Chiar înainte de începerea fiecărei iterații, cheia este partiționată în două cantități de câte 28 de biți, fiecare dintre ele este rotită la stânga cu un număr de biți depinzând de numărul iterației. Ki este derivat din această cheie rotită prin aplicarea unei transpoziții pe 56 de biți asupra ei. La fiecare rundă este extrasă și permutată o altă submulțime de 48 de biți din cei 56 de biți.

Înlănțuirea DES-ului

În ciuda complexității sale, DES este, la bază, un cifru cu substituție monoalfabetică, folosind caractere pe 64 de biți. Ori de câte ori se cifrează același bloc de text clar, la ieșire se va obține același bloc de text cifrat. Un criptanalist poate exploata această proprietate pentru a sparge DES-ul.

Pentru a vedea cum poate fi folosită această proprietate a cifrului cu substituție monoalfabetică pentru a submina DES-ul, să considerăm cea mai evidentă metodă de criptare a unui mesaj lung: prin spargerea în blocuri consecutive de 8 octeți (64 de biți) și prin criptarea lor unul după altul, cu aceeași cheie. Dacă este nevoie, ultimul bloc este umplut până la 64 de biți. Tehnica este cunoscută ca modul de carte de coduri electronică (Electronic Code Book).

În figura 3.2 este prezentat începutul fișierului conținând primele anuale ale unei companii care s-a decis să-și premieze angajații. Fișierul constă din înregistrări de 32 de octeți, câte o înregistrare pentru fiecare angajat, în formatul arătat: 16 octeți pentru nume, 8 octeți pentru funcția ocupată și 8 octeți pentru primă. Fiecare din cele 16 blocuri de 8 octeți (numerotate de la 0 la 15) este criptat cu DES.

Figura 3.2. Textul clar al unui fișier criptat ca ansamblu de 16 blocuri DES.

Leslie a avut o controversă cu șeful și nu așteaptă prea mult de la această primă. În schimb Kim este favorita șefului și oricine știa asta. Leslie poate avea acces la fișier după ce el a fost criptat, dar înainte de a fi trimis la bancă. Poate Leslie să rectifice această situație nedreaptă, dat fiind doar fișierul criptat?

Nici o problemă. Tot ceea ce are Leslie de făcut este să realizeze o copie a blocului de text cifrat 11 (care conține prima lui Kim) și să-l folosească pentru a înlocui blocul de text cifrat cu numărul trei (care conține prima lui Leslie). Chiar și fără a ști ce cuprinde blocul 11, Leslie se poate aștepta să aibă un Crăciun mai fericit anul acesta.

DES (și toate cifrurile bloc) trebuie înlănțuite în diferite moduri astfel încât înlocuirea unui bloc în modul în care a făcut-o Leslie să conducă la situația în care textul clar decriptat, începând cu blocul înlocuit, să fie gunoi. Un mod de înlănțuire este înlănțuirea blocurilor cifrate (cipher blok chaing). În această metodă, prezentată în figura 3.3, fiecare bloc de text clar este combinat prin XOR (#) cu blocul anterior de text cifrat, înainte de a fi criptat. În consecință, același bloc de text clar nu se va mai pune în corespondență cu același bloc de text cifrat, iar criptarea nu mai este o mare substituție monoalfabetică. Primul bloc este combinat prin XOR cu un vector de inițializare, IV (Initialization Vector), ales aleatoriu, care este transmis împreună cu textul cifrat.

Putem vedea cum lucrează înlănțuirea blocurilor cifrate prin examinarea exemplului din figura 3.3 . Putem începe prin a calcula:

C0=E(P0XORIV).

Apoi vom calcula:

C1=E(P1XORC0) ș.a.m.d.

Decriptarea lucrează în același mod, cu P0=IVXORD(C0) ș.a.m.d.

FIGURA 3.3. Înlănțuirea blocurilor cifrate

Criptarea blocului i este o funcție de toate textele clare din blocurile de la 0 la i-1, astfel încât același text clar va genera text cifrat diferit în funcție de locul unde apare. O transformare de tipul celei făcute de Leslie va avea ca rezultat nonsens în cele două blocuri ce încep din câmpul de primă a lui Leslie. Pentru un ofițer de securitate perspicace, această caracteristică poate sugera de la cine să pornească investigația.

Înlănțuirea blocurilor cifrate are de asemenea avantajul că același bloc de text clar nu va rezulta niciodată din același bloc de text cifrat, făcând criptanaliza mai dificilă. De fapt, acesta este principalul motiv pentru care este folosită.

Cu toate acestea, înlănțuirea blocurilor cifrate are dezavantaje de a necesita ca un întreg bloc de 64 de biți să sosească înainte ca decriptarea să poată începe. Acest ,mod este nepotrivit pentru folosirea în cazul terminalelor interactive, unde oamenii pot introduce linii mai scurte de 8 caractere și apoi se pot opri în așteptarea unui răspuns. Pentru criptările octet-cu-octet poate fi utilizat cu modul cu reacție cifrată (cipher feedback mode), arătată în figura 3.4. În această figură, starea mașinii de criptare este arătată după ce octeții 0 până la 9 au fost criptați și trimiși. Când sosește blocul 10 din textul clar, după cum este ilustrat în figura 3.4(a), algoritmul DES operează asupra registrului de deplasare 64 de biți pentru a genera 64 de biți de text cifrat. Octetul cel mai din stânga al textului cifrat este combinat prin XOR cu P10. Acest octet este transmis pe linie. În plus, registrul de deplasare este deplasat cu 8 biți la stânga, provocând ieșirea lui C2 pe la capătul din stânga și inserarea lui C10 în poziția care tocmai a rămas vacantă la dreapta lui C9 . Conținutul registrului de deplasare depinde de întreaga istorie anterioară a textului clar, astfel încât un șablon care se repetă de mai multe ori în textul clar va fi criptat de fiecare dată diferit în textul cifrat. Ca și la înlănțuirea blocurilor cifrate, este necesar un vector de inițializare pentru a porni rostogolirea mingii.

Decriptarea în modul cu reacție cifrată face același lucru ca și criptarea. În particular, conținutul registrului de deplasare este criptat, nu decriptat, astfel încât octetul selectat care este combinat prin XOR cu C10 pentru a obține P10 este același cu cel ce a fost combinat prin XOR cu P10 pentru al obține pe C10 prima dată. Atâta vreme cât cele două registre de deplasare rămân identice, decriptarea lucrează corect.

Figura 3.4. Modul cu reacție cifrată

Trebuie menționat că dacă un bit din textul cifrat este inversat accidental în timpul transmisiei, cei 8 octeți ce sunt descifrați în timp ce octetul eronat se găsește în registrul de deplasare vor fi în întregime alterați. Odată ce octetul eronat este împins afară din registrul de deplasare, va fi generat iarăși un text clar corect. Astfel, efectul unui singur bit inversat este relativ localizat și nu va ruina tot restul mesajului.

Cu toate acestea, există aplicații în care a avea o eroare de transmisie de 1 bit care să strice 64 de biți de text clar reprezintă o pierdere prea mare. Pentru această aplicație există o a patra opțiune, modul cu reacție la ieșire (Output Feedback Mode). Acesta este identic cu modul de reacție cifrată, cu excepția faptului că octetul care va fi introdus pe la capătul din dreapta în registrul de deplasare va fi extras de acolo chiar înainte de a fi combinat5 cu XOR și nu după aceasta.

Modul cu reacție de la ieșire are proprietatea că o eroare de 1 bit în textul cifrat cauzează o eroare de un singur bit în textul clar rezultat. Pe de altă parte, este mai puțin sigur decât alte moduri și trebuie evitată utilizarea sa în scopuri generale. De asemenea, modul cu carte electronică de coduri trebuie evitat, cu excepția unor împrejurări speciale (de exemplu, criptarea unui singur număr aleatoriu, cum ar fi o cheie de sesiune). Pentru operații normale, atunci când la intrare sosesc unități de câte 8 octeți (de exemplu, pentru criptarea fișierului de pe disc), trebuie utilizat modul cu înlănțuirea blocurilor cifrate, iar pentru șiruri de intrare neregulate, cum ar fi intrarea de la tastatură, trebuie folosit modul cu reacție cifrată.

Spargerea DES-ului

DES a fost implicat în numeroase controverse încă din ziua în care a fost lansat. El se bazează pe un cifru dezvoltat și brevetat de IBM, numit LUCIFER, cu excepția faptului că acest cifru al IBM-ului folosea o cheie de 128 de biți în locul uneia de 56 de biți. Atunci când guvernul federal al SUA a dorit să standardizeze un cifru ca nefiind secret, el a „inventat” IBM-ul să „discute” această problemă cu NSA, agenția spărgătoare de coduri a guvernului, care utilizează cel mai mare număr de matematicieni și criptologi din lume. NSA vine de la National Security Agency (Agenția Națională de Securitate).

După ce au avut loc aceste discuții, IBM a redus cheia de la 128 de biți la 56 de biți și a decis să păstreze secret procesul prin care a fost proiectat DES-ul. Mulți oameni suspectează faptul că lungimea cheii a fost redusă pentru a exista siguranța că NSA poate sparge DES-ul, dar nici o organizație cu un buget mic nu poate face asta.

În 1977, doi cercetători în criptografie de la Stanford, Diffie și Hellman (1977), au proiectat o mașină pentru a sparge DES-ul și s-a estimat că ea poate fi construită cu un buget de 20 de milioane de dolari. Dată fiind o mică bucată de text clar și textul cifrat corespunzător, această mașină ar putea să găsească cheia, prin căutarea exhaustivă a 256 intrări din spațiul cheilor, în mai puțin de o zi. În prezent o astfel de mașină ar costa probabil 1 milion de dolari. O proiectare detaliată pentru o mașină ce sparge DES-ul prin căutare exhaustivă în aproape patru ore este prezentată în (Wiener, 1994).

Ceea ce trebuie de reținut este aceea că DES-ul nu mai trebuie folosit pentru criptarea documentelor importante. Cu toate că 256 este un nesemnificativ 7×1016 . 2112 este un impunător 5×1033 . Chiar cu un miliard de cipuri DES executând un miliard de operații pe secundă, ar trebui 100 de milioane de ani pentru a căuta exhaustiv intr-un spațiu de chei pe 112 biți. Astfel apare ideea de a rula DES-ul de două ori, cu două chei diferite de 56 de biți.

Din nefericire, Merkle și Hellman (1987) au dezvoltat o metodă care face ca dubla criptare sa devină suspectă. Aceasta poartă numele de atacul întâlnirea-la-mijloc (meet-in-the-middle) și lucrează astfel (Hellman,1980). Să presupunem că cineva a dublu-criptat o serie de blocuri de text clar, folosind modul carte electronică de coduri. Pentru câteva valori ale lui i, criptanalistul posedă perechile (Pi , Ci), unde

Ci=Ek2(Ek1(Pi)):

Dacă aplicăm acum funcția de decriptare Dk2 pentru fiecare membru al ecuației, obținem:

Dk2(Ci)=Ek1(Pi).

Tripla criptare este o altă problemă. Chiar din 1979, IBM a realizat că lungimea cheii DES era prea mică și a conceput un mod de a o crește efectiv, folosind tripla criptare (Tuchman, 1979). Metoda aleasă, care de atunci a fost incorporată în Standardul Internațional 8732, este ilustrată în figura 3.5. Aici sunt folosite două chei și trei runde. În prima rundă textul clar este criptat cu k1. În a doua rundă, este rulat DES în mod de decriptare, folosind cheia k2. În final, este efectuată o altă criptare cu k1.

Figura 3.5. Tripla criptare folosind DES

Proiectarea dă naștere imediat la două întrebări. Prima, de ce sunt folosite doar două chei în loc de trei? A doua, de este folosită succesiunea de transformări EDE, în loc de EEE? Motivul pentru care sunt utilizate două chei este acela că majoritatea criptografilor paranoici admit că 112 biți sunt suficienți pentru aplicațiile comerciale la momentul actual. A extinde la 168 de biți înseamnă a adăuga o supraîncărcare inutilă pentru gestiunea și transportul unei alte chei.

Motivul pentru folosirea succesiunii de transformări EDE este compatibilitatea cu produsele ce folosesc sisteme DES cu o singură cheie. Atât funcția de criptare cât și cea de decriptare sunt corespondențe între mulțimi de numere 64 de biți. Din punct de vedere criptografic, cele două corespondențe sunt la fel de puternice. Totuși, folosind EDE în loc de EEE, un calculator ce utilizează tripla criptare poate comunica cu unul ce folosește criptarea simplă, punând k1=k2. Această proprietate permite triplei criptări să fie pusă în practică treptat, lucru care nu interesează pe criptografii din mediul academic, dar care este de o importanță considerabilă pentru IBM și clienții săi.

Nu este cunoscută nici o metodă care să fi spart triplul-DES în modul EDE.

Trebuie menționate două progrese recente în criptanaliză. Primul progres este criptanaliza diferențială (Biham și Shamir, 1993). Această tehnică poate fi folosită pentru a ataca orice cifru bloc. Lucrează la început cu o pereche de blocuri text clar care diferă doar printr-un număr mic de biți și studiază cu grijă ceea ce se întâmplă la fiecare iterație internă pe măsură ce criptarea avansează.

Celălalt progres, mai puțin important, este criptanaliza liniară (Matsui, 1994). Aceasta poate sparge DES-ul doar cu 243 texte clare cunoscute. Lucrează prin combinarea XOR a anumitor biți din textul clar și din textul cifrat pentru a genera un bit. Când aceasta se efectuează repetat, jumătate din biți trebuie să fie zero și jumătate să fie unu. Totuși, adeseori, cifrurile introduc o deviație într-o direcție sau în alta și această deviație, cu toate că este mică, poate fi exploatată pentru a reduce factorul de muncă.

3.2.2. IDEA

Cel mai interesant și mai important dintre cifrurile bloc post-DES este IDEA (International Data Encryption Algorithm) (Lai și Massey, 1990; și Lai, 1992).

IDEA a fost proiectat de doi cercetători din Elveția, astfel încât în afara oricărei „directive” trasate de NSA, care ar fi putut să introducă o ușă secretă (trapă). Cifrul folosește o cheie pe 128 biți, care îl face imun pentru deceniile care urmează la atacurile prin forță brută, cele de tipul „loteria chinezească” și „întâlnirea-la-mijloc”. A fost de asemenea pentru a rezista la criptanalize diferențială. La momentul actual, nu este cunoscută nici o tehnică sau mașină care să fie capabile să spargă IDEA.

Structura de bază a algoritmului seamănă cu DES-ul prin aceea că blocurile de la intrare, de 64 de biți de text clar, sunt alterate printr-o secvență de iterații parametrizate pentru a produce la ieșire blocuri de 64 de biți de text cifrat. Dată fiind alterarea extensivă la nivel de bit (pentru fiecare iterație, fiecare bit de ieșire depinde de fiecare bit de intrare), opt iterații sunt suficiente. Ca toate cifrurile bloc, IDEA poate fi utilizată atât în modul cu reacție cifrată (CFB) cât și în toate celelalte moduri de înlănțuire prezentate la DES.

Au fost realizate atât implementări software cât și hardware ale algoritmului IDEA. Prima implementare software rula pe un 386 la 33 MHz și realiza criptare la o viteză de 0.88 Mbps. Pe o mașină modernă, de zece ori mai rapidă, pentru o implementare software se poate atinge o viteză de 9 Mbps. La ETH Zurich a fost construit un cip VLSI la 25 de MHz care criptează la o rată de 177 de Mbps.

3.3. ALGORITMI CU CHEIE PUBLICĂ

Istoric, distribuită cheilor a fost întotdeauna punctul slab al multor criptosisteme. Indiferent de cât de puternic era un croptosistem, dacă un intrus a putut fura cheia , sistemul și-a pierdut valoarea. Deoarece toți criptologii au considerat întotdeauna ca de la sine înțeles faptul că atât pentru criptare cât și pentru decriptare se folosește aceeași cheie (sau una ușor derivabilă din cealaltă) și că aceasta trebuie distribuită tuturor utilizatorilor sistemului, părea a exista întotdeauna următoarea problemă inerentă: cheile trebuiau protejate împotriva furtului dar, în același timp, ele trebuiau distribuite, astfel încât ele nu puteau fi sechestrate într-un set de bancă. În 1976, doi cercetători de la Universitatea Stanford, Diffie și Hellman (1976) au propus un tip radical nou de criptosistem în care cheile de criptare și decriptare sunt diferite, iar cheia de decriptare nu poate fi redusă din cheia de criptare. În propunerea lor, algoritmul (cheia) de criptare, E, și algoritmul (cheia) de decriptare, D, trebuiau să satisfacă trei cerințe. Aceste cerințe pot fi exprimate simplificat după cum urmează:

(1). D(E(P))=P

(2). Este mai mult decât dificil a se deduce D din E

(3). E nu poate fi spart printr-un atac cu text clar ales.

Prima cerință spune că, dacă se aplică D unui mesaj criptat, E(P), se obține textul clar original, P. Cea de-a doua cerință este clară. Cea de-a treia cerință este necesară deoarece, după cum vom vedea la un moment dat, intrușii pot experimenta și testa algoritmul după pofta inimii. În aceste condiții, nu există nici-un motiv pentru ca E, cheia de criptare, să nu poată fi făcută publică.

Metoda lucrează astfel: o persoană, să spunem Alice, dorind să primească mesaje secrete, concepe mai întâi cei doi algoritmi EA și DA ce satisfac dorințele de mai sus. Algoritmul de criptare și cheia, EA , sunt făcute apoi publice, de unde și numele de criptografie cu cheie publică (în contrast cu criptografia cu cheie secretă). Aceasta poate fi realizată prin punerea lor într-un fișier pe care oricine dorește poate să-l citească. Ales public algoritmul de decriptare (pentru a putea fi liber consultat), dar păstrează cheia de decriptare secretă. Astfel, EA este public, dar DA este privat.

Criptografia cu cheie publică necesită ca fiecare utilizator să aibă doua chei: o cheie publică, folosită de toată lumea pentru a cripta mesajele ce-i sunt transmise, și o cheie secretă, de care utilizatorul are nevoie ca să-și decripteze mesajele. Ne vom referi în mod constant la aceste chei ca fiind cheia publică și, respectiv cheia privată și le vom deosebi de cheile secrete folosite atât pentru criptare cât și pentru decriptare în criptografia convențională (numită și criptografie cu cheie simetrică).

3.3.1. Algoritmul RSA

Singura problemă este aceea că avem nevoie de algoritmi care să satisfacă complet toate cele trei cerințe. Datorită posibilelor avantaje ale criptografiei cu chei publice, mulți cercetători au lucrat din greu la acest subiect și au fost deja publicați câțiva algoritmi. O metodă bună a fost descoperită de un grup de la MIT (Rivest ș.a.m.d.). Ea este cunoscută prin inițialele numelor celor trei descoperitori (Rivest, Shamir, Adelman): RSA. Metoda lor este bazată pe câteva principii din teoria numerelor. Se va rezuma mai jos modul în care se folosește această metodă.

(1). Se aleg două numere primare, p și q,(de obicei mai mari decât 10100).

(2). Se calculează n=p×q și z=(p-1)×(q-1).

(3). Se alege un număr relativ prim cu z și este notat cu d.

(4). Se găsește e astfel încât e×d=1modz.

Cu acești parametri calculați în avans, suntem gata să începem criptarea. Împărțim textul clar (privit ca șir de biți) în blocuri, astfel încât fiecare mesaj de text clar, p, să intre în intervalul 0<=p<=n. Aceasta poate fi făcută grupând textul clar în blocuri de câte k biți, unde k este cel mai mare număr întreg pentru care inegalitatea 2k<n este adevărată.

Pentru a cripta mesajul P, se calculează C=Pe(modulo n). Pentru a decripta C, se calculează P=Cd(modulo n). Se poate demonstra că pentru toți P din intervalul specificat, criptarea și decriptarea sunt funcții inverse una alteia. Pentru a realiza criptarea este nevoie de e și n. Pentru a realiza decriptarea este nevoie de d și n. De aceea, cheia publică constă din perechea (e,n), iar cheia privată din perechea (d,n).

Securitatea metodei este bazată pe dificultatea factorizării numerelor mari. Dacă un criptanalist ar putea factoriza numărul n (public cunoscut), el ar putea găsi p și q, iar din acestea pe z. Cu z și e cunoscuți, criptanalistul îl poate calcula pe d folosind algoritmul lui Euclid. Din fericire, matematicienii au încercat să factorizeze numere mari de cel puțin trei sute de ani și experiența acumulată sugerează că aceasta este o problemă mai mult decât dificilă.

În conformitate cu Rivest și colegii săi, factorizarea unui număr de 200 cifre necesită un timp de calcul de 4 miliarde de ani; factorizarea unui număr de 500 de cifre necesită 1025 ani. În ambele cazuri ei presupun că se folosește cel mai bun algoritm de factorizarea și un calculator cu timp de execuție a unei instrucțiuni de 1μsec. Chiar dacă viteza calculatoarelor va continua să sporească cu un ordin de mărime pe deceniu. Se vor mai trece secole până când factorizarea unui număr de 500 de cifre va deveni realizabilă, moment în care descendenții noștri vor alege pur și simplu p și q mai mari.

Să considerăm un mic exemplu care să ilustreze acest algoritm:

Pentru acest exemplu am ales p=3 și q=11, rezultând n=33 și z=20. O valoare pozitivă pentru d este d=7, deoarece 7 și 20 nu au factor comun. Cu aceste alegeri, e poate fi găsit prin rezolvarea ecuației 7e=1(mod20), care dă e=3. Textul cifrat, C, pentru textul clar al mesajului, P, este dat de C=P3(mod33). Textul cifrat este decriptat de către receptor după regulă P=C7(mod33). Figura prezintă ca exemplu criptarea și decriptarea textului clar „SUZANNE”. Deoarece numerele prime alese pentru acest exemplu sunt prea mici, P poate fi mai mic decât 33, astfel încât blocul de text clar poate conține doar un singur caracter. Rezultatul este un cifru cu substituție monoalfabetică, nu foarte impresionant. Dacă în locul acestora am fi ales p și q=10100 , am fi avut n=10200, astfel încât fiecare bloc poate fi de până la 664 biți (2664=10200) sau 83 de caractere de 8 biți, față de 8 caractere pentru DES.

Trebuie subliniat că folosire RSA în modul descris este similară folosirii DES-ului în modul ECB-blocuri de intrare identice conduc la blocuri de ieșire identice. De aceea este necesară o anumită formă de înlănțuire pentru criptarea datelor. Totuși, în practică, multe sisteme bazate pe RSA folosesc criptografia cu cheie publică în principal pentru distribuirea cheilor de sesiune de unică folosință utilizate pentru DES, IDEEA sau alți algoritmi similari. RSA este prea lent pentru a cripta eficient volume mari de date.

3.3.2. Alți algoritmi cu cheie publică

Cu toate că RSA este larg răspândit, nu este în nici un caz singurul algoritm cu cheie publică cunoscut. Primul algoritm cu cheie publică a fost algoritmul rucsacului (Merkle și Hellman, 1978). Ideea este că cineva posedă un număr mare de obiecte, fiecare cu greutate diferită. Posesorul codifică mesajul prin selecția secretă a unei submulțimi de obiecte și plasarea lor în rucsac. Greutatea totală a obiectelor din rucsac este făcută publică, ca și lista tuturor obiectelor posibile. Lista obiectelor din rucsac este ținută secretă. Cu câteva restricții suplimentare, problema găsirii unei liste de obiecte cu greutatea dată a fost gândită ca fiind imposibil de calculat și formează baza pentru algoritmul cu cheie publică.

Inventatorul algoritmului, Merkle, a fost aproape sigur că acest algoritm nu poate fi spart, astfel că el a oferit o recompensă de 100 de dolari oricui îl va putea SPARGE. A. Shamir („S-ul din RSA”) l-a spart cu promptitudine și a primit recompensa. Fără a-și pierde curajul, Merkle și-a întărit algoritmul și-a oferit o recompensă de 1000 de dolari oricui va putea sparge noul algoritm. R. Rivest („R-ul din RSA”) l-a spart cu promptitudine și a luat banii. Cu toate că a fost spart și îmbunătățit din nou, algoritmul rucsacului nu este considerat sigur și este rareori utilizat. Alte scheme cu cheie publică sunt bazate pe dificultatea calculului logaritmilor discreți (Robin, 1979). Algoritmii care folosesc acest principiu au fost inventați de El Gamal (1985) și Schnorr (1991).

Există câteva alte scheme, cum ar fi cele bazate pe curbe eliptice (Menezes și Vanstone, 1993), dar cele trei categorii majore sunt cele bazate pe dificultatea factorizării numerelor mari, a calculului logaritmilor discreți și a determinării conținutului unui rucsac din greutatea sa. Aceste probleme sunt considerate ca fiind autentic dificile deoarece matematicienii ce studiază de mulți ani fără vre-un progres notabil.

4. PROTOCOALE DE SECURITATE

4.1. PROTOCOALE DE AUTENTIFICARE

Atunci când un utilizator se conectează în rețea, sistemul face identificarea acestuia. Într-o rețea este firesc ca ambii parteneri de comunicație dintr-o asociație (utilizatori, procese, calculatoare) să se identifice reciproc. După aceea au loc procesele de autentificare; într-o rețea autentificarea trebuie să fie reciprocă și se poate baza pe:

(1).Informații prearanjate (parole, PIN-uri, fraze cod etc.);

(2).Cartele magnetice, procesoare de identificare, chei aflate în posesia utilizatorilor;

(3).Caracteristici personale ale utilizatorilor (amprente, date antropometrice, voce, proprietăți biochimice, etc.);

(4).Proceduri în timp real de identificare a îndemnării, a capacității și a obiceiurilor utilizatorilor (semnături, tip (stil) de tastare, viteze de citire etc.).

Autentificarea este tehnica prin care un proces verifică dacă partenerul său de comunicație este cel presupus a fi și nu un impostor. Verificarea identității unui proces de la distanță, în cazul unui intrus activ și rău voitor, este surprinzător de dificilă și necesită protocoale complexe bazate pe criptografie.

A. Autentificarea prin parole

În mod tradițional, fiecare utilizator, la conectarea în rețea furnizează numărul (numerele) de identificare și parola. Ei pot folosi mai multe tipuri de protocoale.

(a) Protocolul de autentificare cu parole simple

pasul 1: utilizator: – – – – -> sistem; identitate utilizator

pasul 2: utilizator: – – – – -> sistem; parolă

pasul 3: stop. Utilizatorul este acceptat, dacă parola este validă.

Alte variante ale metodei , mai sigure, pot fi următoarele:

– să se folosească parole lungi;

– să se folosească liste de parole.

(b) Protocolul de autentificare cu parole variabile

pasul 1: utilizator: – – – – -> sistem; identitate utilizator

pasul 2: utilizator: – – – – -> sistem: parolăi+1

pasul 3: stop. Utilizatorul este acceptat, dacă parolai+1 este validă.

Acest model de autentificare este de exemplu folosit de rețeaua SWIFT (Society of Worldwide Interbank Telecomunications) a comunității bancare internaționale, pentru autentificarea terminalelor.

(c) Protocolul de autentificare bazat pe funcții greu inversabile („one-way”)

Este vorba de un model care pleacă de la ideea de parolă multiplă bazată pe o funcție greu inversabilă F, care face o proiecție a unei mulțimi de cuvinte pe ea însăși astfel:

(1) Fiind dat un cuvânt x, este ușor să se calculeze F(x)

(2) Fiind dat un cuvânt z, nu este posibil să se calculeze cuvântul x, astfel ca y=F(x).

Utilizatorul are o secvență de parole:

F999(x), … , F(F(x)), F(x), x.

Receptorul a primit inițial:

F1000(x)=F(F999(x)).

Emițătorul care trimite prima parolă F999(x) în prima comunicație este ușor de autentificat calculând F(F999(x)). Apoi la receptor se înlocuiește parola F1000(x) cu F999(x) pentru pasul următor. Protocolul devine

Pasul 1: Utilizator – – – – -> sistem: identificator-utilizator;

Pasul 2: Utilizator – – – – -> sistem: Fi(parolă);

Pasul 3: Utilizatorul este acceptat dacă Fi(parola) este validă (calculând F(Fi(parola))).

Indiferent de protocolul de autentificare folosit, parolele trebuie memorate sub forma cifrată într-un fișier accesibil doar administratorului.

B. Autentificarea prin cerere / răspuns (Handshawing)

Modelul cerere/răspuns se bazează pe o funcție f cunoscută doar de un anumit utilizator și de calculator. În procesul de autentificare se omite un număr pseudoaleator x și în același timp se calculează y=f(x). Utilizatorul aplică procedura numărului x și returnează f(x), care este compact cu y. Poate fi parcurs următorul protocol de autentificare:

Pasul 1: Sistem – – – – -> utilizator: x;

Pasul 2: Sistemul calculează y=f(x);

Pasul 3: Utilizatorul – – – – -> sistem: f(x);

Pasul 4: Stop. Utilizatorul este acceptat dacă y=f(x).

Acest mod „handshawing” este mai greu de folosit în autentificarea unor utilizatori și este indicată pentru a autentifica alte calculatoare ale rețelei.

C. Autentificarea mutuală

Într-o comunicație (asociație) stabilită în rețea fiecare parte dorește să se convingă de autenticitatea celeilalte părți cu care comunică. Cel mai simplu model este următorul: A va trimite parola sa lui B și B va emite propria parolă la A. Dar în momentul când A emite parola nu este convins că la celălalt capăt este B și ca urmare poate să-și deconspire parola; aceasta poate fi „capturată” de o altă entitate C care se poate da în continuare drept A. De aceea se preferă un model de tip cerere / răspuns, caz în care nici o entitate nu emite informație cu caracter secret.

4.1.2. Autentificare prin semnătură digitală

Semnături digitale directe

Atunci când un mesaj semnat este transmis direct de la emițător la receptor-fără un alt arbitru-semnătura este numită adevărată (directă).

Protocolul de semnătură prin cifrare simetrică

Fie E un cifru simetric și f o funcție definită pe mulțimea mesajelor cu valori într-o submulțime de cardinal p al mulțimii {1, 1, …, n}.

Pentru fiecare mesaj entitate A alege o mulțime de chei:

k={k1, k2, …, kn}

și un set de parametri:

V={v1, v 2 ,…, vn}

care va fi folosit pentru a semna mesaje ce vor fi transmise entității B. A va emite mulțimile V și V′,

V′={Ek1(V1), Ek2(V2), …, Ekn(Vn)}

atât celeilalte părți B cu care dorește să se autentifice cât și unei entități judecător C:

A – – – – -> B: V, V′

A – – – – -> C: V, V′.

Fie m mesajul și idm concatenarea lui cu numărul de identificare al receptorului și cu numărul de secvență al mesajului. Dacă:

f({idm, m})={i, …, j},

semnătura digitală a lui m este mulțimea

k′ = {ki, …, kj}. Apoi A va omite:

A – – – – -> B: {idm, m}, k′.

Receptorul mesajului va verifica semnătura astfel: se calculează f({idm,m}) și se verifică rezultatul cu k′. Apoi verifică faptul că submulțimea {vi, …, vj} a lui V va fi cifrată în submulțimi:

{Eki(Vj), …, Ekj(Vj)} a lui V′.

În concluzie protocolul propus este următorul:

Pasul 1: Utilizatorul A selectează o mulțime de chei k={k1, k2, …, kn} și un set de parametri V={v1, v 2, …, vn};

Pasul 2: A calculează mulțimea V′={Ek1(V1), Ek2(V2), …, Ekn(Vn)};

Pasul 3: A – – – – -> B: V, V′;

Pasul 4: A – – – – -> C: V, V′;

Pasul 5: A calculează f({idm, m}) și selectează submulțimea potrivită de chei k′ = {ki, …, kj};

Pasul 6: A – – – – -> B: {idm, m}, {ki, …, kj};

Pasul 7: B verifică dacă {vi, …, vj} este cifrat corect la

{Eki(Vj) ,…, Ekj(Vj)}.

În caz de conflict, B va transmite la C mesajul m, identificatorul idm, și setul k′ iar C va verifica semnătura.

Există câteva dezavantaje ale protocolului:

– trebuie să existe o a treia parte C în care să aibă încredere atât A cât și B;

– emițătorul A, receptorul B și judecătorul C trebuie să schimbe un volum important de informație;

– transmisia acestei informații trebuie făcută într-un mod sigur;

– informația este folosită ineficient (k, V, V′ sunt utilizate doar o singură dată).

Protocol de semnătură prin chei publice

Cu ajutorul criptosistemelor cu chei publice se pot crea protocoale de semnătură mai elegante. În acest caz nu mai este nevoie de a treia parte C ca arbitru.

Fie m un mesaj, idm numărul său de identitate, și DA funcția de cifrare și cheia secretă a emițătorului A. Aceasta va emite la B:

A – – – – -> B: m′ ={idm, DA ({idm, m})}.

Receptorul va descifra partea cifrată a mesajului folosind cheia publică a lui A, EA . Apoi verifică dacă mesajul obținut este cu sens și dacă corespunde idm. În acest caz se acceptă m ca fiind semnătura validă a lui semnătura validă a lui m.

Protocolul propus este următorul:

Pasul 1: A – – – – -> B: m′ = {idm, DA ({idm, m})};

Pasul 2: B descifrează cu cheia publică

EA{idm, m}= EA(DA ({idm, m})});

Pasul 3: Mesajul m este autentic dacă este cu sens și dacă idm este valid.

B. Semnături digitale arbitrare

Pentru a evita situația când emițătorul unui mesaj, pentru a repudia semnătura, face publică cheia sa secretă, pretinzând că altcineva a semnat mesajul, se poate folosi o clasă de protocoale bazată pe existența unor entități arbitri.

Protocolul de semnătură prin cifrare simetrică

Să presupunem că două entități A și B doresc să schimbe un mesaj secret. Ele vor folosi o a treia entitate C numită arbitru. Fie E funcția de cifrare simetrică, KAC cheia comună de comunicații între A și C și cheia KC cunoscută doar de arbitrul C. Dacă m este mesajul care va fi emis, idm numărul său de identificare, atunci A va emite la C mesajul m, idm și semnătura:

s=EKAC({idm, w}),

unde w este o formă comprimată a lui m.

O cale simplă pentru a comprima pe m constă în a „sparge” mesajul în blocuri egale, de exemplu de 64 de biți. În acest caz w se calculează astfel:

s1=EK(m1),

si = EK (mi si-1), i=2,…,n și w=sn.

Cheia k este făcută public. După ce C verifică semnătură w, el va emite la B mesajul:

EKBC({idm, m, s′, data, a}),

unde a este un cod binar care indică dacă s este realmente semnătura digitală a mesajului m creat de A și sי este:

s′ = EKC({s, a}).

În concluzie protocolul propus este următorul:

Pasul1: Utilizatorul A comprimă mesajul m astfel:

1.a. s1=EK(m1)

1.b. si = EK = (m1 si-1), i=2,…,n

1.1. w=sn

Pasul2: A – – – – -> C: s=EKAC({idm, w}),

Pasul3: C calculează s’ = EKC({s, a}),

Pasul4: C – – – – -> B: EKBC({idm, m, s′, data, a}).

În caz de conflict C verifică autenticitatea lui s. Dacă cheia KAC a devenit publică, C verifică pe s′.

Protocolul de semnătură prin chei publice

Fie m mesajul de transmis și idm numărul său de identificare. Entitatea A va calcula mai întâi:

s1=EB(DA(m)),

mesaj care poate fi descifrat doar de B. DA(m) reprezintă semnătura digitală a mesajului m, creată de entitatea A. Aceasta transmite la C:

{idm, s2},

unde s2=DA({idm, s1}).

Arbitrul C autentifică mesajul descifrând s2 și verificând că textul obținut începe cu idm. Apoi C va emite la B mesajul:

DC({idm, s1, data, a}),

Pe care B îl va descifra cu cheia publică a lui C.

Protocolul de semnătură este următorul:

Pasul1: Entitatea A creează s1=EB(DA(m));

Pasul2: Entitatea A creează s2=DA({idm, s1});

Pasul3: A – – – – -> s3={idm, s2};

Pasul4: C descifrează s2 și verifică idm;

Pasul5: C – – – – – > B: DC({idm, s1, data, a}).

C. Semnături de grup

Chaum [CHAU91] introduce un concept nou, acela de semnătură de grup, care are proprietățile:

(1) Fiecare persoană din grup poate semna un mesaj;

(2) Receptorul poate verifica dacă este o semnătură validă a grupului, dar nu poate determina cui îi aparține;

(3) Dacă este necesar, semnătura poate fi „deschisă”, adică se poate releva persoana care a transmis mesajul.

Se vor prezenta mai multe astfel de semnături de grup, bazate toate pe aceleași principii geografice.

Un exemplu de utilizare este următorul; o companie are mai multe calculatoare conectate într-un LAN. Fiecare departament al companiei are propria imprimantă (toate conectate la rețea) și numai persoanele acelui departament pot folosi acea imprimantă. Înainte de tipărire, programul print-server-ului trebuie să fie convins că utilizatorul lucrează în acel departament. Numele nu îi este relevat. Dar dacă la sfârșitul unei zile se constată că cineva a folosit ilegal un printer, detectorul poate releve numele utilizatorilor.

Securitatea schemelor de semnătură de grup se bazează pe următoarele două presupuneri:

(1): Nici o persoană nu poate calcula logaritmi discreți modulo un număr, produs a două numere prime mari;

(2): Nici o persoană nu poate calcula logaritmi discreți modulo un număr prim mare.

4.2. PROTOCOALE PENTRU PROTECȚIA TRANSFERULUI DE DATE

Subsistemul de comunicații, cu nodurile sale de comutație este considerat partea cea mai vulnerabilă a rețelei.

4.2.1. Confidențialitatea și integritatea mesajelor

Confidențialitatea mesajelor este un serviciu de securitate prin care se protejează conținutul mesajului împotriva unei observări neautorizate, adică se „ascunde” conținutul mesajului.

Integritatea mesajelor este un serviciu de securitate prin care mesajul este protejat împotriva unor modificări neautorizate sau accidentale, adică se garantează conținutul corect al mesajului. Există diferite metode pentru a realiza autentificarea mesajelor a cifra conținutul lor. O astfel de abordare este necesară atunci când nu este asigurată confidențialitatea ci doar integritatea mesajelor (ca de exemplu în tranzacții funciare sau distribuirea cheilor publice). Sunt cunoscute doua astfel de metode de autentificare:

(a) Adăugarea unui MAC (Message Authentication Code) sau Suma Criptografică la mesaj;

(b) Semnăturile digitale

4.2.2. Asigurarea confidențialității datelor prin metode criptografice clasice

Pentru confidențialitatea datelor transmise, propunem folosirea unuia din următoarele sisteme criptografice:

(1) Sisteme criptografice secvențiale

În acest caz cheia de cifrare este folosită ca „sămânță” (seed) a unui generator pseudoaleator de numere, în care șirul de biți de la ieșire este combinat, prin suma modulo 2, cu textul clar (figura 4.1.). Valoarea IV reprezintă valoarea de inițializare, care este transmisă înaintea mesajului pentru a declanșa generatorul pseudoaleator de la recepție. O variantă a schemei constă în a utiliza însumarea pe octet, modulo 256. Este un sistem fără propagarea erorilor.

Figura 4.1. Sistem criptografic secvențial

(2) Sisteme criptografice secvențiale cu reacție de text cifrat

FIG. 4.2. Sistem criptografic cu reacție de text cifrat

Este vorba de un sistem similar cu cazul precedent, cu excepția faptului că textul cifrat este returnat ca un parametru al generatorului (figura 4.2.). În cazul acestui sistem avem de-a face cu propagare a erorilor, a cărei lungime depinde de structura generatorului. Algoritmul DES în schema CFB (Cipher Feed Back), cu un bit reacție lucrează în acest mod.

(3) Sisteme criptografice secvențiale de text clar

În acest caz generatorul va primi ca parametrul textul clar (figura 4.3.). Un astfel de sistem are o propagare nelimitată a erorilor. Se pot folosi și alte combinații ale sistemelor (2) și (3).

Figura 4.3. Sisteme secvențiale cu reacție de text – clar

(4) Sisteme criptografice secvențiale pe blocuri (neliniare)

În aceste sisteme (figura 4.4.) are loc o substituție neliniară (și posibile permutări) ale unui bloc de text clar. Cifrarea unor blocuri consecutive este dictată de o cheie și de generator și este diferită chiar dacă este vorba de blocuri de text clar identice. Propagarea erorilor este limitată la blocul la care apare eroarea.

Figura 4.4. Sisteme secvențiale pe blocuri

(5) Sisteme criptografice secvențiale pe blocuri cu reacție

Figura 4.5. Sisteme criptografice pe blocuri cu reacție

În aceste sisteme se introduce o reacție de text cifrat (figura 7.5.), ceea ce conduce la un sistem cu autochei.

(6) Sisteme criptografice bloc

Fig 4.6. Cifrare bloc

În criptosistemele bloc se cifrează simultan mai mulți biți ai textului clar, folosind o funcție neliniară, ceea ce face ca fiecare bit din blocul clar să afecteze toți biții blocului cifrat. În acest caz două blocuri identice dau criptograme identice iar propagarea erorii se extinde doar la blocul incorect (figura 4.6.).

(7) Sisteme criptografice bloc cu reacție

Figura 4.7. Cifru bloc cu reacție

În cazul acestor criptosisteme se introduce o reacție de text-cifrat care constă din blocul anterior prelucrat. Prima reacție constă dintr-o valoare IV. Orice bit eronat afectează două blocuri succesive (figura 4.7.).

4.2.3. Protocoale pentru autentificare conținutului mesajelor

La conectarea unui utilizator la un nod al rețelei are loc o autentificare a acestuia care se face doar la începutul sesiunii de lucru. Un alt aspect al autentificării constă în autentificarea mesajelor care are ca scop să verifice sursa și conținutul original a mesajului. Acest tip de verificare se aplică ori de câte ori se recepționează un alt mesaj.

Serviciul de autentificare a mesajelor trebuie să verifice:

– dacă mesajul provine de la emițătorul autentic;

– dacă conținutul mesajului este neschimbat;

– dacă mesajul este livrat receptorului autorizat;

– dacă mesajul nu a mai fost recepționat deja;

– dacă mesajul este recepționat în aceeași secvență în care a fost transmis.

În continuare se prezintă trei metode mai complexe de autentificare a unui mesaj.

Autentificarea mesajelor prin funcții de autentificare

Fiecare pereche de entități comunicante A și B au o funcție de autentificare V, cunoscută doar de ei. Dacă A dorește să transmită un mesaj m la B, A va emite {m, V(m)}. La recepție se verifică dacă mי=V(m) coincide cu valoarea recepționată.

Deși funcția de autentificare este publică, ea conține un element secret, numit cheie, de obicei scurtă (între 16 și 32 de caractere). Un observator extern poate totuși trimite un mesaj m emis de la A la B, înapoi la A, fără ca acest lucru să fie detectat.

A→B: {m, id(A), V({m,id (a)})}.

Protocolul reprezintă o variantă a modelului folosit în rețeaua bancară SWIFT pentru transferul electronic de fonduri. Există o funcție de autentificare Vk(m) furnizată de SWIFT, însă cheia k este cunoscută doar de cele două bănci care comunică. Funcția de autentificare poate fi de mai multe feluri.

(1) Funcție de verificare criptografică

Se folosește un algoritm asupra a n biți, cu trunchiere. Mesajul m este divizat în blocuri D1, D2,…, Dq. Se calculează un MAC (Mesaj Autentification Code) printr-un algoritm (A) de cifrare ce acționează asupra a n biți cu cheia k. Întreg procesul are nevoie de o valoare de inițializare (IV); pentru restul mesajelor, MAC se calculează pe baza mesajelor anterioare.

(2) Cod bazat pe funcții de dispersie (funcții hash)

Acești algoritmi creează un MAC de 32, 64 sau 128 de biți. Algoritmii se bazează pe următoarele principii:

– algoritmul de calcul al sumei de control nu cere informație secretă, ca urmare atât textul cât și suma rezultată trebuie ținute secrete în fața calculatorului;

– algoritmul tebuie să se execute eficient în calculatoare, fără să depindă de existența unor echipamente criptografice;

– suma de control trebuie să fie senzitivă la toate posibilele permutări și aranjamente făcute în text la fel ca și în fața unor înserări și ștergeri;

– dacă asupra a două texte diferite se calculează suma de control, probabilitatea ca valorile obținute să fie egale trebuie să fie o variabilă uniform distribuită și independentă de text;

-funcția de calcul al sumei de control nu trebuie să fie inversabilă.

Autentificarea mesajelor prin cifrare simetrică

Criptosistemele simetrice folosesc aceeași cheie (secretă) atât la cifrare cât și la descifrarea unui mesaj. Algoritmul de cifrare și descifrare (F) este public, dar cheia este cunoscută doar de cei doi comunicanți A și B. Când A vrea să trimită un mesaj m către B, dar vrea ca mesajul să fie mai întâi cifrat, el calculează:

A→B: C=FK(m).

La recepție, B folosind aceeași cheie k, va obține pe m calculând:

m=FK(C).

Procesul de autentificare bazat pe scheme simetrice este următorul: Când B recepționează un mesaj emis de A, B descifrează mesajul utilizând cheia comună lui A și B, k. Dacă procesul de descifrare duce la un mesaj fără sens, concluzia este că el nu a fost emis de A sau că a fost modificat de o altă entitate.

Se pot proiecta însă protocoale mai complexe, bazate pe metode criptografice simetrice, care să conducă la autentificare sigură. Protocolul propus pleacă de la stadiul lui Rubin [RUBI78] care se bazează în principal pe logica probabilistică și utilizează un dispozitiv de cifrare-bloc. Sistemul poate fi folosit, de exemplu, la autentificarea mesajelor (documentelor) fișierelor care circulă, prin rețele de calculatoare, între sucursalele aceleiași firme, situate în blocuri diferite.

Vom nota cu M un mesaj (de pildă un contract sau un ordin de plată) și cu SP(M) semnarea lui M de către persoana P. Semnătura SP(M) este caracteristică nu numai lui P, dacă un adversar poate găsi un mesaj M diferit de N astfel încât SP(M)=SP(N), atunci adversarul poate produce mesajul (M, SP(M)) care nu-l are la origine pe P. Vom nota cu Exw funcția de cifrare a lui w utilizând cheia x. În mod analog există și funcția de descifrare D care satisface proprietate:

DXEXw=w.

Un mesaj M este o secvență de forma:

M=w1w2…wm, cu lungimea l(wi)=k.

Funcția poate fi extinsă astfel încât să utilizeze mesajul drept cheie definind:

EMw=Ew1Ew2…Ewmw.

De observat că prin EXEYu am înțeles, ca notație EX(EY(u)).

Pentru funcția de cifrare E, care va fi folosită în aplicarea semnăturii digitale, vom face câteva presupuneri:

Pentru fiecare cheie x și pentru orice listă dată:

(w1, EXw1), …, (wn, EXwn) (*)

este computațional greu să se producă perechea (w,u=EXw), astfel încât w diferit de wi, 1<=i<=n, și s-ar putea calcula u=EXw.

Se mai presupune că dat fiind orice cuvânt w, este computațional greu să calculăm două mesaje N<>M astfel încât ENw=ENw.

Autentificarea mesajelor prin cifrare cu chei publice

Acest protocol propus are la bază ideea de randomizare și utilizează în vederea cifrării atât algoritmi cu chei publice cât și convenționali.

Fie EP și DP algoritmi de cifrare, respectiv de descifrare cu cheie publică ai unui participant P. Pentru fiecare mesaj M se definește semnătura lui P ca fiind: S(M)=DP(M).

Partea care verifică semnătura folosește EP făcut public, determinând:

EP(DP(M))=M.

În continuare se prezintă un protocol mai complex de autentificare, care pleacă de la ideea lui Merkle de enigma(puzzle). Se numește enigmă perechea mesaj criptogramă, (M, FK(M)), unde sarcina criptanalistului este să găsească cheia k. Vom nota cu FK și cu FK-1 funcțiile de cifrare, respectiv, un mesaj standard MS, cunoscut de toate părțile, și se vor forma enigme prin alegerea aleatoare a lui K și calcularea lui FK(MS).

Protocolul funcționează după următorii pași:

– procedura semnăturii

(a) Utilizatorul (procesul) A pregătește 2N enigme:

FK1(MS, FK2(MS), …, FK2N(MS)

și 2N copii semnate și cifrate a lui C:

FK1DA(C, 1)), FK2(DA(C, 2)), …, FK2N(DA(C, 2N))

și le emite pe toate la B;

(b) Utilizatorul (procesul) B alege un 1<=i<=2N, nefolosit anterior. El îi va cere lui A să îi releve cheia sa Ki. A va trimite cheia cerută. După recepția lui Ki, B poate verifica dacă cheia este într-adevăr soluția celei de-a i-a enigme a lui A. El utilizează apoi Ki, pentru descifrarea semnăturii luiA de pe cea de-a i-a copie și verifică că este într-adevăr semnătura lui A asupra lui (C, i), prin aplicarea funcției EA la DA (C, i). Pasul (i) se repetă de N+1 ori. B acționează simetric.

Fiecare pereche Fki, Fki(DA(C, i)) este numită cea de-a i-a unitate a mesajului emis de A către B în pasul (i).

– autentificarea semnăturii

După recepția lui Ki de la A, ca urmare a cererii lui B, aceasta consideră unitatea ca fiind falsă dacă are loc una din situațiile:

(a) numărul de biți ai cheii Ki recepționate nu corespunde cu cel fixat la stabilirea protocolului;

(b) cheia Ki recepționată nu constituie soluția celei de-a i-a enigme Pi:

Fki-1(Pi)<>Ms

(c) după decodificarea celei de a i-a părți Mi a pretinsei secvențe de semnătură cifrată, pe care A a emis-o în pasul (i) la B, semnătura lui,

(C, iי), nu este verificată:

EA(Fki-1(M)<>(C, iי),

Unde iי reprezintă valoarea anterioară a lui i. Când B detectează o unitate falsă el întrerupe imediat protocolul.

4.2.4. Protecția împotriva reluărilor de mesaje

– Dacă o entitate A a emis un mesaj unei alte entități B, un observator neautorizat poate înregistra mesajul și, după un timp, îl poate retransmite lui B. Acesta va crede că este un mesaj valabil sosit de la A. Desigur că există soluția ca B să memoreze toate mesajele primite de la A și atunci când primește unul nou să verifice dacă a mai fost primit în prealabil.

– O altă soluție se bazează pe următorul protocol (valabil pentru rețele mici): Fiecare mesaj trimis de la A la B are asignat un număr de secvență. Fie n(A, B) numărul ultimului mesaj transmis de la A la B. Fiecare entitate A are o listă de perechi n(A, B), n(B, A) pentru fiecare partener B. Când B primește un mesaj de la A cu numărul de secvență n, el verifică dacă în lista sa n(A, B)=n+1. O astfel de soluție este adoptată în rețeaua bancară SWIFT.

– O altă soluție, aplicabilă în rețelele cu un număr mare de utilizatori se bazează pe următorul protocol:

Cele două entități comunicante trebuie să schimbe cel puțin trei mesaje pentru ca B să fie sigur că mesajul recepționat nu este o copie a celui anterior. La început A emite la B un mesaj concatenat cu un număr aleator a. Receptorul B va transmite un mesaj concatenat cu a și cu un alt număr aleator b. Atunci când A recepționează înapoi pe a este convins că mesajul este un răspuns actual de la mesajul transmis de la A la B. În următorul mesaj emis de A lui B se va include b, astfel încât la recepție, B va fi convins că este un mesaj actual:

A – – – – -> B: {a, B, text1}

B – – – – -> A: {a, b, A, text2}

A – – – – -> b: {b, B, text3}

4.2.5. Protecția secvenței de mesaje

Până acum am considerat doar protecția individuală a unui mesaj dintr-o rețea. Însă asocierea dintre doi utilizatori presupune schimbul mai multor mesaje, pe o perioadă mai lungă de timp. Cheia de cifrare poate fi folosită pentru mai multe mesaje. De aici posibilitatea unei entități adverse de a șterge mesaje din șir, de a le relua mai târziu sau de-a schimba ordinea lor. Există mai multe posibilități de protecție la un astfel de atac:

(a) Folosirea unor numere de secvență a mesajului, ca parte din conținutul lor (care va fi eventual cifrat). Receptorul poate controla că sosesc în ordine. Poate fi vorba despre un contor care se resetează după o lungă perioadă, preferabil superioară duratei de întrebuințare a cheii.

(b) Folosirea unor mărci de timp, prin adăugarea la mesaj a datei și orei la care a fost generat.

(c) Folosirea unor numere aleatoare la recepție. Când receptorul va emite un număr aleatoriu la emițător înainte ca acesta să-i trimită mesajul. Apoi acesta va insera numărul recepționat în mesajul cifrat.

(d) Variabile criptografice necontrolate de emițător.

4.2.6. Protocoale pentru protecția criptografică a fișierelor

Protecția fișierelor prin metode criptografice

Utilizare criptografiei în protecția datelor, memorate în fișiere sau în baze de date, s-a bucurat de o atenție deosebită în ultimii ani [DENN87] [ANGE86]. În [GUD80] sunt introduse două clase importante de transformări criptografice utilizate în protecția fișierelor:

– Cifrare controlată de sistem (CCS) care presupune că datele din diferite fișiere sau care aparțin la diverși utilizatori să fie tratate în același mod. Cifrarea acestor date este în întregime sub controlul sistemului, iar cheile de cifrare sunt memorate în sistem. O transformare CCS tipică poate fi o unitate (hardware sau software) care este în măsură să cifreze/descifreze orice segment de date transferate la/de la perifericul ce conține fișierul.

– Cifrare controlată de utilizator (CCU) care presupune că cheile de cifrare să nu fie sub controlul sistemului; utilizatorul trebuie să furnizeze cheia numai când se dorește accesul la un fișier particular. În acest caz, protecția a fost întărită evitându-se accesul la fișiere ale unor utilizatori neautorizați. Transformările CCU ridică însă probleme serioase, derivate de nevoia existenței într-un fișier a unor date care aparțin mai multor utilizatori. Toți aceștia trebuie să rețină o cheie comună de cifrare a fișierului, riscul pierderii sau divulgării ei fiind foarte crescut.

Un utilizator poate avea acces la unul sau mai multe fișiere sub mai multe forme, precum citire, scriere, execuție. Există mai multe modalități de implementare a protecției, dintre care cele mai importante sunt următoarele:

– protecția compartimentată, în cadrul căreia fiecare utilizator are acces la un grup de fișiere și numai la acesta. Toate fișierele sunt pe același nivel (nu există o ierarhie între fișiere) și toți utilizatorii sunt considerați de asemenea pe același nivel;

– protecția ierarhică, care presupune o ordonare parțială a utilizatorilor, fișierelor sau amândurora. De exemplu dacă Fi>Fj înseamnă că dacă utilizatorul Uk are acces la Fi, el va avea acces și la Fj. În mod similar dacă Ui>Uj și dacă Uj are acces la Fk atunci și Ui va avea acces la Fk. Un exemplu de implementare a ierarhiei între fișiere este sistemul de operare MULTICS.

– protecția dependentă sau independentă de date. Protecția independentă de date presupune că accesul la un fișier este independent de schimbarea conținutului său sau de valoarea unor articole ale sale. Toate articolele fișierului sunt supuse aceluiași mod de acces. Protecția dependentă de date presupune ca accesul la un articol dintr-un fișier depinde de conținutul articolului.

Protecția compartimentală și independentă de date (CID)

Fie F o mulțime de fișiere:

F={F1, …, Fn}

și o mulțime U de utilizatori:

U={U1, …, Um}.

Dacă se pune în discuție numai accesul prin citire la fișiere, mecanismul de protecție poate fi reprezentat printr-o matrice booleană de acces, A.

Fie AUi numărul de fișiere la care are acces utilizatorul Ui:

AUi=A(i, 1)+ … +A(i,n)

și FAj numărul de utilizatori care au acces la fișierul Fj:

FAj=A(1, j)+ … +A(m, j).

Se vor face următoarele condiții simplificatoare pentru matricea de acces:

– nu există două linii identice; aceasta înseamnă că dacă doi utilizatori au un aceleași drepturi de acces, ei vor fi considerați ca fiind unul singur;

– nu există două coloane identice; fișierele sunt considerate distincte doar dacă au acces la ele utilizatori diferiți.

– nu există rânduri sau coloane care au zero peste tot;

– întregul fișier este cifrat ca o unitate completă.

Protecția ierarhică și independentă de date (IID)

Protecția ierarhică presupune o ordonare parțială între fișiere sau între utilizatori. Cea mai uzuală metodă este de a se memora un arbore ierarhic al fișierelor (figura 4.8). Pentru a avea acces la fișierul C1 un utilizator trebuie mai întâi să aibă acces la rădăcina A și apoi la B1; acest lucru este necesar deoarece adresa fiecărui nod este memorată în nodul tată. Înseamnă că o cerere de citire la C1 presupune citire de la A și B1. Ordonarea parțială este C1>B1>A; se poate observa că ierarhia accesului este o ierarhie inversă celei corespunzătoare arborelui.

Figura 4.8. Arbore de protecție ierarhică a fișierelor

O situație diferită este la scriere; un acces la fișierul C1 nu trebuie să însemne scriere la B1 și A. Din contra, nodul B1 conține legături la C1 astfel încât o scriere la B1 implică o scriere la C1. Ordonarea parțială este A>B1>C1 și ierarhia accesului este identică cu ierarhia arborelui.

Protecția fișierelor prin mecanisme de blocare

Mecanismul de blocare (lock-key) combină aspectele specifice mecanismelor bazate pe tichete de acces, specifice în asigurarea protecției în sistemele de operare. Se asociază fiecărui obiect protejat x o listă de lăcate și drepturi de acces :

(L1, r1), …, (Ln, rn).

Un utilizator sau program s primește o cheie Ki pentru a debloca lăcatul Li dacă s are dreptul de accesări la obiectul x, adică dacă A[s, x]=ri. O listă de lăcate reprezintă o coloană în matricea de acces. O cheie pentru obiect reprezintă o formă de capacitate care garantează accesul dacă și numai dacă cheia se potrivește lacătului. Proprietarul unui obiect poate revoca dreptul de acces ale tuturor subiecților care folosesc în comun cheia Ki, ștergând intrarea pentru Li din lista de lăcate. În mod tipic un obiect conține un singur lăcat.

Cifrarea reprezintă un alt exemplu de blocare și folosire a cheilor pentru deblocare. Cifrarea datelor ține loc de lăcat, care poate fi „deschis” de cel care ține cheia de descifrare. Gifford [GIFF82] a propus o schemă pentru protejarea obiectelor prin cifrare, care se numește sigilare criptografică. Fie X un obiect cifrat cu cheia K; accesul la X cere deținerea cheii K. Accesul la K poate fi controlat prin introducerea conceptului de deschizător –R, asociat cu X. Deschizătorul furnizează diferite tipuri de folosire în comun a fișierelor.

4.2.7. Protocoale pentru protecția criptografică a software-ului

Pirateria în domeniul software-ului, implicând copierea neautorizată de programe, reprezintă una din problemele care preocupă tot mai mult producătorii de tehnică de calcul dar și factorii de decizie guvernamentală. Pentru combaterea ei, se folosesc combinate trei tipuri de strategii: de piață, legale și tehnologice.

O strategie de piață tipică este să se practice un sistem de prețuri foarte atractiv, astfel încât beneficiarii potențiali să prefere obținerea produsului soft de la producător.

Strategia legală include urmărirea penală a oricăror validări ale dreptului la licență și de copiere. Efectul unei astfel de strategii este încă limitat.

Strategiile tehnologice sunt foarte variate în detalii și pot fi grupate în câteva categorii ce vor face obiectul analizei în continuare. Ele furnizează unica cale substanțială de combatere a amenințărilor la adresa protecției software-ului.

Se vor analiza în continuare cele două aspecte ale protecției distribuției software-ului.

Protecția împotriva copierii programelor

Un sistem de protecție a copierii programelor (SPCD) are două componente:

– un element unic (semnătura unică) asociat sistemului;

– un program de protecție, care de obicei este asamblat împreună cu aplicația și care este responsabil cu verificarea prezenței elementului unic în sistem.

Un sistem de protecție a copierii de acest tip poate fi învins prin două metode generale: prin duplicarea semnăturii unice asociate la sistem sau prin modificarea programelor în așa fel încât să poată executa aplicația și fără existența elementului unic.

Protecția elementelor unui SPCS vizează două aspecte:

(a) semnătura unică

Pentru a face dificilă copierea programelor trebuie adăugată o componentă adițională la sistem care să fie dificilă de reprodus pentru adversar. Există două categorii de astfel de componente:

– semnătura unică pe discul flexibil. În mod firesc ea este sub formă fizică cât și magnetică. Semnătura fizică îndepărtează cu un laser o mică parte din materialul magnetic de pe suprafața discului. Schema este implementată prin software, care scrie anumite informații pe această zonă alterată și apoi citește informația de pe aceeași zonă a discului înapoi în memorie. Dacă informația citită este identică cu cea scrisă, este clar că discul nu a fost marcat cu laser la adresa corectă și deci combinația soft/disc nu este originală.

– semnătura magnetică – își propune să altereze formatul articolului standard. La sfârșitul datelor utilizate, fiecare pistă conține marcherii de adresă, octetul gap (câmpul sync), câmpurile de identificare a sectoarelor, octeții CRC (de verificare ciclică) și octeții de ceas. Toate aceste informații trebuie să fie prezente, în ordine corectă, astfel încât controlerul de disc să poată prelucra corect datele utilizate. Dacă se alterează această structură standard, cuplorul va returna o stare de eroare. Pentru a determina dacă există semnătură unică, sistemul va face o operațiune cu discul așteptând să apară eroare.

– semnătură unică cu modul de securitate (MS)

Acest dispozitiv special poate fi conectat extern la calculator prin interfața serială, cea paralelă sau în serie cu tastatura. Maniera în care MS este construit poate fi foarte variată. În forma cea mai simplă, primește de la program o valoare fixă care este comparată cu alta memorată în prealabil. În versiuni mai sofisticate, se pot schimba valori variabile posibil chiar părți ale programelor cifrate și memorate în MS. Avantajul MS este acela al unei mult mai dificile duplicări decât semnătura pe disc, însă dezavantajul este un cost ridicat.

(b) împiedicarea analizei programului

În protecția copierii programelor este inutil să se dispună de o semnătură unică imposibil de duplicat, dacă adversarul poate ușor analiza și modifica programul astfel încât semnătura să nu mai fie verificată. Cea mai răspândită „unealtă” folosită de adversar pentru analiza și modificarea programelor este un debugger (depanator). Utilizarea acestuia însă aduce unele modificări în contextul de execuție al programului.

Prima și cea mai importantă este aceea că depanatorul trebuie să fie rezident în același spațiu de memorie cu aplicația, astfel încât poate fi detectată o prezență străină. Aceste depanatoare utilizează anumiți vectori de întreruperi pentru a produce opriri ale execuției programului analizat. Dacă aplicația integrează utilizarea acestor vectori în corpul ei, devine dificilă de utilizat de către depanator. De asemenea depanatorul mai modifică anumite registre, locații de memorie precum și timpul de execuție. Toate acestea constituie „urme” ale încercărilor de analiză ale programului. Dacă presupunem totuși că adversarul a reușit faza de analiză și a determinat punctele în care trebuie să opereze modificări, să vedem cum putem face ca acestea să fie dificil de realizat. Cea mai obișnuită tehnică este să se utilizeze o sumă de control a zonei în care apare pericol potențial. O altă soluție constă în cifrarea zonei de cod senzitive; dacă adversarul determină ce modificări trebuie să facă zonei decriptate, este foarte dificil să înlocuiască zona de cod cu echivalentul cifrat al codului modificat. Se folosesc în general tehnici criptografice din categoria celor cu chei publice.

Protecția distribuției programelor

Se propun în continuare un ansamblu de protocoale destinate asigurării protecției criptografice a programelor, care să nu determine perturbări în distribuția și întreținerea acestuia. Aceste procedee pot fi implementate atât prin criptosisteme convenționale cât și cu chei publice. Sistemul de protecție a distribuției programelor (SPDP) propus este format din combinarea a trei protocoale, două pentru distribuția software-ului și unul pentru înlocuirea UC-urilor în pană. În mod intuitiv SPDP furnizează trei niveluri de protecție. Primul nivel este îndreptat împotriva atacurilor simple de „piraterie”, adică a acelora care utilizează proceduri legale în scopul executării unor copii ale programelor.

– sistem de protecție bazat pe chei publice (SPDP-CP)

Implementarea SPDP-ului cere existența unor funcții criptografice în UC, introduse de constructorul sistemului de calcul. Cifrarea poate fi făcută cu un criptosistem cu chei publice (CCP), cum ar fi cunoscută metoda RSA (Rivest-Shamir-Adleman).

Fiecărei unități de calcul Cu (calculator) îi vom asocia o pereche de chei <Eu, Du>, iar lui Z (centrul de generare a cheilor) o pereche de chei <Ez, Dz>. Ca urmare fiecare Cu conține următoarele informații:

1. Du – Cheia de descifrare (secretă) a lui Cu;

2. Ez – Cheia de cifrare a lui Z;

3. DzEu – Cheia decifrare a lui Cu, semnată de Z.

Pentru distribuția indirectă, printr-un distribuitor U, este necesară și o altă cheie în calculatorul distribuitorului – Fu(i):

4. Fu(i) – Producătorul software-ului vinde programele distribuitorului împreună cu această cheie, care va fi schimbată între vânzători. Ele nu pot fi accesate prin instrucțiuni ale UC – ului, cu excepția instrucțiunilor speciale care implementează SPDS-ul. Semnătura lui Z, notată cu Dz, este și mai secretă; ea nu este ținută în UC ca și celelalte. Din contra Eu poate fi utilizată mai ușor și nu este secretă.

Criptosistemul trebuie să fie comulativ, adică:

EaEb=EbEa.

(a) Protocolul de distribuție directă a programelor

Protocolul propus va fi urmat de un utilizator U cu calculatorul Cu pentru a i se distribui direct software de la producătorul P. Se va face precizarea că informația trebuie să treacă numai de la U la P și viceversa. Notația utilizată pentru un utilizator U care emite un mesaj M la calculatorul său Cu este: (U, M, Cu) iar la o altă parte B: (U, M, B).

D1: (U, DzEu, P) – utilizatorul U emite la P cheia sa de cifrare Eu semnată de Z.

D2: (P, (DzEu, P0), Cp) – Producătorul P introduce în calculatorul său cheia de cifrare a clientului, semnată de Z și programul ce urmează a fi distribuit, P0.

D3: (Cp, (EzDzEu, P0), P) – Procedura de cifrare Ez cunoscută pe toate calculatoarele, dar ascunsă utilizatorilor. Calculatorul Cp cifrează programul P0 ce urmează a fi vândut.

D4: (P, EuP0, U) – Utilizatorul primește programul cifrat.

D5: (U, EuP0, Cu) – Încărcarea programului pe calculatorul Cu.

D6: (Cu, 0(DuEuP0), U) – Calculatorul Cu cunoaște Du. În timpul execuției, codul P0 este ascuns în procesor. Operațiunea de încărcare a programelor P0 de către calculator s-a notat cu 0(P0).

(b) Protocolul de distribuție indirectă a programelor

În mod uzual programele nu sunt distribuite direct de la producător la client, ci prin intermediul unei a treia părți numită distribuitor. Protocolul indicat nu mai poate fi aplicat deoarece producătorul nu poate fi sigur de onestitatea fiecărui furnizor. Protocolul care se propune cere o cheie în plus, ascunsă în calculatorul furnizorului. Această cheie va fi schimbată la fiecare execuție a protocolului. Chei Fl(i), a distribuitorului L, este a unui criptosistem convențional, deși poate fi la fel de bine folosit și un sistem cu chei publice. Protocolul este divizat în două faze. În prima fază distribuitorul L cumpără programe simbolice de la producător. Pentru a le transforma în programe utilizabile, se aplică faza a doua a protocolului pe calculatorul Cl al furnizorului.

Fiecare program simbolic nu produce decât un singur program utilizabil, cifrat cu cheia unui anumit cumpărător. Cheia inițială Fl(0) este cunoscută doar de către producător.

Prima fază l1 a protocolului se face pentru fiecare program simbolic i. Protocolul este următorul:

l1: (P, Fl(i)[PO, Fl(i+1)], L) – Producătorul P îi dă distribuitorului L un program simbolic i. Aceasta este prima fază a protocolului și este independentă de celelalte.

l2: (U, DzEu, L) – Utilizatorul U trimite cheia sa lui L.

l3: (L, (Fl(i)[PO, Fl(i+1)], DzEu, Cl) – Calculatorul Cl conține acum cheia Di care corespunde programului simbolic i.

l4: (Cl, Eu, PO, U) – În același timp Cl schimbă de la cheia Fl(i) la noua cheie Fl(i+1), furnizată în programul simbolic.

l5: (L, EuPO, U) – Începând cu acest pas, protocolul este același cu cel de distribuție directă. Utilizatorul primește programul.

l6: (U, EuPO, Cu) – Încărcare program.

l7: (Cu, O(DuEuPO), U) – Calculatorul Cu (dar nu și U)cunoaște Du. Mai multe mecanisme Fl(i) pot fi implementate în același calculator. Deci procesoarele dedicate utilizatorilor trebuie să aibă toate Fl(i).

– Sistem de protecție cu metode simetrice (SPDP-CS)

Implementarea unui SPDP cu chei publice pare naturală dar este dificilă datorită lipsei unor „chip”uri care să implementeze algoritmi di această clasă. Criptosistemele convenționale, cu o singură cheie, sunt mai „mature”, o serie de algoritmi au fost implementați în circuite integrate și sunt considerați siguri (printre care și DES).

Implementarea unui SPDP prin criptosisteme convenționale se bazează pe adăugarea a 2 proprietăți specifice sistemelor cu chei publice:

(1). Semnătura – utilizată să se asigure că cheile sunt autentice.

(2). Secretizarea – programul este cifrat de distribuitor care însă nu poate descifra programe cifrate de alți distribuitori.

Fiecare procesor Cu conține 3 chei (inaccesibile utilizatorilor):

– Kz – cheia lui Z;

– Ku – cheia lui Cu;

– Fu(i) – cheia temporară pentru distribuția indirectă.

Se va presupune că un criptosistem este sigur dacă un oponent nu poate determina pe m din Kalfa(m) fără cunoașterea lui Kalfa. Este deci imposibil să se găsească Kalfa din m și Kalfa(m). Se presupune cifrarea comutativă, adică:

KaKb(x)=KbKa(x).

(a) Protocolul de distribuție directă a programelor

D1: (U, Kz(Ku; cheie), P) – Utilizatorul emite cheia Ku semnată cu Kz.

D2: ((P, Kz(Ku; cheie), PO), Cp) – Producătorul P introduce atât cheia utilizatorului cât și programul în calculator.

D3: (Cp, Ku(PO; prog), P) – Programul cifrat este dat producătorului.

D4: (P, Ku(PO; prog), P) – Producătorul transferă programul cifrat.

D5: (U, Ku(PO; prog)Cu) – Utilizatorul furnizează calculatorului său programul cifrat.

D6: (Cu, O(PO), U) – Calculatorul execută programul.

(b) Protocolul de distribuție indirectă a programelor

l1: (P, Fu(i)[PO, Fu(i+1)], L) – Producătorul P vinde programul simbolic i distribuitorului L.

l2: (U, Kz(Ku; cheie), L) – Utilizatorul U emite cheie sa publică la distribuitor.

l3: (L, (Kz(Ku; cheie), Fu(i)[PO, Fu(i+1)], Cl) – Distribuitorul utilizează programul simbolic i.

l4: (Cl, Ku(PO; prog), L) – Programul cifrat este dat distribuitorului. În același timp Cl schimbă de la Fu(i) la Fu(i+1).

l5: (L, Ku(PO; prog), U) – De la acest pas protocolul decurge similar cu cel de la distribuția directă.

l6: (U, Ku(PO; prog), Cu)

l7: (Cu, O(PO), U)

Problema pirateriei în software cauzează pierderi serioase companiilor producătoare. Protocoalele prezentate demonstrează o protecție demonstrabilă, propunând metode sigure pentru distribuția programelor ți pentru înlocuirea UC. Sistemul însă cere implementarea unor facilități criptografice cu chei publice sau convenționale – în interiorul unității centrale.

O cale nouă de abordare a protecției programelor împotriva copierii și utilizărilor neautorizate o reprezintă santinelele software (software sentry) [RAIN91]. Conectate de obicei pe cablul de imprimantă paralelă, ele au implementate funcții criptografice care pot fi executate la cererea programelor. Orice sistem de programe care dorește să fie protejat execută în diferite puncte ale execuției sale schimburi de date criptografice cu santinela. Lipsa ei de pe cablul de imprimantă atrage după sine imposibilitatea execuției programelor protejate, care nu primesc răspunsurile așteptate. Fiecare santinelă este „personalizată” astfel încât să se poată executa numai cu o anumită copie a programului respectiv. De obicei aceste santinele sunt furnizate împreună cu drivere specifice și cu programe necesare utilizării lor de către producătorii de programe.

4.3. PROTOCOALE PENTRU GESTIUNEA CHEILOR DE CIFRARE

4.3.1. Principii în generarea, memorarea și distribuția cheilor

Unul din aspectele cele mai importante în proiectarea unor sisteme de securitate bazate pe criptosisteme îl reprezintă gestiunea cheilor. Chiar dacă algoritmii criptografici folosiți sunt computațional imposibil de spart, sistemul devine vulnerabil dacă cheile sunt protejate într-un mod inadecvat. Trei sunt problemele ce trebuie avute în vedere în procesul de gestiune al cheilor.

(1) Generarea cheilor criptografice trebuie să fie un proces aleator. Se poate folosi în acest sens un generator pseudo-aleator bazat pe un element nepredictibil, ca de exemplu biții corespunzători orei. Drept generator pseudo-aleator poate fi folosit de exemplu algoritmul DES, caz în care ieșirea devine intrare (text-clar) pentru următoarea cifrare.

(2) Memorarea cheilor, dacă sunt secrete, nu trebuie făcută în clar pe un mediu care poate fi citit sau copiat. În general astfel de chei trebuie protejate prin cifrare cu alte chei de cifrare a cheilor. Ultima cheie într-o astfel de ierarhie se ține necifrată dar protejată într-un dispozitiv hardware separat – și se numește cheie principală (master). Instalarea, verificarea și protejarea ei trebuie făcută cu mare precauție.

(3) Distribuția cheilor se poate face în principiu prin două metode:

(a) Prin folosirea unor centre de distribuție a cheilor. Dezavantajul este că la aceste centre se știe ce chei au fost distribuite și căror entități, deci pot deveni, prin corupție, centrele de unde se poate citi traficul din rețea.

(b) Prin schimb direct între partenerii de comunicație.

Problema, în ambele metode, constă în a determina că protocolul în care se schimbă cheile nu este o înregistrare mai veche. Există două soluții posibile pentru rezolvarea acestei probleme:

– Un mecanism întrebare răspuns, adică entitatea A, pentru a fi sigură că conversează cu B în acest moment, introduce în mesaj un element nepredictibil. B va trebui să răspundă executând o anumită funcție standard asupra acestui element. După ce primește răspunsul de la B, A poate fi sigur că este vorba de o conversație „live”.

– Un mecanism bazat pe înregistrarea orei în fiecare mesaj.

În general un protocol de distribuție a cheilor trebuie să satisfacă următoarele proprietăți:

– să nu ceară un server central unic;

– să asigure o autentificare mutuală a partenerilor;

– să poată identifica dacă acea conversație este „live” printr-un mecanism întrebare-răspuns;

– să schimbe un număr minim de masaje.

În cazul distribuției cheilor este necesar ca fiecare utilizator să aibă un autentificator direct – adică un alt utilizator cu care să poată desfășura protocol de desfășurare mutuală. Înseamnă că între utilizator și autentificatorul său direct există stabilite în prealabil chei de autentificare. În cazul criptosistemelor simetrice trebuie să existe câte o cheie secretă pentru fiecare pereche de utilizatori. În cazul sistemelor cu chei publice utilizatorul va furniza autentificatorului său doar cheia sa publică. Autentificarea este în acest caz mai flexibilă.

În concluzie în sistemele convenționale, utilizatorii trebuie să-și înregistreze cheile lor personale pentru comunicarea confidențială dintre calculatorul (terminalul) lor și calculatorul central. Acest lucru cere ca aceste chei să fie protejate, iar strategia cea mai simplă este ca ele să fie memorate într-un fișier, cifrate sub cheia master a sistemului.

În criptosistemele cu chei publice, utilizatorul A nu trebuie să-și înregistreze cheia sa secretă DA (utilizată în special în realizarea semnăturilor digitale), lucru care însă nu înseamnă că nu sunt necesare măsuri de securitate cu privire la această cheie. Trebuie prevenite atât posibilitatea de pierdere a cheii secrete cât și simularea pierderii ei, lucru care ar permite proprietarului să nu mai recunoască semnarea unor mesaje. Se impune uneori ca în sistemele cu cerințe înalte de securitate ca proprietarul să nu cunoască direct cheia sa secretă; aceasta poate fi înregistrată fie într-o memorie ROM, fie într-un calculator dedicat efectuării semnăturilor. Dar chiar în cazul unor mecanisme foarte sigure, se cere luarea unor măsuri suplimentare pentru a se rezolva problema compromiterii cheilor secrete.

4.3.2. Protocolul de distribuție a cheilor

În continuare se propun mai multe variante de protocol pentru distribuția sigură a cheilor criptografice în sistemele distribuite. Esențial în stabilirea unor canale confidențiale în comunicațiile din rețele este ca grupul de utilizatori care doresc să-și transmită mesaje să stabilească în prealabil o cheie, valabilă pe toată durata de viață a conexiunii.

A. Schimbul bilateral de chei

Protocolul bilateral cu chei secrete

În această situație utilizatorii A și B au stabilit în prealabil o cheie secretă de autentificare KAB. Ei își vor distribui cheia de sesiune k după următorul protocol:

pasul 1: B→A: B, l1

pasul 2: A→B: A, FKAB(f(i1), l2, A, k)

pasul 3: B→A: B, FK(f(l2))

După cum se observă valorile l1, l2 au rol de element nepredictibil și fac ca protocolul să aibă un conținut schimbat la fiecare execuție. A și B dețin distribuită cheia k care va fi folosită în protecția schimbului de mesaje dintre A și B pe durata de deschidere a conexiunii.

Protocolul bilateral cu chei publice

Acest protocol realizează atât autoidentificarea mutuală a celor două părți cât și distribuția sigură a unei chei scurte K. Se presupune că cei doi parteneri și-au schimbat în prealabil cheile (procedurile) publice EA și EB.

pasul 1: B→A: B, EA(l1, B)

pasul 2: A→B: A, EB(f(l1), l2, A, k)

pasul 3: B→A: B, FK(f(l2), B)

B. Schimbul cheilor printr-o altă entitate

Probleme fundamentală aici este că dacă a și B s-au autentificat reciproc, ei trebuie să schimbe o altă cheie fără ca cea de-a treia parte, S, prin care se face distribuția, să o poată determina. S are deci doar funcție de autentificare. Aceasta este problema schimbului de chei pe canale nesigure, a cărei soluție a fost dată de Diffle și Hellman [DIFF76] și Merkle [MERK78] printr-o metodă de calcul exponențial modulo un număr prim. Fie A și B cei doi utilizatori și fie două constante a și p (p este prim) care nu trebuie să fie secrete. Protocolul propus pentru schimbul cheii pe canale nesigure este următorul:

pasul 1: A alege un număr xa, ținut secret și calculează:

ya=axa(modulo p).

pasul 2: B alege un număr xb, ținut secret și calculează:

yb=axb(modulo p).

pasul3: A→B:ya

B→A :yb

pasul 4: A calculează cheia kab=(yb)xa(modulo p);

pasul 5: B calculează cheia kab=(ya)xb(modulo p);

Cheia kab va fi folosită (după compresie) drept cheie de sesiune K.

Protocolul cu chei secrete

Se presupune că A și S au stabilit drept cheie de autentificare pe Kas iar B și S pe kbs. Protocolul este următorul:

pasul 1: B→A: B, l1

pasul 2: A→S: A, l2, B, l1

pasul 3: S→A: S, Fkas(f)l2), a, p, B, Fkbs(f(l1), a, p, A))

pasul 4: A→B: A, l3, ya, Fkbs(f(l1), a, p, A)

pasul 5: B→A: B, yb, Fkab(f(l3))

După cum se observă autoritatea S are rol doar de autentificare atât a lui A cât și a lui B. Ea nu deține informațiile secrete xa și xb cu ajutorul cărora ar putea calcula cheia de sesiune Kab. Doar A și B pot face acest calcul din perechile (xa, yb) respectiv (xb, ya).

Protocolul cu chei publice

În această situație A și B au furnizat autorității S cheile lor publice EA și EB iar cheia publică a lui S, ES, este cunoscută atât de A cât și de B. Protocolul este următorul:

pasul 1: B→A: B, l1

pasul 2: A→S: A, l2, B, l1

pasul 3: S→A: S, DS(B, f(l2), EB), DS(A, f(l1), EA)

pasul 4: A→B: A, DA(f(l1), EB(K), lS), DS(A, f(l1), EA)

pasul 5: B→A: B, FK(f(l3))

În pasul 3 autoritatea S distribuie lui A, pe lângă alt informații, și cheia publică a lui B, EB, toate sub semnătura DS a lui S. În pasul 4 A distribuie cheia de scriere K lui B, cifrată cu cheia publică EB. În ultimul pas B se autentifică în „live” către A folosind deja cheia secretă distribuită K.

Kohnfelder [COCU88] propune o soluție de distribuție bazată pe certificare. După înregistrarea transformării publice EA la autoritatea S, utilizatorul X care dorește să comunice cu A va primi un certificat semnat de S care-l conține pe EA dar și data curentă care asigură valabilitatea certificatului:

S→X:CA=DS(A, EA, T).

X poate verifica dacă certificatul provine de la S și conține cheia publică corectă calculând:

ES(CA)=(A, EA, T)

Cu ajutorul cheii publice a autorității ES. În acest fel certificatul, dacă nu este expirat, îi furnizează cheia publică corectă pentru viitoarele comunicații cu A.

C. Schimbul cheilor prin mai multe entități

În acest caz este necesar ca S1 și S2 să poată desfășura o sesiune sigură. În cadrul protocoalelor, utilizatorii A și B schimbă numele autentificatorilor direcți pe care doresc să-i folosească.

Protocolul cu chei secrete

Se presupune că A și S1 au stabilit în prealabil cheia de autentificare KAS1 iar B și S2 cheia KBS2. Comunicațiile S1-S2 se desfășoară sub protecția unei chei prestabilite KSS. Protocolul propus este următorul:

pasul 1: B→A: B, S1, l1

pasul 2: A→S1: A, S1, l2, B, S2, l2

pasul 3: S1→S2: S1, A, B, S2, l2

pasul 4: S2→S1: S2, FKSS(a, p, B, FKBS2(f(l1), a, p, A))

pasul 5: S1→A: S1, FKAS1(f(l2), a, p, B, FKBS2(f(l1), a, p, A))

pasul 6: A→B: A, l3, ya, FKBS2(f(l1), a, p, A)

pasul 7: B→A: B, yB, FKAB(f(l3))

Înainte de desfășurarea acestui protocol trebuie să se desfășoare un altul pentru stabilirea unui canal sigur între S1 și S2 prin distribuirea cheii KSS. În rest protocolul propus este similar cu protocolul bilateral cu chei secrete, S1 și S2 făcând împreună ceea ce făcea acolo S.

Protocolul cu chei publice

În această situație se presupune că A și S își cunosc reciproc cheile publice la fel ca și B și S2. Protocolul propus este următorul:

pasul 1: B→A: B, S2, l1

pasul 2: A→S1: A, S1, l2, B, S2, l1

pasul 3: S1→S2: S1, FKSS(A, EA, S2, l1)

pasul 4: S2→S1: S2, FKSS(B, EB, DS2(A, f(l1), EA))

pasul 5: S1→A: S1, DS1(B, f(l2), EB), DS2(A, f(l1), EA)

pasul 6: A→B: A, DA(f(l1), EB(k), l3), DS2(A, f(l1), EA)

pasul 7: B→A: FK(f(l3))

Protocolul propus este asemănător cu cel prezentat în (C) cu diferența că există 2 centre de autentificare S1 și S2 care au stabilit în prealabil un canal sigur bazat pe cheia KSS.

Se propune în continuare o altă variantă de protocol, mai complex, pentru distribuția cheilor criptografice de sesiune, folosind sisteme cu chei publice.

Dacă doi utilizatori doresc să comunice într-un mod sigur, ei trebuie să își schimbe în prealabil cheile publice. Regula este că fiecare utilizator comunică doar cu Managerul securității (MS) din zona sa (A cu MS.A iar B cu MS.B) iar apoi managerii securității comunică între ei. În timpul fazei de transfer a datelor, când se cunosc toate adresele și cheile publice, utilizatorii pot comunica direct fără interfața cu managerii securității. De aceea este necesară o fază de identificare și autentificare a fiecărui utilizator cu Managerul securității local. Dacă se înregistrează în rețea un nou utilizator, adresa și identitatea sa trebuie transmise la toți Managerii securității din rețea. Astfel încât protocolul propus este mai complex se va comenta fiecare pas.

pasul 1: A→MS.A: [A, MS.A, ASK.A, B, DT.A ]PK.MS.A

Utilizatorul local A trimite un mesaj protejat sub cheia publică PK.MS.A către managerul securității (MS.A) din zona sa. Mesajul conține identitatea sa, a lui MS.A (receptorul), semnătura lui A, identitatea lui B cu care A vrea să stabilească o asociație și o informație „live” DT.A – data și ora. S-a notat cu SK.X cheia sa publică corespunzătoare. Atât semnarea cât și protecția prin cifrare s-au indicat prin ridicare la putere plecând de la modul de operare al celui mai cunoscut algoritm folosit în acest scop, RSA.

pasul 2: MS.A→MS.B:

[MS.A, MS.B, [MS.A, A, B, PK.A, DT.MS.A]SK.MS.A]PK.MS.B

Managerul securității din zona lui A comunică un mesaj protejat cu cheia publică PK.MS.B cu celălalt din zona lui B. Există în mesaj o zonă semnată MS.A care conține informația necesară stabilirii asociației:

– identitatea lui A

– identitatea lui B

– cheia publică a lui A, PK.A

– elementele „live” DT.MS.A

După recepție și descifrare, MS.B verifică semnătura lui MS.A iar apoi emite la B:

pasul 3: MS.B→B:

[MS.B, B, [MS.B, A, PK.A, DT.SM.B]SK.MS.B]PK.B

Mesajul conține sub formă semnată de MS.B, informațiile necesare lui B pentru stabilirea asociației cu A. Apoi B va răspunde la MS.B (dacă acceptă asocierea):

pasul 4:B→MS.B:

[B, MS.B, [B, A, <0, 1>, PK.B, DT.B]SK.B]PK.MS.B

pasul 5: MS.B→MS.A (se comunică acceptarea conexiunii de către B):

[MS.B, MS.A, [MS.B, B, A, <0, 1>, PK.B, DT.MS.B]SK.MS.A]PK.MS.B

pasul 6:MS.A→A (se transmite răspunsul către A):

[MS.A, A, [MS.A, B, <0,1>, PK.B, DT.MS.A]PK.A]

pasul 7: A→B (acum A și B pot comunica direct confirmându-și acceptul pentru asociație):

[A, B, ASK.A, PK.A, RI.B]PK.B

În acest moment putem spune că fiecare mesaj transmis între două părți adiacente este atât protejat prin cifrare cât și autentificat prin semnătură.

Protocolul poate fi îmbunătățit făcându-l inatacabil la reluările de mesaje. În următoarea variantă de protocol se introduce o valoare aleatoare (RI) care este mereu alta la fiecare reluare a protocolului. Acest lucru face imposibilă încercarea unor utilizatori neautorizați, de a folosi mesaje înregistrate prin urmărirea traficului pe linii de transmisie anterioare.

pasul 1: A→MS.A:

[A, MS.A, ASK.A, B, RI.A]PK.MS.A

pasul 2: MS.A→MS.B:

[MS.A, MS.B, [MS.A, A, B, PK.A, RI.MS.A]SK.MS.A]PK.MS.B

pasul 3: MS.B→B:

[MS.B, B, [MS.B, A, PK.A, RI.MS.B]SK.MS.B]PK.B

pasul 4: B→MS.B:

[B, MS.B, [B, A, <0, 1>, RI.MS.B, RI.B]SK.B]PK.MS.B

pasul 5: MS.B→MS.A:

[MS.B, MS.A, [MS.A, B, A, <0, 1>, RI.MS.A]SK.MS.A ]PK.MS.B

pasul 6: MS.A→A:

[MS.A, B, [MS.A, B, <0, 1>, PK.B, RI.A]SK.MS.A]PK.A

pasul 7: A→B:

[A, B, ASK.A, PK.A, RI.B]PK.B

Bibliografie

Microsoft PRESS , Bazele rețelelor de calculatoare, Editura Teora, 1999

Drew Heywood , Secrete Windows NT Server 4, Editura Teora, 1996

Larry l. Peterson, Bruce S. Davie, Retele de calculatoare: o abordare sistemică, Editura All, 2001

R. L.Rivest, A. Shamir and L. M. Adleman, A method for obtaining digital signatures and public –key criptosistems, Communications of the ACM 21 (1978), 120 –126.

Andrew S. Tanenbaum, Computer Networks, 3rd edition, Prentice Hall, 1996

Bibliografie

Microsoft PRESS , Bazele rețelelor de calculatoare, Editura Teora, 1999

Drew Heywood , Secrete Windows NT Server 4, Editura Teora, 1996

Larry l. Peterson, Bruce S. Davie, Retele de calculatoare: o abordare sistemică, Editura All, 2001

R. L.Rivest, A. Shamir and L. M. Adleman, A method for obtaining digital signatures and public –key criptosistems, Communications of the ACM 21 (1978), 120 –126.

Andrew S. Tanenbaum, Computer Networks, 3rd edition, Prentice Hall, 1996

Similar Posts