Studiul Experimental al Algoritmilor de Criptare Md5
1. Introducere
Sistemele de comunicații cu rețele de calculatoare interconectate (prin INTERNET sau orice altă rețea publică), reprezintă viitorul comunicațiilor globale. Securitatea informatică a devenit una din componentele majore a rețelelor de calculatoare, în speță a INTERNET-ului.
Una dintre principalele probleme cu care se confruntă in prezent organizațiile este protejarea datelor importante. In mediul de afaceri contemporan, informatii critice circulă liber prin Internet, pe CD-uri si sunt purtate in PDA-uri si laptop-uri. Vulnerabilitatea sistemelor informatice actuale poate antrena pierderi imense de ordin financiar, direct sau indirect, cum ar fi scurgerea de informații confidențiale cu caracter personal, militar sau economic.
Calculatoare sunt folosite azi în interconectare, în rețele locale și de arie largă, ceea ce conferă informaticii un rol foarte important în stabilirea legăturilor științifice, bancare sau de natură umană între persoane și instituții.
Rețelele de calculatoare sunt singurele care pot asigura servicii de securitate cum ar fi integritatea datelor, semnătura digitală și nerepudierea, servicii de securitate aplicabile numai în rețele de calculatoare, acestea fiind cele mai complexe sisteme de comunicații.
1.1 Nevoia de securitate
Tema acestei lucrări este prezentare a unui algoritm de hashing unidirectional, de criptare a parolei, scopul fiind protecția și confidențialitatea datelor în rețelele de transmisiuni. Algoritmul de criptare MD5 este o functie de hash, proiectata de Ron Rivest special pentru a fi folosita în criptografie. Produce rezumate (digest-uri) de 128 biti si nu se cunoaste nici o altă modalitate de atac asupra ei decât căutarea exhaustivă. Conexiunea este fiabilă, în sensul că transportul mesajelor include o verificare a integrității acestora folosind un cod de autentificare (MAC Message Authentication Code) cu cheie. Pentru calculul codului de autentificare (MAC) sunt folosite funcții de hashing sigure, cum ar fi SHA, MD5, etc.
Rețelele de calculatoare sunt singurele care pot asigura serviciile de securitate impuse în tema acestei lucrări (integritatea datelor, semnătura digitală și nerepudierea sunt servicii de securitate aplicabile numai în rețele de calculatoare) – ele reprezintând cele mai complete și complexe sisteme de comunicații. Toate celelalte rețele de comunicații pot asigura numai o parte dintre aceste servicii. În lucrare se identifică sistemele de comunicații cu rețele de calculatoare interconectate (prin INTERNET sau orice altă rețea publică), acestea reprezentând viitorul comunicațiilor globale.
Este esențial rolul tehnologiilor informatice și a comunicațiilor, atât pe plan economic, cât și pe plan social și politic. Se poate observa că în ultimii ani asistăm la: multiplicarea numărului de calculatoare, creșterea puterii de prelucrare și stocare a acestor calculatoare, scăderea prețului echipamentelor și programelor, convergența tehnologiilor informatice și de comunicații, descentralizarea funcțiilor informatice și de comunicații, dezvoltarea serviciilor informatice, ceea ce face ca, în anumite țări, fiecare persoană să fie un potențial sau un real utilizator al rețelelor de calculatoare și de comunicații.
INTERNET este cel mai mare proiect informatic de interconectare umană, este o structură deschisă, la care se poate conecta un număr mare de calculatoare, deci este greu de controlat. Evoluția INTERNET-ului este impresionanta: de la 4 calculatoare interconectate s-a ajuns la 100 de milioane de utilizatori în prezent. Societatea modernă informatizată reprezintă deja o realitate, în care se ignoră frontierele și se trece peste orice constrângeri de ordin spațial sau temporal. Economia, politica și societatea se bazează azi, din ce în ce mai mult, pe această infrastructură informatică. De asemenea, guvernele, firmele din sectorul public și privat, organismele financiare naționale și informaționale, învățământul, cultura și cercetarea științifică, beneficiază de toate aceste forme eficiente de conducere, informare și comunicare.
Securitatea informatică a devenit una din componentele majore a rețelelor de calculatoare, în speță a INTERNET-ului. Analiștii acestui concept au sesizat o contradicție aparentă – antinomie – între nevoia de comunicații și conectivitate, pe de o parte, și necesitatea asigurării confidențialității, integrității și autenticității informațiilor, pe de altă parte. Domeniul relativ nou al securității informatice caută soluții tehnice pentru rezolvarea acestei contradicții aparente. Viteza și eficiența comunicațiilor “instantanee” de documente și mesaje conferă numeroase atuuri actului decizional într-o societate modernă, bazată pe economie concurențială. Însă utilizarea serviciilor de poștă electronică, Web, transfer electronic de fonduri etc. se bazează pe un sentiment, adeseori fals, de securitate a comunicațiilor, care poate transforma potențialele câștiguri generate de accesul rapid la informații, în pierderi majore, cauzate de furtul de date sau de inserarea de date false ori denaturate.
O serie de considerente care privesc utilizarea informaticii în toate aceste domenii fac ca securitatea informatică să devină vitală:
Dependența puternică de informatică a agențiilor guvernamentale, firmelor, băncilor etc., care se văd în imposibilitatea de a lucra fără a dispune de programele și datele în rețelele lor de calculatoare;
Vulnerabilitatea tehnologiilor informatice, programelor și echipamentelor, care face ca organizațiile și firmele să nu poată avea încredere totală în sistemele informatice folosite și în măsurile de protecție efectivă. Sistemele sunt vulnerabile la penetrări neautorizate, la distrugeri sau modificări accidentale sau voite de date ori programe. Aceste sisteme pot deservi elemente vitale pentru societate, cum ar fi: sisteme militare, bănci, spitale, sisteme de transport, burse de valori, oferind în același timp un cadru de comportament antisocial sau de terorism. Tendința actuală privind extinderea conectivității, în special în INTERNET, amplifică aceste vulnerabilități: este din ce în ce mai greu să se localizeze un defect, un punct de acces ilegal în rețea, un utilizator cu comportament inadecvat. Se consideră că INTERNET-ul este unul din cele mai complexe sisteme create de tehnologia umană care, alături de sistemul financiar mondial, nu poate fi controlat în totalitate. Vulnerabilitatea sistemelor informatice actuale poate antrena pierderi imense de ordin financiar, direct sau indirect, cum ar fi scurgerea de informații confidențiale cu caracter personal, militar sau economic.
Sistemele informatice sunt amenințate atât din interior cât și din exterior. Există utilizatori care fac diferite erori de operare și utilizatori care sacrifică timp și bani pentru penetrarea sistemelor informatice. Pot fi și anumite erori ale software-ului de prelucrare sau de comunicare sau anumite defecte ale echipamentelor de calcul sau de comunicație. Lipsa unei pregătiri adecvate a administratorilor, operatorilor și utilizatorilor de sisteme amplifică probabilitatea unor breșe de securitate. Folosirea abuzivă a unor sisteme (piraterie informatică) reprezintă, de asemenea, unul din factorii de risc major privind securitatea sistemelor informatice.
În ultimii ani, în țările dezvoltate, hârtia a devenit numai un mediu de prezentare a informațiilor, nu și de arhivare sau transport [2]. Aceste ultime două funcții au fost preluate de calculatoare și de rețelele de interconectare ale acestora. De aceea, au trebuit să fie găsite soluții pentru înlocuirea sigiliilor, ștampilelor și semnăturilor olografe din documentele clasice cu variantele lor digitale, bazate pe criptografia clasică și cu chei publice. Criptografia computațională este tot mai folosită pentru contracararea problemelor de securitate informatică. Utilizată multă vreme doar pentru asigurarea confidențialității comunicațiilor militare și diplomatice, criptografia a cunoscut în ultimii 25 de ani progrese spectaculoase, datorate aplicațiilor sale în securitatea datelor la calculatoare și rețele.
Ameliorarea securității sistemelor informatice trebuie să fie un obiectiv important al oricărei organizații. Trebuie avută însă în vedere asigurarea unui bun echilibru între costurile aferente și avantajele concrete obținute. Măsurile trebuie să descurajeze tentativele de penetrare neautorizată, să le facă mai costisitoare decât obținerea legală a accesului la aceste programe și date.
Lucrarea încearcă o abordare a acestei largi palete de probleme asociate securității în rețelele de comunicații. Ea tratează aspectele specifice de securitate ale celor mai complete și complexe sisteme de comunicații, rețelele interconectate de calculatoare.
1.2 Standardizarea securității sistemelor deschise
Principalele eforturi în direcția standardizării sunt realizatede NCSC, ISO, ECMA, CCITT, ITSEC și ANSI.
NCSC – lucrează pentru Departamentul Apărării al SUA – DoD – și a definit o serie de criterii pentru a evalua nivelul de încredere pentru calculatoare. Această concepție este diferită (dar complementară) față de cea a ISO.
ISO – definește un set de servicii de securitate bazate pe un set de mecanisme de securitate, care pot fi implementate în toate protocoalele existente ale modelului de referință OSI. Global, activitatea ISO este importantă deoarece clarifică noțiuni diverse relative la securitate și definește un vocabular precis referit și folosit de majoritatea dezvoltatorilor de standarde.
ANSI – a adoptat o concepție foarte pragmatică, definind câteva serii de protocoale pentru criptarea datelor pe legătura de comunicații.
NIST (NBS) – a standardizat algoritmul de criptare DES și standardul de semnătură digitală DSA.
ECMA – a publicat lucrarea de referință: “Security in Open Systems: A Security Framework”, dezvoltând proiectele SESAME și SAMSON.
Alături de aceste organisme, Comisia Europeană (EC) a lansat câteva proiecte în securitatea calculatoarelor. Unul dintre acestea, realizat de Cooper & Lybrand, numit “Studiul Securității Europene”, a permis includerea acestei firme în “European Security Forum”, organism care reunește aproximativ 40 de membri. Cerințele acestui forum sunt de a identifica și aborda problemele securității IT exprimate de Comunitatea de Afaceri Europeană (European Business Community), adunând împreună conducerile firmelor (ca utilizatori extensivi ai IT) cu furnizorii de servicii și produse IT.
Grupuri de lucru ISO
Diferite comitete și grupuri de lucru ISO se ocupă cu securitatea informatică. Este din ce în ce mai dificil de a se menține consistența între lucrările acestor grupuri. Principalele grupuri implicate în securitatea informatică sunt:
WG1 (OSI Architecture) al subcomitetului JTC/SC21 (Retrieval, Transfer & Management) – a realizat o extensie a modelului de referință OSI, publicat în “Arhitectura Securității”, referit ca DIS 7498-2 și care completează modelul cu serviciile de securitate;
WG4 (OSI Management) al aceluiași SC21 – a realizat o extensie la standardul OSI despre serviciile de management, publicat ca “Definirea serviciilor de management al securității” și referit ca DP 9595-7;
Grupul de lucru SC6 (OSI Layers) al JTC1 – a analizat modul de folosire a mecanismelor de securitate în diferite niveluri ale modelului OSI, publicând extensii la câteva protocoale pentru nivelele: transport, prezentare și aplicație;
Grupul de lucru SC20 (Data Encription) – a încercat standardizarea în domeniul algoritmilor de criptare cu chei publice și secrete, activitate restricționată în 1987, din cauza presiunii guvernamentale (orientarea în SUA spre DES și restricțiile de export). Comitetul SC20 continuă lucrul la următoarele probleme:
înregistrarea algoritmilor de criptare;
definirea unor mecanisme de autentificare cu algoritmi cu chei publice/secrete;
definirea mecanismelor de semnătură digitală;
managementul cheilor (publice sau secrete);
utilizarea tehnicilor criptografice în nivelele OSI.
Grupul de lucru SC27 – a fost creat pentru elaborarea procedurilor și tehnicilor comune pentru securitate;
Comitetul tehnic TC68 (Bancking) – urmărește să definească standarde de securitate pentru bănci și servicii financiare. Două subcomitete lucrează în acest domeniu:
SC2 (Electronic Funds Transfer) – dedicat operațiunilor electronice bancare instituțiile financiare;
SC6 (Financial transaction cards, related media and operations) – acoperă serviciile băncilor către utilizatori și standardizează cartelele inteligente (smartcards).
Diferitele prefixe ale documentelor ISO relevă starea lor:
WD – Working Draft – schiță de lucru – primul pas;
DP – Draft Proposal – propunerea de schiță – pas secund;
DIS – Draft International Standard – prestandard;
IS – International Standard – pas final.
ISO definește cinci servicii principale de securitate și, în plus, “auditul” – înregistrarea elementelor relevante de securitate. Fiecare din acestea poate fi implementat la diverse niveluri ale modelului OSI. Pentru a asigura securitatea unui nivel OSI, pot fi combinate unul sau mai multe servicii care, la rândul lor, pot fi compuse din câteva subservicii și mecanisme. Prezentarea detaliată a serviciilor de securitate și a mecanismelor cu care acestea sunt implementate, definite de grupurile de lucru ISO, se face în capitolul 5 .
Alte activități ISO:
Algoritmii de criptare – în 1986, ISO a decis să nu-i standardizeze. Ulterior, un document general despre modul de operare a algoritmului bloc pe 64 de biți a fost publicat de Comitetul SC20. Mai mult, Comitetul TC68 (bancar și financiar) folosește algoritmul DES.
Autentificarea datelor – grupul TC68/SC2 a standardizat MAC (Message Authentication Code) folosit în aplicațiile bancare (IS8730) și doi algoritmi cu cheie secretă: DES și un algoritm de origine britanică (IS8731/1 și 8731/2). Producerea lui MAC depinde de identitățile emițător și receptor, cheia comună și conținutul mesajului. Grupul JTC1/SC20/WG2 pregătește schema de semnătură, proiectată pentru documente electronice. Semnăturile sunt similare cu MAC, excepție făcând producerea lor cu algoritmi cu chei publice și posibilitatea ulterioară de verificare de către oricine.
Autentificarea entităților – comitetul JTC1/SC21 lucrează la “Directory Authentication Framework” și a publicat documentul DIS 9594-8 despre o autentificare foarte sigură. Însă JTC1/SC20 dorește să globalizeze ponderea autentificării entităților și, de aceea, a publicat câteva schițe de document: DP 9798, 9799, 10117. Principiul folosit este următorul: presupunând că A și B folosesc o cheie secretă K și că entitatea A dorește să autentifice entitatea B, atunci:
A trimite un număr aleator X la B;
B calculează MAC cu X, K, A și B îl trimite la A;
A calculează MAC cu X propriu și-l compară cu cel recepționat;
Dacă valorile sunt egale, B este declarat autentificat.
Un alt grup lucrează la protocoale de autentificare "zero – knowledge", unde o entitate B poate fi autentificată de o altă entitate A prin asigurarea că păstrează un secret, fără dezvăluirea sa. Acesta a fost inventat de Fiat și Shamir în 1986.
Dezvăluirea identității proprietarilor de cartele inteligente, codul secret numit PIN (Personal Identification Number) și managementul acestuia sunt definite în prestandardele ISO 9564. Pentru structura unei cartele este definită propunerea cadru DP 10201.
Managementul cheilor – comitetul TC68 a propus un standard IS8732 pentru managementul cheilor în transferul de informații între bănci sau guverne, care utilizează numai algoritmi cu chei secrete. Standardul DIS 9594-8 propune o modalitate de a gestiona cheile publice. Acestea trebuie să fie administrate de autorități de încredere, pentru a se evita modificarea lor neautorizată.
Conținutul lucrării
Lucrarea cuprinde în total 8 capitole.
Primul capitol este o parte introductiva avand ca scop analiza nevoii de securitate si standardizarea securității sistemelor deschise. Rețelele de calculatoare sunt singurele care pot asigura serviciile de securitate impuse în tema acestei lucrări (integritatea datelor, semnătura digitală și nerepudierea sunt servicii de securitate aplicabile numai în rețele de calculatoare) – ele reprezintând cele mai complete și complexe sisteme de comunicații. Toate celelalte rețele de comunicații pot asigura numai o parte dintre aceste servicii. Acesta este motivul pentru care, în această lucrare am identificat sistemele de comunicații cu rețele de calculatoare interconectate (prin INTERNET sau orice altă rețea publică), acestea reprezentând viitorul comunicațiilor globale. Dar toate principiile și realizările prezentate aici sunt pretabile oricăror configurații și tipuri de rețele de comunicații, cu atât mai mult cu cât rețelele de calculatoare interconectate se suprapun peste rețele telefonice, radio, radioreleu, IR, etc. Ameliorarea securității sistemelor informatice trebuie să fie un obiectiv important al oricărei organizații. Trebuie avută însă în vedere asigurarea unui bun echilibru între costurile aferente și avantajele concrete obținute. Măsurile trebuie să descurajeze tentativele de penetrare neautorizată, să le facă mai costisitoare decât obținerea legală a accesului la aceste programe și date.
În capitolul doi sunt evidențiate principalele aspecte de vulnerabilitate ale rețelelor de calculatoare și a sistemelor distribuite. Se prezintă o clasificare a tipurilor de atacuri asupra securității acestor sisteme, precum și metode de contracarare a acestor atacuri. Se propune o metodă de abordare a securității rețelelor și o metodologie de gestiune și evaluare a riscurilor în contextul securității. Mai sunt prezentate, de asemenea, unele standarde specifice securității informatice precum și analiza amenințărilor împotriva cărora este cerută protecția și modul de definire a politicii de securitate, adică deciderea amenințărilor care trebuie eliminate și a celor care pot fi tolerate, a resurselor care trebuie protejate, a mijloacelor de implementare a securității și a prețului măsurilor de securitate care poate fi acceptat.
Capitolul trei face o prezentare a arhitecturii securității în sistemele distribuite, arhitectură formată dintr-o combinație de mecanisme și servicii de securitate. În acest capitol sunt descrise cele cinci servicii principale de securitate definite de ISO: autentificarea, controlul accesului, confidențialitatea datelor, integritatea datelor și nerepudierea, precum și cele opt mecanisme de securitate de bază, introduse de OSI, și care pot fi folosite fie individual, fie combinat, pentru a construi aceste servicii de securitate.
Capitolul patru analizează rolul criptografiei computaționale în securitatea rețelelor. Criptografia este principalul mecanism de asigurare a confidențialității datelor, însă ea este folosită ca suport pentru implementarea celorlaltor servicii de securitate. Acesta este motivul pentru care acest capitol este tratat mai pe larg. Sunt prezentați o multitudine de algoritmi criptografici din categoria celor simetrici, adică cu o singură cheie, precum și metode criptografice moderne cu chei publice și pentru generarea funcțiilor rezumat (hash).
Capitolul cinci este dedicat in exclusivitate Algoritmului de criptare MD5.
Capitolul șase prezintă partea aplicativa: generare Serial Number, verificarea unei parole.
Capitolul șapte cuprinde concluziile, iar capitolul opt, referințele.
2. Vulnerabilitatea rețelelor de date și stabilirea politicii de securitate
2.1 Vulnerabilitatea rețelelor de date
Rețelele de calculatoare sunt, în general, structuri deschise, la care se pot conecta un număr mare și variat de componente. Complexitatea arhitecturală și distribuția topologică a rețelelor conduce la o lărgire necontrolată a cercului utilizatorilor cu acces nemijlocit la resursele rețelei (fișiere, baze de date etc.).
În felul acesta, vulnerabilitatea rețelelor se manifestă pe două planuri: pe de o parte, 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 avute în vedere, cu prioritate, două aspecte legate de securitatea informatică 2,3:
Integritatea resurselor unei rețele, adică disponibilitatea lor indiferent de defectele de funcționare, hard sau soft, de încercările ilegale de sustragere a informațiilor, precum și de încercările de modificare a informațiilor;
Caracterul privat, adică dreptul individual de a controla sau influența ce informație, referitoare la o 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ă furnizarea de 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 sau operații ilegale, lucru care conduce la concluzia că protecția a devenit unul dintre aspectele operaționale vitale ale unei rețele.
Securitatea și, în special, caracterul privat trebuie să constituie obiectul unei analize atente în cazul rețelelor, din următoarele motive 2:
Rețelele sunt ansambluri foarte complexe. Este dificil să se obțină o schemă completă a tuturor entităților și 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;
Î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ă;
Pe măsură ce calculatoarele personale pot fi conectate de acasă în rețele, o serie 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.;
Tot mai multe informații memorate în fișiere devin posibil de corelat prin intermediul rețelelor. Această asociere de fișiere privind persoanele poate avea consecințe nefaste asupra caracterului privat individual;
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 al accesului, 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).
2.1.1 Categorii de atacuri asupra rețelei
Amenințările la adresa securității unei rețele de calculatoare pot avea următoarele origini: dezastre sau calamități naturale (incendii, explozii, inundații, cutremure etc.), defectări ale echipamentelor, greșeli umane de operare sau manipulare, fraude. Primele trei tipuri de amenințări sunt accidentale, în timp ce ultima este intenționată. Câteva studii de securitate a calculatoarelor estimează că jumătate din costurile implicate de incidente sunt datorate acțiunilor voit distructive, un sfert dezastrelor accidentale și un sfert greșelilor umane. Acestea din urmă pot fi evitate sau, în cele din urmă, reparate printr-o mai bună aplicare a regulilor de securitate (salvări regulate de date, discuri oglindite, limitarea drepturilor de acces).
Amenințările datorate acțiunilor voite au ca suport faptul că, în general, un (calculator) intrus se poate plasa în orice punct al unei rețele, având ca obiectiv interceptarea traficului de mesaje. În cadrul acestui tip de amenințări se disting două categorii principale de atacuri 2,3:
Atacuri pasive – sunt acelea în cadrul cărora intrusul observă informația ce trece prin “canal”, fără să interfereze 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 frecvența mesajelor vehiculate pe un anumit canal logic, chiar dacă conținutul acestora este neinteligibil. Atacurile pasive au următoarele caracteristici comune:
Nu cauzează pagube (nu se șterg sau se modifică date);
Încalcă regulile de confidențialitate;
Obiectivul este de a “asculta” datele schimbate prin rețea;
Pot fi realizate printr-o varietate de metode, cum ar fi supravegherea legăturilor telefonice sau radio, explorarea radiațiilor electromagnetice emise, rutarea datelor prin noduri adiționale mai puțin protejate.
Atacuri active – sunt acelea în care intrusul se angajează fie în furtul mesajelor, fie în modificarea, reluarea 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. Aceste atacuri sunt serioase deoarece modifică starea sistemelor de calcul, a datelor sau a sistemelor de comunicații. Există următoarele tipuri de amenințări active:
Mascarada – este un tip de atac în care o entitate pretinde a fi o altă entitate. De exemplu, un utilizator încearcă să se substituie altuia sau un serviciu pretinde a fi un alt serviciu, în intenția de a lua date secrete (numărul cărții de credit, parola sau cheia algoritmului de criptare). O “mascaradă” este însoțită, de regulă, de o altă amenințare activă, cum ar fi înlocuirea sau modificarea mesajelor;
Reluarea – se produce atunci când un mesaj sau o parte a acestuia este reluată (repetată), în intenția de a produce un efect neautorizat. De exemplu, este posibilă reutilizarea informației de autentificare a unui mesaj anterior. În conturile bancare, reluarea unităților de date implică dublări și/sau alte modificări nereale ale valorii conturilor;
Modificarea mesajelor – face ca datele mesajului să fie alterate prin modificare, inserare sau ștergere. Poate fi folosită pentru a se schimba beneficiarul unui credit în transferul electronic de fonduri sau pentru a modifica valoarea acelui credit. O altă utilizare poate fi modificarea câmpului destinatar/expeditor al poștei electronice;
Refuzul serviciului – se produce când o entitate nu izbutește să îndeplinească propria funcție sau când face acțiuni care împiedică o altă identitate de la îndeplinirea propriei funcții;
Repudierea serviciului – se produce când o entitate refuză să recunoască un serviciu executat. Este evident că în aplicațiile de transfer electronic de fonduri este important să se evite repudierea serviciului atât de către emițător, cât și de către destinatar.
În cazul atacurilor active se înscriu și unele programe create cu scop distructiv și care afectează, uneori esențial, securitatea calculatoarelor. Există o terminologie care poate fi folosită pentru a prezenta diferitele posibilități de atac asupra unui sistem. Acest vocabular este bine popularizat de “poveștile” despre hackeri. Atacurile presupun, în general, fie citirea informațiilor neautorizate, fie (în cel mai frecvent caz) distrugerea parțială sau totală a datelor sau chiar a calculatoarelor. Ce este mai grav este posibilitatea potențială de infestare, prin rețea sau copieri de dischete, a unui mare număr de mașini. Dintre aceste programe distructive amintim:
Virușii – reprezintă programe inserate în aplicații, care se multiplică singure în alte programe din spațiul rezident de memorie sau de pe discuri; apoi, fie saturează complet spațiul de memorie/disc și blochează sistemul, fie, după un număr fixat de multiplicări, devin activi și intră într-o fază distructivă (care este de regulă exponențială);
Bomba software – este o procedură sau parte de cod inclusă într-o aplicație “normală”, care este activată de un eveniment predefinit. Autorul bombei anunță evenimentul, lăsând-o să “explodeze”, adică să facă acțiunile distructive programate;
Viermii – au efecte similare cu cele ale bombelor și virușilor. Principala diferență este aceea că nu rezidă la o locație fixă sau nu se duplică singuri. Se mută în permanență, ceea ce îi face dificil de detectat. Cel mai renumit exemplu este viermele INTERNET-ului, care a scos din funcțiune o parte din INTERNET în noiembrie 1988;
Trapele – reprezintă accese speciale la sistem, care sunt rezervate în mod normal pentru proceduri de încărcare de la distanță, întreținere sau pentru dezvoltatorii unor aplicații. Ele permit însă accesul la sistem, eludând procedurile de identificare uzuale;
Troianul – este o aplicație care are o funcție de utilizare foarte cunoscută și care, într-un mod ascuns, îndeplinește și o altă funcție. De exemplu, un hacker poate înlocui codul unui program normal de control “login” prin alt cod, care face același lucru, dar, adițional, copiază într-un fișier numele și parola pe care un utilizator le tastează în procesul de autentificare. Ulterior, folosind acest fișier, hacker-ul va penetra foarte ușor sistemul.
2.1.2 Modelul securității rețelelor
Modelul de securitate pentru un calculator seamănă cu o ceapă: diferite 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 care a fost planificat.
Securitatea fizică reprezintă nivelul 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 și siguranța păstrării suporților de salvare. În aceste situații, rețelele locale sunt de mare ajutor: dacă toate fișierele schimbate frecvent rezidă pe un server, aceleași persoane (sigure și de încredere), care lansează salvările pentru mainframe-uri, pot face aceleași lucruri și la server. Calculatorul, 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. Pentru a învinge orice alte măsuri de securitate, trebuie să se dispună de acces fizic la echipamente. Acest lucru este comun tuturor sistemelor de calcul, distribuite sau nu.
Securitatea logică constă constă din acele metode care asigură controlul accesului la resursele și serviciile sistemului. Ea are, la rândul ei, mai multe niveluri, împrțite în două grupe mari: niveluri de securitate a accesului (SA) și niveluri de securitate a serviciilor (SS).
Securitatea accesului (SA) cuprinde:
accesul la sistem (AS), care este răspunzător de a determina dacă și când rețeaua este accesibilă utilizatorilor. El poate fi, de asemenea, răspunzător pentru decuplarea unei stații, ca și de gestiunea evidenței accesului. AS execută, de asemenea, deconectarea forțată, dictată de supervizor. AS poate, de exemplu, să prevină conectarea în afara orelor de serviciu și să întrerupă toate sesiunile, după un anumit timp;
accesul la cont (AC), care verifică dacă utilizatorul care se conectează cu un anumit nume și o parolă există și are un profil utilizator valid;
drepturile de acces (DA), care determină ce privilegii de conectare are utilizatorul.
Securitatea serviciilor (SS), care se află sub SA, controlează accesul la serviciile sistem, cum ar fi fire de așteptare, I/O la disc și gestiunea server-ului. Din acest nivel fac parte:
controlul serviciilor (CS), care este responsabil cu funcțiile de avertizare și de raportare a stării serviciilor; de asemenea, el activează și dezactivează diferitele servicii;
drepturile la servicii (DS), care determină exact cum folosește un anumit cont un serviciu dat; de exemplu, un cont poate avea numai dreptul de a adăuga fișiere la spooler-ul unei imprimante, dar are drepturi depline de a adăuga și a șterge fișiere pentru o altă imprimantă.
Servicii de înalt nivel specifice software-lui (SIS) și servicii la nivel scăzut specifice hardware-lui (SSH) 3. SIS sunt operațiuni care nu sunt limitate hardware – de exemplu cererea de a deschide un fișier după nume. Ele sunt de fapt construite prin SSH și pot necesita 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.
2.1.3 Abordarea securității rețelelor
Într-o primă abordare, vom considera o rețea de calculatoare 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. Această definiție este completă în sensul că ea nu trebuie să definească ce probleme (amenințări) pot apărea într-o rețea precum și în ce circumstanțe și ce componente ale rețelei sunt amenințate. Lista de amenințări constituie baza definirii cerințelor de securitate. Odată acestea recunoscute, trebuie elaborate regulile conform cărora să se controleze operațiile rețelei. Aceste reguli operaționale se numesc, în fapt, servicii de securitate, iar implementarea serviciilor se face prin protocoale de securitate, utilizând o mulțime de mecanisme de securitate proiectate conform setului de reguli definite. O asfel de rețea se numește rețea sigură de calculatoare. Pentru a o defini, trebuie elaborate:
lista cerințelor de securitate;
regulile de protecție și securitate;
mecanismele de securitate corespunzătoare celor de mai sus.
Există o literatură de specialitate bogată, care analizează problemele de securitate a rețelelor, dar definițiile securității diferă chiar în viziunea instituțiilor internaționale de standardizare. Ca urmare, nu putem găsi în literatură o definiție unanim acceptată în ceea ce privește securitatea rețelelor. Pentru a proiecta și implementa un sistem integrat de securitate al unei rețele, trebuie parcurse următoarele etape:
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ă în 3 sub-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ță pe care aceste probleme le pot crea.
Rezultatul acestei faze de analiză îl constituie cerințele de securitate ale rețelei.
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.
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 și al raportării către administratorul rețelei a evenimentelor de securitate relevante care pot apărea.
2.2 Stabilirea politicii de securitate
În mod esențial, asigurarea securității unui sistem presupune un ansamblu de măsuri tehnice și non-tehnice. Rolul specialiștilor în securitate este să ajute organizațiile să decidă ce sume și timp să cheltuiască în acest scop. În funcție de acești parametri, specialiștii trebuie să stabilească politica de securitate, reglementările și procedurile practice. În final, specialiștii trebuie să stabilească auditul sistemului, astfel încât să asigure controalele potrivite politicii și reglementărilor elaborate. Securitatea practică este mai mult o problemă de management și administrare, decât una pur tehnică.
În procesul de planificare a securității unui sistem, se pot evidenția șase etape mai importante:
planificarea cerințelor de securitate;
evidențierea riscurilor;
analiza raportului cost-beneficii;
crearea unor politici care să reflecte cerințele;
implementarea și testarea;
auditul și răspunsul la incidente.
2.2.1 Planificarea cerințelor de securitate
În planificarea cerințelor de securitate pentru un sistem, trebuie avute în vedere următoarele categorii de protecții:
Confidențialitatea – protejarea informației împotriva citirii sau copierii de către utilizatorii care nu au o autorizare explicită. Protecția se poate face global, la nivel fișier, sau separat, pe anumite piese de informație.
Integritatea datelor – protejarea informației (inclusiv programe) împotriva ștergerii sau modificării făcute fără permisiunea proprietarului acesteia;
Disponibilitatea – protejează un serviciu astfel încât acesta să fie disponibil permanent și să nu poată fi inactivat fără autorizație din partea administratorului;
Controlul accesului – reglează accesul la sistem. Împiedică utilizatorii (sau programe) neautorizați să acceadă în sistem, periclitând integritatea resurselor și confidențialitatea informațiilor;
Auditul – chiar și utilizatorii autorizați pot face acțiuni eronate sau răuvoitoare care afectează sistemul. În astfel de cazuri administratorul trebuie să determine ce s-a întâmplat și care sunt daunele rezultate. Pentru acest scop, trebuie să existe înregistrări ale activității sistemului, care să identifice în egală măsură utilizatorii și acțiunile întreprinse.
Fiecare organizație atribuie importanță diferită acestor aspecte, în funcție de cerințele și obiectivele de securitate avute:
mediul bancar – integritatea și auditul sunt cele mai importante, pe plan imediat inferior fiind confidențialitatea și disponibilitatea;
domeniul militar, diplomatic sau guvernamental – confidențialitatea este pe prim plan, iar disponibilitatea mai la urmă;
mediu universitar – integritatea și disponibilitatea sunt cele mai importante.
2.2.2 Evidențierea riscurilor
Această etapă este una dintre cele mai importante din procesul de stabilire a politicii de securitate; abia după determinarea riscurilor existente se pot planifica politici și tehnici adecvate de protecție.
Pentru o organizație, pasul preliminar în proiectarea arhitecturii securității îl reprezintă analiza riscurilor. Există multiple metode de a executa această analiză. Cele mai frecvent utilizate sunt următoarele:
MARION – este o metodologie folosită de comunitățiile de afaceri și financiare. A fost dezvoltată de un consorțiu de profesioniști în asigurări, management IT și consultanță în probleme de securitate. Metoda este compusă din 6 pași:
Analiza riscurilor maximale – cerința este de a evalua care sunt riscurile potențiale și care sunt costurile maximale. Acest pas folosește o abordare formală pentru a obține o estimare a costurilor;
Expresia riscurilor maxime admisibile – calculează volumul pierderilor maxime pe care compania le poate tolera fără a fi în primejdie;
Analiza cantitativă a măsurilor de securitate – evaluează starea de securitate a organizației, urmărind fiecare factor de securitate. Aceștia sunt determinați printr-o investigație națională privitoare la dezastrele pe calculatoare,
Evaluarea constrângerilor – presupune identificarea diferitelor constrângeri care vor împiedica implementarea unor măsuri; constrângerile pot fi financiare sau structurale, de aceea cerințele acestui pas sunt de a găsi o balanță optimă a raportului prevenire/protecție;
Alegerea măsurilor de securitate (simulare, optimizare) – presupune alegerea măsurilor de securitate care urmează a fi implementate în intenția reducerii riscurilor maxime și descreșterii costurilor medii ale dezastrelor. Acest pas determină costurile măsurilor, prioritatea lor și gradul de îmbunătățire sperat; de asemenea, permite simularea ipotezelor financiare;
Pre-proiectul – pe baza rezultatelor pasului 5, se face analiza în vederea determinării acelei politici de securitate care este cea mai oportună. Se construiește un pre-proiect care definește prioritățile, planificarea, bugetul, responsabilitățile, structura și asigurările necesare.
CRAMM – reprezintă o metodologie orientată mai mult pe riscuri și nu pe costuri; a fost definită de grupul Gildersleeves care este responsabil de avizări în domeniul protecției datelor în cadrul guvernului britanic. A fost dezvoltată pentru guvernul britanic, în 1985. Dispune de instrumente suport automate și este folosită în Anglia pentru sisteme care prelucrează date nesecrete, dar senzitive. Are 3 pași:
Identificarea inițială a bunurilor (fizice și logice) și asignarea de valori obținute pentru 4 posibile impacturi:
dezvăluiri;
modificări;
indisponibilități;
distrugeri.
Analiza dependențelor, a vulnerabilităților și a amenințărilor (22 de amenințări posibile);
În final, se decide care sunt cele mai adecvate contramăsuri.
În SUA, NIST (National Institute of Standards and Technology) și NCSC (National Computer Security Center – Centrul de Securitate Calculatoare al DoD) au stabilit în cooperare un laborator de cercetare în managementul riscului. Obiectivul principal a fost de a se dezvolta cercetarea în domeniul metodologiilor și tehnicilor de management al riscului, evidențiind existența a peste 20 de pachete soft în domeniu (inclusiv CRAMM).
În general, putem aprecia că analiza riscurilor comportă următoarele trei etape:
Identificarea bunurilor, adică a elementelor care trebuie să facă obiectul protecției:
bunuri fizice: calculatoare, date, arhive, anuale, cărți, listing-uri, pachete software de firmă, echipamente și linii de comunicații, înregistrări de personal, înregistrări de audit etc;
bunuri virtuale: date de sănătate ale personalului, elemente private ale utilizatorilor, imagine publică, relații cu clienți și distribuitori, informații de configurare etc.
Identificarea amenințărilor referitoare la aceste bunuri inventariate: incendii, inundații, distrugeri sau pierderi de suporți magnetici, bug-uri în software, pierderi de parole și chei de acces, accesul unor hackeri în sistem, viruși, pierderea unor utilități (telefon, apă, electricitate) etc;
Cuantificarea amenințărilor – operație dificilă, posibil de făcut, de exemplu, de către o companie de asigurări. Trebuie avut în vedere, pentru fiecare amenințare, cu ce frecvență poate apare în următoarea perioadă (un an, de exemplu) și pierderile în bani pe care le produce.
2.2.3 Analiza raportului cost-beneficii
Trebuie asociat fiecărui risc identificat un cost în cazul producerii și un cost al măsurilor pentru prevenirea sa.
Costul producerii este foarte greu de apreciat. El trebuie să ia în evidență nu numai costul înlocuirii, reparării, pierderii, ci și pe cel legat de întreruperea lucrului, reputația cmpaniei, costurile la clienți.
Costul prevenirii trebuie să evalueze în bani cheltuielile necesare pentru contracararea fiecărei amenințări. Desigur că o securitate foarte ridicată implică și costuri de prevenire înalte. Stabilirea limitei de bani care merită a fi cheltuită pentru fiecare amenințare reprezintă o problemă specifică fiecărei companii.
Trebuie făcută distincție între noțiunea de risc și cea de incertitudine. În timp ce incertitudinea poate fi prezentă doar în cazul unei decizii unice și irepetabile, riscul presupune doar un set de condiții derivate din experiența trecută, care rămân valabile și în viitor.
Î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 abordată, 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.
Desigur că evaluarea riscurilor pentru o companie trebuie să fie un obiectiv general de conducere, evaluarea fiind folosită apoi pe nivelurile inferioare de decizie. Coordonarea cerințelor de securitate și impulsul inițial se face la nivelul superior de conducere, în termenii unor principii și standarde cu valabilitate de lungă durată:
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.
Activitatea în procesul de decizie se execută în nivelurile subordonate conducerii și constă în selecția măsurilor de securitate adecvate. Ea poate fi divizată în mai multe subprocese:
analiza riscului (analiza slăbiciunilor, evenimente 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 din 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 costă în evaluarea efectelor (E) pentru fiecare măsură individuală (Mi). O măsură a efectului acesteia este riscul rezidual (RR):
unde R este riscul inițial. Atât efectele cât și riscurile se pot evalua în bani sau în 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:
În pasul patru se evaluează costurile măsurilor individuale și ale portofoliilor (C). O măsură este acceptabilă dacă eficiența ei (e) respectă condiția:
Se preferă acele portofolii de măsuri pentru care:
2.2.4 Politici care reflectă cerințele
Politica ajută la definirea a ceea ce este important și specifică ce pași trebuie parcurși pentru salvarea acestor bunuri supuse pericolului amenințărilor. Politica poate fi formulată în mai multe feluri:
ca o politică generală de securitate valabilă pentru toate subdomeniile;
definind politici separate pentru diferite bunuri protejate (e-mail, date personale, date de contabilitate etc.);
având definită o politică generală compactă, completată cu standarde și recomandări (reglementări) de aplicare pentru diverse subdomenii.
Politica generală joacă rolul major. Ea stabilește în mod clar ce se protejează și de ce. În primul rând, ea statutează responsabilitățile în ceea ce privește protecția. În al doilea rând, ea furnizează suportul pe baza căruia se vor rezolva și interpreta toate conflictele care apar. Politica trebuie să fie generală, să se schimbe puțin în timp și să nu facă referiri concrete la amenințări, entități sau nume de utilizatori.
Standardele au rolul de a consfinți practici de securitate încununate de succes într-o anumită organizație. În general, folosesc cuvântul “trebuie”. Ele se pot referi, de exemplu, la perioada de valabilitate a unei copii de salvare (backup), la modul de testare a unei surse UPS etc.
Recomandările reprezintă elemente ale politicii de securitate care folosesc sintagma “ar trebui”. Rolul lor este de a intrepreta standardele pentru anumite contexte particulare de aplicare. Spre deosebire de standarde, recomandările pot fi violate, în anume circumstanțe.
Idei de bază care trebuie avute în vedere:
Stabilirea unui proprietar pentru fiecare echipament sau informație care urmează a fi protejate. Această persoană răspunde de copierea, distrugerea, salvarea și celelalte aspecte ale protecției acelei entități;
Stabilirea unor reguli pozitive – utilizatorii răspunzând mai bine unor cerințe pozitive decât unor liste lungi de interdicții, care conțin invariabil sintagma “este interzisă …”;
Luarea în considerare a specificului uman – omul, atunci când lucrează, poate greși, uita sau înțelege greșit. Politica de securitate nu trebuie să sugereze că oamenii vor fi azvârliți afară dacă vor greși. De asemenea, politica de securitate trebuie să țină și cont de confidențialitatea datelor și informațiilor personale ale oamenilor din instituție: e-mail, evaluări profesionale, caracterizări, date medicale;
Accentuarea factorului educațional – presupune ca utilizatorii să fie antrenați și formați periodic cu cunoștințe legate de cerințele de securitate;
Acordarea unei autorități adecvate celor care răspund de securitate. Aceste persoane nu trebuie să aibă doar responsabilități, ci și autoritate privind impunerea regulilor și pedepsirea vinovaților. Altfel, aceste persoane sunt doar “țapi ispășitori” în cazul unor evenimente de securitate. De exemplu, dacă un administrator constată o tentativă a unui utilizator de a copia fișierul de parole, trebuie să poată acționa imediat prin invalidarea contului folosit de acel utilizator și prin anunțarea șefului acestuia;
Alegerea corectă a conceptului de bază:
orice lucru care nu este explicit interzis – este permis;
orice lucru care nu este explicit permis – este interzis;
Deoarece elaborarea unei politici presupune o activitate lungă și competentă, se recomandă ca într-o primă etapă să se realizeze următoarele acțiuni:
Să se decidă cât de importantă este securitatea informatică pentru instituția respectivă. Dacă pierderile eventuale sunt considerate a fi mari trebuie acționat de urgență;
Să se implice și educe personalul instituției, atenționându-l asupra riscurilor privind breșele de securitate, indicându-i-se anumite practici nerecomandate, spunându-i-se să apeleze la personalul cu securitatea ori de câte ori se bănuiesc anumite nereguli;
Să se realizeze un plan pentru salvările periodice ale fișierelor de pe sistemele de calcul și să se stabilească modul de păstrare sigură a acestor suporți;
Să se mențină în permanență o stare de continuă suspiciune și vigilență. Trebuie analizate toate incidentele care sunt raportate de personal și eventualele încercări de penetrare prin rețea.
2.2.5 Auditul
Pentru a urmări eventual, în justiție, orice abuz relativ la sistem, trebuie cunoscut cum se poate colecta și păstra evidența incidentelor de securitate. În continuare prezentăm câteva măsuri și mecanisme pentru a păzi sistemul, precum și ce este de făcut dacă se constată accese ilegale, trecute sau în curs de derulare.
Mijloace de supraveghere a sistemului:
Comenzi:
afișarea numelui utilizatorului, portului și timpul de acces;
identificarea procesului, portului, timpul și durata utilizării și numele fișierului executabil folosit.
Evidența proceselor;
Fișiere jurnal:
intrări în sistem;
copie a tuturor mesajelor transmise la consolă.
Descoperirea acceselor neautorizate în sistem:
Incidente în curs:
penetrări locale;
penetrări prin INTERNET;
deconectarea intrușilor.
Incidente deja consumate:
data de schimbare a inod*-ului;
cine a fost conectat.
Refacerea sistemului după incident:
căutarea conturilor nou create;
schimbarea parolelor la conturile existente;
analiza a întregului sistem de fișiere (checklist);
verificarea programelor executabile;
verificarea accesului la directoare și fișiere;
verificarea drepturilor utilizatorului și superuser-ului;
verificarea fișierelor de inițializare;
verificarea existenței directoarelor și fișierelor ascunse;
verificarea existenței virușilor;
Atacuri distructive majore:
reformatarea discului;
saturarea:
cu procese;
discului;
spațiu pe disc ascuns.
ștergerea unor fișiere critice;
întreruperea tensiunii de alimentare;
tăierea cablurilor.
Urmărirea legală a incidentelor de securitate
Dacă se decide să se aducă acuzații unui intrus trebuie făcute anumite lucruri:
Înlocuirea mesajelor de bun venit, la conectarea în sistem, cu mesaje de atenționare privind accesul neautorizat;
Introducerea de mesaje de proprietate și de copyright (proprietate intelectuală) la toate programele sau fișierele de date ce ne aparțin;
Notificarea utilizatorilor asupra a ceea ce pot sau ce le este interzis să facă;
Anunțarea utilizatorilor asupra acțiunilor lor ce urmează a fi monitorizate din motive de securitate;
Păstrarea într-un loc sigur a copiilor de siguranță ale sistemului și stabilirea unei politici corecte de salvare periodică;
Stabilirea în scris autorizațiile ce le are fiecare utilizator în folosirea sistemului și stabilirea clară a resurselor ce le poate accesa. Aceștia să cunoască și să înțeleagă limitele între care pot lucra pe sistem;
Când apar probleme de securitate care pot antrena o urmărire legală a incidentelor – este interzis personalului să facă propriile investigații. Acestea vor fi făcute de organele abilitate cu sprijinul administratorilor sistemului;
Utilizatorii trebuie să semneze un angajament scris cu privire la responsabilitățile lor referitoare la informațiile confidențiale, folosirea calculatorului și a rețelei;
Elaborarea unui plan de acțiune în caz de incidente de securitate, consultând avocatul instituției.
Principalele obiective ale administratorului de securitate
supravegherea și protejarea parolelor pentru ceilalți utilizatori:
alegerea corectă a parolelor;
schimbarea parolelor ( la apariția incidentelor, expirare );
utilizarea corectă a parolelor;
protejarea criptografică a parolelor;
gestionarea parolelor;
administrarea accesului la fișiere și directoare;
administrarea cheilor și sistemelor de criptare;
supravegherea permisiunilor de acces și apartenența fiecărui fișier;
supravegherea comunicațiilor interne și externe ale sistemului;
detectarea atacurilor la securitatea sistemului;
să aibă un control perfect asupra activității sistemului;
să poată trasa în orice moment, urma evenimentelor ce s-au petrecut anterior în sistem.
Principalele obiective ale administratorului de rețea
Controlul proceselor:
oprirea, inițializarea sistemului;
trimiterea oricărui semnal către orice proces;
schimbarea unor valori limită:
mărime fișier;
dimensiune segment de date;
etc.
Controlul perifericelor:
citirea și modificarea oricărei locații de memorie;
instalarea unor noi periferice;
accesul la orice periferic;
setarea datei și orei.
Controlul rețelei:
rularea serviciilor rețea la porturile “sigure”;
reconfigurarea rețelei;
examinarea pachetelor care circulă pe rețea.
Sistemului de fișiere:
citirea, modificarea sau ștergerea oricărui fișier sau program;
schimbarea etichetei discurilor;
execuția oricărui program;
montarea și demontarea sistemului de fișiere.
3. Cerințele și serviciile de securitate
3.1 Arhitectura securității
3.1.1 Arhitectura securității unui sistem distribuit
Componentele logice ale unui sistem distribuit sunt resursele și entitățile (care se numesc generic utilizatori). Vom înțelege prin entități toate componentele active ale rețelei, atât entitățile legale cât și ilegale. Vom încerca să identificăm care sunt componentele hard și soft implicate în securitatea unui sistem distribuit. Am numit acest lucru arhitectura securității 3.
Entitățile legale sunt acelea care sunt înregistrate cu drept de folosire a resurselor rețelei. Aceasta presupune ca:
fiecare entitate legală trebuie să aibă afectată o unică informație care identifică entitatea – identificatorul entității;
pentru fiecare persoană trebuie stabilit dacă poate deveni entitate legală a rețelei. Acest lucru este hotărât de Administratorul securității;
identitățile entităților legale trebuie să fie:
determinate (adică create) de către o autoritate a rețelei numită Autoritate de numiri;
înregistrate în rețea într-o bază de date sigură, numită Bază de date a informațiilor de securitate (BDIS).
Ca urmare:
persoana care dorește să folosească rețeaua solicită acest lucru Administratorului securității;
Administratorul securității obține un identificator al securității de la Autoritatea de numiri;
Administratorului securității inserează identificatorul entității în Baza de date a informațiilor de securitate.
După ce a fost înregistrat ca entitate legală pentru a accede la rețea, trebuie să se autentifice în timpul conectării în rețea. Pentru aceasta este nevoie de o parolă.
Parola = un șir de caractere sau un algoritm care confirmă că entitatea legală este în realitate ea însăși. Parola nu este furnizată de Autoritatea de Numire ci este generată de entitatea însăși și trebuie să fie:
scurtă pentru a fi ascunsă altor entități;
ușor de manipulat (de generat, schimbat).
Entitățile introduc ele însele parolele în Baza de Date a Informațiilor de Securitate (BDIS); deși informațiile de identificare din această bază de date trebuie să fie în clar, parola trebuie cifrată printr-o transformare greu inversabilă (“one-way”) pentru a nu fi accesibilă nici Administratorului.
La intrarea în rețea, entitatea trebuie să semneze, adică să furnizeze identitatea sa și să se autentifice. Componenta care face aceste verificări se numește Managerul securității. Acesta reprezintă serverul unic de securitate pentru un anumit context, el putând fi implementat sub forma unor module soft, a unor module hard special sau ca o combinație a lor.
Managerul securității trebuie să aibă acces în fiecare punct al rețelei la Baza de date a informațiilor de securitate.
Deoarece fiecare entitate folosește protecția criptografică, trebuie generate chei secrete sau chei publice. În plus, acestea trebuie schimbate, modificate sau șterse. Toate aceste funcții sunt făcute de Autoritatea de certificare sau de Centrul de distribuție a cheilor.
Atunci când se folosește protecția criptografică a resurselor rețelei, trebuie dată o atenție specială protejării cheilor. Pentru a preveni amenințările de modificare sau de folosire ilegală a acestor chei, se sugerează folosirea în BDIS a unui certificat de conectare care să conțină identitatea entității, data și ora fiecărei intrări și copia cheii compromise. Pe lângă metodele criptografice care au rolul de a proteja comunicațiile dintre entități sau conținutul unor fișiere sau baze de date, sunt necesare și alte mecanisme, numite mecanisme de control al accesului. Componentele de bază ale lor sunt subiecții (componente active), obiectele (resursele rețelei), drepturile de acces (privilegiile entităților) și condițiile de folosire a resurselor. Acest mecanism poate fi structurat fie sub forma unei matrici, fie sub forma unui arbore binar, fie mai general printr-o structură ierarhică cu facilități criptografice. În toate cazurile însă se folosește o bază de date proprie numită bază de date pentru controlul accesului.
În concluzie, toate componentele modelului logic al arhitecturii securității unei rețele pot fi grupate astfel:
Componente active ale arhitecturii securității
Entitățile rețelei posedă identitate, parolă și chei criptografice;
Autoritatea de numire: determină identificatorul unic pentru fiecare entitate legală;
Administratorul securității: înregistrează entitățile noi, legale;
Managerul securității: calculează funcțiile de securitate privitoare la entitățile rețelei, inclusiv gestiunea cheilor;
Mecanismul de control al accesului: implementează funcțiile de control al accesului la resurse.
Baza de date a arhitecturii securității
Baza cu informațiile de securitate: conține informațiile de control a entităților și cheile lor criptografice;
Certificate de conectare: conțin informații asupra cheilor șterse sau compromise;
Baza de control al accesului: conține informațiile de control al accesului (entități, resurse, atribute și condiții de acces).
Componentele bazei de date trebuie distribuite de-a lungul întregii rețele. Cele localizate în calculatoare gazdă sunt orientate către entitățile și resursele prezente pe acel calculator. Mecanismele de protecție pentru accesul entităților în rețea direct de la terminale (prin nodurile subrețelei de comunicații) sunt plasate în aceste noduri. Toate componentele mecanismului de control al accesului, care protejează resurse locale, sunt localizate pe calculatoarele gazdă unde se execută programele sau se consultă fișierele și bazele de date protejate. Componentele mecanismului de control al accesului care privesc resurse ale subrețelei de comunicații (linii, rute, noduri, entități cu acces direct în rețea) sunt localizate pe noduri.
3.1.2 Arhitectura securității ISO
Relația existentă între serviciile de securitate și mecanismele de securitate definite de ISO este sumarizată în tabelul de mai jos. S-au notat pe coloane, cu litere, cele 8 mecanisme evocate anterior. Marcajele cu “” din tabel semnifică faptul că mecanismele respective se consideră potrivite pentru implementarea serviciilor de pe linii [3].
3.1.3 Nivele arhitecturale
ISO lasă posibilitatea de a asigura servicii de securitate la diferite nivele ale modelului OSI. Alternativa este de a le asigura la un nivel scăzut – nivelele 2/3 (legătură/rețea), intermediar – nivelul 4 (transport) – sau la nivelul aplicație (7). Este posibil, în această arhitectură, să se furnizeze toate serviciile de securitate la nivelul aplicație. Important este ca implementarea serviciilor de securitate să se facă pe baza mecanismelor de securitate prezentate anterior.
Nivelul fizic (nivelul 1). Serviciile de securitate ale nivelului fizic asigură o protecție punct la punct. Securitatea poate fi aplicată:
între un terminal și un sistem final (calculator gazdă sau “host”);
între un sistem final și un sistem (nod) intermediar;
între două sisteme (noduri) intermediare.
Un avantaj major al serviciilor de securitate oferite la acest nivel este acela că protecția poate fi independentă de protocoalele implementate pe nivelele superioare.
Totuși, mecanismele și dispozitivele de asigurare a securității ce operează la acest nivel sunt dependente de o anumită tehnologie de rețea. De cele mai multe ori, dispozitivele de securitate ale nivelului fizic au o interfață încorporată, specifică unei tehnologii, pentru a face dispozitivul transparent și ușor de integrat în sistem.
În asemenea circumstanțe, un anume dispozitiv poate folosi un mecanism de securitate generic, dar poate avea o gamă limitată de aplicabilitate. De exemplu, un dispozitiv de cifrare la nivel fizic poate fi limitat pe legăturile sincrone la viteze de 64 kbps sau 128 kbps.
Utilitatea serviciilor de securitate la acest nivel este limitată în sensul că se poate asigura doar confidențialitatea circuitelor orientate pe conexiune și a traficului. În efortul de a asigura transparența și compatibilitatea cu alte componente, dispozitivele de asigurare a securității la acest nivel nu pot fi adresabile într-o rețea. Serviciile de integritate și autentificare a datelor nu pot fi implementate la acest nivel, însă folosind niște tehnici de cifrare adecvate, aceste servicii pot fi asigurate de către nivelele superioare.
Nivelul legăturii de date (nivelul 2). Serviciile de securitate la nivelul legăturii de date sunt asigurate tot punct la punct. Un avantaj al serviciilor de securitate implementate pe acest nivel îl constituie independența de protocoalele nivelelor ierarhice superioare, ceea ce face posibilă folosirea dispozitivelor de securitate la acest nivel, pentru o diversitate de protocoale. Conformându-se cu ISO 7498-2, serviciile de securitate care pot fi oferite de nivelul legăturii de date sunt confidențialitatea circuitelor orientate conexiune confidențialitatea circuitelor neorientate conexiune. Deoarece majoritatea protocoalelor de la acest nivel (de exemplu, LAPB) au facilități de detecție a erorilor și de secvențiere pentru asigurarea retransmisiilor, ele dau impresia că se poate asigura integritatea datelor cu posibilitatea refacerii acestora. Totuși, în protocolul LAPB, spațiul de secvențiere este relativ mic (128 cadre), iar codul detector de erori CRC32 nu a fost introdus pentru problemele legate de securitate. Astfel, nu se poate asigura o calitate corespunzătoare a serviciului de intagritate decât prin introducerea unui protocol explicit de securitate.În mediile MAN și LAN, definite de standardele IEEE 802, cele mai multe protocoale ale nivelului legătură de date nu asigură decât detectarea erorilor.Realizarea criptării la acest nivel presupune oferirea unei cantități mai mari de informație unui adversar ce interceptează pachete, deoarece câmpurile de control sunt în text clar, lucru ce permite atacuri cum ar fi re-rutarea datelor (deoarece câmpurile sursă și destinație sunt citibile). Nivelul 2 nu este recomandat de OSI pentru implementarea serviciilor de securitate. Principalul dezavantaj al criptării la acest nivel este că datele sunt memorate în clar pe toate nodurile intermediare, iar acest lucru nu poate fi acceptat decât în rețelele private, unde este asigurată securitatea fizică și utilizatorii sunt de încredere. Un alt dezavantaj major este că toate datele sunt criptate la fel.
Nivelul rețea (nivelul 3). Serviciile de securitate care pot fi asigurate de acest nivel sunt:
confidențialitatea circuitelor orientate conexiune;
confidețialitatea circuitelor neorietate conexiune;
integritatea datelor;
autentificarea;
controlul accesului.
Securitatea nivelului rețea poate fi asigurată atât între sisteme terminale, cât și între un sistem terminal și un sistem intermediar (de exemplu, ruter). Dacă securitatea nivelului rețea este asigurată în funcție de tehnologia de realizare a rețelei respective, atunci serviciile de securitate oferite pot fi independente de protocoalele de nivel superior. Istoric vorbind, serviciile de securitate de la nivelele fizic și legătură de date au fost implementate într-un hardware extern. Este mult mai eficient de implementat securitatea nivelului rețea intern în sistemele terminale sau intermediare. La acest nivel este permisă securizarea anumitor rute; toată circulația de date de pe aceste rute este criptată, chiar dacă acest lucru nu este necesar. Deoarece este criptat numai câmpul de date al pachetului, nu și antetul, (astfel încât datele care trec prin nodurile intermediare sunt criptate, pe când antetele nu) nu se poate asigura confidențialitatea traficului, ci numai integritatea și confidențialitatea datelor transmise.
Nivelul transport (nivelul 4). Pentru nivelul transport ISO 7489-2 menționează câteva servicii de securitate:
confidențialitatea circuitelor orientate sau neorientate conexiune;
integritatea datelor (integral sau a câmpurilor selectate)
autentificarea originii datelor;
autentificarea mutuală (autentificarea entităților perechi);
controlul accesului.
Există o singură diferență semnificativă între serviciile de securitate asigurate de nivelul transport și cele ale nivelului rețea, care se referă la capacitatea de asigurare și a unei protecții în sistemele intermediare, atunci când se folosesc mecanismele părții superioare nivelului rețea. Serviciile de securitate ale nivelului transport orientate conexiune pot asigura, în principiu, o protecție sporită comparativ cu protecția asigurată de partea superioară a nivelului rețea, însă în practică diferențele acesteă sunt minime.
Nivelul sesiune (nivelul 5). ISO 7489-2 nu prevede ca nivelul de sesiune să ofere servicii de securitate.
Nivelul prezentare (nivelul 6). Acest nivel este considerat ideal pentru asigurarea protecției informațiilor deoarece serviciile de securitate pot fi considerate transformări de date, care sunt operații specifice nivelului prezentare. Facilitățile de confidențialitate oferite aici se pot baza pe legături orientate/neorientate pe conexiune sau pe variantele de câmp selectat. Deoarece acest nivel este folosit pentru transformarea datelor, există un avantaj pentru cifrarea datelor la acest nivel mai curând decât la nivelul aplicație; cu toate acestea, deoarece acest nivel este mai mult teoretic, el neîntâlnindu-se prea des în practică, problema implementării unor servicii de securitate la acest nivel nu prea are sens.
Nivelul de aplicație (nivelul 7). ISO 7498-2 afirmă că toate serviciile de securitate fi asigurate la acest nivel, iar nerepudierea mesajelor poate fi oferită numai de către acest nivel. Totuși, serviciile de securitate oferite de nivelul aplicație pun unele probleme, datorită conflictului cu funcționalitatea nivelului prezentare. Pentru mulți, unul dintre motivele cele mai importante pentru asigurarea serviciilor de securitate la acest nivel îl constituie posibilitatea de implementare a acestor servicii în afara sistemelor de operare. Astfel, cei ce dezvoltă aplicații pot implementa mecanismele de securitate pe care le doresc în interiorul aplicațiilor. Aspectul neplăcut al serviciilor și mecanismelor de securitate implementate la acest nivel este că fiecare implementare servește numai unei anume aplicații și deoarece proiectarea și implementarea unui serviciu de securitate este un proces complex, există riscul ca facilitățile de securitate ale aplicației respective să fie slabe.
Tabelul următor sumarizează diferitele nivele ale arhitecturii OSI, în care pot fi furnizate servicii de securitate, indicând care dintre acestea sunt recomandate 2.
După cum se observă, securitatea arhitecturală a unei rețele este un ghid abstract pentru proiectanții de protocoale de rețea. Mulți specialiști consideră însă că securitatea arhitecturală a rețelelor ar trebui să asigure un set concret de linii directoare atât pentru proiectanții de rețele cât și pentru fabricanții de echipamente de rețea. Deci, securitatea arhitecturală a rețelelor ar trebui să cuprindă nu numai elemente conceptuale, așa cum sunt cele prevăzute de standardul ISO 7498-2, ci și specificații despre implementarea serviciilor de securitate.
[2]
3.2 Servicii de securitate
Abordarea securității în sistemele distribuite pleacă de la conceptul de sistem deschis OSI (Open System Interchange) al cărui obiectiv îl constituie interconectarea unor calculatoare eterogene, în așa fel încât să se poată realiza comunicații sigure (fiabile) între procese (aplicații) situate la distanță. Din punctul de vedere al securității, Acest lucru înseamnă: integritatea și protecția resurselor (prin controale adecvate) și implementarea unor servicii și protocoale de securitate.
Serviciile de securitate, controalele și protocoalele au ca scop protejarea resurselor și informațiilor schimbate între procese. Ele trebuie să facă costul obținerii ilegale a unor date sau modificării acestora să fie superior celui de obținere legală, iar timpul cerut pentru aceste acțiuni să fie atât de lung încât datele (informațiile) să-și piardă importanța.
Conform clasificărilor, măsurile de securitate pot fi:
procedurale (ca, de exemplu, selectarea personalului, schimbarea periodică a parolelor etc.);
logice (ca, de exemplu, controlul accesului și criptografia);
fizice (camere speciale, uși blocate etc.).
Termenul de securitate este folosit în sensul minimizării vulnerabilității informațiilor și resurselor. Ele se referă la un complex de măsuri procedurale, logice și fizice destinate să prevină, să detecteze și să corecteze pierderile de informații din sistem.
Principalele probleme de securitate care apar într-un sistem deschis distribuit sunt următoarele:
Schimbarea identității, care apare atunci când entitățile (utilizatori sau programe) reușesc să pătrundă în rețea sub o altă identitate;
Asocieri ilegale, care permit să se realizeze legături logice (asociații) între utilizatorii rețelei prin eludarea politicii de autorizare și autentificare;
Accese neautorizate, care permit unui utilizator sau proces neautorizat să acceadă la obiecte la care nu are dreptul, eludând serviciile de control al accesului;
Refuzul de servicii, apare atunci când utilizatorii legali sunt împiedicați să execute anumite funcții;
Repudierea, care apare atunci când utilizatori ai rețelei refuză să participe la asociații;
Analiza traficului, când entități intruse observă protocoalele, lungimea, frecvența, suma și destinația mesajelor transmise;
Modificarea secvenței mesajelor, care constă din ștergerea, inserarea, reluarea sau reordonarea ilegală a secvenței de mesaje transmise;
Modificarea sau distrugerea datelor;
Modificarea ilegală a programelor, care este realizată de entități cunoscute sub numele de viruși, “cai troieni”, “viermi” etc.
Politica de securitate constă în a decide:
ce amenințări se vor elimina și care rămân;
ce resurse vor fi protejate și la ce nivel;
cu ce mijloace vor fi implementate cerințele de securitate;
cu ce costuri vor fi implementate cerințele de securitate.
După ce s-a stabilit politica de securitate, se vor selecta serviciile de securitate. Acestea sunt funcții individuale, care contribuie la creșterea securității sistemului. Fiecare serviciu de securitate poate fi implementat prin metode variate, numite mecanisme de securitate.
Pentru a implementa și folosi eficient a mecanismele de securitate, sunt necesare o serie de activități numite funcții de gestiune a securității, care cuprind controlul și distribuția informațiilor folosite de serviciile și mecanismele de securitate pentru semnalarea unor evenimente relevante privind securitatea sistemului.
Arhitectura de securitate OSI se referă la 5 elemente majore:
definirea serviciilor de securitate;
definirea mecanismelor de securitate;
principiile de securitate pe nivele;
maparea serviciilor de securitate pe nivele;
maparea mecanismelor de securitate pe servicii de securitate.
Serviciile de securitate sunt concepte abstracte, putând fi folosite pentru a caracteriza cerințele de securitate. Ele diferă de mecanismele de securitate care sunt măsuri concrete, necesare pentru implementarea acestor servicii de securitate.
În ISO 7498-2, cele 7 principii de împărțire pe nivele de securitate sunt descrise pe scurt astfel:
Numărul de alternative pentru serviciile de securitate ce pot fi achiziționate trebuie să fie minim. Acesta este un principiu solid, ce descurajează diversitatea. Totuși, există unele persoane care susțin că arhitectura de securitate OSI nu trebuie să se conformeze acestui principiu;
Serviciile de securitate pot fi folosite numai la sistemul de securitate al unui singur nivel. Acest principiu afirmă că un singur serviciu poate fi comun la mai multe nivele;
Securitatea nu presupune neapărat comunicații suplimentare. Mecanismele de securitate nu trebuie să duplice funcțiile serviciului de comunicații. Acesta este un principiu bun, dar adesea se descoperă că baza sistemului de comunicații este insuficientă, ceea ce înseamnă și o limitare a serviciului de securitate;
Independența oricărui nivel trebuie neapărat respectată;
Trebuie minimizată funcționalitatea bazată pe încredere a sistemului. O consecință a acestui principiu o reprezintă faptul că este esențială înțelegerea noțiunii de funcționare bazată pe încredere într-un sistem sigur;
Atunci când protecția furnizată la un nivel se bazează pe mecanisme de securitate de la un nivel inferior, este extrem de important ca nici un nivel intermediar să nu încalce această dependență;
Serviciile de securitate oferite la un anumit nivel trebuie să fie definite astfel încât să dea posibilitatea adăugării altor module cu servicii, la baza serviciilor de comunicație.
ISO definește cinci servicii principale de securitate 2: autentificare, confidențialitate, controlul accesului, integritate și nerepudiere. În plus, se definește auditul, adică monitorizarea și înregistrarea elementelor de securitate relevante. Fiecare din aceste servicii poate fi implementat la diverse nivele arhitecturale ale modelului OSI. Pentru a asigura securitatea unui nivel pot fi combinate unul sau mai multe servicii care la rândul lor pot fi compuse din câteva sub-servicii și mecanisme.
Autentificarea (Authentication) este un prim serviciu care are două componente:
autentificarea entităților perechi (Peer Entity Authentication) asigură, în momentul realizării unei conexiuni, că o entitate este întradevăr ceea ce pretinde a fi și că dialogul nu reprezintă o reluare a unei înregistrări mai vechi;
autentificarea originii datelor (Data Origin Authentication) asigură faptul că sursa datelor este autentică, fără a conferi însă și protecția împotriva duplicării sau modificării unităților de date.
Controlul accesului (Acces Control) asigură protecția împotriva accesului neautorizat la resursele OSI sau non-OSI prin intermediul OSI. Se aplică la tipuri variate de acces.
Confidențialitatea (Data Confidentiality) asigură protecția datelor prin criptare, realizând de la caz la caz :
confidențialitatea legăturii (Connection Confidentiality), adică confidențialitatea datelor transmise pe o linie orientată pe conexiune;
confidențialitatea neorientată conexiune (Connectionless Confidentiality), care asigură confidențialitatea datagramelor;
confidențialitatea selectivă a câmpurilor (Selective Field Confidentiality), care protejează selectiv anumite câmpuri ale unei datagrame;
confidențialitatea traficului (Traffic Flow Confidentiality), asigurând protecția informației ce derivă din analiza traficului de mesaje.
Integritatea datelor (Data Integrity) are rolul de a combate amenințările active asupra acestora (înlocuire, inserare, ștergere), garantând că datele nu au fost modificate pe durata transmisiei lor. Există mai multe servicii derivate:
integritatea conexiunii cu recuperare (Connection Integrity with Recovery);
integritatea conexiunii fără recuperare (Connection Integrity without Recovery);
integritatea conexiunii cu câmpuri selectate (Selective Field Connection Integrity);
integritatea neorientată conexiune (Connectionless Integrity);
integritatea neorientată conexiune cu câmpuri selectate (Selective Field Connectionless Integrity).
Nerepudierea (Non-repudiation) presupune următoarele două aspecte:
nerepudierea cu probarea originii (Non-repudiation with Proof of Origin) permite receptorului să poată dovedi furnizarea datelor, împiedicâdu-se astfel orice încercare a unui emițător de a nu mai recunoaște transmiterea datelor sau conținutul mesajelor.
nerepudierea cu probarea livrării (Non-repudiation with Proof of Delivery) permite emițătorului să fie convins și să poată proba recepția mesajelor trimise de el, împiedicându-se astfel orice încercare a unui receptor de a nu mai recunoaște primirea datelor sau conținutul mesajelor recepționate.
3.3 Mecanisme de securitate
OSI introduce opt mecanisme de securitate de bază, folosite individual sau combinat pentru a construi servicii de securitate. De exemplu, serviciu de nerepudiere cu probarea livrării poate fi realizat utilizând o combinație potrivită a mecanismelor de integritate a datelor, semnătura digitală și notariat digital. În plus, un mecanism se poate baza pe un alt mecanism. De exemplu, mecanismul de autentificare a schimbului poate folosi mecanismul de criptare și, uneori, mecanismul de notariat (care presupune existența unei a treia părți, căreia i se acordă încredere).
Mecanismul de criptare (Encipherment) are ca scop transformarea datelor astfel încât ele să devină inteligibile numai de către entitatea autorizată (care, în general, păstrează o cheie secretă pentru a le descifra) sau de a transforma datele într-o manieră unică, ce poate aparține numai expeditorului. Numai entitatea autorizată, care deține o cheie secretă, le poate decripta și citi. Acest mecanism este folosit pentru a furniza confidențialitate, dar el poate fi utilizat și pentru asigurarea altor câtorva servicii de securitate. ISO acceptă în criptare atât algoritmi simetrici cât și algoritmi nesimetrici (cu chei publice).
Mecanismul de semnătură digitală (Digital Signature Mechanism) trebuie să garanteze că datele au fost produse chiar de către semnatar. Acest mecanism este deseori folosit de serviciile de integritate și autentificare a originii datelor. Sunt definite două proceduri pentru acest mecanism:
procedura de semnare a unei entități de date;
procedura pentru verificarea semnăturii.
Folosindu-se criptografia asimetrică, semnătura poate fi generată prin calcularea unei funcții de dispersie pentru datele ce trebuie semnate, iar apoi, criptând valoarea rezultată folosindu-se componenta privată a cheii asimetrice de chei a semnatarului. Această valoare depinde momentul emiterii semnăturii, pentru a preveni falsificarea prin retransmitere a datelor respective, precum și de conținutul mesajului. Semnătura trebuie produsă numai pe baza informațiilor personale ale semnatarului (cheia sa privată a algoritmului de cifrare, de exemplu), în timp ce procedura de verificare este făcută publică.
Mecanismul de control al accesului (Access Control Mechanism) controlează accesul entităților la resurse, presupunând cunoscută identitatea entității ce solicită accesul. Acțiunile se produc atunci când este încercat un acces neautorizat, fie prin generarea unei alarme, fie prin simpla înregistrare a incidentului. Politica de control al accesului poate fi bazată pe unul sau mai multe din următoarele soluții:
lista/matricea drepturilor de acces (entitate, resursă);
parole;
capabilități;
etichete de securitate;
durata accesului;
timpul de încercare a accesului;
ruta (calea de încercare a accesului).
Mecanismul de integritate a datelor (Data Integrity Mechanism) are rolul de a asigura integritatea unităților de date (în întregime sau parțial – numai un câmp), împiedicând modificarea, ștergerea sau amestecarea datelor pe durata transmisiei. Acest mecanism presupune două proceduri:
una pentru emisie. Expeditorul adaugă la unitatea de date o informație adițională care depinde numai de datele transmise(“checkvalue” – o sumă de control criptată sau nu)
una pentru recepție: partea receptoare generează aceeași sumă de control care se compară cu cea primită. Mecanismul de ștampile de timp (time stamping) poate fi folosit pentru transmisiile neorientate conexiune în scopul asigurării actualității datelor.
Mecanismul de autentificare mutuală (Authentication Exchange Mecanism) este folosit pentru a dovedi, reciproc, identitatea entităților. Se pot folosi pentru acestea parole sau tehnici criptografice (parole cifrate, cartele magnetice sau inteligente, caracteristici biometrice, biochimice). Când sunt folosite tehnicile criptografice, acestea sunt deseori combinate cu protocoale cu interblocare, "hand-shaking", pentru protecția împotriva înlocuirii (reluării) datelor. Principiul este următorul: entitatea A trimite identitatea sa (cifrată sau nu) entității B, care generează o valoare aleatoare și o o trimite (cifrat sau nu) lui A. A trebuie să cifreze valoarea aleatoare cu cheia sa privată și să o trimită lui B, care va verifica corectitudinea acesteia.
Mecanismul de "umplere" a traficului (Traffic Padding Mechanism) este folosit pentru a asigura diferite nivele de protecție împotriva analizei de trafic și implică una din următoarele metode:
generarea unui trafic fals (rareori întrebuințată datorită costurilor pe care le implică);
umplerea pachetelor de date transmise cu date redundante;
transmiterea de pachete și spre alte destinații în afara celei dorite;
Mecanismul de control al rutării (Routing Control Mechanism) se bazează pe faptul că într-o rețea, anumite rute pot fi considerate mai sigure față de altele; de aceea, acest mecanism permite a se alege, fie într-un mod dinamic, fie într-un mod prestabilit, cele mai convenabile rute, în concordanță cu criteriile de securitate (importanța datelor și confidențialitatea legăturii).
Acest mecanism trebuie folosit și ca suport pentru serviciile de integritate cu recuperare a datelor (de exemplu, pentru a permite selecția unor rute alternative în vederea protejării în cazul unor atacuri ce ar perturba comunicația)
Mecanismul de notarizare (Notarization Mechanism). Acest mecanism presupune stabilirea unei a treia părți (notar) în care au încredere toate entitățile, care au rolul de a asigura garanții în privința integrității, originii sau destinației datelor. Atunci când se folosește acest mecanism, datele sunt transferate între entități prin intermediul notarului.
4. Algoritmi criptografici
Criptografia este știința scrierilor secrete. Ea stă la baza multor servicii și mecanisme de securitate, folosind metode matematice pentru transformarea datelor, în intenția de a ascunde conținutul acestora sau de a le proteja împotriva modificării. Criptografia are o lungă istorie, confidențialitatea comunicării fiind o cerință a tuturor timpurilor. Dacă ar trebui să alegem un singur exemplu al criptografie “clasice”, acesta ar fi cifrul lui Cezar, nu atât datorită celebrității împăratului roman, de care se leagă folosirea lui, ci pentru că principiul său de bază, al substituției, s-a menținut nealterat aproape două milenii.
Multă vreme, eforturile criptografilor au fost dirijate spre întărirea cifrurilor prin complicarea algoritmului, combinând substituții și transpoziții asupra unor simboluri sau asupra unor blocuri (grupe de simboluri). Două sunt elementele ce au marcat însă cotitura semnificativă în dezvoltarea metodelor criptografice.
Primul este legat de dezvoltarea rețelelor de calculatoare, al căror stimulent extraordinar s-a manifestat atât prin presiunea exercitată de tot mai mulți utilizatori (a căror dorință obiectivă este păstrarea secretului și a siguranței asupra poștei electronice private, a transferului electronic de fonduri și a altor aplicații) cât și prin potențarea gamei de instrumente folosite efectiv în execuția algoritmilor de cifrare. Utilizarea calculatoarelor electronice a permis folosirea unor chei de dimensiuni mai mari, sporindu-se astfel rezistența la atacuri criptoanalitice. Când cheia secretă are o dimensiune convenabilă, și este suficient de frecvent schimbată, devine practic imposibilă spargerea cifrului, chiar dacă se cunoaște algoritmul de cifrare. Pe această idee se bazează și standardul american de cifrare a datelor – DES (Data Encryption Standard) –, larg utilizat de guvernul SUA și de diverse companii internaționale. Propus într-o formă inițială de IBM în 1975, DES a rezistat evaluării făcute de “spărgătorii de cifruri” de la US National Security Agency (NSA), care au recomandat doar reproiectarea anumitor componente (casete de substituție). DES a fost adoptat ca standard federal în 1977 și a fost folosit intens datorită performanțelor de viteză atinse la cifrare (peste 100 Mbps). Se știe însă că s-a reușit spargerea DES (este adevărat că pentru aceasta a fost folosit o mare cantitate de resurse de calcul), iar experiența a arătat că orice schemă criptografică are o viață limitată și că avansul tehnologic reduce, mai devreme sau mai târziu, securitatea furnizată de aceasta.
Al doilea moment important în evoluția criptografiei moderne l-a constituit adoptarea unui principiu diferit de acela al cifrării simetrice. Whitfield Diffie și Martin Hellman, cercetători la Universitatea Stanford din California, prin articolul “New Directions in Criptography”, publicat în 1976 în revista “IEEE Transactions on Information Theory”, au pus bazele “criptografiei asimetrice” cu chei publice. În locul unei singure chei secrete, criptografia asimetrică folosește două chei diferite, una pentru cifrare, alta pentru descifrare. Deoarece este imposibilă deducerea unei chei din cealaltă, una din chei este făcută publică, fiind pusă la îndemâna oricui dorește să transmită un mesaj cifrat. Doar destinatarul, care deține cea de-a doua cheie, poate descifra și utiliza mesajul. Tehnica cheilor publice poate fi folosită și pentru autentificarea mesajelor, fapt care i-a sporit popularitatea. Nu este deci de mirare că guvernul SUA a inițiat adoptarea unui standard de semnătură digitală bazat pe conceptul de cheie publică. Acest demers a generat controverse, soldate chiar cu acuze între organizațiile implicate. Până în decembrie 1990, Institutul Național de Standarde și Tehnologie al SUA (NIST) recomanda pentru adoptare ca standard metoda RSA, prezentă deja în industrie. Dar nouă luni mai târziu, în august 1991, NIST a avansat un cu totul alt algoritm, bazat pe o metodă cu chei publice, publicată de Taher El Gamal în 1986. Noua propunere, denumită DSS (Digital Signature Standard), a fost dezvoltată de Agenția de Securitate Națională a SUA (NSA National Security Agency). Ea a dezamăgit însă, nu datorită performanțelor, ci “grație” autorului, care nu este doar proiectant, ci și spărgător de cifruri, ceea ce a stârnit, inevitabil, suspiciuni.
Un cifru se definește ca transformarea unui mesaj clar sau text clar în mesaj cifrat sau criptogramă. Procesul de transformare a textului clar în text cifrat se numește cifrare sau criptare, iar transformarea inversă, a criptogramei în text clar, are denumirea de descifrare sau decriptare. Atât cifrarea cât și descifrarea sunt controlate de către una sau mai multe chei criptografice. Criptanaliza studiază metodele de spargere a cifrurilor, adică de determinare a textului clar sau a cheii de cifrare din criptogramă.
Un sistem criptografic (criptosistem) este compus din:
M – text clar;
C – text cifrat;
2 funcții inverse E( ) și D( );
un algoritm care produce cheile Ke și Kd astfel încât:
Există două tipuri de sisteme criptografice:
simetrice (cu cheie secretă) care folosesc aceeași cheie, atât la cifrarea cât și la descifrarea mesajelor;
asimetrice (cu chei publice) care folosesc chei distincte de cifrare și descifrare (dar legate una de alta). Una din chei este ținută secretă și este cunoscută doar de proprietarul ei. A doua cheie (perechea ei) este făcută publică, de unde și numele de criptografie cu cheie publică.
4.1 Algoritmi criptografici cu cheie secretă (simetrici)
În cazul sistemelor criptografice cu cheie secretă (simetrice) se folosește aceeași cheie, atât la cifrarea cât și la descifrarea mesajelor. Cheia este ținută secretă și folosită în comun de către emițător și receptor (vezi Figura 4.1).
Figura 4.1 Cifrarea simetrică [9]
Definiție: un algoritm cu cheie secretă (simetric) este compus din două funcții E( ) și D( ), care utilizează chei caracterizate de următoarele proprietăți:
Ke=Kd=K;
Ke și Kd sunt secrete.
Sistemele simetrice sunt bine cunoscute, conduc la performanțe bune și sunt folosite pentru protecția datelor utilizatorilor. Se pot aminti aici “criptosisteme simetrice” cunoscute cum ar fi DES (Data Encryption Standard) sau IDEA (International Data Encryiption Algorithm).
Securitatea criptării simetrice depinde de protecția cheii; managementul acestora este un factor vital în securitatea datelor și cuprinde următoarele aspecte:
Generarea cheilor. Pot fi folosite, cu o tabelă de conversie, proceduri manuale (datul cu banul, aruncarea zarurilor), dar numai pentru generarea cheilor master (folosite pentru cifrarea cheilor). Pentru cheile de sesiune sau de terminal sunt necesare proceduri automate, de generare (pseudo)aleatoare, care se pot baza pe amplificatoare de zgomot, funcții matematice și diverși parametri (numărul curent al apelurilor sistem, data, ora etc.);
Distribuția cheilor. Cu privire la transportul cheii secrete, problema este în general rezolvată prin folosirea unei alte chei, numită cheie terminal, pentru a o cripta. Cheile de sesiune – generate numai pentru o comunicație – sunt transportate criptat cu cheile terminal care, de asemenea, pot fi protejate (când sunt memorate) cu altă cheie, numită cheie master;
Memorarea cheilor. Utilizarea algoritmilor simetrici, în cazul a N entități care doresc să comunice, implică N(N-1)/2 chei de memorat într-un mod sigur. În realitate, nu toate legăturile bidirecționale se stabilesc în același timp; este motivul pentru care se utilizează cheile de sesiune. Cheile terminal, care criptează numai date foarte scurte (chei de sesiune), sunt foarte dificil de atacat. Când sunt folosite chei publice, X.500 pare cea mai bună soluție pentru managementul cheilor. Cheile publice sunt păstrate în directoare X.500, ca certificate semnate cu o semnătură digitală a Autorității de certificare (Certificate Authority).
4.1.1 DES
4.1.1.1 Descrierea DES
Sistemul DES (Data Encryption Standard), cunoscut sub numele de DEA (Data Encryption Algorithm) de ANSI (American National Standard Institute) și sub numele de DEA-1 de ISO, este primul standard dedicat protecției criptografice a datelor pe calculator. A fost studiat de IBM începând cu 1970 pentru NBS (National Bureau of Standards). După câteva modificări realizate împreună de NBS și NSA (National Security Agency), a fost publicat ca FIPS PUB 46 (Federal Information Processing Standards Publication – 46) în 1977 și intitulat DES. Ulterior, a fost adoptat în 1981 de ANSI ca standard ANSI X3.92 și intitulat, așa cum am amintit, DEA. Există diferențe între standarde; de exemplu, FIPS autorizează numai implementare hard. DES este un cifru bloc, care criptează date în blocuri de 64 de biți. Un bloc de 64 de biți de text clar constituie date de intrare ale algoritmului, iar ca date de ieșire se obține un bloc de 64 de biți de text cifrat. Lungimea cheii este de 56 de biți (de obicei ea se exprimă ca un număr de 64 de biți, dar fiecare al optulea este utilizat pentru verificarea parității impare a octeților care formează cheia, reprezentând cei mai puțin semnificativi biți ai acestor octeți). Acești 56 de biți sunt generați aleator și pot fi modificați în orice moment. O serie de astfel de numere pot fi considerate chei slabe, dar ele pot fi ușor evitate. Această cheie este păstrată de către toți membrii unui grup de utilizatori care, astfel, pot cifra/descifra toate datele transmise de la unii la alții.
Figura 4.2 Sistemul de cifrare DES [20], [32]
Privit în ansamblu, algoritmul nu este altceva decât o combinație a două tehnici elementare de criptare: “confuzie” și “difuzie”. Construcția fundamentală a unui bloc DES este o combinație unică a acestor două tehnici (o substituție urmată de o permutare) asupra textului, bazată pe cheie. Această construcție este cunoscută sub numele de rundă. DES este compus din 16 runde; acestea aplică aceeași combinație de tehnici asupra blocului de text clar de 16 ori (vezi Figura 4.2).
4.1.1.2 Prezentarea algoritmului
DES operează pe blocuri de text clar de 64 de biți. După o permutare inițială, blocurile sunt sparte în două jumătăți, dreaptă și stângă, fiecare de câte 32 de biți. Urmează apoi 16 runde de operații identice, numite funcții de cifrare f, în care datele sunt combinate cu cheia. După a șaisprezecea rundă, cele două jumătăți sunt recombinate, algoritmul încheindu-se cu o permutare finală, reprezentând inversa permutării inițiale.
În fiecare rundă (vezi figura 4.3), biții cheii sunt deplasați (șiftați), după care sunt aleși 48 de biți din cei 56 ai cheii. Jumătatea dreaptă a blocului de date este expandată la 48 de biți prin intermediul unei permutări expandate, apoi adunată modulo 2 cu 48 de biți de cheie deplasați și permutați, și aplicată la intrările a 8 cutii S, la ieșirea cărora se obțin 32 de biți noi, care sunt permutați din nou. Aceste 4 operații constituie funcția de cifrare f. Blocul de biți de la ieșirea funcției f este apoi combinat cu jumătătea stângă prin intermediul unei alte adunări modulo 2. Rezultatul acestor operații devine noua jumătate dreaptă. Această succesiune de operații este repetată de 16 ori, rezultând 16 runde ale algoritmului DES.
Figura 4.3 O rundă a algoritmului DES [20], [32]
Dacă notăm:
Bi – rezultatul iterației cu numărul i;
Li și Ri – jumătățile stângă, respectiv dreaptă, corespunzătoare lui Bi ;
Ki – cheia de 48 de biți ai rundei i;
f – funcția care realizează toate operațiile de substituție, permutare și adunare modulo 2 cu cheia, atunci prelucrările unei runde arată astfel:
Ultima iterație este puțin diferită de celelalte, fiind definită de ecuațiile:
Pentru definirea funcției de cifrare f vom defini în continuare câteva operații.
Permutarea inițială (IP)
Permutarea inițială intervine înaintea primei runde; ea transpune blocul de la intrare așa cum este descris în Tabelul 4.1. Acest tabel, asemeni tuturor tabelelor din acest capitol, trebuie citit de la stânga la dreapta, de sus în jos. De exemplu, permutarea inițială mută bitul 58 din textul clar pe poziția 1, bitul 50 pe poziția 2, bitul 42 pe poziția 3, și așa mai departe.
[7], [20]
Permutarea inițială și permutarea finală corespunzătoare nu afectează securitatea algoritmului (scopul său principal este de a ușura încărcarea datelor reprezentând textul clar și textul cifrat într-un chip DES în formă de octeți. Trebuie amintit că microprocesoarele DES lucrează pe magistrale de 16 sau 32 de biți. Întrucât această permutare este dificil de realizat soft (altfel banal din punct de vedere hard), multe implementări software renunță atât la permutarea inițială, cât și la cea finală. Deși acest nou algoritm nu este mai puțin sigur decât DES, el nu urmează standardului DES, prin urmare nu mai poate fi numit DES.
Transformările cheii
Inițial, cheia DES de 64 de biți este redusă la o cheie de 56 de biți, prin ignorarea fiecărui al optulea bit. Acest lucru este descris în Tabelul 4.2. Acești biți pot fi folosiți pentru verificarea parității, pentru a se asigura valabilitatea cheii. După extragerea celor 56 de biți, este generată o altă subcheie de 48 de biți pentru fiecare din cele 16 runde ale DES. Aceste subchei, Ki, sunt determinate în felul următor (vezi Figura 4.4, ([7], [20])).
Figura 4.4 Generarea cheii pentru o iterație [7], [20]
În prima fază, cheia de 56 de biți este divizată în două jumătăți de 28 de biți. Apoi, cele două jumătăți sunt deplasate circular spre stânga cu unul sau doi biți, în funcție de rundă. Modalitatea de deplasare este prezentată în Tabelul 4.3 ([7], [20]).
După deplasare, sunt selectați 48 din cei 56 de biți. Întrucât această operație realizează permutarea ordinii biților precum și alegerea unui subset de biți, ea este denumită permutare comprimată. Această operație furnizează un subset de 48 de biți. În Tabelul 4.4 ([7], [20]) este descrisă permutarea comprimată. De exemplu, bitul din poziția 33 a cheii deplasate se mută pe poziția 35, iar bitul din poziția 18 a cheii deplasate este ignorat.
Datorită deplasării, un subset diferit de biți este utilizat pentru fiecare subcheie. Fiecare bit este utilizat în aproximativ 14 din cele 16 subchei, dar nu toți biții sunt utilizați de exact același număr de ori.
Permutarea expandată
Această operație expandează jumătatea dreaptă a datelor, Ri, de la 32 la 48 de biți. Întrucât această operație modifică ordinea biților, dar și repetă anumiți biți, ea poartă numele de permutare expandată. Această operație are două scopuri: aduce jumătatea dreaptă la dimensiunea cheii pentru aplicarea unei operații de adunare modulo 2 și furnizează un rezultat de lungime mai mare, care poate fi comprimat pe timpul operației de substituție. Oricum, nici unul dintre acestea nu reprezintă principalul scop criptografic. Prin permiterea unui singur bit să influențeze două substituții, dependența biților de ieșire de biții de intrare se răspândește foarte repede, lucru numit efect de avalanșă. DES este proiectat să atingă condiția de a avea fiecare bit de text cifrat dependent de fiecare bit de text clar și de fiecare bit al cheii cât mai repede posibil.
Figura 4.5 ilustrează permutarea expandată. Aceasta este uneori numită cutie E. Pentru fiecare bloc de 4 biți de la intrare, primul și al patrulea bit reprezintă fiecare câte doi biți din blocul de ieșire, în timp ce al doilea și al treilea bit reprezintă fiecare câte unul singur. Tabelul 4.5 prezintă corespondența între pozițiile de intrare și pozițiile de ieșire. De exemplu, bitul din poziția 3 a blocului de intrare se deplasează în poziția 4 a blocului de ieșire, iar bitul din poziția 21 a blocului de intrare se deplasează în poziția 30 și în poziția 32 a blocului de ieșire.
Cu toate că blocul de ieșire are dimensiuni mai mari decât blocul de intrare, fiecare bloc generează un bloc de ieșire unic.
Figura 4.5 Permutarea expandată [7], [20]
Substituțiile cu cutii S
După ce cheia comprimată este adunată XOR cu blocul expandat, cei 48 de biți rezultați sunt supuși unei operații de sustituție. Substituțiile sunt realizate de opt cutii de substituție, numite cutii S. Fiecare cutie S are intrarea de 6 biți și ieșirea de 4 biți, existând opt cutii S diferite. (Memoria totală necesară celor opt cutii S ale DES este de 256 de biți.) Cei 48 de biți sunt divizați în sub-blocuri de 6 biți. Asupra fiecărui bloc separat operează o cutie S diferită: primul bloc este prelucrat de cutia S 1, al doilea bloc este prelucrat de cutia S 2, și așa mai departe (vezi Figura 4.6).
Figura 4.6 Substituțiile cu cutii S [20]
Fiecare cutie S este o matrice de 4 linii și 16 coloane. Fiecare element din cutie este un număr de 4 biți. Cei 6 biți de intrare din cutia S specifică numerele liniei și coloanei care trebuie căutate pentru ieșire. Tabelul 4.6 prezintă toate cele 8 cutii S.
Biții de intrare specifică un element dintr-o cutie S într-o modalitate particulară. Să considerăm că cei 6 biți de la intrare sunt notați cu b1, b2, b3, b4, b5 și b6. Biții b1 și b6 sunt combinați pentru a forma un număr de 2 biți, de la 0 la 3, care corespunde unei linii din tabel. Cei patru biți din mijloc, b2 până la b5, sunt combinați pentru a forma un număr de 4 biți, de la 0 la 15, care corespunde unei coloane din tabel.
De exemplu, să presupunem că la intrarea cutiei S 6 avem secvența 110011. Primul și ultimul bit se combină, formând 11, care corespunde liniei trei a cutiei S 6. Cei 4 biți din mijloc se combină, formând 1001, care corespunde coloanei 9 a aceleiași cutii S. Elementul de pe linia 3, coloana 9, a cutiei S 6 este 14. Astfel, valoarea 110011 este substituită cu 1110.
Sunt, desigur, mult mai ușor de implementat cutiile S decât vectori de 64 de elemente, din punct de vedere software. Sunt necesare unele rearanjări ale elementelor pentru a realiza acest lucru, dar nu este dificil. (Nu este suficientă doar modificarea indicilor, fără rearanjarea elementelor. Cutiile S sunt proiectate cu mare grijă). Oricum, acest mod de descriere a cutiilor S oferă o imagine clară a modului în care ele operează. Fiecare cutie S poate fi văzută ca o funcție de substituție pe numere de 4 biți: se introduc b2 până la b5 și se extrage un rezultat pe 4 biți. Biții b1 și b6 provin de la blocurile vecine; ei selectează una din cele 4 funcții de substituție posibile în fiecare cutie S.
Substituțiile realizate de cutiile S reprezintă elementul critic în DES. Celelalte operații ale algoritmului sunt liniare, și deci ușor de analizat. Cutiile S sunt neliniare și, mai mult decât oricare alte operații, oferă securitatea DES.
[20]
Permutarea cu cutie P
Cei 32 de biți de la ieșirea cutiilor S sunt permutați conform unei cutii P. Această permutație duce fiecare bit de intrare pe o altă poziție la ieșire; nici un bit nu este utilizat de două ori și nici un bit nu este ignorat. Aceasta se numește permutare directă sau, pur și simplu, permutare. Tabelul 4.7 prezintă pozițiile pe care se mută fiecare bit. De exemplu, bitul 21 se mută pe poziția 4, în timp ce bitul 4 se mută pe poziția 31.
În sfârșit, rezultatul permutării este adunat modulo 2 cu jumătatea stângă a blocului de 64 de biți inițial. Apoi cele două jumătăți sunt comutate și începe o nouă rundă.
Operațiile prezentate mai sus definesc funcția de cifrare f (vezi Figura 4.7). Fie E funcția de expandare, S1, S2,…S8 cele 8 cutii S și P permutarea cu cutie P prezentate mai sus. Pentru a defini funcția f(Ri-1,Ki), conform celor de mai sus, vom preciza mai întâi blocurile B1, B2,…B8, de 6 biți fiecare, ca fiind:
În acest caz, blocul f(Ri-1,Ki) poate fi definit ca:
Figura 4.7 Schema de realizare a funcției f la DES [7], [20]
Permutarea finală
Permutarea finală reprezintă inversa permutării inițiale și este descrisă în Tabelul 4.8. Trebuie menționat că jumătatea dreaptă și cea stângă nu își schimbă locul după ultima rundă a algoritmului; în schimb blocul concatenat R16L16 este folosit ca bloc de intrare pentru permutarea finală. Nu se întâmplă nimic deosebit aici; schimbarea locurilor între cele două jumătăți și deplasarea conform permutării finale trebuie să producă același rezultat. Acesta este motivul pentru care algoritmul poate fi folosit atât pentru criptare cât și pentru decriptare.
Descifrarea DES
După toate aceste operații de substituție, permutare, adunare modulo doi și deplasare, se poate crede că algoritmul de descifrare este complet diferit de algoritmul de cifrare. Dimpotrivă, aceste operații variate au fost astfel alese încât ele generează o proprietate foarte utilă: același algoritm funcționează atât pentru criptare cât și pentru decriptare.
Cu DES este posibil să se utilizeze aceeași funcție pentru a cripta și a decripta un bloc de date. Singura diferență este că cheile trebuie utilizate în ordine inversă. Astfel, dacă cheile de criptare pentru fiecare rundă sunt K1, K2, K3, … K16, atunci cheile de decriptare sunt K16, K15, K14, …K1. Algoritmul de generare a cheilor utilizate pentru fiecare rundă este de asemenea circular. De data aceasta însă, deplasarea cheii se face spre dreapta, și numărul de poziții deplasate este 0, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1.
Primul pas în descifrare este aplicarea permutării inițiale, care dezleagă ultimul pas din operația de cifrare (permutarea finală, care este inversa permutării inițiale). Apoi se va genera în sens invers:
Se va pleca de la R16 și L16 generându-se la sfârșit R0 și L0. În final, blocul de 64 de biți este supus permutării inverse.
4.1.1.3 Chei slabe (ineficiente)
Datorită modului în care cheia inițială este modificată pentru a se putea extrage câte o subcheie pentru fiecare rundă, unele chei inițiale sunt chei slabe. Trebuie să ne amintim că valoarea inițială este împărțită în două jumătăți și fiecare jumătate este deplasată independent. Dacă toți biții din fiecare jumătate sunt fie 0, fie 1, atunci cheia utilizată pentru orice ciclu al algoritmului este aceeași pentru toate ciclurile. Aceasta se poate întâmpla dacă cheia este formată în întregime din 1, din 0, sau dacă o jumătate a cheii este formată în întregime din 1 iar cealaltă din 0. De asemenea, două dintre cheile slabe au alte proprietăți care le fac și mai puțin sigure 1. Cele patru chei slabe sunt prezentate în Tabelul 4.9, [1].
În plus, unele perechi de chei cifrează textul clar astfel încât textul cifrat este identic. Cu alte cuvinte, o cheie din pereche poate decripta mesaje criptate cu altă cheie din pereche. Acest fapt se datorează modului în care DES generează subcheile; în loc de a genera 16 subchei diferite, aceste chei generează doar două subchei diferite. Fiecare dintre aceste subchei este folosită de opt ori în algoritm. Aceste chei poartă numele de chei semislabe, și sunt prezentate în notație hexazecimală în Tabelul 4.10, [1].
Unele chei produc doar patru subchei, fiecare utilizată de câte 4 ori în algoritm. Aceste chei posibil slabe sunt listate în Tabelul 4.11, [1].
4.1.1.4 Variante DES
DES multiplu
Figura 4.8 Triplu DES [7]
Anumite implementări ale DES folosesc DES-triplu (vezi Figura 4.8). Deoarece DES nu are structură de grup, textul cifrat rezultat este mult mai greu de spart folosind căutarea exhaustivă: sunt necesare 2112 încercări în loc de 256.
DES cu subchei independente
O altă variantă a DES este folosirea de subchei diferite pentru fiecare rundă, toate extrase din cheia principală și nu derivate din aceasta, ca în variantă clasică. Deoarece la fiecare din cele 16 runde se folosește o subcheie de 48 de biți, rezultă că vom avea o cheie de 768 de biți. Această variantă mărește semnificativ dificultatea unui atac obișnuit la 2768 încercări, făcându-l impracticabil.
DESX
DESX este o variantă de DES dezvoltată de RSA Data Security Inc. DESX utilizează o tehnică numită transparență. Pe lângă cheia de 56 de biți a DES-ului, DESX mai adaugă o cheie de 64 de biți, numită cheie transparentă. Acești 64 de biți sunt sumați modulo 2 cu textul clar înainte de începerea algoritmului DES propriu-zis. După ultima rundă a DES-ului, se face suma modulo 2 între rezultat și “cheia transparentă”. Astfel, DESX este mult mai rezistent decât DES la un atac obișnuit. Această variantă îmbunătățește securitatea la atacurile prin criptanaliză diferențială și liniară, fiind necesare 261 perechi alese de text clar.
DES generalizat (GDES)
GDES a fost proiectat deopotrivă pentru a mări viteza DES-ului și pentru a întări algoritmul. Dimensiunea blocului se mărește, în timp ce numărul de calcule rămâne constant.
Această variantă operează cu blocuri de text clar de dimensiune variabilă. Blocurile de text clar sunt împărțite în q sub-blocuri de 32 de biți; q este egal cu raportul dintre dimensiunea blocului și 32. Funcția f este calculată pentru fiecare rundă asupra blocului cel mai din dreapta. Rezultatul este însumat modulo 2 cu toate celelalte părți, care apoi sunt rotite la dreapta. GDES are un număr variabil de runde, n. Dacă se iau, de exemplu, q=2 și n=16, se obține DES. Biham și Shamir 8 au arătat că, folosind criptanaliza diferențială, GDES cu q=8 și n=16 poate fi spart cu numai 6 perechi alese de text clar. Dacă se folosesc subchei independente, sunt necesare 16 perechi alese de text clar. Pentru q=8 și n=31, sunt necesare 500.000 de perechi alese de text clar. Chiar dacă q=8 și n=64, GDES oferă mai puțină securitate decât DES: sunt necesare 249 perechi alese de text clar pentru spargerea acestuia.
În concluzie, orice schemă GDES este mai rapidă decât DES, dar oferă mai puțină securitate decât DES.
DES cu cutii S alternative
O serie de alte variante ale DES-ului, fie au construit cutii S variabile, fie au modificat cutiile S. Biham și Shamir au arătat 8 că alegerea cutiilor S originale (ale standardului DES) nu a fost întâmplătoare: acestea au fost optimizate împotriva atacurilor care folosesc criptanaliza diferențială.
RDES
RDES este o variantă care înlocuiește inversarea celor două jumătăți, dreaptă și stângă, la sfârșitul fiecărei runde cu o inversare dependentă de cheie. Schimbările sunt prestabilite, depinzând numai de cheie. Aceasta înseamnă că cele 15 inversări dependente de cheie provin din 215 posibilități, și că varianta nu este rezistentă la criptanaliza diferențială. RDES are un mare număr de chei slabe. De fapt, aproape fiecare cheie este mai slabă decât o cheie a DES-ului clasic.
O idee mai bună este de a face inversări numai în jumătatea dreaptă, la începutul fiecărei runde. O altă idee mai bună este de a face inversări dependente de datele de intrare și nu de o funcție statică dependentă de cheie. Există un număr mare de variante posibile: RDES-1, RDES-2, RDES-3, RDES-4 1.
DES cu cutii S dependente de cheie
Criptanaliza liniară și diferențială funcționează doar dacă analistul cunoaște compunerea cutiilor S. Dacă cutiile S sunt dependente de cheie și sunt alese printr-o metodă criptografică puternică, atunci criptanaliza lininiară și cea diferențială sunt mult mai dificil de realizat. Totuși, aceste cutii S generate aleator au caracteristici liniare și diferențiale foarte slabe, chiar dacă ele sunt secrete.
Iată o metodă de a utiliza 48 de biți de cheie adiționali pentru a genera cutii S care să fie rezistente atât la criptanaliza diferențială cât și liniară 1:
Se rearanjează cutiile S ale DES-ului: 24673158;
Se selectează 16 biți din cei rămași din cheie. Dacă primul este 1, se inversează primele două linii ale cutiei S 1 cu ultimele două linii ale aceleiași cutii S. Dacă al doilea bit este 1, se inversează primele opt coloane ale cutiei S 1 cu ultimele opt. Se procedează la fel cu cutia S 2, utilizându-se al treilea și al patrulea bit, și așa mai departe până la cutia S 8;
Se iau cei 32 de biți care au mai rămas din cheie. Primii patru se adună modulo 2 cu fiecare element al cutiei S 1, următorii patru cu fiecare element al cutiei S 2 și așa mai departe.
Complexitatea unui atac prin criptanaliză diferențială împotriva acestui sistem este de 251; aceea a unui atac prin criptanaliză liniară este de 253. Complexitatea unei căutări exhaustive este de 2102.
Ce este interesant cu această variantă a DES-ului este că ea poate fi implementată în realizările hardware existente. Există distribuitori de componente care vând chip-uri DES, acestea având posibilitatea de a încărca cutii S. Metoda de generare a cutiilor S poate fi făcută în afara chip-ului, apoi aceste cutii S pot fi încărcate în circuit. Criptanaliza liniară și cea diferențială necesită prea multe texte clar cunoscute, de aceea devin inutilizabile în acest caz, iar un atac brut este inimaginabil.
4.1.2 IDEA
Algoritmul IDEA a fost realizat în Elveția de Xuejia Lai și James Massey în 1990, fiind la ora actuală, unul dintre algoritmii criptografici simetrici cei mai siguri din lume. Inițial s-a numit PES (Proposed Encription Standard). Anul următor, după ce Eli Biham și Adi Shamir au introdus criptanaliza diferențială 8, autorii au întărit acest cifru împotriva atacurilor, numind noul algoritm IPES (Improuved Proposed Encription Standard). IPES și-a schimbat numele în IDEA (International Data Encryption Algorithm ) în 1992.
IDEA se bazează pe fundamente teoretice impresionante și, deși criptanaliza a făcut destule progrese, algoritmul rămâne în continuare puternic. Conform multor opinii 1, 2, acest algoritm este cel mai bun și mai sigur dintre cele disponibile publicului la momentul actual.
Viitorul lui IDEA nu este încă clar. Deocamdată nu există o grabă în a-l adopta ca înlocuitor al lui DES, pe de o parte datorită faptului că este patentat și este necesară o licență pentru aplicațiile comerciale, iar pe de altă parte datorită faptului că utilizatorii așteaptă în continuare să vadă modul în care algoritmul va face față dezvoltării criptanalizei.
Privire generală asupra IDEA
IDEA este un cifru bloc; el operează pe blocuri de 64 biți. Un bloc de 64 biți de text clar (plaintext) este transformat într-un bloc de 64 biți de text cifrat (ciphertext). Cheia este de 128 biți. Același algoritm este utilizat atât pentru criptare cât și pentru decriptare.
Ideea de proiectare a algoritmului IDEA este aceea de a “combina operațiile din diferite grupuri algebrice”. Există trei grupuri algebrice ale căror operații sunt combinate în IDEA și ele sunt simplu de implementat, atât hard, cât și soft:
XOR ;
Adunare modulo 216 (ignorând orice overflow);
Multiplicare modulo 216 + 1 (ignorând orice overflow). Această operație poate fi văzută ca o cutie S pentru IDEA.
Acestea sunt singurele operații folosite de algoritm; nu există permutări. Deoarece toate aceste operații sunt executate pe sub-blocuri de16 biți, acest algoritm este foarte eficient în implementările realizate cu procesoare pe 16 biți.
Descrierea algoritmului IDEA
Modul de operare a algoritmului este reprezentat în Figura 4.9. La intrarea în algoritm, blocurile de date de 64 biți sunt divizate în sub-blocuri de 16 biți, pe care le notăm cu X1, X2, X3 și X4. Aceste patru sub-blocuri împreună cu alte șase sub-blocuri de câte 16 biți din cheie, notate Z1,…, Z6, reprezintă intrarea pentru prima rundă a algoritmului. Există opt runde în total. În fiecare rundă, secvența operațiilor este după cum urmează:
(1) T1 = X1 Z1 : multiplicarea sub-blocului X1 cu prima subcheie
(2) T2 = X2+ Z2 : adunarea sub-blocului X2 cu a doua subcheie
(3) T3 = X3+ Z3 : adunarea sub-blocului X3 cu a treia subcheie
(4) T4 = X4 Z4 : multiplicarea sub-blocului X4 cu a patra subcheie
(5) T5 = T1 T3 : XOR între rezultatele de la pașii (1) și (3)
(6) T6 = T2 T4 : XOR între rezultatele de la pașii (2) și (4)
(7) T7 = T3 Z5 : multiplicarea rezultatului de la pasul (5) cu a cincea subcheie
(8) T8 = T6+ T7 : adunarea rezultatelor de la pașii (6) și (7)
(9) T9 = T8 Z6 : multiplicarea rezultatului de la pasul (8) cu a șasea subcheie
(10) T10= T7+ T9 : adunarea rezultatelor de la pașii (7) și (9)
(11) Y1 = T1 T9 : XOR între rezultatele de la pașii (1) și (9)
(12) Y2 = T3 T9 : XOR între rezultatele de la pașii (3) și (9)
(13) Y3 = T2 T10 : XOR între rezultatele de la pașii (2) și (10)
(14) Y4 = T4 T10 : XOR între rezultatele de la pașii (4) și (10)
Ieșirea unei runde este formată din ultimele patru sub-blocuri, rezultate în urma execuției ultimilor pași. Se inversează cele două blocuri interioare (cu excepția ultimei runde) și, ceea ce rezultă, este intrarea pentru runda următoare.După opt runde, iată care este transformarea finală de ieșire:
(1) Y1 = X1 Z1 : multiplicarea sub-blocului X1 cu prima subcheie
(2) Y2 = X2+ Z2 : adunarea sub-blocului X2 cu a doua subcheie
(3) Y3 = X3+ Z3 : adunarea sub-blocului X3 cu a treia subcheie
(4) Y4 = X4 Z4: multiplicarea sub-blocului X4 cu a patra subcheie
Figura 4.9 Cifrarea bloc cu IDEA [8]
În final, cele patru sub-blocuri sunt concatenate pentru a produce blocul text cifrat.
Crearea sub-blocurilor de 16 biți din cheie este de asemenea ușoară. Algoritmul folosește 52 dintre ele (șase pentru fiecare dintre cele opt runde plus patru pentru transformarea finală). Într-o primă fază, cei 128 biți ai cheii sunt împărțiți în opt subchei de câte 16 biți. Primele șase subchei sunt utilizate în prima rundă, iar următoarele două subchei în runda a doua. După utilizarea ultimei subchei, cheia este rotită cu 25 biți spre stânga și din nou împărțită în opt subchei. Primele patru subchei sunt folosite în runda a doua, iar următoarele patru în runda a treia. Apoi, din nou, cheia este rotită cu 25 biți spre stânga și se obțin următoarele opt subchei ș.a.m.d. până la sfârșitul algoritmului.
Decriptarea se face la fel, cu diferența că unele blocuri din cheie (al doilea și al treilea) sunt inversele aditive, altele (primul și al patrulea) sunt inversele multiplicative, iar alte blocuri (al cincilea și al șaselea) nu sunt inversate. (Atenție! Inversul multiplicativ modulo 216+1 al lui 0 este 0.) Calcularea inverselor necesită un oarecare efort, dar trebuie făcută o singură dată pentru fiecare cheie. În Tabelul 4.12 sunt prezentate subcheile de criptare și subcheile de decriptare corespunzătoare.
[8]
Criptanaliza algoritmului IDEA
Lungimea cheii folosite de algoritmul IDEA este de 128 de biți – de peste două ori mai mare ca cea a DES-ului. Presupunând că un atac în forță este cel mai eficient, acesta ar necesita 2128 (1038) criptări pentru recuperarea cheii. Dacă s-ar proiecta un procesor care să poată testa un miliard de chei pe secundă și implicând un miliard de astfel de procesoare în rezolvarea acestei probleme, cercetarea tot ar dura1013 ani (aceasta înseamnă mai mult decât vârsta Universului). Un șir de 1024 de astfel de procesoare poate determina cheia într-o zi, însă nu există suficienți atomi de siliciu în lume pentru a costrui o astfel de mașină.
Poate că atacul în forță nu este cel mai eficient mod de a ataca IDEA. Algoritmul este totuși prea nou pentru oricare rezultate existente în criptanaliză. Designerii au făcut tot posibilul pentru a face algoritmul imun la criptanaliza diferențială; ei au definit conceptul de cifru Markov și au arătat că rezistența la criptanaliza diferențială poate fi modelată și cuantificată 1. (Figura 4.10 arată algoritmul original PES în comparație cu algoritmul IDEA din Figura 4.9 care a fost fortificat împotriva criptanalizei diferențiale. Este uimitor cum câteva modificări subtile pot genera astfel de diferențe). Xueija Lai argumentează (remarcând evidențe, nu aducând dovezi) că IDEA este imun la criptanaliza diferențială după doar 4 runde din cele 8. De asemenea, conform celor spuse de Biham 7, atacul său asupra cheilor nu are efect asupra algoritmului IDEA. Willi Meier a examinat cele trei operații algebrice ale IDEA, remarcând că atâta timp cât acestea sunt incompatibile, există cazuri în care ele pot fi simplificate în așa fel încât să fie ușurată criptanaliza într-o oarecare măsură. Atacul său este mai eficient decât atacul în forță pentru runda a doua a algoritmului (242 operații), dar mai puțin eficient pentru a treia rundă sau mai departe. Algoritmul IDEA normal, cu 8 runde, este sigur.
Joan Daemen a descoperit o clasă de chei ineficiente pentru IDEA 9. Acestea nu sunt chei slabe în sensul cheilor slabe ale DES-ului; aceasta deoarece funcția de criptare este auto-inversabilă. Ele sunt slabe în sensul că dacă sunt utilizate, un criptanalist le poate identifica ușor. De exemplu, o cheie slabă este (în hexa):
0000,0000,0×00,0000,0000,000x,xxxx,x000
Numerele de pe poziția “x” pot lua orice valoare.
În orice caz, probabilitatea generării accidentale a unei astfel de chei slabe este foarte mică: una la 296. Nu există deci nici un pericol dacă se alege cheia aleator. Și este ușor de modificat IDEA astfel încât să nu mai aibă nici o chei slabă, prin aplicarea operației XOR fiecărei subchei cu valoarea 0x0dae 9.
Figura 4.10 Cifrarea bloc cu PES [8]
4.1.3 Blowfish
Blowfish este un algoritm proiectat de Bruce Schneier, proiectat pentru a fi implementat pe microprocesoare mai mari 1. Algoritmul este nepatentat, și a fost proiectat pentru a îndeplini următoarele criterii:
Să fie rapid. Blowfish criptează date pe procesoare de 32 de biți cu o viteză de 26 de cicluri de tact pe octet;
Să fie compact. Blowfish poate rula pe mai puțin de 5 KB de memorie;
Să fie simplu. Blowfish utilizeză numai operații simple: adunare, XOR și urmărire în tabele, toate pe operanzi de 32 de biți. Designul său este ușor de analizat, fapt ce îl face rezistent la erorile de implementare.
Să ofere securitate variabilă. Cheia algoritmului este variabilă, putând avea lungimi până la 448 biți.
Descrierea Blowfish
Blowfish este un cifru bloc care operează pe blocuri de 64 de biți, cu cheie de lungime variabilă. Algoritmul constă din două părți: expandarea cheii și criptarea datelor. Expandarea cheii convertește o cheie de până la 448 de biți în câteva șiruri subcheie totalizând 4168 de octeți.
Figura 4.11 Algoritmul Blowfish [1], [8]
Figura 4.12 Funcția F [1], [8]
Criptarea datelor constă într-o fucție simplă iterată de 16 ori. Fiecare rundă constă într-o permutare dependentă de cheie și o substituție dependentă de cheie și de informație. Toate operațiile sunt fie adunări, fie XOR pe cuvinte de 32 de biți.
Blowfish utilizează un număr mare de subchei. Aceste chei trebuie precalculate înainte de criptarea sau decriptarea datelor.
Vectorul P constă din 18 subchei de 32 de biți: .
Algoritmul folosește patru cutii S de 32 de biți, având 256 de elemente fiecare:
Metoda exactă de calcul al acestor subchei este descrisă la sfârșitul acestui subcapitol.
Blowfish are 16 runde. Ca intrare avem un bloc de date de 64 de biți, notat cu x. Pentru criptare, se execută:
Se împarte x în două jumătăți a câte 32 de biți: xL, xR
Pentru i=1 la 16:
Se schimbă xL și xR
Se schimbă xL și xR (se anulează ultima inversare)
Se recombină xL și xR.
Funcția F este după cum urmează (vezi Figura 5.13):
Se împarte xL în patru sferturi a câte 8 biți: a, b, c și d
Decriptarea se desfășoară întocmai ca și criptarea, cu excepția faptului că P1, P2, …, P18 se utilizează în ordine inversă.
Subcheile se calculează utilizându-se algoritmul Blowfish. Metoda exactă este următoarea:
Mai întâi se inițializează vectorul P și cele patru cutii S, în ordine, cu un șir fixat. Acest șir constă în biții care formează numărul , în reprezentare hexazecimală.
P1 se face XOR cu primii 32 biți ai cheii, P2 cu următorii 32 de biți ai cheii, și tot așa până la P18.
Se criptează un șir format numai din zerouri cu algoritmul Blowfish, utilizându-se subcheile descrise la pașii (1) și (2).
Se înlocuiesc P1 și P2 cu rezultatul pasului (3).
Se criptează rezultatul pasului (3) cu algoritmul Blowfish folosindu-se subcheile modificate;
Se înlocuiesc P3 și P4 cu rezultatul pasului (5).
Se continuă procesul, înlocuindu-se toate elementele din vectorul P, apoi toate cele patru cutii S, în ordine, cu rezultatul algoritmului Blowfish modificat continuu.
În total, sunt necesare 521 de iterații pentru generarea tuturor subcheilor necesare. Aplicațiile pot memora subcheile – nu este necesar să se execute acest proces de mai multe ori.
4.1.4 Alți algoritmi simetrici
4.1.4.1 FEAL
Algoritmul FEAL a fost proiectat de Akihiro Shimizu și Shoji Miyaguchi de la NTT Japan.Utilizează blocuri de 64 de biți și o cheie de 64 de biți. Ideea de la care s-a pornit a fost de a crea un algoritm similar cu DES, dar cu o funcție de iterație mai puternică. Având nevoie de câteva iterații, algoritmul ar fi trebuit să fie mai rapid. Din nefericire, nu s-a realizat scopul propus.
Procesul de criptare începe cu un bloc de 64 de biți de text clar. Întâi se realizează o operație XOR între blocul de date și cei 64 de biți ai cheii. În continuare, blocul de date rezultat este spart în două jumătăți: jumătatea stângă și jumătatea dreaptă. Jumătatea stângă ajută la formarea unei noi jumătăți drepte (prin însumare). Ambele jumătăți, stângă și dreaptă, trec prin mai multe iterații (patru, inițial). În fiecare iterație, jumătatea dreaptă este combinată cu 16 biți de cheie (utilizând funcția f) și se realizează funcția XOR cu jumătatea stângă, pentru a forma noua jumătate dreaptă. Valoarea originală a jumătății drepte (cea dinainte de iterație), prin XOR cu jumătatea stângă, noua jumătate stângă. După n runde cele 2 jumătăți vor fi contatenate, formând un bloc de 64 de biți. Blocul de date se face XOR cu 64 de biți de cheie și se obține rezultatul final al algoritmului.
4.1.4.2 RC2
RC2 este un algoritm de criptare cu mărime variabilă a cheii, proiectat de Ron Rivest pentru RSA Data Security Inc. Detalii despre acest algoritm nu au fost publicate. RC2 a apărut deja în diferite produse comerciale. Nu a fost patentat și este protejat doar ca produs comercial. conform producătorului, implementarea software este de două ori mai rapidă decât DES. Algoritmul acceptă o mărime a cheii de la 0 octeți până la mărimea maximă acceptată de calculator. Viteza de criptare nu depinde de mărimea cheii. Cheia este procesată în avans, pentru a obține o tabelă dependentă de cheie de 128 de octeți. Astfel, numărul efectiv al cheilor diferite este de 21024. RC2 nu are cutii S; cele 2 operații folosite sunt “mix” și “mash”. La fiecare iterație, este aleasă câte una.
Conform literaturii publicate da către autor, RC2 nu este un algoritm de cifrare iterativ. Aceasta sugerează că RC2 oferă o protecție mai mare împotriva criptanalizei diferențiale și liniare decât alți algoritmi de criptare.
4.1.4.3 RC4
RC4 este un cifru bloc cu cheie de lungime variabilă dezvoltat în 1987 de Ron Rivest pentru RSA Data Security, Inc.
RC4 poate fi descris foarte simplu. Algoritmul funcționează în modul OFB: șirul cheie este independent de textul clar. Algoritmul are 88 cutii S: S0, S1, …, S255. Elementele reprezintă o permutare a numerelor de la 0 la 255, iar permutarea se face după o funcție dependentă de cheia de lungime variabilă. Algoritmul folosește și două numărătoare, i și j, inițializate cu zero.
Pentru generarea unui octet aleator, se execută următoarele operații:
Octetul K este făcut XOR cu textul clar pentru obținerea textului cifrat sau făcut XOR cu textul cifrat pentru obținerea textului clar. Criptarea este rapidă – cam de 10 ori mai rapidă decât la DES.
Inițializarea cutiilor S este de asemenea ușoară. Mai întâi, se completează liniar: S0=0, S1=1, …, S255=255. Apoi se completează alt vector de 256 de octeți cu cheia, repetând cheia de câte ori este necesar pentru a completa tot vectorul: K0, K1, …, K255. Indicele j se setează cu zero. Apoi:
Acesta este tot algoritmul. RSADSI pretinde că acest algoritm este imun la criptanaliza diferențială și liniară. RC4 poate avea aproximativ 21700 (256!2562) stări posibile. Algoritmul este suficient de simplu pentru ca majoritatea programatorilor să-l implementeze rapid din memorie.
4.1.4.4 RC5
RC5 este un cifru bloc cu o varietate de parametri: dimensiunea blocului, dimensiunea cheii, și numărul de runde. A fost inventat de Ron Rivest și analizat de RSA Laboratories.
Sunt folosite trei operații: XOR, adunarea și rotația. Aceste rotații, care depind atât de chei cât și de informație, sunt niște operații foarte interesante.
RC5 operează cu blocuri de dimensiuni variabile cu blocuri de date de 64 sau 128 de biți. Criptarea folosește 2r+2 cuvinte de 32, respectiv 64 de biți, dependente de cheie: S0, S1, S2, …, S2r+1, unde r este numărul de runde. Pentru criptare, mai întâi se divite blocul de text clar în două cuvinte de 32 (64) de biți: A și B (RC5 presupune convenția little-endian pentru împachetarea octeților în cuvinte: primul octet se stochează pe poziția celui mai puțin semnificativ byte în registrul A, etc.). Apoi se efectuează o serie de operații modulo 232 pe care nu le-amintesc deoarece nu sunt relevante pentru această lucrare.
Decriptarea este la fel de ușoară. Blocul de text cifrat se divide în 2 cuvinte, A și B.
Crearea vectorului de chei este mai complicată. Mai întâi, se copiază biții cheii într-un vector, L, format din cuvinte de 32 (64) de biți, dopând ultimul cuvânt cu zerouri, dacă este necesar. Apoi se inițializează un vector S, folosindu-se un generator liniar congruențial mod 232. În sfârșit, L se amestecă în S:
RC5 reprezintă ede fapt o clasă de algoritmi. Rivest a proiectat o implementare particulară a lui RC5 sub forma RC5-w/r/b, unde w este dimensiunea cuvântului, r este numărul de runde, iar b este lungimea cheii exprimată în biți.
4.2 Algoritmi criptografici cu cheie publică (asimetrici)
4.2.1 Cifrarea și semnarea cu chei publice
Un moment important în evoluția criptografiei moderne l-a constituit crearea, în anul 1976, de către Whitfield Diffie și Martin Hellman, cercetători la Universitatea Stanford din California, a unui principiu diferit de acela al cifrării simetrice. Ei au pus bazele criptografiei asimetrice cu chei publice.
Figura 4.13 Sisteme de cifrare cu chei publice [9]
În locul unei singure chei secrete, criptografia asimetrică folosește două chei diferite, una pentru cifrare, alta pentru descifrare. Deoarece este imposibilă deducerea unei chei din cealaltă, una din chei este făcută publică, fiind pusă la dispoziția oricui dorește să transmită un mesaj cifrat. Doar destinatarul, care deține cea de-a doua cheie, poate descifra și utiliza mesajul. Tehnica cheilor publice poate fi folosită și pentru autentificarea mesajelor prin semnătură digitală, fapt care i-a sporit popularitatea.
În Figura 4.13 sunt prezentate două utilizări ale acestor tipuri de criptosisteme. Exemplul 1 arată cum se asigură confidențialitatea (secretul) unui mesaj. Pentru aceasta, mesajul este cifrat cu cheia publică a destinatarului, operație ce poate fi făcută de către orice persoană care poate accesa fișierul cu chei publice. Odată cifrat, mesajul nu va mai putea fi descifrat decât de către destinatar, singurul care posedă cheia secretă (privată), pereche a celei publice.
În exemplul 2 se prezintă o altă utilizare a sistemelor cu chei publice, semnătura digitală. Ea reprezintă un atribut al unui utilizator, fiind folosită pentru recunoașterea acestuia. Semnătura lui A trebuie să satisfacă următoarele proprietăți:
B să fie capabil să valideze semnătura lui A;
să fie imposibil pentru oricine, inclusiv B, să falsifice semnătura lui A;
î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, cheia privată 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 cea a datelor. Deoarece cheia pereche este publică, receptorul B va putea valida semnătura.
Cifrurile cu chei publice sunt folosite în general pentru:
cifrarea și distribuțua cheilor simetrice folosite în secretizarea mesajelor;
semnătura digitală asociată mesajelor;
Se încurajează folosirea sistemelor cu chei publice în distribuția cheilor, datorită ușutinței gestionării lor în comunitățile de utilizatori numeroase și foarte larg răspândite. Abordarea sistemelor cu chei publice se face utilizând conceptul de certificat, necesar pentru a exista certitudine asupra autenticității cheilor publice. Altfel, ar putea fi posibile anumite substituții de persoane.
În criptosistemele cu chei publice, fiecare utilizator A deține o transformare de cifrare publică (cheia publică), EA, care poate fi memorată într-un registru (fișier) public și o transformare de descifrare secretă (cheie privată sau secretă), DA, ce nu este posibil să fie obținută din EA. Cheia de descifrare (secretă) este derivată din cheia 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 confidențialitate.
La recepție, B va descifra criptograma C utilizând transformarea secretă DB, cunoscută doar de el:
Schema nu furnizează facilități de autentificare, deoarece orice utilizator (proces) are acces la transformarea publică EB a lui B și îi poate transmite mesaje false M’ sub forma C’=EB(M’).
Pentru autentificare se aplică lui M transformarea secretă DA a lui A. Ignorând protecția pentru moment, A va emite C=DA(M) la B, care la recepție va aplica transformarea publică EA a lui A:
Autentificarea este realizată deoarece doar A poate aplica transformarea DA.
Protecția nu este asigurată, întrucât este posibil ca M să fie obținut de oricine, aplicând transformarea publică EA. Pentru a se realiza simultan confidențialitatea și autentificarea informațiilor, spațiul trebuie să fie echivalent spațiului , astfel î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 EA și DA să fie mutual inverse, adică:
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 publică a lui B, EB, și va emite către receptor criptograma:
Receptorul B obține mesajul M aplicând la început propria-i funcție de descifrare, DB, iar apoi transformarea publică a lui A, EA, cea care furnizează autentificarea:
Algoritmii de criptare cu cheie publică reprezintă o cripto-complexitate foarte mare, bazându-se în general pe operații cu întregi foarte mari (sute de cifre zecimale sau mii de biți). Acest lucru implică dificultăți importante în implementarea simulată a operațiilor frecvent folosite, cum ar fi înmulțiri, reduceri modulo, exponențieri, calcul de invers multiplicativ, c.m.m.d.c., operatori Jacobi, Legendre, teste de primaritate. Toate aceste probleme fac critic timpul de prelucrare al mesajelor prin algoritmi cu chei publice.
4.2.2 RSA
Acest cifru cu chei publice, realizat de trei cercetători de la Massachusetts Institute of Technology (fiind și numit după numele celor trei inventatori – Ron Rivest, Adi Shamir și Leonard Adleman), reprezintă standardul “de facto” în domeniul semnăturilor digitale și a confidențialității cu chei publice. El se bucură de o foarte mare apreciere, atât în mediul guvernamental, cât și în cel comercial, fiind susținut prin lucrări și studii de comunitatea academică. Sub diferite forme de implementare, prin programe sau dispozitive hardware speciale, RSA este astăzi cunoscută ca cea mai sigură metodă de cifrare și autentificare disponibilă comercial.
RSA este bazat pe cvasi-imposibilitatea actuală de a factoriza numere (întregi) mari, în timp ce a găsi numere prime mari este ușor; funcțiile de criptare/decriptare sunt exponențiale, unde exponentul este cheia și calculele se fac în inelul claselor de resturi modulo n.
Baza teoretică este teorema lui Fermat care stabilește că:
dacă p este un număr prim și dacă (X 0 mod p) atunci
Teorema are două proprietăți asociate:
dacă r-1 = k mod(p-1), atunci
dacă e*d-1 = k(p-1)(q-1), atunci
Prezentarea algoritmului
Fie p și q două numere prime mari (de exemplu de 100 cifre zecimale), distincte și aleatoare și fie n produsul lor:
care se numește modul.
Se calculează numărul:
denumit indicatorul lui Euler.
Se determină aleator un număr e relativ prim cu m și se calculează numărul d, astfel încât:
folosind în acest scop o versiune extinsă a algoritmului lui Euclid. Numărul e se numește exponent public, iar d (inversul multiplicativ modulo m al lui e) se numește exponent privat.
Cheia publică este constituită de perechea (e, n), iar cheia privată este constituită de perechea (d, n).
Cifrarea și descifrarea mesajelor
Fiecare utilizator A obține modulul nA și exponenții eA și dA. Apoi, A va înregistra într-un fișier public cheia publică (nA, eA), în timp ce va ține secret pe dA. Un alt utilizator, B, va putea emite un mesaj secret M utilizând transformarea de cifrare publică a lui A, adică ridicarea la puterea eA, modulo nA, a mesajului:
La recepție, A va obține mesajul în clar:
Semnarea documentelor și verificarea semnăturilor
Utilizatorul A va putea semna un mesaj M către B calculând:
iar B va autentifica acest mesaj, utilizând cheia publică a lui A:
Securitatea metodei depinde de dificultatea factorizării lui n în p și q. Rivest, Shamir și Adleman sugerează utilizarea unor numere prime p și q de 100 de cifre, adică a unui n de 200 de cifre zecimale, ceea ce cere pentru factorizare mai multe milioane de ani.
Pentru o mai bună înțelegere a acestui algoritm am ilustrat următorul exemplu:
Fie p = 53 și q = 61 două numere prime; produsul acestor două numere ținute secrete este n = 5361 = 3233, iar m = (p-1)(q-1) = 5260 = 3120. Fie d = 791 cheia secretă; exponentul e (cheia publică) se calculează ca invers multiplicativ mod 3120 al lui d. Ca urmare rezultă e = 71.
Pentru a cifra mesajul M = Renaissance, acesta se va împărți în blocuri de 4 biți fiecare, unde A=00, B=01, C=02, …, Z=25 și blanc=26:
Primul bloc se va cifra ca etc.
Criptograma obținută va fi:
La descifrare, fiecare grup de două litere în clar se obține prin exponențiere, folosindu-se cheia secretă d: etc.
O serie de firme producă toare de sisteme de programe și echipamente, ca DEC, Lotus, Novell, Motorola, precum și o serie de instituții importante (Departamentul Apărării din SUA, National Aeronautics – SUA, Boeing, rețeaua bancară internațională SWIFT, guvernul Belgiei etc.), folosesc acest algoritm pentru protejarea și autentificarea datelor, parolelor, fișierelor, documentelor memorate sau transmise prin rețele.
4.2.3 DSA
DSA (Digital Signature Algorithm) este algoritmul de semnătură digitală al standardului DSS, elaborat de NIST (National Institute of Standards & Technology) la 30 august 1991. Este un standard foarte controversat în literatura de specialitate, deoarece este destinat să înlocuiască standardul “de facto” al domeniului, RSA. Se bazează pe un aparat matematic derivat din metoda El Gamal, întemeindu-și tăria criptografică tot pe problema dificultății calculului logaritmilor în câmp finit. În continuare sunt prezentate caracteristicile cifrului DSA.
Parametrii sistemului
Parametri globali
p – număr prim, p în (2511; 2512) – 512 biți
q – un divizor prim al lui (p-1) – 160 biți, q în (2159; 2160)
g – un întreg cu proprietatea:
unde h este un întreg relativ prim cu p, h, în (0; p), astfel încât:
H – funcție hash.
Parametrii utilizatorului
x – un întreg, x în (0; q) – cheia secretă
y – un întreg, – cheia publică
Parametrii semnăturii
M – mesajul ce va fi semnat
k – un întreg aleatoriu, k în (0; q)
Semnarea unui mesaj
Semnătura digitală a unui mesaj M este perechea (r, s)
se alege un întreg k în (0; q), prim cu q
se calculează
Pe etape:
Se setează
Se setează
Se calculează
Se calculează
Se calculează
La recepție se primesc M’, r’, s’.
Verificarea semnăturii unui mesaj
se calculează
semnătura este validă dacă se verifică ecuația:
Verificarea semnăturii are, ca urmare, următorii pași și variabile intermediare:
Dacă (r 0 sau r q) sau (s 0 sau s q), semnătura este invalidă
dacă v = r, atunci semnătura este OK.
4.2.4 Alți algoritmi asimetrici
4.2.4.1 El Gamal
El Gamal propune o nouă metodă de semnătură bazată pe schema de distribuție a cheilor a lui Diffie și Hellman.
Fie m un document semnat, 0 m (p-1). Fișierul public va conține cheia y = ax mod p pentru fiecare utilizator. Pentru a semna un document, A va folosi cheia sa secretă xA într-o astfel de manieră încât semnătura sa poate fi verificată de orice alt utilizator pe baza cheii publice yA.
4.2.4.2 Diffie – Hellman
Diffie-Hellman este un protocol destinat stabilirii de comun acord, între doi corespondenți A și B, a unei chei de sesiune KAB (secret comun), A folosind informația secretă xA, iar B pe xB. De asemenea, există un număr întreg prim mare p și un element a primitiv modulo p.
A va calcula
și va trimite la B pe yA. Similar, B va emite la A:
Ca urmare, fiecare poate acum calcula cheia secretă comună:
Dacă A și B pot calcula pe KAB, un observator neautorizat nu va putea deoarece va trebui să calculeze logaritmi în câmpuri Galois mari.
Pentru ca A să transmită un mesaj m cifrat la B, 0 m p-1, A va putea alege un K0, p-1 care va servi drept cheie secretă xA. El va calcula apoi cheia:
unde YB a fost obținut direct de la B sau dintr-un fișier de chei publice. A va putea emite la B perechea (c1c2), unde:
Descifrarea se face și ea în două etape: mai întâi se obține KAB:
Apoi, se obține mesajul în clar m prin împărțirea lui c2 la KAB.
4.2.4.3 Cifruri bazate pe curbe eliptice (ECC)
Folosirea curbelor eliptice în criptografie a fost propusă pentru prima oară în 1985 de Victor Miller, cercetător în matematică la IBM și, independent, de Neal Kobitz, profesor de matematică la Universitatea din Washington. Ideea de bază era folosirea grupului punctelor de pe o curbă eliptică în locul grupului din sistemele criptografice existente.
La momentul descoperirii lor, sistemele bazate pe curbe eliptice au fost considerate nepractice. De atunci însă, s-a întreprins asupra lor o cercetare aprofundată și intensă. Securitatea sistemelor bazate pe curbe eliptice a fost studiată de-a lungul a 12 ani de diferiți cercetători.
Recent, curbele eliptice au fost folosite pentru conceperea unor algoritmi eficienți de factorizare a întregilor și pentru demonstrarea primarității. Ele au fost utilizate în construirea criptosistemelor cu chei publice, în construirea generatoarelor de biți pseudoaleatoare și a permutărilor neinversabile. Curbele eliptice și-au găsit aplicabilitate și în teoria codurilor, unde au fost întrebuințate pentru obținerea unor coduri protectoare de erori, foarte bune.
Recentele progrese făcute în factorizarea întregilor și în procesarea paralelă au dat naștere la necesitatea unor chei din ce în ce mai mari pentru sistemele de criptare cu chei publice. Însă creșterea dimensiunilor cheilor va face aceste sisteme cu chei publice mai lente decât sunt la nivelul actual. Folosirea ECC permite creșterea securității, scăzând în același timp supraîncărcarea și timpul de latență.
Servicii de securitate oferite
ECC pot fi folosite pentru a furniza următoarele servicii de securitate:
confidențialitate;
autentificarea entităților;
integritatea datelor;
nerepudiere;
schimb de chei autentificat.
Securitatea ECC constă în dificultatea calcului logaritmilor în câmpuri discrete (problema logaritmilor discreți): date fiind A (un element dintr-un câmp finit) și Ax, este practic imposibil să se calculeze x, atunci când elementele sunt suficient de mari. De fapt, există o mulțime de sisteme criptografice ce se bazează pe problema logaritmilor discreți în : El Gamal, algoritmul de semnătură Schnorr, algoritmul de semnătură Nyberg-Rueppel, DSA. În mod clasic, aceste sisteme au fost definite în grupul multiplicativ . Ele pot fi însă definite la fel de bine în orice alt grup finit, cum ar fi grupul punctelor de pe o curbă eliptică. Curbele eliptice sunt benefice în aplicații în care:
puterea de calcul este limitată (cartele inteligente, dispozitive fără fir, plăci PC);
spațiul pe circuit integrat este limitat (cartele inteligente, dispozitive fără fir, plăci PC);
este necesară viteză mare de calcul; se folosește intens semnarea și verificarea semnăturii;
mesajele semnate trebuie memorate sau transmise;
lățimea de bandă este limitată (comunicații mobile, anumite rețele de calculatoare).
Avantajele curbelor eliptice
securitate crescută: tăria criptografică per bit este mult mai mare decât a oricărui sistem de criptare cu chei publice cunoscut la ora actuală;
economii substanțiale față de alte sisteme la calcule, lărgimea de bandă și necesitățile de memorare;
lărgime de bandă redusă datorită semnăturilor și cărtificatelor de dimensiune mică;
viteză mare de criptare și semnare atât în implementările software, cât și în cele hardware;
sunt ideale pentru implementările pe hardware de dimensiuni reduse (cum ar fi cartelele inteligente);
criptarea și semnarea pot fi efectuate în etape separate, ceea ce simplifică problema exportului.
Studiile intense efectuate asupra securității criptosistemelor cu chei publice, bazate pe punctele de pe o curbă eliptică, au demonstrat că aceste sisteme sunt adecvate marii majorități a aplicațiilor. Un ECC lucrând cu chei de 160 de biți furnizează un nivel de securitate echivalent cu un sistem bazat pe câmpul Zp pe 1024 de biți. Din acest motiv, ECC furnizează o modalitate fezabilă de implementare a unui sistem de securitate de nivel înalt pe o cartelă PC (PC card), pe o cartelă inteligentă sau pe dispozitivul de comunicații mobile.
Descrierea algoritmului
Curbele eliptice sunt construcții matematice. O curbă eliptică poate fi definită peste orice câmp (de numere reale, raționale sau complexe), însă cele folosite în criptografie sunt definite, în general, peste câmpuri finite.
O curbă eliptică, E, constă din elemente (numite puncte) de tipul (x, y) ce satisfac ecuația:
(unde a și b Zp sunt constante, astfel încât , iar p este un număr prim) împreună cu un element singular, notat O și numit “punctul de la infinit”. Acest punct poate fi privit intuitiv ca fiind punctul din vârful și de la baza oricărei linii verticale.
O curbă eliptică E are o structură de grup abelian împreună cu adunarea. Adunarea a două puncte de pe o curbă eliptică este definită în concordănță cu o mulțime simplă de reguli ( a se vedea Figura 5.14 în care P3=P1+P2).
Figura 4.14 Operația de adunare pe o curbã elipticã [43]
Fiind date două puncte pe E, P1(x1, y1) și P2(x2, y2), avem următoarele cazuri:
dacă x2 = x1 și y2 = -y1 atunci P1+P2= 0
altfel P1+P2= (x3, y3), unde:
Operația de adunare pe o curbă eliptică este corespondența operației de înmulțire în sistemele cu chei publice obișnuite, iar adunarea multiplă este corespondența exponențierii modulare din acestea.
4.3 Algoritmi criptografici cu haos
4.3.1 Algoritmul Corron – Hahs
Voi prezenta schema inovativă de criptare cu haos propusă și verificată matematic de Corron și Hahs [43] în cazul general al sistemului Lorenz. În esență, metoda de criptare constă în modularea unui parametru al sistemului de criptare haotic, dând naștere unei relații complexe între semnalele criptate și de criptare [43]. La decriptor, se folosește un sistem de subsincronizare a sistemului haotic pentru a asigura sincronizarea în timp ce un filtru dinamic neliniar se folosește pentru a obține o reprezentare analogică a semnalului criptat.
Ecuațiile matematice care implementează schema de criptare haotică sunt prezentate în relația (4.1)
În sistemul prezentat în (4.1), semnalul de intrare digital este notat cu bi. Parametrul critic al haosului r a fost ales ca parametru de modulație pentru criptare. Aceasta face ca parametrul actual al sistemului haotic să depindă nu numai de constanta rb, dar și de informația digitală bi. În relația (5.2) este prezentată funcția de criptare:
Din (4.1) și (4.2), definițiile pentru cele două funcții și se pot afla ușor. Relația (4.2) descrie un semnal analogic care va fi transmis fizic de-a lungul legăturii de comunicații. De notat este că pentru un sistem viabil de comunicații, acesta este singurul semnal care se va transmite pe linie. Ca rezultat, acest semnal trebuie să includă toate informațiile pertinente necesare pentru ca receptorul să refacă semnalul informațional digital de intrare.
Trebuie ținut cont de aceste considerații la alegerea valorilor parametrilor sistemului haotic. Pentru o criptare rezistentă și de succes a informației, sistemul trebuie să fie haotic pentru toate valorile de intrare, condiția (4.3):
trebuind respectată pentru toate valorile intrării. În cazul informației binare {0,1}, prin alegerea cerințele (4.3) sunt îndeplinite pentru toate valorile lui bi. Dacă se criptează un alt tip de informație digitală, cum ar fi cea bipolară {-1, +1} atunci trebuie să ne asigurăm că cerințele haosului sunt îndeplinite pentru a menține securitatea criptării.
Pentru o sincronizare haotică a receptorului și emițătorului este necesar ca subsistemul de sincronizare folosit la recepție să fie independent de semnalul criptat, adică subsistemul de sincronizare de la recepție nu trebuie să conțină parametrul critic al haosului r(t). Prezența acestui parametru în subsistemul de sincronizare poate afecta rezistența comunicației de vreme ce efectele modulației și inerentele nepotriviri de parametru pot impune efecte dezastruase. De vreme ce pentru sistemul Lorenz, sunt numai două subsisteme de sincronizare stabile yz și xz, alegerea subsistemului xz se bazează pe observația mai sus prezentată. Expresia prezentată în (4.4) descrie subsistemul generalizat Lorenz de sincronizare xz folosit pentru obținerea sincronizării haotice între emițător și receptor.
În expresia de mai sus, indicele r se folosește pentru a face distincție în cazul variabilelor sistemului la recepție.
De vreme ce subsistemul de sincronizare xz nu depinde de semnalul de criptare, teoretic sistemele haotice sunt perfect sincronizate.
În realitate, filtrul dinamic neliniar este acela folosit pentru refacerea semnalului informațional din haos. Po ate urma o abordare inversă a sistemului pentru a obține un estimat al semnalului informațional. Din (4.2) estimatul este simplu dat de relația (4.5):
Chiar dacă, informația originală este de natură digitală, estimatul obținut din expresia de mai sus va fi continuu/analogic. Ca urmare va fi necesară o anumită conversie digitală pentru a obține șirul digital de biți de ieșire. Acest pas suplimentar de procesare poate fi folosit ca un avantaj pentru a crește rata de eroare pe bit (BER) a sistemului de comunicații de vreme ce histerezisul, codarea sau alt tip de schemă poate fi folosită pentru a oferi mai multă rezistență zgomotului [44].
Ecuațiile generalizate pentru filtrul neliniar de refacere sunt date de relațiile (4.6):
În ecuațiile de mai sus, y se referă la semnalul de intrare aplicat la decriptor, iar variabilele cu indice r se referă la variabilele statice ale subsistemului de sincronizare xz descris în (4.4). Primele două ecuații implementează estimatul invers al sistemului care prezintă singularități stipulate de autori în [43]. Ultima ecuație este ecuația filtrului neliniar folosit la filtrarea acestor singularități și la obținerea estimatului continuu al informației originale.
Toți parametrii filtrului neliniar de refacere din (4.6) sunt determinați de valori specifice folosite în criptograful Lorenz cu excepția parametrilor k și q. Acești parametrii pot fi aleși arbitrar [43]. Totuși, parametru k este o constantă de timp pentru partea estimativă a filtrului neliniar. Deoarece această parte a filtrului procesează continuu semnalul haotic, valoarea optimă depinde de cea mai mare componentă de frecvență așteptată în semnalul haotic. Parametru q este un parametru al filtrului trece jos folosit la filtrarea singularităților în semnalul refăcut. Ca urmare valoarea optimă a acestor parametrii depinde de componenta maximă de frecvență așteptată a semnalului informațional
Criptorul generalizat cu haos
Ca urmare a ecuațiilor schemei de criptare haotice prezentate în (4.1), reprezentarea domeniului s folosind integratoare de pierderi se poate dezvolta pentru a obține relațiile (4.7):
Sistemul de mai sus se poate implementa în SIMULINK folosind blocuri primare cum ar fi integrator de pierderi, bloc de sumare și multiplicator. Amintindu-ne că șirul de biți digital ce trebuie criptat este dat bi și că ieșirea criptorului este semnalul transmis, y(s), aceasta este diagrama bloc matematică ce implementează sistemul de criptare descris:
Figura 4.15 Criptorul cu haos [45], [46]
Figura 4.15 arată că sistemul de criptare constă dintr-un oscilator stabil Lorenz, cu o ramură adițională neliniară care modulează semnalul digital de intrare, bi. Deoarece semnalul de intrare este de natură digitală, un simplu modulator cu comutare se poate folosi în locul unui multiplicator total.
Decriptorul generalizat cu haos
Ecuațiile domeniului s pentru subsistemul de sincronizare xz cerute la recepție pentru a oferi sincronizarea haotică [45,46] sunt prezentate în (4.8):
Ecuațiile domeniului s pentru filtrul neliniar de refacere sunt date în (4.9). Comparând (4.9) cu (4.6) se observă că s-au efectuat simplificări. Aceste simplificări rezultă din faptul că pentru implementarea hardware nivelele semnalelor ce se procesează sunt mici în amplitudine implicând și deci expresia poate fi aproximată cu 1.
Figura 4.16 Decriptorul cu haos [45], [46]
Din punctul de vedere al implementării hardware, sunt anumite avantaje obținute din (4.9) și anume că funcția de divizare necesită mai multă parte hardware pentru implementare [47] și asemenea salvări în domeniu sunt obținute prin implementarea lui (4.9). În plus, modulația cu semn din ultima ecuație a lui (4.9) poate fi implementată cu un comparator și niște comutatoare.
Diagrama bloc care implementeză sistemul analogic complet de decriptare este prezentat în Figura 4.16
Considerații de frecvență
Din punct de vedere frecvență, banda totală RF disponibilă în canalul ales este de 2 MHz. În sistemele de comunicații tipice, filtrarea este folosită la intrarea în receptor pentru a preveni interferența cu alți utilizatori. De aceea este necesar ca semnalul criptat cu haos să fie cuprins în această bandă și ca efectele filtrării [48] să nu degradeze performanțele criptosistemului [43]. De vreme ce se va folosi o simplă modulație în amplitudine pentru procesarea RF, va exista o expansiune de bandă la modularea semnalului haotic. O dublare a benzii se așteaptă în cazul schemei de modulație DSB care implică faptul că banda maximă pe care un sistem haotic o poate ocupa este de 1 MHz. Lărgimea de bandă a sistemului Lorenz este determinată de polii sistemului. Ținând cont de aceste fapte, locațiile polilor sistemului Lorenz pot fi alese ca: rad/sec, rad/sec. Cu acești poli, întreaga lărgime a benziipentru sistemul haotic ales este de aproximativ 500 KHz.
Considerații de gamă dinamică
Odată aleasă locația polilor sistemului Lorenz, restul parametrilor oscilatorului haotic se pot obține din oscilațiile semnalului dorit.
Aceste oscilații ale semnalului nu pot fi alese arbitrar de vreme ce sunt limitate de puterea consumată și de cerințele de suprafață ale implementării siliconice.
Pentru a scădea gama dinamică a subsistemului y, valoarea aleasă pentru este . Relația (5.10) arată legătura dintre parametrii și și parametrul critic de haos :
Cu valorile alese pentru parametrii și , rezultă . Aceasta este valoarea minimă a acestui parametru necesară inducerii și menținerii compotrtării haotice. Ca urmare este necesară alegerea unei valori mai mari. Valoarea de bază a parametrului de haos este . Această valoare ar trebui să ofere o bună zonă tampon pentru diferențele de câștig datorită variațiilor de proces.
Singurii parametrii ce trebuie determinați pentru o specificație completă a sistemului Lorenz sunt câștigurile blocurilor multiplicatoare, K3 și K4. Produsul K3K4 afectează gama dinamică a subsistemelur x și y, în timp ce gama dinamică a subsistemului z este afectată doar de K3. Ca rezultat, K3 poate fi folosit pentru a seta independent gama dinamică a subsistemului z, în timp ce K4 poate fi folosit pentru a controla gama dinamică a celorlalte două subsisteme. Din motive de înaltă imunitate la zgomot consum de suprafață și putere, valoarea maximă de +/-1.5V a gamei dinamice a fost aleasă ca scop pentru subsisteme. Astfel, valorile necesare pentru câștigurile multiplicatoarelor sunt și . Sistemul de ecuații pentru oscilatorul de bază Lorenz ce va fi folosit în criptosistem este date de (4.11):
[48], [43]
Punctele fixate pentru sistemul de bază Lorenz în (4.11) se pot calcula din sistemul de parametrii pentru a obține .
În mod similar, gama dinamică a subsistemelor se poate aproxima din punctele fixate pentru a obține . Aceste fapte se pot ferifica din atractorii prezentați în Figura 4.17 și Figura 4.18:
Figura 4.17 Atractorul XY al sistemului de bază Lorenz [48], [43]
Figura 4.18 Atractorul XZ al sistemului de bază Lorenz [48], [43]
Considerații asupra parametrilor filtrului neliniar
Toți parametrii decriptorului sunt determinați din parametrii criptorului cu excepția constantei de timp a filtrului de refacere neliniar.
În filtrul neliniar, parametrul k setează constanta de timp a părții de estimare a filtrului. Această parte a filtrului procesează semnalul haotic și ca rezultat, valoarea optimă a lui k depinde de frecvența maximă așteptată în semnalul haotic. Această observație se poate verifica notând că acest parametru servește ca pol al filtrului trece jos în (4.10). La sfârșit, valoarea aleasă pentru acest parametru ar trebui să acopere întreaga lărgime de bandă a sistemului Lorenz utilizat. Se pot folosi valori mai mari pentru k, dar de vreme ce într-un scenariu real de comunicații, sistemul este subiect al zgomotului și interferenței este de preferat să se aleagă o valoare aproape de componenta de frecvență haotică maximă pentru a limita cuplajul de zgomot.
Ultima ecuație a decriptorului (4.10) este funcția neliniară trece jos propusă pentru a filtra singularitățile din partea de estimare a filtrului de refacere [43]. Parametrul principal este câștigul notat cu q în această ecuație. În timp ce k este independent de rata maximă de transfer a datelor, valoarea lui q nu este de vreme ce stabilește frecvența de refacere a datelor. Ca urmare, acest parametru este mult mai crucial în refacerea corectă a șirului digital de date. Rata maximă de transfer a datelor de 100Kb/s se folosește în simulare deoarece prezintă cazul cel mai defavorabil pentru refacerea datelor de către un filtru neliniar. Valorile diferite ale lui q date sub formă de rată de transfer a datelor sunt prezentate pe axele y ale panourilor din Figura 4.19.
Faza sincronizării, td este necesară nu numai pentru sincronizarea haosului, dar și pentru a permite ieșirii filtrului neliniar să atingă nivelul de bază pentru . Într-o implementare rezistentă, această fază a sincronizării va fi folosită pentru programareadinamică a coeficienților pentru a combate imperfecțiunile cum ar fi atenuarea, fadingul și nepotrivirile.
Din rezultatele prezentate în Figura 4.19 se pot face următoarele observații:
Pentru , răspunsului filtrului îi ia destul timp pentru a atinge nivelul de bază la ieșire și refacerea semnalului digital de date din semnalul de ieșire nu este posibilă;
Pentru se atinge nivelul de bază la ieșire într-un timp acceptabil. Refecerea semnalului digital de date din semnalul de ieșire este posibilă, dar BER va suferi;
Pentru se atinge nivelul de bază la ieșire într-un timp acceptabil și refacerea este posibilă;
Pentru se atinge nivelul de bază la ieșire într-un timp acceptabil și este posibilă refacerea optimă a semnalului digital de date. BER va avea cea mai mică valoare deoarece o anumită refacere a tipului de tact se adaugă pentru a oferi cel mai bun moment de test.
Figura 4.19 Efectele valorii lui q pentru ieșirea filtrului neliniar [48], [43]
Parametrii criptosistemului
Parametrii criptosistemului complet sunt concis prezentați în Tabelul 4.13. Acești parametrii urmăresc observațiile și rezultatele simulărilor prezentate în secțiunile de mai sus. Acești parametrii sunt corespunzători relațiilor (4.7) – (4.9) care descriu matematic sistemul de criptare și decriptare cu haos.
[48], [43]
Pentru o implementare hardware, valorile prezentate în Tabelul 4.12 sunt impracticabile datorită valorii lor mari. Ca rezultat, anumite translații trebuie făcute pentru actuala implementare cu silicon.
Rezultatele simulării criptosistemului în banda de bază
Voi prezenta rezultatele simulării matematice pentru criptosistemul cu haos în banda de bază. În plus, efectele neidealistice posibil de întâlnit într-un scenariu tipic de comunicații vor fi de asemenea simulate pentru a cuantifica rezistența sistemului. Structura utilizată pentru simularea criptosistemului în SIMULINK este prezentată în Figura 4.20.
Figura 4.20 Structura criptosistemului în banda de bază [48], [43]
Semnalele digitale de intrare și ieșire (semnalul util și semnalul refăcut) al criptosistemului sunt și . Ieșirea criptorului și intrarea decriptorului, în realitate nu sunt egale, datorită imperfecțiunilor legăturii de comunicație. Linia care unește cele două subsisteme (criptorul și decriptorul) se folosește pentru a reprezenta că imperfecțiunile legăturii pot fi incluse. Este de notat că sistemul Lorenz folosit în criptor este un oscilator de ordinul 3 cu trei ieșiri: x, z, y. Subsistemul sincron xz este un sistem de ordinul 2.
Figura 4.21 Criptarea cu haos a șirului biți de 100Kb/s la intrare
(a) șirul de biți de 100Kb/s la intrare, (b) ieșirea criptorului cu haos [48], [43]
Figura 4.22 Atractorii Lorenz cu șirul de biți de intrare de 100Kb/s [48], [43]
Figura 4.21 prezintă criptarea haotică a unui șir digital de biți de 100Kb/s folosind modelul SIMULINK. Faza de sincronizare de 15×10-4 secunde este înaintea adevăratului șir de biți informaționali:
Ieșirea criptorului este prezentată în Figura 4.21. Așa cum apare din reprezentarea tranzitorie în funcție de timp, tranziția între semnalul de intrare digital și ieșirea nu este repetitivă. Teoretic, tranziția se așteaptă a fi nu numai sensibilă la condițiile inițiale, dar și la istoria trecutului șirului de biți. Acest tip de tranziție sau transformare se numește dependentă de informație și este dorită într-un criptosistem de vreme ce acesta face mai greu de decifrat informația pentru un atacator.
Figura 4.23 Sincronizarea haotică a criptorului/decriptorului
(a) Atractorul XZ – criptor, (b) Atractorul XY – decriptor, (c) Sincronizarea [48], [43]
Rezultatele din Figura 4.22 arată că, în esență schema de criptare [43] este similară cu CSK (Chaos Shift-Keying) [49]. Acest lucru se poate concluziona din faptul că două sisteme haotice stabile sunt prezentate în Figura 4.22. De notat este că criptarea informației constă în deplasarea înainte și înapoi între cele două seturi de atractori în funcție de valoarea bitului de intrare. Acest fapt este mai vizibil în atractorul XZ prezentat în Figura 4.22 (b).
Sincronizarea haotică a criptorului/decriptorului este necesară pentru o refacere cu succes a șirului original de biți informaționali. Figura 4.23 prezintă rezultatele sincronizării obținute din simularea cu SIMULINK a criptosistemului. Atractorul XY al criptorului este prezentat în (a) în timp ce (b) prezintă simularea subsistemului de sincronizare a decriptorului. O imagine mai descriptivă a sincronizării este prezentată în (c) în care ieșirea subsistemului x al decriptorului, , este alăturată cu ieșirea subsistemului x al criptorului, .
Extragerea informației din haos se relizează prin folosirea unui filtru neliniar potrivit. Așa cum am menționat, ieșirea filtrului neliniar este un estimat analogic sau continuu a semnalului informațional de intrare. Pentru criptosistemul prezentat se consideră numai informație digitală și deci este necesară folosirea unui etaj de conversie analogic-digital pentru obținerea ieșirii digitale a criptosistemului. În etajul convertor A/D se folosește un simplu comparator cu histerezis.
Performanțele criptosistemului în prezența imperfecțiunilor
Rezultatele performanțelor criptosistemului prezentat au demonstrat că că schema de criptare ce folosește ecuațiile și parametrii generalizați funcționează așa cum era de așteptat. Totuși, pentru simulări s-a folosit un canal ideal care nu face parte dintr-un scenariu tipic de comunicații. În conformitate cu Corron și Hahs [43], această schemă de criptare este rezistentă la imperfecțiunile canalulului prin alegerea corectă a parametrilor. Scopul acestei subsecțiuni este de a include și simula imperfecțiunile ce vor exista într-o implementare reală a criptosistemului cu haos.
Nepotrivirea parametrilor
Nepotrivirea parametrilor între criptor și decriptor sunt de așteptat și inevitabile într-o implementare reală a criptosistemului. Aceste nepotriviri se pot datora fie datorită variațiilor inerente a elementelor într-o implementare discretă sau a variațiilor proceselor într-o implementare monolitică. Deoarece se folosesc componente discrete, acestea sunt subiectul variațiilor de la valorile lor nominale și vor afecta nepotrivirile de parametrii. Deoarece în acest punct simulările sunt încă matematice, rezistența performanței criptosistemului va fi cuantificată în termeni de nepotriviri absolute între criptor și decriptor.
Schema folosită în SIMULINK pentru a simula scenariul nepotrivirilor este:
Parametrii sistemului așa cum au fost prezentați în Tabelul 4.13 au fost folosiți în criptor;
Parametrii sistemului din Tabelul 4.13 au fost folosiți ca valoare propusă, , pentru parametrii decriptorului. O variație a parametrilor de 10% a fost adăugată aleator parametrilor.
Rezultatele simulării sunt prezentate în Figura 4.24. Ieșirea filtrului neliniar este prezentată în (a), în timp ce (b) prezintă actuala ieșire a criptosistemului.
Din (a) se observă că nepotrivirile de 10% ale parametrilor au un efect direct asupra refacerii analogice a șirului de biți de intrare. Se observă ca în ciuda nepotrivirilor, ieșirea urmărește încă și seamănă cu șirul de biți digital de intrare. Cu toate că conținutul informației se distinge încă, timpul de apariție a informației a fost distorsionat. Pentru a îrăutăți lucrurile, mărimea distorsiunii pare să fie corelată cu valoarea nepotrivirii.
Figura 4.24 Efectele nepotrivirii de 10% a parametrilor în criptosistem [48], [43]
Limitările lărgimii de bandă și efectele filtrării
Figura 4.25 Efectele limitării lărgimii benzii
Alte tipuri de imperfecțiuni posibil de întâlnit într-un scenariu real de comunicații sunt acelea datorate canalului. Filtrarea poate emula anumite tipuri de efecte ale canalului cum ar fi atenuarea și fadingul [48]. Pornind de la acest lucru, filtrarea trece jos a canalului se folosește pentru a vedea efectele limitării benzii. Întreaga lărgime de bandă a sistemului Lorenz poate fi aproximată cu . Simularea se face pentru o valoare . Rezultatele limitării sunt prezentate în Figura 4.25 (a), în timp ce în (b) sunt prezentate rezultatele în cazul în care banda nu este limitată.
4.3.2 Algoritmul Baptista
Mesajul de transmis este un text compus într-un alfabet anume. Se asociază porțiuni (intervale ) ale atractorului cu unități ale alfabetului. Mesajul criptat ce se transmite, textul cifrat, se obține din textul clar, folosind nu sisteme haotice sincrone sau tehnici de control sau țintire, ci prin folosirea unei propeietăți tipice oricărui sistem haotic: ergotismul.
Folosind o hartă logistică, unidimensională, simplă
(4.12)
unde , pentru un parametru de control b setat pentru a realiza comportarea haotică a ecuației (1), se poate cripta informația repede și sigur pentru o transmitere ulterioară.
Criptarea unui caracter reprezintă numărul de iterații aplicate în (4.12) pentru a-i realiza traiectoria, pornind de la o condiție inițială și pentru a atinge un interval asociat caracterului.
Figura 4.26 Reprezentarea schematică a modului de dividere
a unui atractor în S intervale de mărime [49]
În Figura 4.26 se reprezintă schematic modul prin care se asociază unitățile S ale alfabetului cu intervalele . Fiecare interval are dimensiunea , unde , și este o porțiune a atractorului (poate fi tot atractorul).
Numărul de iterații (textul cifrat) se folosește împreună cu cheile secrete: asociațiile S între S intervale și S unități ale unui alfabet, prima condiție inițială și parametrul de control b (de unde cele S+2 chei secrete) și permite receptorului să decripteze textul cifrat (reconstituind caracterul original) iterând ecuația (4.12) de atâtea ori cât este indicat de textul cifrat. Poziția punctului final, relativ la S intervale , arată receptorului caracterul original.
În paragraful anterior, m-am referit laca fiind prima condiție inițială, deoarece de fiecare dată când se criptează o unitate sau un text clar (de exemplu cuvântul ”salut” este un text clar cu cinci unități), se consideră o nouă condiție inițială. Dacă C1 este textul cifrat al primei unități a textului clar, pentru a cripta unitatea secundă din acest text clar, se va folosi ca condiție inițială:
(4.13)
unde este a C1-a iterație a ecuației (4.12). Dacă C2 este textul cifrat al celei de-a doua unități din textul clar, condiția inițială folosită pentru a cripta cea de-a treia unitate a aceluiași text clar este:
(4.14)
Această regulă se aplică în continuare restului unităților textului clar.
Condiția inițială se schimbă pentru a permite diferitelor unități de text clar de a avea aceeași unitate de text cifrat.
Datorită acestui fapt, metoda criptografică nu face parte din clasa transformărilor unul câte unul, foarte întâlnite în cazul metodelor uzuale de criptare [50].
De notat însă este faptul că lui i se poate atribui valoarea. Se preferă a nu se folosi această notație, deoarece vreau să accentuez că, independent de valoarea inițială, unitatea de text cifrat Cn este un număr care nu depășește valoarea 65532. În afara acestei condiții, unitatea de text cifrat depinde de doi parametrii, un timp efemer N0 și un coeficient .
Datorită dimensiunii traiectoriilor folosite, trebuie revăzute anumite puncte despre ergotism. Datorită ergotismului, un număr infinit de traiectorii (pornind de la orice ), de diferite dimensiuni ajung la același interval . Ca rezultat o singură unitate dintr-un text clar poate fi criptată într-un număr infinit de moduri. Totuși, a lucra cu un număr așa mare de posibilități nu este practic și nici necesar.
Motivul pentru care se consideră o traiectorie de dimensiune mică, care reprezintă o unitate criptată a textului clar, se bazează pe existența unei densități naturale invariante a atractorilor haotici. Această densitate invariantă care reprezintă distribuția spațială a traiectoriei de dimensiune infinită, se poate descrie cu o traiectorie de dimensiune finită. În plus, datorită ergotismului, aproape orice condiție inițială, în urma iterației, generează un atractor cu aceeași densitate naturală invariantă. Datorită ergotismului sistemelor haotice, aproape orice condiție inițială iterată printr-un astfel de sistem va atinge un interval de multe ori, demonstrând că acest interval aparține atractorului. Frecvența cu care fiecare porțiune a atractorului este vizitată depinde de densitatea sa.
Pentru a calcula densitatea naturală invariantă, dar nu în mod analitic, trebuie să considerăm o traiectorie de N iterații, pornind de la un anumit și să verificăm distribuția sa în intervalele în care împărțim atractorul. Am ales valoarea de 65532 iterații, astfel încât Cn să fie ușor de calculat și trimis receptorului folosind numai o transmisie a unui întreg de un bit.
Necesitatea timpului efemer, N0, este deoarece, dacă cineva cunoaște toate cele S chei, corespunzătoare celor S asociații între S unități ale unui alfabet și cele S intervale , dar nu are cunoștințe complete despre condiția inițială sau b (cunoștințe complete înseamnă că cineva cunoaște aceste chei cu precizia numerică folosită, cu o precizie de 16 digiți), nu va putea sparge metoda criptografică, de vreme ce ecuația (1) aplicată folosind chei care au o valoare de 10-16, foarte diferite de cele reale (și b), conduce la traiectorii diferite după 250 de iterații, datorită sensibilității la condițiile inițiale pe care o au sistemele haotice. Această siguranță de 16 digiți a celor două chei b și , necesită o metodă încercare și eroare de spargere a criptării (dacă sunt singurele chei necunoscute) cu un număr de 1016×1016 încercări.
Am obligat unitatea de text cifrat Cn să fie un număr mai mare decât N0 și mai mic decât 65532. Dar sunt multe opțiuni pentru Cn (depinde de distribuția densității). Printre acestea, emițătorul trebuie să aleagă unul care va fi transmis receptorului. Modul în care emițătorul decide care Cn va fi transmis depinde de coeficientul , un număr cunoscut numai de emițător. Dacă =0, mesajul de transmis, Cn este numărul n1, numărul minim de iterații necesare pentru ca traiectoria (pornind de la un anumit ) să atingă un anume interval asociat cu caracterul, demonstrând că . Dacă 0, de fiecare dată când (pentru ) traiectoria ajunge în intervalul dorit, emițătorul primește un număr k de la un generator aleator (o distribuție normală în intervalul [0,1]) și verifică dacă sau nu. Dacă de, ni se consideră numărul de iterații necesare traiectoriei pentru a atinge intervalul. Dacă nu, emițătorul continuă să itereze ecuația (1) până la satisfacerea condiției.
Un alt avantaj al coeficientului este proprietatea de aplatizare a distribuției de frecvență a unui text cifrat lung (sau mai multe texte cifrate alăturate). Aceste efect de aplatizare este foarte important, de vreme ce distribuția generică a unui text cifrat folosind această metodă depinde de cheia secretă b. Cu cât este mai mare , cu atât este mai plată distribuția de frecvență. Totuși, dacă crește, crește și numărul de iterații necesare pentru ca traiectoria să atingă intervalul dorit. Acest număr trebuie să fie mai mic ca 65532. Pentru aceasta .
Un alt avantaj al lucrului cu întregi este că transmisia este rezistentă la zgomot și că mesajul nu este transmis împreună cu semnalul haotic, ceea ce ar permite unui intrus reconstituirea dinamicii sistemului care generează semnalul haotic și identificarea mesajului [51]. Nu se mai folosesc sistemele de mari dimensiuni, a căror reconstrucție a dinamicii este dificilă.
O îmbunătățire a securității, adesea folosită în criptografie [50], ar fi o schimbare periodică a cheilor.
4.4 Funcții hash criptografice
4.4.1 Cerințele funcțiilor hash
Funcțiile de dispersie (hash functions) joacă un rol important în autentificarea conținutului unui mesaj transmis în rețelele de calculatoare. Rolul lor nu este de a asigura secretul transmisiilor, ci de a crea o valoare h=H(M), numită și rezumat (digest), cu rol în procedura de semnătură digitală, foarte greu de falsificat (vezi Figura 4.16).
În procedura de semnare sunt implicate trei entități:
M – mesajul de semnat;
h=H(M) – amprenta digitală a mesajului (rezumatul calculat prin hash);
S=SignK(H(M)) – semnătura digitală.
Funcțiile de hash au câteva caracteristici comune:
fiind dat M, este simplu să se calculeze h;
fiind dat h, este greu să se calculeze M, astfel încât H(M)=h;
fiind dat M, este greu să se găsească un alt mesaj M’, astfel încât H(M)=H(M’);
este greu să se găsească 2 mesaje aleatoare, astfel încât H(M)=H(M’), proprietate numită rezistență la coliziune.
Una din cerințele fundamentale pentru o astfel de funcție este ca, modificând un singur bit la intrare, să producă o avalanșă de modificări în biții de la ieșire. Această caracteristică face ca funcțiile hash să poate fi folosite și pentru asigurarea integrității datelor transmise.Nu este ușor să se proiecteze un astfel de algoritm. Se folosesc iterativ funcții greu inversabile (one-way), care primesc la intrare un bloc de mesaj de lungime m și furnizează la ieșire un mesaj comprimat, de lungime mai mică (vezi Figura 4.27):
Figura 4.27 Funcție “one way” folositã la hashing
Această valoare rezumat, împreună cu următorul bloc din mesaj, vor da următoarea valoare rezumat. În practica criptografică, valoarea rezumat a unui mesaj se calculează în general la o lungime de 128 de biți, valoare considerată suficient de sigură pentru un atac de deducere a unui mesaj diferit, cu aceeași valoare rezumat.
4.4.2 MD5
MD5 este unul dintre cei mai recenți algoritmi ai unei funcții de dispersie prin metode criptografice, foarte folosit în SUA, al cărei autor este Ronald Rivest, unul din coautorii celebrului algoritm cu chei publice RSA. Algoritmul a apărut pentru prima dată în 1991, fiind o perfecționare a ceea ce, cu un an mai în urmă, același autor prezentase sub numele de MD4.
Descrierea algoritmului
MD5 acceptă la intrare mesaje în blocuri de câte 512 biți, fiecare bloc fiind împărțit în 16 sub-blocuri de câte 32 de biți. Ieșirea algoritmului este un set de patru blocuri de câte 32 de biți care, concatenate, vor constitui valoarea rezumat de 128 de biți a mesajului.
Figura 4.28 Schema generalã a algoritmului MD5 [32]
Figura 4.29 Operațiile unei runde MD5 [32]
Calculul rezumatului unui mesaj M se face în 5 etape:
Mai întâi, dacă este necesar, mesajul M este extins astfel încât lungimea sa să fie congruentă cu 448 mod 512 biți; extensia se face cu un singur 1 urmat de atâți biți de 0 câți sunt necesari.
La rezultatul etapei 1 se adaugă o valoare de 64 de biți care reprezintă lungimea mesajului original M. mesajul obținut prin aceste transformări este format din N zone de 512 biți (16 cuvinte de 32 de biți) notate M1, M2,…, MN. Acești doi pași de preprocesare sunt necesari pentru a face ca mesajul să aibă o lungime multiplu de 512 biți, așa cum cere restul algoritmului, asigurând în același timp că mesaje diferite nu vor arăta la fel după completare.
Se folosește un registru MD de lungime 128 de biți (4 cuvinte de 32 de biți) pentru a se calcula rezumatul;
Mesajul M este prelucrat în blocuri succesive de 16 cuvinte de 32 de biți (Mj), prelucrarea fiecărui bloc făcându-se în 4 runde (vezi Figura 4.28), fiecare rundă fiind formată din 16 pași (vezi Figura 4.29);
Registrul MD conține la sfârșitul prelucrărilor ieșirea, adică valoarea rezumat de 128 de biți.
Prelucrarea unui bloc se face astfel:
Se începe cu o valoare inițială constantă MD0, iar la sfârșit MDN reprezintă rezumatul.
Patru variabile pe 32 de biți, numite variabile de înlănțuire, sunt inițializate astfel:
A = 0x01234567
B = 0x89abcdef
C = 0xfedcba98
D = 0x76543210
Valoarea MD0 este formată prin concatenarea celor patru constante inițiale.
După aceasta începe bucla principală a algoritmului, care se execută de un număr de ori egal cu numărul de blocuri de 512 biți din care este compus mesajul. Cele patru variabile sunt mai întâi copiate în alte variabile (în registru): A în a, B în b, C în b și D în d.
Bucla principală are patru runde (MD4 avea numai trei), toate foarte asemănătoare. Fiecare rundă conține 16 operații, fiecare dintre acestea executând o funcție neliniară asupra a trei dintre variabilele a, b, c și d, adunând apoi rezultatul cu un sub-bloc de mesaj și o constantă, rotind apoi rezultatul cu un număr variabil de biți spre stânga și adunând ceea ce s-a obținut cu una din variabilele a, b, c sau d (vezi Figurile 4.28 și 4.29).
Există patru funcții neliniare, câte una pentru fiecare rundă:
S-a notat aici cu complementul față de 1 al lui X, cu funcția AND, cu funcția SAU inclusiv, iar cu suma modulo 2 (SAU exclusiv).
Dacă Mj reprezintă al j-lea sub-bloc al unui bloc mesaj, j=0..15, iar <<<s reprezintă o deplasare la stânga cu s biți, cele patru operații sunt următoarele:
Constantele ti au fost alese astfel: la pasul i, ti este partea întreagă a rezultatului înmulțirii 232*abs(sin(i)), unde i este în radiani.
După toate acestea, variabilele a, b, c și d sunt adunate la A, B, C și D, iar algoritmul continuă cu următorul bloc de date. Rezultatul final îl reprezintă concatenarea celor patru variabile, A, B, C și D.
Se poate aprecia complexitatea algoritmului MD5, care poate fi considerat ca un standard “de facto” în aplicațiile care cer calculul rezumatului unor fișiere prin metode criptografice.
Dintre calitățile lui MD5, putem remarca:
are 4 runde;
fiecare pas are o constantă aditivă ti;
fiecare pas adună rezultatul pasului anterior, ceea ce crează un efect de avalanșă rapid;
în fiecare rundă, ordinea de alegere a sub-blocurilor Mj din blocul M este alta;
a fost optimizată deplasarea circulară stânga a fiecărei runde pentru a mări efectul de avalanșă; cele patru deplasări folosite în fiecare rundă sunt diferite de cele ale altor runde.
4.4.3 SHA
NIST împreună cu NSA au proiectat un algoritm pentru calculul funcției hash numit Secure Hash Algorithm (SHA), standardul numindu-se SHS (Secure Hash Standard). El este destinat să fie folosit împreună cu sistemul de semnătură digitală DSA (vezi subcapitolul 4.2.4). SHA produce un rezumat de 160 de biți, mai mare decât MD5.
Mai întâi, mesajul este completat la multiplu de 512 biți, în aceeași manieră ca la MD5: se adaugă 1 și atâția de 0, până la 448 de biți, iar ultimii 64 de biți memorează lungimea mesajului înainte de completare.
Rezumatul MD, de 160 de biți, văzut ca cinci regiștri a, b, c, d, e de 32 de biți, se inițializează cu următoarea constantă MD0:
A = 0x67452301
B = 0xefcdab89
C = 0x98badcfe
D = 0x10325476
E = 0xc3d2e1f0
Apoi începe ciclul principal al algoritmului. Se prelucrează fiecare bloc Mj de 512 biți al mesajului. Cele patru variabile sunt mai întâi copiate în alte variabile: A în a, B în b, C în b, D în d și E în e. Fiecare prelucrare are 4 runde a câte 20 de operații fiecare. Funcția neliniară, care se modifică la fiecare rundă, este definită astfel:
În algoritm mai sunt utilizate 4 constante:
Figura 5.30 prezintă schema generală a algoritmului unei operații SHA [39].
Se notează cu t numărul operației . Fiecare bloc Mj de 16 cuvinte de 32 de biți este transformat în 80 de sub-blocuri Wt , folosind următorul algoritm:
La sfârșitul celor 4 runde care prelucrează un bloc de 512 biți, valorile noi ale lui MDj (a, b, c, d și e)se adună la valorile anterioare, obținute prin prelucrarea blocurilor precedente, MDj-1:
Algoritmul SHA pentru o rundă este următorul:
Din analiza algoritmului SHA, se poate sesiza o complexitate sporită lui MD5, atât datorită creșterii numărului de pași cât și datorită măririi dimensiunii rezumatului.
Figura 4.30 Algoritmul unei operații SHA [32]
4.4.4 Funcții hash ce folosesc cifruri simetrice
Este posibilă folosirea cifrurilor simetrice de tip bloc drept funcții “one-way” care să genereaze valori hash. Pe post de funcții bloc simetrice, notate în scheme cu Echeie(date) se poate folosi orice algoritm criptografic, cum ar fi IDEA, DES, RC4, FEAL etc. Iată câteva dintre aceste scheme:
Schemele MDC-2 și MDC-4 [32]
Figura 4.31 Algoritmul MDC-2 [32]
Figura 4.32 Algoritmul MDC-4 [32]
MDC-2 (vezi Figura 4.31) și MDC-4 (vezi Figura 4.32) au fost dezvoltate mai întâi la IBM, folosind cifrul DES. Cea de-a doua schemă face parte din proiectul RIPE. Ele au o tărie considerabilă, generată de rezistența lui DES. Ieșirea funcțiilor este de 128 de biți, obținuți prin concatenarea celor 2 rezumate calculate, MD1 și MD2.
Scheme în care dimensiunea hash-ului este egală cu cea a blocului
Algoritmul general al unei astfel de scheme este:
, unde:
IV este valoarea aleatoare de inițializare;
MD este rezumatul;
B și C pot fi Mi, MDi-1, sau o constantă;
Mi este un bloc din mesajul al cărui rezultat se calculează.
4.4.5 Coduri de autentificare a mesajelor (MAC)
Un cod de autentificare a mesajelor, sau MAC (Message Authentication Code), este o funcție hash dependentă de o cheie. MAC au aceleași proprietăți ca și funcțiile hash discutate anterior, dar ele includ de asemenea și o cheie. Numai cineva care deține cheia poate verifica rezumatul. MAC sunt foarte utile pentru realizarea autentificării, fără secretizare.
MAC pot fi de asemenea utilizate pentru autentificarea fișierelor între diferiți utilizatori. Pot fi de asemenea utilizate de către un singur utilizator pentru a determina dacă fișierele sale au fost modificate, de exemplu de un virus. Un utilizator poate să calculeze MAC-urile fișierelor sale și să stocheze valorile respective într-o listă sau tabel. Dacă el folosește în schimb o funcție hash, atunci virusul poate să calcula noul rezumat după infectare, înlocuindu-l pe cel din tabel. Acest lucru nu se mai poate face dacă se folosește MAC, întrucât virusul nu are cum să cunoască cheia.
O metodă simplă de a transforma o funcție hash într-un MAC este criptarea rezumatului cu ajutorul unui algoritm simetric. Orice MAC poate fi transformat într-o funcție hash prin simpla publicare a cheii.
CBC–MAC
Cel mai simplu mod de a face dependentă de cheie o funcție hash este de a cripta mesajul cu un algoritm bloc în modurile CBC sau CFB. Rezumatul este ultimul bloc criptat, criptat încă o dată în modurile CBC sau CFB.
Potențiala problemă privind securitatea în cazul acestei metode este aceea că cel care recepționează mesajul trebuie să aibă cheia, aceasta permițându-i să genereze mesaje cu aceeași valoare hash ca a mesajului dat prin decriptarea în sens invers.
Message Authentication Algorithm (MAA)
Acest algoritm este un standard ISO. Rezumatul calculat este pe 32 de biți.
Aceste iterații se fac pentru fiecare bloc de mesaj, Mi, hash-ul rezultant fiind un XOR între x și y. Variabilele v și e sunt dependente de cheie. A, B, C și D sunt constante. Acest algoritm este probabil foarte utilizat, dar unii specialiști 1 nu cred că el oferă o siguranță absolută, fiind proiectat cu mult timp în urmă și nefiind foarte complicat.
MAC bidirecțional
Acest MAC generează o valoare hash de lungime dublă față de cea a blocului algoritmului. Mai întâi se calculează valoarea CBC-MAC a mesajului, apoi se calculează valoarea CBC-MAC a mesajului luându-se blocurile în ordine inversă. Valoarea MAC bidirecțional se obține prin simpla concatenare a celor două rezultate. Din păcate, această securitate nu este foarte sigură.
IBC-Hash
IBC-Hash este alt tip de MAC, adoptat de proiectul RIPE. El este interesant deoarece în urma testelor s-a dovedit a fi foarte sigur. Din nefericire, fiecare mesaj trebuie procesat cu o cheie diferită. Nivelul dorit de securitate impune restricții privind lungimea maximă a mesajului care poate fi prelucrat. Din aceste considerente, raportul RIPE recomandă ca IBC-Hash să fie utilizat numai pentru mesaje lungi, care se transmit mai rar.
Funcția folosită este
Cheia secretă este formată din perechea p și v, unde p este un număr prim format din n biți, iar v este un număr aleator mai mic decât 2n. Valorile Mi sunt obținute printr-o procedură de completare pretențioasă. Astfel, utilizatorii pot alege un nivel de securitate dorit prin schimbarea parametrilor.
4.5 Utilizarea algoritmilor criptografici
Putem privi securitatea – securitatea datelor, securitatea comunicațiilor, în general securitatea informațiilor de orice fel – ca un lanț. Securitatea întregului sistem este o combinație puternică de legături slabe. Totul trebuie securizat: algoritmii criptografici, protocoalele, programele de administrare etc. Dacă, de exemplu, algoritmii sunt puternici, însă există probleme cu generatorul de numere aleatoare, orice criptanalist va ataca sistemul pe această cale. Dacă nu sunt securizate locațiile de memorie care conțin cheia, criptanalistul va sparge sistemul utilizând această slăbiciune. În timp ce proiectantul securității unui sistem trebuie să identifice toate căile posibile de atac și să le asigure, un criptanalist are nevoie doar de o singură slăbiciune pentru a pătrunde în sistem.
Criptografia este doar o parte a securității; ea acoperă problematica realizării securității unui sistem, ceea ce este diferit de ceea ce înseamnă realizarea unui sistem securizat. Tradiționala imagine a criptografiei ca “spion” în tehnologie este destul de departe de realitate. Peste 99% din aplicațiile criptografice utilizate în lume nu protejează secrete militare; ele sunt întâlnite în bănci, plăți – TV, taxe de drum, acces la terminale, contoare de electricitate etc. Rolul criptografiei în aceste aplicații este de a împiedica efectuarea de furturi și înșelăciuni. În cele mai multe dintre aceste aplicații s-a utilizat prost criptografia, atacurile reușite neavând însă nimic cu criptanaliza. Chiar și NSA a admis că marea parte a erorilor apărute în activitățile sale provin din erorile de implementare și nu din algoritmi sau protocoale. În aceste condiții, nu contează cât de bună a fost criptografia, atacurile reușite anulând acest lucru și speculând erorile de implementare.
5. Algoritmul de criptare MD5
5.1 MD5 Prezentare generala
5.1.1 Definitia unei functii hash
Definitie: O functie hash criptografica opereaza asupra unui string de lungime arbitrara introdus la intrare si genereaza la iesire un string de lungime fixa. String-ul de la iesire este in od uzual denumit valoare hash sau mesaj rezumat (message digest).
Functiile hash au o utilitate diversa, fiind foarte folosite si utile. MD2 [13], MD4 [20] and MD5 [21] sunt functii hash proiectate de Ron Rivest la MIT pentru RSA Data Security. O descriere a acestor functii hash poate fi gasita in cadrul raportuluii tehnic TR-101 [22] oferit de laboratoarele RSA. Popularitatea functiilor hash din familia MD este o marturie a designului inovator si de succes. MD4 a fost folosit ca baza pentru designul altor functii hash (MD5, SHA-1, RIPEMD), iar despre functia hash MD5 putem spune ca este cea mai folosita funtie hash din lume la ora actuala. De-a lungul anilor, rezultatele criptanalizei cu ajutorul algoritmilor MD2, MD4 si MD5 au devenit accesibile si prezentarea ce urmeaza sumarizeaza aceste rezultate ale criptanalizei si analizeaza impactul lor.
Pentru inceput se iau in considerare proprietatile functiilor hash. Un aspect important luat in considerare este acela ca nu toate aplicatiile unei functii hash se bazeaza in asigurarea securitatii pe aceeasi proprietate a functiilor hash. De aceea este foarte importanta identificarea acelei proprietati a functiei hash care e folosita in cadrul implamentarii.
5.1.2 Proprietatile functiilor hash
Functiile hash prezinta o varietate de proprietati dintre care trei sunt foarte raspandite in literature de spacialitate [18].
Pentru inceput consideram situatia in care alegem o valoare de iesire pentru o fuctie hash. Ar trebui sa fie infernal sa caute o valoare de intrare care sa genereze valoare de iesire aleasa. O analiza in profunzime a acestui aspect ne furnizeaza o a doua conditie care ne spune ca si-n cazul in care am da o pereche de valori unei functii hash (o valoare de intrare si o valoare de iesire), ar trebui sa ramana imposibila gasirea unei alte valori distincte pentru intrare, astfel incat sa se genereze aceeasi valoare la iesire. Datorita acestui aspect, putem spune ca o astfel de functie hash este o functie hash unidirectionala [18].
O a treia conditie care este uneori ceruta a fi indeplinita este aceea a imposibilitatii gasirii a doua valori de intrare pentru o functie hash, corespunzatoare pentru o singura valoare de iesire generate de acea functie. Aceasta conditie este in mod obisnuit mentionata ca si gasirea unei coliziuni pentru functia hash. Din moment ce exista posibilitatea unui numar arbitrar de stringuri la intrare si un numar fix de valori de iesire, trebuie sa existe coliziunea pentru o functie hash. Obiectivul urmarit este de a ne asigura ca sunt imposibil de gasit asemenea situatii. Termenul de functie hash rezistenta la coliziuni este folosit uneori pentru a descrie o functie hash care poseda toate cele trei proprietati descrise aici si este termenul la care se gandesc majoritatea oamenilor cand vorbesc despre o functie hash in general. (RSA Laboratories Bulletin #4 November 12-1996)
O functie hash rezistenta la coliziuni prezinta o multime de proprietati folositoare, totusi pot aparea si situatii neplacute. De exemplu, o functie hash este adesea folosita pentru a reduce un mesaj la dimensiunea unui string de lungime redusa care este apoi insemnat (marcat) cu ajutorul unui algoritm de semnatura digitala. Exista un foarte bine cunoscut atac la aceasta procedura [26] care depinde de asa-zisul paradox de aniversare. Pentru a preveni acest atac se face apel la proprietatea de rezistenta la coliziuni si ca si consecinta apelam la functii hash care produc la iesire o valoare care are o lungime de cel putin 128 biti. Acest stil de atac se aplica mai des atunci cand semnatura digitala este calculata direct asupra rezumatului mesajului ce urmeaza a fi insemnat. Schemele de insemnare digitala probabilistica propuse recent de Bellare si Rogway [3] prezinta cateva proprietati interesante, astfel cerintele plasate unei functii hash in cadrul unor astfel da scheme ar putea fi mai putin distrugatoare. Este foarte interesant faptul ca semnaturile digitale insemnate anterior cu ajutorul unei functii hash care nu mai este rezistenta la coliziuni raman protejate de atacuri. Daca se ataca o semnatura existenta, rolul criptanalizei este esential in gasirea unui al doilea mesaj, din moment ce primul impreuna cu valoarea hash asociata sunt deja stabilite. Aceasta sarcina este o problema mult mai grea decat aceea de a gasi o coliziune si poate fi foarte bine cazul in care partea tehnica generatoare de coliziuni pentru o functie hash nu ofera nici un avantaj in gasirea unui al doilea mesaj. Totusi, semnaturile existente ar putea fi salvate de riscul de a fi compromise, chiar sic and rezistenta la coliziuni este pierduta. Cand o functie hash este folosita pentru alte proprietati decat aceea de rezistenta la coliziuni, situatia referitoare la compatibilitatea acelei functii hash dupa descoperirea coliziunilor poate ramane neschimbata. Generarea unor valori aleatoare de iesire poate fi considerate una dintre proprietatile cele mai des apelate ale unei functii hash. O alta proprietate care nu e afectata de lucrul asupra coliziunilor este proprietatea de unidirectionalitate. Cand o functie hash este folosita strict ca si functie unidirectionala, s-ar putea ca memorarea unei tabele de hash-uri de parole pentru calculator, urmata de lucrul asupra coliziunilor s-ar putea san u mai aibe relevanta.
Putem concluziona cu faptul ca exista multe situatii in care functiile hash sunt folosite pentru alte proprietati decat aceea de rezistenta la coliziuni. Se observa de asemenea ca proprietati acre sunt relevante pentru securitatea criptografica intr-un anumit mediu nu sunt neaparat relevante in alt mediu.
5.1.3 Structura Functiilor hash
Majoritatea functiilor hash au o structura repetitiva asemanatoare care se bazeaza pe ceea ce numim functie de comprimare [4, 14]. Calcularea unei valori a functiei hash pentru un mesaj depinde de inlantuirea variabilelor. La inceputul procesului de hashing, acest lant de variabile are o valoare initiala fixa acre este specificata ca facand parte din algoritm. Functia comprimata este apoi folosita pentru a actualiza valoarea acestei variabile inlantuite intr-un mod potrivit, sub actiunea si influenta unei parti din mesajul care e prelucrat cu ajutorul functiei hash.
Acest proces continua in mod recursive, cu actualizarea variabilei de inlantuire sub actiunea unor diferite parti din mesaj, pana cand tot mesajul este folosit. Valoarea finala a variabilei de inlantuire reprezinta iesirea ca si valoarea hash corespunzatoare acelui mesaj.
Functiile hash MD4 si MD5 sunt aproximativ similare ca si design, reprezentand si sursa de inspiratie din punct de vedere al designului pentru cateva functii hash recente. MD2 este una dintrele primele functii hash, dar este inca folosita pentru cazurile in care este vorba de medii reprezentate pe 8 biti (spre deosebire de MD4 si MD5 care tintesc spre arhitecturi de 32 biti).
5.1.4 Starea algoritmului MD5
Prezentarea urmatoare poate fi vazuta ca un update al raportului tehnic RSA TR-101 [22] care permite o privire de ansamblu a aceleiasi functii hash inaintea ultimelor imbunatatiri in domeniu.
A ataca algoritmul criptografic MD5 este o propunere care implica mult mai mult decat atacarea algoritmul criptografic MD4, din moment ce este un algoritm de departe mult mai complicat de analizat.
Prima dezvoltare importanta in criptanaliza lui MD5 a fost descoperirea pseudo-coliziunilor pentru comprimareafunctiei MD5 [6]. (RSA Laboratories Bulletin #4 November 12-1996)
O pseudo-coliziune pentru comprimarea functiei hash este exemplificata prin fixarea valorii unor mesaje bloc si gasirea a doua valori distincte pentru variabila de inlantuire care genereaza aceeasi iesire. In timp ce existenta pseudo-coliziunilor este semnificativa din punct de vedere analitic, din punct de vedere practice, nu prezinta o prea mare importanta. Ar fi mult mai semnificativ daca am putea identifica valoare unei singure variabile de inlantuire pentru care doua blocuri de mesaje diferite ar genera aceeasi iesire de la functia de comprimare. O astfel de intamplare are implicatii evidente pentru proprietatea de rezistenta la coliziuni, proprietate dorita la o functie hash. Daca valorile variabilei de inlantuire implicate nu sunt aceleasi cu valoarea initiala (cum e prevazut in specificatiile algoritmului), atunci o astfel de intamplare ar fi denumita ca si coliziune a functiei de comprimare. Daca totusi se pot identifica doua blocuri de mesaje care genereaza o coliziune cand valoarea de intrare specificata anterior e folosita, atunci vom avea o coliziune totala a functiei hash.
Figure 1. Folosirea unei functii de compresie in cadrul unei functii hash repetitive. Functiile hash MD2,MD4,MD5 si SHA-1 urmeaza acest design.[4,14]
La Eurocrypt ’96 s-a anuntat ca s-au gasit coliziunile pentru functia de comprimare a lui MD5. Dobbertin a demonstrat ca aceste coliziuni pentru functia de comprimare pot fi gasite in 10 ore. Pseudo-coliziunile descoperite de Boer si Bosselaers nu au putut fi extinse la coliziunile totale pentru MD5. Pentru a crea un atac asupra MD5-ului este nevoie de o munca de analiza consumatoare de mult timp si efort. Nu in ultimul rand, ar fi o greseala san e bazam prea mult pe faptul ca tehnologia curenta genereaza coliziuni doar pentru functia de compresie a lui MD5. Se doreste in viitorul apropiat gasirea coliziunilor pentru toate functiile hash.
5.1.5 Alte functii hash
Ca si functii hash alternative, pot fi inca recomandate: SHA-1, RIPEMD-128 si RIPEMD-160, acestea prezentand siguranta pentru orice aplicatie. In timp ce toate aceste trei functii hash prezinta similitudini cu MD4 si MD5 din punct de vedere al structurii, din punctul de vedere tehnic al lui Dobbertin similitudinile nu se extend la aceste functii hash. Astfel unul din criteriile de construire a functiilor hash RIPEMD-128 si -160 este reprezentativ.
SHA-1 reprezinta o revizuire [17] a algoritmului SHA (Secure Hash Algorithm) care apare mai intai ca si parte a SHS (Secure Hash Standard), FIPS 180 [16].
Datorita imperfectiunilor din SHA si a faptului ca motivele pentru schimbarile facute in SHA-1 sunt necunoscute, se poate anticipa ca SHA-1 este un bun algoritm hash.
Inaintea functiilor RIPEMD-128 and RIPEMD-160 a fost RIPEMD [19], o functie hash pe 128 biti dezvoltata cu ajutorul schitelor proiectului Uniunii Europene RIPE (Race Integrity Primitives Evaluation). Structura functiei hash s-a bazat pe principiile adoptate de Rivest in construirea functiei hash MD4 si a reprezentat subiectul unor analize considerabile, mai ales in timpul scrierii raportului proiectului RIPE.
In ciuda acestui lucru, tehnicile recent dezvoltate de Dobbertin au fost mai intai folosite atacuri asupra versiunilor cu reprise reduse ale RIPEMD [11].
Ca si consecinta, au fost propuse doua variante ale RIPEMD: RIPEMD-128, care furnizeaza o valoare hash de 128 biti. RIPEMD-128 s-a vrut a inlocui RIPEMD si ofera protectie aditionala impotriva tehnicilor de criptanaliza ale lui Dobbertin. Totusi valoarea hash mai lunga furnizata de RIPEMD-160 (cu o valoare hash de 160 biti) e mai tentanta pe termen lung [24]. In ceea ce priveste performanta, in timp ce RIPEMD-128 pare a fi mai rapid decat SHA-1, RIPEMD-160 este mai lent [12]. Toate aceste trei functii hash sunt mai lente decat MD5.
5.1.6 Concluzii
Semnaturile existente formate folosind MD2 nu sunt supuse riscului, dar algoritmul MD2 nu mai poate fi recomandat pentru viitoare aplicatii care depend de functii hash care sunt rezistente la coliziuni.
MD4 O varietate de rezultate ale criptanalizei au creat nesiguranta asupra complexitatii structurii MD4-ului. [15,5,25]. Au fost demonstrate coliziuni pentru MD4 [7,8]
MD4 n-ar trebui folosit. Folosirea lui n-a mai fost recomandata in literature de specialitate din momentul aparitiei algoritmului MD5.
MD5 Atat pseudo-coliziunile [6] cat si coliziunile [9,10] pentru functia de compresie a lui MD5 au fost demonstrate, totusi coliziunile pentru versiunea full a MD5-ului n-au fost atinse.
Semnaturile existente formate folosind MD5 nu reprezinta un risc si atata timp cat MD5 este inca potrivit pentru o varietate de aplicatii (mai ales pentru acele aplicatii acre se bazeaza pe proprietatile functiilor hash de unidirectionalitate si de valori aleatoare la iesire), ca si masura de precautie ar trebui ca MD5 sa nu se foloseasca pentru aplicatii care cer functii hash rezistente la coliziuni.
Cateva dintre noile evidente criptanalitice confirma suspiciunile aduse la cunostinta de Ron Rivest acum cativa ani si clarifica faptul ca MD4 n-ar mai trebui folosit. Referitor la aplicatiile care folosesc MD2 si MD5, coliziunile pentru aceste functii hash nu au fost inca descoperite dar se asteapta a fi descoperite in viitorul apropiat.
Clientii BSAFE ar trebui sa tina seama ca in timp ce este considerate nepotrivita folosirea algoritmului criptografic MD5 in cadrul aplicatiilor unde se cere o functie rezistenta la coliziuni, folosirea algoritmului MD5 este foarte potrivita pentru aplicatii care fac parte dintr-un mechanism de generare a unor numere aleatoare. MD2 si MD5 sunt inca potrivite pentru o varietate de aplicatii.
References
[1] M. Bellare, R. Canetti and H. Krawczyk. The HMAC construction. CryptoBytes, 2(1): 12-15, 1996.
[2] M. Bellare, R. Canetti and H. Krawczyk. Keying hash
functions for message authentication. In Advances in
Cryptology — Crypto ’96, pages 1-15, Springer-Verlag, 1996.
[3] M. Bellare and P. Rogaway. The exact security of digital
signatures — how to sign with RSA and Rabin. In Advances
in Cryptology — Eurocrypt ’96, pages 399-416,
Springer-Verlag, 1996.
[4] I. Damgård. A design principle for hash functions. In Advances
in Cryptology — Crypto ’89, pages 416–427,
Springer-Verlag, 1990.
[5] B. den Boer and A. Bosselaers. An attack on the last two rounds of MD4. In Advances in Cryptology — Crypto ’91, pages 194-203, Springer-Verlag, 1992.
[6] B. den Boer and A. Bosselaers. Collisions for the compression function of MD5. In Advances in Cryptology —
Eurocrypt ‘93, pages 293-304, Springer-Verlag, 1994. [7] H. Dobbertin. Alf swindles Ann. CryptoBytes, 1(3): 5, 1995.
[8] H. Dobbertin. Cryptanalysis of MD4. In Proceedings of the
3rd Workshop on Fast Software Encryption, Cambridge,
U.K., pages 53-70, Lecture Notes in Computer Science 1039, Springer-Verlag, 1996.
[9] H. Dobbertin. Cryptanalysis of MD5 Compress. Presented at the rump session of Eurocrypt ‘96, May 14, 1996. [10] H. Dobbertin. The Status of MD5 after a Recent Attack.
CryptoBytes, 2(2): 1-6, 1996
[11] H. Dobbertin. RIPEMD with two round compress function is not collision-free. Journal of Cryptology. To appear.
[12] H. Dobbertin, A. Bosselaers, and B. Preneel. RIPEMD-
160: A strengthened version of RIPEMD.
5.2 Analiza de performanta
MD-5 este un algoritm de autentificare propus ca si cerinta de implementare a opțiunii de autentificare în Ipv6. In cele ce urmeaza voi prezenta o analiză a vitezei la care MD5 poate fi implementat hardware si software și discută dacă folosirea lui interactioneaza cu o rețea cu lărgime de bandă înaltă. Analiza indică faptul că software-ul MD5 în mod curent ruleaza la 85mbps si la 190 Mhz pentru o arhitectura RISC. Aceasta rata de transfer a datelor este insuficienta pentru largimea de banda a retelelor din ziua de azi, incluzand HiPPI si transmisia prin fibra optica. O analiza mai detaliata arata ca o implementare hardware VLSI CMOS la 300Mhz pentru MD5 s-ar putea sa fie mai rapida decat 256 Mbps. Rata de transfer a hardware-ului nu poate suporta rata de transfer a datelor specifica pentru IPv4 in cazul in care ne referim la link-uri cu largime de banda mare (800 Mbps HiPPI). Pentru IPv6 ar trebui reconsiderata recomandarea din start a folosirii algoritmului MD5 ca si algoritm de autentificare. Ar trebui recomandata o solutie alternative. In cele ce urmeaza, se va prezenta o scurta descriere a proprietatilor unei astfel de alternative propuse. Se va prezenta si un algoritm hash alternativ.
5.2.1 Introducere
IP-ul (Intemet Protocol) actual a suportat prima modificare majora din ultimii14 ani[24]. O modificare este propunerea unui numar de optiuni necesare pentru noul IP (IPv6, [12]) care nu erau incluse in versiunile anterioare:IP(IPv4, [24]). Subcapitolul trateaza analiza de performanta pentru MD5 [28], fiind un algoritm de autentificare cerut pentru IPv6 [1]. Analiza de performanta indica faptul ca MD5 s-ar putea sa nu adere la criteriile de performanta ale IPv6 [23].
Autentificarea reprezinta o necessitate in IPv6. Optiunea de autentificare permite specificarea per pachet a algoritmului de autentificare potrivit [1]. Este evident ca se cere a fi implementat un algoritm. Mecanismul de autentificare IPv6 propune algoritmul MD5 ca si algoritm necesar a fi implementat. Unele documente din literature de specialitate sustin faptul ca aplicatiile curente prezinta o performanta scazuta, dar aceste limitari vor fi depasite datorita optimizarilor software si datorita imbunatatirilor hardware[10] [11 ] [28].
MD5 poate fi implementat software pe un system cu processor de 190 Mhz RISC, la 85 Mbps. Pe un Sun SPARC 20/71, MD5 executa la 57-59 Mbps, dar IPv4 executa la 120 Mbps (prin Fore SBA-200 IP la ATM). MD5 poate fi de asemenea implementat pe o structura VLSI CMOS, la 300 Mhz, executand pana la 256 Mbps. In contrast cu cele prezentate, Intenet Checksum-ul pentru IPv4 poate fi implementat software la viteze foarte mari (260 Mbps pe un Sun SPARC 20/61, respectiv 38 Mbps pentru MD5), si a fost implementat la 1.23 Gbps intr-un singur chip programabil, care nu e scump (pe 32 biti, paralel, la 26 ns, intr-un dispozitiv logic programabil, costand doar $40 [3 I ]). MD5 prezinta compatibilitate redusa cu ratele disponibile de transfer (800 Mbps HiPPI); cu implementarile disponibile pentru IPv4, intrand in contradictie cu criteriile de performanta ale IPv6.
5.2.2 MD5
MD5 (MD – Message Digest) este un algoritm de autentificare dezvoltat de RSA, Inc. [28], special pentru a fi folosit în criptografie. Algoritmul MD5 este o versiune dezvoltata a algoritmului MD4 [27]. Algoritmul de autentificare calculeaza un rezumat al tuturor datelor din mesaj, folosit pentru autentificare. In general, rezumatul mesajului este inregistrat cu ajutorul unui produs de incredere din categoria “third-party”, sau este criptat cu ajutorul altor procedee [20]. Rezumatul este folosit de receptor, cu scopul de a varifica continutul mesajului. De asemenea, poate fi folosit pentru a cripta continutul mesajului, prin intermediul altei parole pentru date, criptarea realizandu-se cu alt algoritm.
MD5 cere ca atat transmitatorul, cat si receptorul sa calculeze rezumatul intregului continut al mesajului.
MD5 este folosit pentru autentificarea in cadrul unui numar de protocoale. De asemenea este introdus ca un mecanism de incapsulare in cadrul SIPP, IPv6, si IPv4 [19].
5.2.3 Masuri de implementare software
S-a exprimat ingrijorarea daca algoritmul criptografic MD5 face fata celorlaltor protocoale, din punct de vedere al performantei. SNMPV2 este un protocol de control, care nu e conceput pentru un sir de operatii continue pe banda larga, asa ca performanta protocolului nu este critica. Chiar si-n aceasta situatie, SNMP V2 foloseset o serie de macanisme de autentificare cu scopul de a optimiza securitatea vs. performanta., incluzand si unul (DES-CBC) special pentru implementarea in hardware, la 1 Gbps, dupa cum se specifica in [19].
Chestiuni generale legate de algoritmul criptografic MD5
MD5 este o inlantuire de blocuri de rezumate inlantuite, preluate de date in blocuri de 512-byte, in format little-endian, cu cuvinte organizate pe 32 biti (Figure 1). Cand ultimul bloc este prelucrat, rezumatul sau reprezinta rezumatul pentru intregul sir. Aceasta inlantuire impiedica procesarea in paralel a blocurilor.
FIGURE 1. MD5 block-chained digest algorithm [19]
Fiecare bloc de 512-byte este impartit in 4 parti. Fiecare parte este alcatuita din 16 pasi ed baza, in total fiind 64 pasi de baza. Fiecare pas actualizeaza un cuvant obtinut din rezumatul cumulate a 4 cuvinte, folosind in intregul rezumat intermediary, cat si blocul de date si constantele. In general fiecare pas de baza depinde de iesirea furnizata de pasul anterior, infruntant simplul paralelism al pasilor.
Structura de baza a pasilor
MD5 RFC- 1321 include o implementare de referinta scrisa in C. [28]. Performanta acestui software ofera un fundament pentru compararea optimizarilor. Masurarile de performanta ale acestei implementari de referinta precede analiza abstracta care determina centrul analizei si extensiile optimizarilor necesare.
Software-ul pentru implementarea de referinta a MD5 a fost analizat pe 4 masini de configuratii diferite. Configuratie Raw foloseste codul de referinta asa cum e furnizat in RFC, cu modificari asupra masurarilor de timp per process, care sunt preferate in schimbul managementului de cache si a timpului de “wall-clock”. Configuratia optimizata include modificarile descries in subcapitolul 2.1, punandu-se accent pe optimizarea ordinii bitilor. Ambele configuratii au fost executate cu 50 treceri peste blocuri alternative de 2 M bytes, cu scopul de a evita efectele observabile asupra cache-ului. Se pune in evidenta si performanta componentei care genereaza rezumate bloc. S-au masurat performantele folosind cache extern (off-chip), cat si intern (on-chip).
Pentru cache-ul extern s-a constatat ca se executa 5000 de treceri pentru un singur bloc de 20000 byte. Pentru Cache-ul intern se executa 20000 de treceri pentru un singur bloc de 5000 byte. Valorile alese pentru dimensiunile blocurilor s-au ales pe baza informatiilor asupra marimii cache-ul extern, respective intern, dupa cum a fost publicat in urma rezultatelor reperelor SPEC [8].
Toate 4 configuratii au folosit initializarea aleatoare a blocurilor pentru a inlatura posibilele diferentele de performanta cauzate de alegerea datelor.
MD5 nu este un algoritm dependent de date, dar unele arhitecturi ar fi putut prezenta variatii de performanta dependente de date. Sursa algoritmului MD5 a fost compilata atat sub compilator C GNU , cu toate optimizarile necesare. Codul optimizat cheltuie 95% din timpul de executie cu executarea rutinei principale. Pentru masinile la care numerele sunt reprezentate in formatul little-endian rutina principala este reprezentata de rutina de creare a rezumatelor datelor pentru MD5. Pentru masinile la care numerele sunt reprezentate in formatul big-endian, doua trimi din timpul de executie a fost alocat pentru rutina de creare a rezumatelor datelor pentru MD5 si o treime pentru reordonarea bitilor de date, reordonarea aceasta fiind necesara deoarece MD5 foloseste gruparea little-endian a sirului de biti.
Grafic – Measured performance (plot of values from Table 1) [8]
Grafic1.Performance parameters of various platforms” [8]
Modificari specifice
Configuratie Raw include urmatoarele modificari:
Adaugarea unui cod potrivit si a unor flaguri
Folosirea marimii blocului
Folosirea initializarii aleatoare a blocului de test
Buffer dublu de testare a blocului
Flagurile au fost adaugate pentru a permite o configuratie in timpul rularii si pentru a genera o configuratie pentru amnagementul de cache. Masurarea timpul de executie al procesorului a fost modificata astfel incat sa foloseasca cea mai potrivita functie, chiar daca aceasta functie genereaza erori in cazul masinilor foarte solicitate [18]. S-au folosit masini mai putin solicitate pentru a avita aceste erori.
Configuratia optimizata include urmatoarele modificari:
La masinile unde numerele sunt reprezentate in format little- endian, cuvintele de 32 biti sunt incarcate direct
Se evita interschimbarea bitilor
La masinile unde numerele sunt reprezentate in format big- endian, se foloseste o interschimbare de cod mult mai eficienta
Se foloseste o mult mai eficienta interschimbare a bitilor pentru codul sursa
Desfasurarea rutinei de interschimbare a bitilor
Aceste modificari pot fi grupate pe categorii:
Managementul cache-ului
Optimizarea byte-swapping
Loop-unrolling
5.2.3.1 Managementul Cache-ului
Teste preliminare indica faptul ca implementarea de referinta a algoritmului MD5 evidentiaza effectele la nivelul cache-ului. Codul prezentat in continuare include un test in care multiple treceri asupra unui singur bloc de date contureaza continutul unui mesaj lung. Acest bloc de date a fost initializat cu date inainte ca algoritmul MD5 sa fie executat.
Codul sursa a fost modificat pentru a reduce efectele asupra cache-ului. Au fost adaugate reserve pentru buffer dublu. Prin alternarea blocurilor de date folosite in timpul repetarilor blocurilor, s-au evitat efectele nedorite asupra cache-ului. Configuratia liniei de comanda a marimii de blocului permite pentru blocuri configuratii mai mari decat cache-ul (cu dublarea bufferului, fapt care duce la eliminarea efectelor asupra cache-ului); blocuri care se potrivesc in cache-ul extern, nu si in cel intern(fara dublarea bufferului); si blocuri care se potrivesc in cache-ul intern.
Nu este foarte clar care masuratori sunt mai apropiate de performantele MD5-ului, cele ale cache-ului intern, extern sau masuratorile noncache. Pentru gazdele care folosesc transfer de date DMA, performanta masuratorilor noncache-urilor este cea mai apropiata. Exista arhitecturi propuse care au suporta DMA direct in cache-ul extern al procesorului.
5.2.3.2 Byte-swapping optimizations
Algoritmul MD5 foloseste formatul little-endian pentru un sir de biti, astfel incat implementarile asupra arhitecturilor originale pot evita ordonarea bitilor si rutinele de copiere. Evitand ordonarea bitilor si rutinele de copiere, codul se va executa in 2/3 din timpul initial. Specificatia de format little-endian pentru un sir de biti este opusa specificatiei de “ordonare standard a bitilor in cadrul unei retele”, numita big-endian [24]. In cadrul arhitecturilor big-endian, reordonarea bitilor a fost optimizata prin inlocuirea ei cu un cod sursa mult mai efficient in cazul compilarii. Codul de referinta foloseste urmatorul cod de interschimbare a bitilor, care este independent de masina (fiind correct atat pentru big- cat si pentru little-endian machines), dar este inefficient:
out [i] = ((u–int)in[jl )
I (((u_int)in[j+ll) << 8)
I (((u_int)in[j+21) << 16)
] (((u_int)in[j+31) << 24)
[24]
Acest cod compileaza pentru urmatorul pseudo-ansamblu, 4 instructiuni de load, 6 operatii interne, si o operatie de store:
Load b in@j rl
Load b in@j +1 r2
Load b in@j+2 r3
Load b in@ j +3 r4
shl r2, #8, r2
or r2, rl, rl
shl r3, #16, r3
or r3rrl, rl
shl r4, #24, r4
or r4, rlrrl
Stw rl, out@i
Urmatorul cod s-a dovedit a rula mai repede:
/’ left rotate ‘/
# clef ROL(x, n) ((x)< e(n) )I((x)>>(32-(n) )))
templ = ROL(((u_int )input[i] ),16);
temp2 = tentpl >> 8;
templ &= Oxooifooff;
temp2 k= Oxooffooff;
tern@ <<= 8;
out[i] = tetnpl I temp2;
[24]
Codul al doilea compileaza 8 operatii pe masini care nu prezinta interschimbarea de operatii, si foloseste doar o operatie de load 32-bit (Table 2). Codul acesta ruleaza cu 25% mai repede decat codul initial, fapt care s-ar traduce in cazul masinilor big-endian cu o accelerare totala de 9%.
Urmatorul cod foloseste o operatie de load, 5 operatii interne, pentru ca aceasta masina prezinta o rotate pe 32 biti (Table 2). Ca rezultat, numarul operatiilor interne a scazut de la 6 la 5, adauganduse un procent la optimizarea generala. Codul nu a fost folosit si pentru alte masini pentruar fi generat o secventa mai lunga de instructiuni (9):
out [i] = (R0L(in[il,8) & OxOOffOOff)
1 ROL(in[i] & 0x00ff0t)ff,24);
Urmatoarea tabela centralizeaza dimensiunea in operatii a celui mai efficient algoritm de reorganizare a bitilor, bazandu-se pe posibilitatile operatiilor folosite. Presupune o singura operatie de load a 32 biti, urmata de o singura operatie de store a 32 biti:
TABLE2.Optimal swapdependson opcodesavailable [19]
Aceasta optimizare a inlocuit 4 operatii de load si 6 operatii ce calculau cu 1 operatie de load si 8 operatii ce calculeaza. Rezultatul este: 3 operatii de load pentru 2 calcule. Chiar si in cazul arhitecturilor RISC, operatiile de load necesita multe cicluri de clock, datorita acceselor intarziate la memorie (figura 3). Aceast rezultat obtinut poate fi folosit pentru a crea un algoritm hash mult mai rapid. Schimbarea codului de referinta prezinta un parallelism al calculelor mai mare, dar operatiile de load nu prezinta parallelism. Optimizare permite un parallelism bidirectional, operatii de load pipelinizate, pentru ca timpul necesar unei operatii de load este mai mic decat timpul necesar unei operatii de calcul.
S-a constatat o imbunatatire de 25% a vitezei de lucru la arhitecturile testate.
5.2.3.3 Loop-unrolling
Optiunea de Loop-unrolling este oferita de multe compilatoare. In cazul codului de referinta pentru MD5, operatia eficienta de Loop-unrolling a fost posibila prin convertirea indicilor array in pointeri. A fost necesara operatia manuala de Loop-unrolling pentru o minima optimizare a interschimbarii bitilor.
FIGURE3.Data flowanalysis ofswap execution [19]
5.3 Analiza Software
Analiza optimizarii manuale indica faptul ca limitarile analitice au fost suficiente pentru a prezice limitarile de performanta (analiza swap). Analiza manuala a algoritmului MD5 principal a avut menirea de a determina potentialul pentru impunatatirea performantei vitezei de compilare. Analiza codului algoritmului MD5 este foarte complexa.
5.3.1: Analiza costului pentru MD5
Costurile algoritmului MD5 sunt proportionale cu costurile de baza ale unei etape. Pentru fiecare cuvant de la intrare, se executa 4 pasi(etape) de baza. Posibilitatea operatiei de pipeline pentru acesti 4 pasi este putin probabila. Totusi, analizand costurile pentru etapa(pasul) de baza , pot fi determinate limitele imbunatatirii performantei. Pasul de baza poate fi mapat conform figurii 4. Calea critica este maracta in diagrama cu o linie neagra, celelalte cai fiind reprezentate cu gri. Dependentele de pasii anteriori(indicate printr-o stea) au fost intarziate.
Timpul necesar procesarii unui pas de baza depinde de timpul de procesare al fiecarui pas alaturi de toatlul de paralelisme posibile. Costul unei operatii de rotire pe biti se poate limita la 1-3 operatii pentru o masina RISC; masinile CISC prezinta o variabilitate asemanatoare pentru numarul de cicluri de clock necesare pentru executia unei astfel de instructiuni. Costul unei operatii logice variaza si el, depinzand de instructiile procesorului: instructii separate sau combinate AND-NOT si OR-NOT. In tabela 4 se pot vedea costurile acestor instructii si costul instructiunilor de rotire pe biti pentru procesoare diferite. Timpul pentru procesarea functiilor logice F,G,H,I poate fi in mod similar reprezentat atat cu, cat si fara masina AND-NOT si 3.75 + shift pe o masina AND-NOT. Operatorii OR-NOT sunt ilustrati in figura 5 si-n figura 6. In fiecare caz, X este inainte, rotatiile consuma intre 1-3 operatii.
FIGURE 4. Dataflow timing diagram for a basic step [19]
FIGURE 5. Dataflow diagrams for functions F,G,H, and I [19]
FIGURE 6. Function data flows with AND-NOT I OR-NOT [19]
5.4 Analiza Hardware
Analiza software indica o limita de performanta care este insuficienta pentru a face fata implementarilor IPv4. O analiza hardware a fost conceputa pentru de a determina viteza si dimensiunea unei potentiale implementari hardware.
Pentru analiza hardware a fost folosita implementarea paralela, bazata pe diagrama pasului initial a fluxului de date (figura 4). Structura hardware este o implementare a fluxului de date raportata la cicluri de clock a diagramei abstracte a fluxului de date, incluzand si calea critica, evidentiata in figura cu negru (figura 7). Functiile logice de intrare, au fost inlocuite cu un singur bloc logic. Cele 4 sumatoare au ramas. Pentru o implementare VLSI CMOS, cel mai rapid sumator ruleaza la aproximativ 300 Mhz si necesita 2 cicluri de clock pentru fiecare adunare. Calea critica prin pasul de baza este de 6 cicluri de clock, 31.2 ns fiind allocate fiecarui pas de baza (Figure 8). Luand in considerare ca avem 4 pasi de baza/ cuvant de intrare, avem in total 124.8 ns/ cuvant de intrare , sau 256 Mbps.
Structura necesita un parallelism de 2 sumatoare, 4 unitati logice si o unitate de shiftat (Figure 7). Chip-ul necesita urmatoarele:
Unitati functionale
2 sumatoare pe 32 biti de viteza mare
4 unitati logice de viteza mare (cate una pentru fiecare functie logica)
O unitate de shiftat de viteza mare
Unitati de stocare
ROM of 64 cuvinte de 37 biti (32 biti k1, 5 biti k2)
Inregistrari in registru de 32 RAM ale blocurilor de date de 32 biti
Registrii de 1232 biti pentru rezumatul acumulat
Unitatile functionale sunt evidentiate in diagramele fluxului de date. Memoria ROM reprezinta constantele de adunare si rotatie pentru fiecare pas. RAM-ul comprima 2 buffere de blocuri de date, unul fiind folosit pentru calcule in timp ce celalalt bloc de date se incarca. Registrele memoreaza 3 seturi ale functiei hash, unul fiind in permanenta actualizat, unul pentru blocul anterior si unul accesibil extern in timpul hash-ului current.
Ca si in cazul analizei software, limita de performanta atinsa nu este suficienta pentru a face fata implementarilor IP, capabile de viteze de peste 1 Gbps.
5.5 Prezentarea algoritmului de criptare MD4 si alte alternative
Analiza algoritmului criptografic MD4 este similara cu aceea a algoritmului MD5. MD4 foloseste 3 faze a cate 16 pasi de baza, astfel incat costul este de 3 pasi de baza/ cuvant de intrare sin u 4 [’27]. Calea critica a unui pas de baza este redusa de ultima adunare, astfel incat algoritmul rezultat poate rula cu o adunare, o functie logica si o rotatie. Este de asteptat ca MD4 sa ruleze in 2/3 din timpul de rulare al algoritmului MD5. Din punct de vedere al securitatii, MD4 nu reprezinta neaparat cel mai potrivit algoritm care sa inlocuiasca algoritmul criptografic MD5. Au fost masurate si implementari ale altor algoritmi, dupa cum urmeaza: MD5 este comparat si toate masuratorile sunt implementate software pe un Sun SPARC 20171:
MD2 [15] – 1.8 Mbps
SHA [22] -30 Mbps
DES [21] – 20.6 Mbps
MD5 – 57 Mbps
Rezultatul este acela ca implementarile software ale alternativelor algoritmului criptografic sunt mai lente decat MD5. MD2 si SHA sunt algoritmi message digest, algoritmul DES fiind un algoritm de criptare.
5.6 Suggested Courses of Action
Algoritmul MD5, implementat hardware sau software, nu face fata implementarilor IPv4, din punct de vedere al performantei. Ca si consecinta, se incalca cerintele protocolului internet IPv6 de a nu influenta costurile de procesare, comparative cu costurile in cazul IPv4. Desi toate mecanismele care folosesc MD5 propun un “a per-message digest”, paralelizarea e considerate prohibita, deoarece se doreste o implementare software. Ca si o completare a analizei de performanta, MD5 va fi intotdeauna fundamental limitat.
Exista cateva alternative demne de a fi luate in considerare, dintre care cele mai bune ar fi:
Modificare algoritmului criptografic MD5 pentru a creste performanta
Propunerea unui alt algoritm hash
References
[1] Atkinson, R., “IPv6 Authentication Header,” (working draft -draft-ietf-ipngwg-auth OO.txt), February 1995.
[2] Atkinson, R., “IPv6 Security Architecture,” (working draft -draft-ietf-ipngwg-sec-00.txt), February 1995.
[3] Atkinson, R., “IPv6 Encapsulating Security Payload (ESP),”(working draft – draft-ietf-ipngwg-esp-OO.txt), February
1995.
[4] Baker, F., and Atkinson, R., “OSPF MD5 Authentication,”(working draft – draft-ietf-osp5-md5 -03.txt), March 1995.
[5] Baker, F., and Atkinson, R., “RIP-II Cryptographic Authentication,”(working draft – draft-ietf-ripv2-md5 -04.txt), March 1995.
[6] Bradner, S., and Mankin, A., ‘The Recommendation for the
1P Next Generation Protocol:’ RFC 1752, Harvard University,
USC/Information Sciences Institute, January 1995.
[7] Deering, S., “Simple Intemet Protocol Plus (SIPP),” (working
draft – draft-ietf-sipp-spec-01 .txt), July 1994.
[8] DiMarco, J., “Spec Benchmark table, V4. 12” <ftp:ll
ftp.cdf.toronto. edu/pub/spectable>.
[9] Feldmeier, D., and McAuley, A., “Reducing Protocol Ordering
Constraints to Improve Performance,” in Protocols for
High-Speed Networks, [[[, Eds. Pehrson, B., Gunningberg, P.,
and Pink, S., North-Holland, Amsterdam, 1992, pp. 3-17.
[10] Galvin, J., and McCloghrie, H., “Security Protocols for version
2 of the Simple Network Management Proto-
C01(SNMPV2),” RFC 1446, Trusted Information Systems,
Hughes LAN Systems, April 1993.
[11] Heffernan, A.. “TCP MD5 Signature Option,” (working draft
– draft-hefferman-tcp-md5 -01 .txt). March 1995.
[12] Hinden, R., “Intemet Protocol, Version 6 (IPv6) Specification,”
(working draft- draft-ietf-ipngwg-ipv6-spec-01 .txt),
March 1995.
[13] Hostetler, J., and Sink, E., “’A Proposed Extension to HTTP:
SimpleMD5 Access Authorization,” (work in progress).
[14] Irissou, B., Design Techniques for High-Speed Datapaths,
Master’s Thesis, University of California at Berkeley, CSD,
November 1992.
[15] Kaliski, B., “The MD2 Message-Digest Algorithm,” RFC-
1319, RSA Data Security, Inc., April 1992.
[16] Leech, M., “Key-seeded MD5 authentication for SOCKS,”
(working draft – draft-ietf-aft-socks-md5 -auth-00.txt), October
1994.
[17] Malkin, G., “RIP for IPV6,” (working draft – draft-ietf-ripv2-
ripng-00.txt), November 1994.
[18] McCanne, S., and Torek, C.. “A Randomized Sampling Clock
for CPU Utilization Estimation and Code Profiling,” Proc.
Whter USENIX, San Diego, January 1993.
[19] Metzger, P., Kam, P., and Simpson, W., “The ESP DES-CBC
Transform,” (working draft – draft-ietf-ipsec-esp-des-cbc-
04.txt), April 1995.
[20] Metzger, P., and Simpson, W., “1P Authentication using
Keyed MD5~’ (working draft – draft-ietf-ipsec-ah-md5-
03.txt), April 1995.
[21 ] National Bureau of Standards, Data Encryption Standard,
Federal Information Processing Standards Publication 46,
Government Printing Office, Washington, D. C., 1977.
[22] National Institute for Standards and Technology, Secure Hash
Standard. Federal Information Processing Standards Publication
180, Government Printing Office, Washington, D. C.,
1993.
[23] Partridge, C., and Kastenholz, F., “Technical Criteria for
Choosing 1P The Next Generation (IPng),” RFC 1726, BBN
Systems and Technologies, FTP Software, December 1994.
[24] Postel, J., “Intemet Protocol – DARPA Intemet Program Protocol
Specification,” STD-5, RFC-791, 1S1, September 1981.
[25] Rescorla, E., and Schiffman, A., “The Secure HyperText
Transfer Protocol,” (working draft – draft-rescorla-shttp-
O.txt), December 1994.
[26] Rivest, R., “The RC5 Encryption Algorithm:’ RSA Data
Security Technical Report, April 1995.
[27] Rivest, R., “The MD4 Message-Digest Algorithm,” RFC-
1320, MIT LCS and RSA Data Security, Inc., April 1992.
[28] Rivest, R., “The MD5 Message-Digest Algorithm,” RFC-
1321, MIT LCS and RSA Data Security, Inc., April 1992.
[29] Rogaway, P., “Bucket Hashing and its Application to Fast
Message Authentication,” to appear in Advanced in Cryptology,
Crypto ’95.
[30] Touch, J., “Report on MD5 Performance;’ (working draft –
draft-touch-md5 -performance-00. txt), December 1994.
[31] Touch, J., “Implementing the Intemet Checksum in Hardware,”
(work in progress).
6. Parte aplicativa
6.1 Generare Serial Number
Se tine cont de faptul ca formatul serial number-ului e urmatorul:
[aaaa-bbbb-cccc-dddd-fffff], unde [aaaa…dddd] contin coduri de identificare a produsului, iar ffff contine hash-ul MD5 al sirului compus din [aaaa…dddd]
Includ o portiune de cod care verifica daca un Serial Number e valid:
//SERIAL NUMBER VALIDITY CHECK//
//THE VALUES BELOW ARE CONSTANTS. They are used at the SN generation
//in C++ code
int[] MAGIC = new int[] { 69,77,85,214,199,222 };
MD5 md5 = new MD5();
md5.Update( serialNumber.substring( 0, serialNumber.lastIndexOf( “-“ ) + 1 ) );
for( int i = 0; i < MAGIC.length; i++ )
md5.Update( MAGIC[i] );
//Convert the encoding result into 16 base, then get the bytes from 2 and 3
//positions, then covert them to 10 base(resulting a 5 digits number),
//add the partner id code and finally
//compare with last 5 digits from the serial number.
//For reference see SNFusion3SerialNumbers.cpp
if( !isNumber( ( ( hexToInt(md5.asHex().substring( 1,5 ) ) != Integer.parseInt( serialNumber.substring(
serialNumber.lastIndexOf( “-“ ) + 1,
serialNumber.length() ) ) ) ) {
valid = false; //INVALID serial NUMBER
}
6.2 Verificarea parolei
Este foarte important de subliniat faptul ca acest algoritm se foloseste cu precadere atunci cand ai acces si la parola in clar si la parola criptata cu MD5.
Se creeaza un user cu o anumita parola. Parola se stocheaza pe disk criptata cu ajutorul algoritmului criptografic MD5. Utilizatorul cand va dori sa intre in sistem va introduce parola in clar, programul o va cripta MD5 si o va compara cu parola de pe disk. Daca sirurile sunt indentice parola e buna. Daca un atacator va intra in sistem si va fura parola stocata, nu o va putea folosi, deoarece algoritmul MD5 e ireversibil.
//listeners
final JDialog parent = this;
addB.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
ValuesDialog valuesDialog = new ValuesDialog( parent );
//Center this dialog in the middle of its parent
valuesDialog.setLocation(
(int) parent.getLocation().getX() +
(int) (parent.getSize().getWidth() – valuesDialog.getSize().getWidth()) / 2,
(int) parent.getLocation().getY() +
(int) (parent.getSize().getHeight() – valuesDialog.getSize().getHeight()) / 2);
if( valuesDialog.showDialog() == 1 ) {
//the OK button was pressed
MD5 md5 = new MD5();
md5.Update( valuesDialog.getPassword() );
model.addRow( new Object[] {
valuesDialog.getUserName(),
md5.asHex() } );
}
updateButtonsState();
}
});
Aplicatia salveaza datele pe disk in format XML.
public class XMLUtil {
/** The format of XML / HTML that is output by the program */
protected OutputFormat format = new OutputFormat();
/** The writer of XML */
protected XMLWriter writer;
/** the XML document */
protected Document doc;
/** The parent for all the elements */
private Element rootElem;
/**
* File name <- XML structure is stored here
*/
private String fileName;
public XMLUtil( String fileName ) {
this.fileName = fileName;
init();
}
/**
* Returns the value of tag
* @param name String name of the tag
* @return String value of a child of <xmlTagName/>
*/
public String getTagValue( String name ) {
Node n = rootElem.selectSingleNode( name );
return n != null ? n.getText() : null;
}
/**
* Generates an XML tag
* <User><Name>a name</Name><Password>a passwd</Password></User>,
* that is a child for root element
* @param name String user name
* @param text String password
*/
public void generateUserTag( String name, String password ) {
Element elemDOMElem = new DOMElement( "User" );
Element nameDOMElem = new DOMElement( "Name" );
nameDOMElem.setText( name );
Element passwdDOMElem = new DOMElement( "Password" );
passwdDOMElem.setText( password );
elemDOMElem.add( nameDOMElem );
elemDOMElem.add( passwdDOMElem );
rootElem.add( elemDOMElem );
}
/**
* Loads the XML document. If the document is not found
* creates an empty document.
*/
protected void init() {
/**
* Uncomment this if you want to update the document.Now it is overwritten.
*/
//doc = parse( fileName );
if( doc == null ) {
doc = new DOMDocument();
doc.setRootElement( new DOMElement( "Users" ) );
}
rootElem = doc.getRootElement();
}
public void write() {
try {
writer = createXMLWriter( fileName );
writer.write( doc );
} catch( FileNotFoundException ex ) {
} catch( UnsupportedEncodingException ex ) {
} catch( IOException ex ) {
}
}
protected Document parse( String filePath ) {
try {
SAXReader saxReader = new SAXReader();
return saxReader.read( filePath );
} catch( DocumentException ex ) {
return null;
}
}
/** A Factory Method to create an <code>XMLWriter</code>
* instance allowing derived classes to change this behaviour
*/
protected XMLWriter createXMLWriter( String fileName ) throws
UnsupportedEncodingException, FileNotFoundException {
return new XMLWriter(
new FileOutputStream( fileName ),
format.createPrettyPrint() );
}
O implementare a algoritmului MD5 in limbajul de programare Java:
/*
* $Header: /u/users20/santtu/src/java/MD5/RCS/MD5.java,v 1.5 1996/12/12 10:47:02 santtu Exp $
*
* MD5 in Java JDK Beta-2
* written Santeri Paavolainen, Helsinki Finland 1996
* (c) Santeri Paavolainen, Helsinki Finland 1996
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the Free
* Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*
* See http://www.cs.hut.fi/~santtu/java/ for more information on this
* class.
*
* This is rather straight re-implementation of the reference implementation
* given in RFC1321 by RSA.
*
* Passes MD5 test suite as defined in RFC1321.
*
*
* This Java class has been derived from the RSA Data Security, Inc. MD5
* Message-Digest Algorithm and its reference implementation.
*
*
* $Log: MD5.java,v $
* Revision 1.5 1996/12/12 10:47:02 santtu
* Changed GPL to LGPL
*
* Revision 1.4 1996/12/12 10:30:02 santtu
* Some typos, State -> MD5State etc.
*
* Revision 1.3 1996/04/15 07:28:09 santtu
* Added GPL statemets, and RSA derivate stametemetsnnts.
*
* Revision 1.2 1996/03/04 08:05:48 santtu
* Added offsets to Update method
*
* Revision 1.1 1996/01/07 20:51:59 santtu
* Initial revision
*
*/
/**
* Contains internal state of the MD5 class
*/
class MD5State {
/**
* 128-byte state
*/
int state[];
/**
* 64-bit character count (could be true Java long?)
*/
int count[];
/**
* 64-byte buffer (512 bits) for storing to-be-hashed characters
*/
byte buffer[];
public MD5State() {
buffer = new byte[64];
count = new int[2];
state = new int[4];
state[0] = 0x67452301;
state[1] = 0xefcdab89;
state[2] = 0x98badcfe;
state[3] = 0x10325476;
count[0] = count[1] = 0;
}
/** Create this State as a copy of another state */
public MD5State (MD5State from) {
this();
int i;
for (i = 0; i < buffer.length; i++)
this.buffer[i] = from.buffer[i];
for (i = 0; i < state.length; i++)
this.state[i] = from.state[i];
for (i = 0; i < count.length; i++)
this.count[i] = from.count[i];
}
};
/**
* Implementation of RSA's MD5 hash generator
*
* @version $Revision: 1.5 $
* @author Santeri Paavolainen <[anonimizat]>
*/
public class MD5 {
/**
* MD5 state
*/
MD5State state;
/**
* If Final() has been called, finals is set to the current finals
* state. Any Update() causes this to be set to null.
*/
MD5State finals;
/**
* Padding for Final()
*/
static byte padding[] = {
(byte) 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
/**
* Initialize MD5 internal state (object can be reused just by
* calling Init() after every Final()
*/
public synchronized void Init () {
state = new MD5State();
finals = null;
}
/**
* Class constructor
*/
public MD5 () {
this.Init();
}
/**
* Initialize class, and update hash with ob.toString()
*
* @param ob Object, ob.toString() is used to update hash
* after initialization
*/
public MD5 (Object ob) {
this();
Update(ob.toString());
}
private int rotate_left (int x, int n) {
return (x << n) | (x >>> (32 – n));
}
/* I wonder how many loops and hoops you'll have to go through to
get unsigned add for longs in java */
private int uadd (int a, int b) {
long aa, bb;
aa = ((long) a) & 0xffffffffL;
bb = ((long) b) & 0xffffffffL;
aa += bb;
return (int) (aa & 0xffffffffL);
}
private int uadd (int a, int b, int c) {
return uadd(uadd(a, b), c);
}
private int uadd (int a, int b, int c, int d) {
return uadd(uadd(a, b, c), d);
}
private int FF (int a, int b, int c, int d, int x, int s, int ac) {
a = uadd(a, ((b & c) | (~b & d)), x, ac);
return uadd(rotate_left(a, s), b);
}
private int GG (int a, int b, int c, int d, int x, int s, int ac) {
a = uadd(a, ((b & d) | (c & ~d)), x, ac);
return uadd(rotate_left(a, s), b);
}
private int HH (int a, int b, int c, int d, int x, int s, int ac) {
a = uadd(a, (b ^ c ^ d), x, ac);
return uadd(rotate_left(a, s) , b);
}
private int II (int a, int b, int c, int d, int x, int s, int ac) {
a = uadd(a, (c ^ (b | ~d)), x, ac);
return uadd(rotate_left(a, s), b);
}
private int[] Decode (byte buffer[], int len, int shift) {
int out[];
int i, j;
out = new int[16];
for (i = j = 0; j < len; i++, j += 4) {
out[i] = ((int) (buffer[j + shift] & 0xff)) |
(((int) (buffer[j + 1 + shift] & 0xff)) << 8) |
(((int) (buffer[j + 2 + shift] & 0xff)) << 16) |
(((int) (buffer[j + 3 + shift] & 0xff)) << 24);
/* System.out.println("out[" + i + "] = \t" +
((int) buffer[j + 0 + shift] & 0xff) + "\t|\t" +
((int) buffer[j + 1 + shift] & 0xff) + "\t|\t" +
((int) buffer[j + 2 + shift] & 0xff) + "\t|\t" +
((int) buffer[j + 3 + shift] & 0xff));*/
}
return out;
}
private void Transform (MD5State state, byte buffer[], int shift) {
int
a = state.state[0],
b = state.state[1],
c = state.state[2],
d = state.state[3],
x[];
x = Decode(buffer, 64, shift);
/* Round 1 */
a = FF (a, b, c, d, x[ 0], 7, 0xd76aa478); /* 1 */
d = FF (d, a, b, c, x[ 1], 12, 0xe8c7b756); /* 2 */
c = FF (c, d, a, b, x[ 2], 17, 0x242070db); /* 3 */
b = FF (b, c, d, a, x[ 3], 22, 0xc1bdceee); /* 4 */
a = FF (a, b, c, d, x[ 4], 7, 0xf57c0faf); /* 5 */
d = FF (d, a, b, c, x[ 5], 12, 0x4787c62a); /* 6 */
c = FF (c, d, a, b, x[ 6], 17, 0xa8304613); /* 7 */
b = FF (b, c, d, a, x[ 7], 22, 0xfd469501); /* 8 */
a = FF (a, b, c, d, x[ 8], 7, 0x698098d8); /* 9 */
d = FF (d, a, b, c, x[ 9], 12, 0x8b44f7af); /* 10 */
c = FF (c, d, a, b, x[10], 17, 0xffff5bb1); /* 11 */
b = FF (b, c, d, a, x[11], 22, 0x895cd7be); /* 12 */
a = FF (a, b, c, d, x[12], 7, 0x6b901122); /* 13 */
d = FF (d, a, b, c, x[13], 12, 0xfd987193); /* 14 */
c = FF (c, d, a, b, x[14], 17, 0xa679438e); /* 15 */
b = FF (b, c, d, a, x[15], 22, 0x49b40821); /* 16 */
/* Round 2 */
a = GG (a, b, c, d, x[ 1], 5, 0xf61e2562); /* 17 */
d = GG (d, a, b, c, x[ 6], 9, 0xc040b340); /* 18 */
c = GG (c, d, a, b, x[11], 14, 0x265e5a51); /* 19 */
b = GG (b, c, d, a, x[ 0], 20, 0xe9b6c7aa); /* 20 */
a = GG (a, b, c, d, x[ 5], 5, 0xd62f105d); /* 21 */
d = GG (d, a, b, c, x[10], 9, 0x2441453); /* 22 */
c = GG (c, d, a, b, x[15], 14, 0xd8a1e681); /* 23 */
b = GG (b, c, d, a, x[ 4], 20, 0xe7d3fbc8); /* 24 */
a = GG (a, b, c, d, x[ 9], 5, 0x21e1cde6); /* 25 */
d = GG (d, a, b, c, x[14], 9, 0xc33707d6); /* 26 */
c = GG (c, d, a, b, x[ 3], 14, 0xf4d50d87); /* 27 */
b = GG (b, c, d, a, x[ 8], 20, 0x455a14ed); /* 28 */
a = GG (a, b, c, d, x[13], 5, 0xa9e3e905); /* 29 */
d = GG (d, a, b, c, x[ 2], 9, 0xfcefa3f8); /* 30 */
c = GG (c, d, a, b, x[ 7], 14, 0x676f02d9); /* 31 */
b = GG (b, c, d, a, x[12], 20, 0x8d2a4c8a); /* 32 */
/* Round 3 */
a = HH (a, b, c, d, x[ 5], 4, 0xfffa3942); /* 33 */
d = HH (d, a, b, c, x[ 8], 11, 0x8771f681); /* 34 */
c = HH (c, d, a, b, x[11], 16, 0x6d9d6122); /* 35 */
b = HH (b, c, d, a, x[14], 23, 0xfde5380c); /* 36 */
a = HH (a, b, c, d, x[ 1], 4, 0xa4beea44); /* 37 */
d = HH (d, a, b, c, x[ 4], 11, 0x4bdecfa9); /* 38 */
c = HH (c, d, a, b, x[ 7], 16, 0xf6bb4b60); /* 39 */
b = HH (b, c, d, a, x[10], 23, 0xbebfbc70); /* 40 */
a = HH (a, b, c, d, x[13], 4, 0x289b7ec6); /* 41 */
d = HH (d, a, b, c, x[ 0], 11, 0xeaa127fa); /* 42 */
c = HH (c, d, a, b, x[ 3], 16, 0xd4ef3085); /* 43 */
b = HH (b, c, d, a, x[ 6], 23, 0x4881d05); /* 44 */
a = HH (a, b, c, d, x[ 9], 4, 0xd9d4d039); /* 45 */
d = HH (d, a, b, c, x[12], 11, 0xe6db99e5); /* 46 */
c = HH (c, d, a, b, x[15], 16, 0x1fa27cf8); /* 47 */
b = HH (b, c, d, a, x[ 2], 23, 0xc4ac5665); /* 48 */
/* Round 4 */
a = II (a, b, c, d, x[ 0], 6, 0xf4292244); /* 49 */
d = II (d, a, b, c, x[ 7], 10, 0x432aff97); /* 50 */
c = II (c, d, a, b, x[14], 15, 0xab9423a7); /* 51 */
b = II (b, c, d, a, x[ 5], 21, 0xfc93a039); /* 52 */
a = II (a, b, c, d, x[12], 6, 0x655b59c3); /* 53 */
d = II (d, a, b, c, x[ 3], 10, 0x8f0ccc92); /* 54 */
c = II (c, d, a, b, x[10], 15, 0xffeff47d); /* 55 */
b = II (b, c, d, a, x[ 1], 21, 0x85845dd1); /* 56 */
a = II (a, b, c, d, x[ 8], 6, 0x6fa87e4f); /* 57 */
d = II (d, a, b, c, x[15], 10, 0xfe2ce6e0); /* 58 */
c = II (c, d, a, b, x[ 6], 15, 0xa3014314); /* 59 */
b = II (b, c, d, a, x[13], 21, 0x4e0811a1); /* 60 */
a = II (a, b, c, d, x[ 4], 6, 0xf7537e82); /* 61 */
d = II (d, a, b, c, x[11], 10, 0xbd3af235); /* 62 */
c = II (c, d, a, b, x[ 2], 15, 0x2ad7d2bb); /* 63 */
b = II (b, c, d, a, x[ 9], 21, 0xeb86d391); /* 64 */
state.state[0] += a;
state.state[1] += b;
state.state[2] += c;
state.state[3] += d;
}
/**
* Updates hash with the bytebuffer given (using at maximum length bytes from
* that buffer)
*
* @param state Which state is updated
* @param buffer Array of bytes to be hashed
* @param offset Offset to buffer array
* @param length Use at maximum `length' bytes (absolute
* maximum is buffer.length)
*/
public void Update (MD5State stat, byte buffer[], int offset, int length) {
int index, partlen, i, start;
/* System.out.print("Offset = " + offset + "\tLength = " + length + "\t");
System.out.print("Buffer = ");
for (i = 0; i < buffer.length; i++)
System.out.print((int) (buffer[i] & 0xff) + " ");
System.out.print("\n");*/
finals = null;
/* Length can be told to be shorter, but not inter */
if ((length – offset)> buffer.length)
length = buffer.length – offset;
/* compute number of bytes mod 64 */
index = (int) (stat.count[0] >>> 3) & 0x3f;
if ((stat.count[0] += (length << 3)) <
(length << 3))
stat.count[1]++;
stat.count[1] += length >>> 29;
partlen = 64 – index;
if (length >= partlen) {
for (i = 0; i < partlen; i++)
stat.buffer[i + index] = buffer[i + offset];
Transform(stat, stat.buffer, 0);
for (i = partlen; (i + 63) < length; i+= 64)
Transform(stat, buffer, i);
index = 0;
} else
i = 0;
/* buffer remaining input */
if (i < length) {
start = i;
for (; i < length; i++)
stat.buffer[index + i – start] = buffer[i + offset];
}
}
/*
* Update()s for other datatypes than byte[] also. Update(byte[], int)
* is only the main driver.
*/
/**
* Plain update, updates this object
*/
public void Update (byte buffer[], int offset, int length) {
Update(this.state, buffer, offset, length);
}
public void Update (byte buffer[], int length) {
Update(this.state, buffer, 0, length);
}
/**
* Updates hash with given array of bytes
*
* @param buffer Array of bytes to use for updating the hash
*/
public void Update (byte buffer[]) {
Update(buffer, 0, buffer.length);
}
/**
* Updates hash with a single byte
*
* @param b Single byte to update the hash
*/
public void Update (byte b) {
byte buffer[] = new byte[1];
buffer[0] = b;
Update(buffer, 1);
}
/**
* Update buffer with given string.
*
* @param s String to be update to hash (is used as
* s.getBytes())
*/
public void Update (String s) {
byte chars[];
chars = new byte[s.length()];
s.getBytes(0, s.length(), chars, 0);
Update(chars, chars.length);
}
/**
* Update buffer with a single integer (only & 0xff part is used,
* as a byte)
*
* @param i Integer value, which is then converted to
* byte as i & 0xff
*/
public void Update (int i) {
Update((byte) (i & 0xff));
}
private byte[] Encode (int input[], int len) {
int i, j;
byte out[];
out = new byte[len];
for (i = j = 0; j < len; i++, j += 4) {
out[j] = (byte) (input[i] & 0xff);
out[j + 1] = (byte) ((input[i] >>> 8) & 0xff);
out[j + 2] = (byte) ((input[i] >>> 16) & 0xff);
out[j + 3] = (byte) ((input[i] >>> 24) & 0xff);
}
return out;
}
/**
* Returns array of bytes (16 bytes) representing hash as of the
* current state of this object. Note: getting a hash does not
* invalidate the hash object, it only creates a copy of the real
* state which is finalized.
*
* @return Array of 16 bytes, the hash of all updated bytes
*/
public synchronized byte[] Final () {
byte bits[];
int index, padlen;
MD5State fin;
if (finals == null) {
fin = new MD5State(state);
bits = Encode(fin.count, 8);
index = (int) ((fin.count[0] >>> 3) & 0x3f);
padlen = (index < 56) ? (56 – index) : (120 – index);
Update(fin, padding, 0, padlen);
/**/
Update(fin, bits, 0, 8);
/* Update() sets finalds to null */
finals = fin;
}
return Encode(finals.state, 16);
}
/**
* Turns array of bytes into string representing each byte as
* unsigned hex number.
*
* @param hash Array of bytes to convert to hex-string
* @return Generated hex string
*/
public static String asHex (byte hash[]) {
StringBuffer buf = new StringBuffer(hash.length * 2);
int i;
for (i = 0; i < hash.length; i++) {
if (((int) hash[i] & 0xff) < 0x10)
buf.append("0");
buf.append(Long.toString((int) hash[i] & 0xff, 16));
}
return buf.toString();
}
/**
* Returns 32-character hex representation of this objects hash
*
* @return String of this object's hash
*/
public String asHex () {
return asHex(this.Final());
}
}
7. Concluzii
MD5 nu poate fi implementat in tehnologia existenta la rate mai mari de 100 Mbps si nu poate fi implementat pentru diferite scopuri pe hardware CMOS la rate mai mari de 175 Mbps. MD5 nu poate fi folosit pentru autentificare IP (Internet Protocol), daca luam in considerare retelele actuale si ratele de transfer.
MD5 va suporta in viitor o largime de banda mai mare, datorita dezvoltarii rapide a tehnologiei.
Este demna de luat in considerare atestarea MD5 in IPv6; astfel specificatiile IPv6 ar trebui sa
tina cont de limitarile de performanta ale MD5.Folosirea MD5 in cadrul unor medii de inalta performanta nu trebuie recomandata. Functia modificata, MD5++ sau alte functii hash ca si alti algoritmi de criptare trebuie luati in considerare in astfel de cazuri.
Este important de amintit ca eforturile recente depuse atat cu ajutorul algoritmului criptanalitic MD2, dar si cu ajutorul MD5-ului, sunt aproape in exclusivitate relevante in gasirea coliziunilor. Se asteapta ca descoperirea coliziunilor sa aibe cel mult un mic impact, dar e de preferat sa nu aibe nici un impact asupra proprietatilor pe care le asociem in mod uzual functiilor hash: valori de iesire pseudo-aleatoare, unidirectionalitatea acestor functii.
Utilizatorii trebuie sa stie ca pana la ora actuala, folosirea algoritmului criptografic MD5 ca parte a unui mecanism de generare aleatoare a unui numar este considerata sigura.
MD5 alaturi de MD2 raman algoritmi criptografici potriviti pentru o varietate de aplicatii.
Semnaturile existente formate folosind MD2 nu sunt supuse riscului, dar algoritmul MD2 nu mai poate fi recomandat pentru viitoare aplicatii care depend de functii hash care sunt rezistente la coliziuni.
MD4 O varietate de rezultate ale criptanalizei au creat nesiguranta asupra complexitatii structurii MD4-ului. [15,5,25]. Au fost demonstrate coliziuni pentru MD4 [7,8]
MD4 n-ar trebui folosit. Folosirea lui n-a mai fost recomandata in literature de specialitate din momentul aparitiei algoritmului MD5.
MD5 Atat pseudo-coliziunile [6] cat si coliziunile [9,10] pentru functia de compresie a lui MD5 au fost demonstrate, totusi coliziunile pentru versiunea full a MD5-ului n-au fost atinse.
Semnaturile existente formate folosind MD5 nu reprezinta un risc si atata timp cat MD5 este inca potrivit pentru o varietate de aplicatii (mai ales pentru acele aplicatii acre se bazeaza pe proprietatile functiilor hash de unidirectionalitate si de valori aleatoare la iesire), ca si masura de precautie ar trebui ca MD5 sa nu se foloseasca pentru aplicatii care cer functii hash rezistente la coliziuni.
Cateva dintre noile evidente criptanalitice confirma suspiciunile aduse la cunostinta de Ron Rivest acum cativa ani si clarifica faptul ca MD4 n-ar mai trebui folosit. Referitor la aplicatiile care folosesc MD2 si MD5, coliziunile pentru aceste functii hash nu au fost inca descoperite dar se asteapta a fi descoperite in viitorul apropiat.
Clientii BSAFE ar trebui sa tina seama ca in timp ce este considerate nepotrivita folosirea algoritmului criptografic MD5 in cadrul aplicatiilor unde se cere o functie rezistenta la coliziuni, folosirea algoritmului MD5 este foarte potrivita pentru aplicatii care fac parte dintr-un mechanism de generare a unor numere aleatoare. MD2 si MD5 sunt inca potrivite pentru o varietate de aplicatii.
O posibila continuare a cercetarilor din aceasta lucrare o constituie investigarea si a altor metode de criptare, precum si evaluarea comparativa a eficientei acestora. Astfel, in ceea ce priveste metodele de criptare care uziteaza de generarea cifrurilor prin intermediul unor polinoame generatoare, consideram ca modificarea expresiilor acestora ar putea conduce la eficientizarea mecanismelor de criptare.
8. Bibliografie
Bruce Schneier, “Applied Cryptography”, John Wiley & Sons, 1996.
V.V. Patriciu, M. Pietroșeanu-Ene, I. Bica, C. Cristea, “Securitatea Informatică în UNIX și INTERNET” , Ed. Tehnică, București, 1998.
V.V. Patriciu & Co., “Criptografia și Securitatea Rețelelor de Calculatoare cu aplicații în C și Pascal”, Ed. Tehnică, București, 1994 .
Lars Klander, “Anti-hacker: ghidul securității rețelelor de calculatoare”, Ed. All Educational, 1998.
L. Coculescu, V. Cristea ,I. Finta, V.V. Patriciu ,F. Pilat, “Proiecterea Sistemelor Teleinformatice”, Ed. Militară, București, 1988.
Xueija Lai, “On the Design and Security Block Ciphers”, ETH Series in Information Processing, v. 1, Konstantz: Hartung-Gorre Verlag, 1992 E. Biham, comunicări personale, 1993.
E. Biham, A. Shamir, “Differential Cryptanalysis of DES-like Cryptosystems”, Advances in Cryptology – CRIPTO '90 Proceedings, Springer-Verlag, 1991.
J. Daeman, R Govaerts, J. Vandewalle, “Weak Keys for IDEA”, Advances in Cryptology – CRIPTO '93 Proceedings, Springer-Verlag, 1994.
R.H. Baker, “Network Security: how to plan for it and achieve it”, McGraw-Hill, Inc., 1995.
ITU-T X.811, Information technology – Open Systems Interconnection –Security frameworks in open systems: Authentication framework.
ITU-T X.812, Information technology – Open Systems Interconnection – Security frameworks in open systems: Access Control framework.
ITU-T X.813, Information technology – Open Systems Interconnection – Security frameworks in open systems: Non-repudiation framework.
ITU-T X.814, Information technology – Open Systems Interconnection – Security frameworks in open systems: Confidentiality framework.
ITU-T X.815, Information technology – Open Systems Interconnection – Security frameworks in open systems: Integrity framework.
ITU-T X.816, Information technology – Open Systems Interconnection – Security frameworks in open systems: Security Audit and Alarms framework.
ITU-T X.817, Information technology – Open Systems Interconnection – Security frameworks in open systems: The Directory: Authentication Framework.
ITU-T X.800, Security Architecture for Open Systems Interconnection for CCITT Applications.
ITU-T X.509, Information technology – Open Systems Interconnection –The Directory: Authentication framework.
P. Holbrook, J. Reznolds, “Site Security Handbook”, Addison Wesley, 1993.
A. Salomaa, “Criptografie cu chei publice”, Ed. Militară, București, 1993.
D. V. Klein, comunicări personale, 1994.
W. Tuchman. “Hellman Presents No Shortcut Solutions To DES”, IEEE Spectrum, v.16, n. 7, iulie 1979, p. 253-261.
ANSI X3.92, “American National Standard for Data Encryption Algorithm (DEA)”, American National Standards Institute, 1981.
ANSI X3.105, “American National Standard for Information Systems – Data Link Encryption”, American National Standards Institute, 1983.
ANSI X3.106, “American National Standard for Information Systems – Data Encryption Algorithm – Modes of Operation”, American National Standards Institute, 1983.
ANSI X9.8, “American National Standard for Personal Information Number (PIN) Management and Security”, American Bankers Association, 1982.
ANSI X9.9, “American National Standard for Financial Institution Message Authentication (Wholesale)”, American Bankers Association, 1986.
ANSI X9.17, “American National Standard for Financial Institution Key Management (Wholesale)”, American Bankers Association, 1985.
ANSI X9.19, “American National Standard for Retail Message Authentication”, American Bankers Association, 1985.
ANSI X9.23, “American National Standard for Financial Institution Message Encryption”, American Bankers Association, 1988.
ANSI X9.26, “American National Standard for Financial Institution Sign-On Authentication for Wholesale Financial Transaction”, American Bankers Association, 1990.
ANSI X9.30, “Working Draft: Public Key Criptography Using Irreversible Algorithms for the Financial Services Industry”, American Bankers Association, 1994.
ANSI X9.31, “Working Draft: Public Key Criptography Using Reversible Algorithms for the Financial Services Industry”, American Bankers Association, 1993.
D. Chaum, “Achieving Electronic Privacy”, Scientific American, v.267, n.2, Aug 1992.
D. Chaum, E. van Heijst, B. Pfitzmann, “Cryptographically Strong Undeniable Signatures, Unconditionally Secure for the Signer”, Advances in Cryptology – CRYPTO `91 Proceedings, Springer-Verlag, 1992, p. 470-484.
R. de Millo, N. Lynch, M. Merritt, “Cryptographic Protocols”, Proceedings of the 14th Annual Symposium on the Theory of Computing, 1982, p. 383-400.
R. de Millo, M. Merritt, “Protocols for Data Security”, Computer, v. 16, n. 2, Feb 1983, p. 39-50.
W. Diffie, M. E. Hellman, “New Directions in Cryptography”, IEEE Transactions on Information Theory, v. IT-22, n. 6, Nov 1976, pag 644-654.
W. Diffie, M. E. Hellman, “Privacy and Authentication: An Introduction to Cryptography”, Proceedings of the IEEE, v.67, n. 3, Mar 1979, p. 397-427.
M. Gasser, A. Goldstein, C. Kaufman, B. Lampson, “ The Digital Distributed Systems Security Architecture”, Proceedings of the 12th National Computer Security Conference, NIST, 1989, p. 305-319.
M. Mambo, A. Nishikawa, S. Tsujii, E. Okamoto, “ Efficient Secure Broadcast Communication System”, Proceedings of the 1993 Korea-Japan Workshop of Information Security and Cryptography, Seul, Coreea, 24-26 Oct 1993, p. 23-33.
S.P. Miller, B. C. Neuman, J. I. Schiller, J. H. Saltzer, “Section E.2.1: Kerberos Authentication and Authorization System”, Proiectul Athena al MIT, Dec 1987.
[43] N. J. Corron and D. W. Hahs, “A New Approach to Communications Using Chaotic Signals,” IEEE Transactions on Circuits and Systems I: Fund. Theory and Appl”., vol. 44, pp. 373-382, May 1997.
[44] P. E. Allen and D. Holberg, “CMOS Analog Circuit Design”. Harcourt Brace Jovanovich College Publishers, New York, NY 1987.
[45] L. M. Pecora and T. L. Carroll, “Synchronization in chaotic systems,” Phys. Rev. Lett., vol. 64, pp. 821-824, Feb. 1990.
[46] T. L. Carroll and L. M. Pecora, “Synchronizing chaotic circuits”. IEEE Trans. Circuits and Systems, vol. 38, pp. 453-456, Apr. 1991.
[47] J. E. Franco and Y. Tsividis, “Design of Analog and Digital VLSI Circuits for Telecommunications and Signal Processing.” Prentice Hall, Englewood Cliffs, NJ 1994.
[48] T. L. Carroll and L. M. Pecora, “The Effect of Filtering on Communication Using Synchronized Chaotic Circuits,” IEEE International Symposium on Circuits and Systems, vol. 3, pp. 174-177, May 1996.
[49] H. Dedieu, M. Kennedy and M. Hasler, “Chaos Shift Keying: Modulation and Demodulation of a Chaotic Carrier Using Self-Synchronizing Chua’s Circuits, ”IEEE Transactions on Circuits and Systems II, vol. 40, pp. 634-642, Oct. 1993.
[50] A. J. Menez, P. C. van Oorschot, S. A. Vanstone, “Handbook of applied cryptography”. CRC Press, New York, 1996.
[51] E. Ott. “Chaos in Dynamical Systems”. Cambridge University Press, New York, 1993.
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Studiul Experimental al Algoritmilor de Criptare Md5 (ID: 161079)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
