Criptarea Retelelor DE Calculatoare
Cuprins
Capitolul 1- Criptografia ºi securitatea reþelei .
Generalitãti .
1.1.1 Identificarea persoanei .
Identificarea bazatã pe cunoaºtere .
Identificarea prin cheie fizicã .
1.2 Substituþii ºi permutãri în criptografia clasicã .
Cifruri transpoziþie .
Cifruri substituþie . Substituþii monoalfabetice .
1.2.3 Substituþia polialfabeticã .
Metode criptografice simetrice .Cifruri DES ºi standardul
DES .
Proprietãþi ale algoritmului DES .
Atacuri criptoanalitice la DES .
Critici ºi slãbiciuni ale DES-ului .
Capitolul 2 – Criptografia computaþionalã cu chei publice ( asimetrice )
Concepte generale .Criptosisteme cu chei publice .
Sistemul de criptare cu cheie publicã ºi folosirea lui
pentru autentificare .
Autentificarea prin sistemele de criptare cu cheie
publicã .
Sisteme de cifrare cu chei publice exponenþiale .
Cifrul POHLING-HELLMAN .
Cifrul RIVEST-SHAMIR-ADLEMAN (RSA)
2.5 Aspecte legate de implementarea algoritmilor exponenþiali.
Atacuri criptoanalitice posibile la RSA .
Capitolul 3 – Metode ºi algoritmi de cifrare cu ajutorul criptosistemelor .
Criptosisteme .
Semnãtura digitalã .
Sigiliul digital
Anvelopa digitalã .
Certificat digital .
Notarul digital .
Capitolul 4 – Noþiuni de securitate în Internet .
Mecanisme de securitate existente .
Posta electronicã cu facilitãþi de securitate .
4.3 Servere de autentificare Kerberos .
Capitolul 5 – Prezentarea ºi discuþia aplicaþiei .
Prezentarea aplicaþiei .
Discuþia aplicaþiei .
Procedee de cifrare / descifrare aplicate documentelor .
=== C1 ===
Capitolul 1
Criptografia ºi securitatea reþelei
Rolul criptografiei într-o reþea de calculatoare
Generalitãþi :
Aplicaþiile pentru reþele vor avea din ce în ce mai multã nevoie de mãsuri pentru a asigura securitatea datelor precum ºi pentru a asigura cã mesajele sunt autentice , atât în ce priveºte conþinutul cât ºi originea lor. Cu cât se realizeazã mai multe aplicaþii pentru retele, cu atât ele vor trata informaþii ce sunt importante ºi de mare valoare ( ca de exemplu transferul de fonduri financiare ) ºi care trebuiesc protejate împotriva diferitelor moduri de distrugere.
În prezent existã legislaþii în mai multe þãri care impun ca organizaþiile , ce menþin fiºiere cu date personale sã le înregistreze la o autoritate publicã . Cei ce pãstreazã aceste fisiere trebuie sã asigure acurateþea lor, acolo unde afecteazã drepturile oamenilor , ºi trebuie sã garanteze informatiile ºi sã le foloseascã numai în scopuri legale . Atunci când informaþiile circulã în reþele , ºi acest lucru se întîmplã fregvent în prezent , în unele tãri existã legi care cer sã se aplice un anumit grad de securitate (protecþie).
În felul acesta protecþia prin criptografie ,care astfel ar fi exclusã din cauza costului ,va fi probabil folositã în viitor la scarã mai largã. Suporþii de memorare uºor transportabili cum sunt discurile magnetice- benzile magnetice ,casetele ºi discurile magnetice flexibile ,ar necesita criptografierea pentru protejarea datelor înregistrate . Aceºti suporþi sunt tot atât de vulnerabili la acþiuni ilegale , ca ºi datele în reþeaua de comunicatie .Un caz particular de memorare este cel al arhivelor , când este necesar sã se memoreze informaþii personale timp de mai mulþi ani. Aceste informaþii pot deveni mai importante odatã cu trecerea timpului.
Criptografia este un mijloc tehnic prin care conþinutul mesajelor sau traficul de pe o cale de transmisie poate fi ascuns (protejat) de un duºman ºi de asemenea se poate preveni modificarea mesajelor . Dintre numeroasele acþiuni ce pot afecta traficul ce circulã pe o cale, criptografia poate trata în mod excelent aspecte legate de livrarea ,modificarea , inserarea mesajelor ºi (cu anumite precauþii suplimentare) repetarea mesajelor vechi. O aplicaþie a criptografiei o constituie sistemul de eliberare a banilor în numerar , una din formele de ,,transfer electronic de fonduri” . Pentru o securitate mai mare ,identitatea clientului ,datã de cartela sa magnetica ºi numãrul personal ,este verificatã de un calculator central care deþine detalii privind cartelele furate ºi alte motive de a refuza plata . Aceste verificãri pot fi anulate în mod fraudulos de un dispozitiv de interceptare ,spionare a liniei ,care poate citi mesajele dintre terminal ºi calculator ºi de asemenea poate modifica sau insera mesaje, fãcând ca orice cartelã de identitate sã aparã validã . Criptografia este folositã pentru a preveni aceste fraude .
În acest capitol prezentãm anumite aspecte de securitate a datelor : autenticitatea conþinutului ºi sursei mesajului (terminal sau persoanã ) ºi utilizarea unei semnaturi electronice , care este dovada ,în forma digitalã a originii unui mesaj . Metodele folosite sunt legate de criptografie dar scopul lor nu este întotdeauna de a ascunde conþinutul mesajului . De exemplu un document semnat este valoros numai dacã poate fi citit de alþii. Este necesar sã prezentãm unele dezvoltãri recente în criptografie care se aplicã în domeniul autentificãrii mesajelor .
1.1.1 Identificarea persoanei
Autentificarea mesajelor înseamnã urmarirea lor înapoi la originea lor ºi foarte adesea aceasta impune ca sistemul sã identifice persoana care foloseste un terminal . În practicã , utilizatorul îºi furnizeazã identitatea , iar sistemul trebuie sã fie capabil sã o verifice sau sã o autentifice , adicã sã verifice cã identitatea pretinsã este autenticã . Un sistem de autentificare trebuie sã fie sigur ,atât cît este posibil , ºi sã ia mãsuri împotriva incercãrilor de a-l înºela ,dându-se un individ cãruia i se permite accesul la date sau care este autorizat sã facã tranzacþii . Existã trei clase de identificare personalã ,în funcþie de:
(a)Ceva ce cunoaºte o persoanã ca de exemplu , parola sa,în termeni bancari ,numãrul sãu de identificare personalã denumit PIN (Personal Identification Number) .
(b)Ceva ce posedã o persoanã , care acþioneazã ca o cheie fizicã, pentru deschidere (ca de exemplu o cartelã de plastic cu o înregistrare magneticã pe ea .
(c)Unele caracteristici personale ale persoanei ,ca de exemplu vocea sa ,scrisul de mînã sau amprentele digitale . Pentru o securitate
mai mare , se poate aplica o combinaþie a acestor mãsuri de autentificare.
1.1. 2 Identificarea bazatã pe cunoaºtere
Primele sisteme cu acces multiplu au folosit o parolã pentru a identifica sau a autentifica utilizatorii . Este metoda cea mai simplã de implementat ,deoarece nu foloseºte nici un hardware special ºi , în forma sa mai redusã foloseºte un software redus .
Unul din riscurile oricãrui sistem de autentificare ,care nu este securizat prin criptografie (sau o formã înlãnþuitã a mesajelor unei conversaþii) ,constã în faptul cã un intrus poate sã aºtepte ,pînã când utilizatorul a intrat în sistem ºi apoi sã întrerupã conexiunea ,continuînd el conversaþia .Aceasta ,ar necesita un numãr mare de cereri de parole diferite ,dar utilizatorul va gasi acest lucru dificil ºi plictisitor .
1.1.3 Identificarea prin cheie fizicã
Pentru a fi eficientã , o cheie trebuie sã aibã o gamã largã de valori posibile. Cel mai simplu mod de a purta o astfel de cheie este cartela magneticã ,în prezent folositã în mod obiºnuit ,ca o cartelã de credit pentru dispozitivele de eliberare de bani în numerar ºi altele.Cîmpul de informaþii în formatul standard consimþit de bãnci are mai multe piste ,unele conþinând identificarea.
1.2 Substituþii ºi permutãri în criptografia clasicã
La baza cifrurilor simetrice,deci a cifrurilor care folosesc o singurã cheie secretã , stau cifrurile elementare : transpoziþia si substituþia .
1.2.1 Cifrurile transpoziþie
Realizeazã o permutare a caracterelor din textul clar .Cheia de cifrare este perechea K={d,f} unde d = lungimea blocurilor succesive , care vor fi cifrate conform permutãrii f :
Definim f : Zd Zd cu Zd= { 1,2,…,d}.
de forma :
unde evident f(i) != f(j) pentru orice i ! = j;
Mulþimea funcþiilor astfel definite este d! . În acest fel mesajul clar M=m1m2…md+d .. este cifrat astfel Ek(M)= mf(1)…mf(d) md+f(1) … md+f(d) . Descifrarea se obþine prin permutare inversã .
Cifrarea prin transpoziþie este o transformare a textului clar prin care se modificã poziþia caracterelor în mesaj . Transpoziþiile se pot aplica întregului mesaj sau blocurilor de lungime d obþinute prin împarþirea întregului mesaj .În metoda de cifrare transpoziþionalã , alfabetul textului clar ramîne neschimbat . O metodã des folositã pentru implementarea acestui tip de transformãri este scrierea mesajului într-o anumitã matrice, dupã care textul clar se obþine prin citirea caracterelor pe linie ,pe coloanã, sau dupã un anumit traseu în matrice .
Cifrurile transpozitie , se pot clasifica dupã numãrul lor de aplicare , în transpoziþii monofazice , când se aplicã o singurã datã , ºi transpoziþii polifazice ,când se aplicã de mai multe ori . Dacã în procesul de transformare , elementul unitate este litera , atunci transpoziþia se numeºte monograficã , iar dacã se transpun grupe de litere (simboluri) transpoziþia se zice poligraficã .Cele mai simple transpoziþii monografice ,se obþin prin împarþirea textului clar , în douã jumãtaþi care se scriu una sub alta ,dupã care se citesc coloanele de la stînga la dreapta .De exemplu cuvîntul CALCULATOR se cifreazã astfel :
C A L C U
L A T O R
care citit pe coloane , aratã astfel : CLAALTCOUR.
Altã metodã ar fi împarþirea cuvîntului în douã ,astfel :
C L U A O
A C L T R
care citit pe linii , aratã CLUAOACLTR .
Acest sistem este uºor de atacat ,deoarece fregvenþa de apariþie a literelor ramîne invariantã în procesul de cifrare . De asemenea , se poate obþine o transpozitie de caractere dacã literele textului clar se scriu ca elemente ale unei matrice .Se completeazã matricea cu elementele textului clar ,plecând de la un element oarecare al matricei , pe un anumit traseu. Astfel , textul clar CALCULATOR UNIVERSAL FELIX se scrie sub forma matricealã:
C A L C U
L A T O R
U N I V E
R S A L X
F E L I X
Mesajul se poate cifra în urmãtoarele feluri :
Prin citirea elementelor matricei pe coloane de la stînga la dreapta , ceeace conduce la urmãtoarele criptograme :CLURF AANSE LTIAL COVLI UREXX .
Prin citirea elementelor matricei pe diagonalã ,de jos în sus , începând cu primul element al matricei : CLAUA LRNTC FSIOU EAYRL LEIXX .
În practica cifrãrii ,stabilirea traseelor de citire din matrice , se face în mod fregvent ,cu ajutorul unui cuvînt cheie . Cheia are un numãr de litere egal cu numãrul de coloane din matrice . Literele cheii , numerotate în ordine alfabeticã ,se scriu deasupra matricei , în ordinea stabilitã de cheie ,furnizeazã textul cifrat . O transpoziþie ingenioasã a literelor dintr-un text se poate realizã prin rotirea cu 90 de grade a unei grile de formã pãtraticã . Se pot imagina ºi alte grile (tringhi ,pentagon ,hexagon ) care pot fi folosite la transpoziþia literelor din textul clar .De asemenea trebuie observat cã se poate realiza ºi alte tipuri de transpozitii , cum ar fi cele observate asupra unor grupuri de litere -transpoziþii poligrafice .
1.2.2 Cifrurile substituþie
Cifrurile substituþie , înlocuiesc fiecare caracter din alfabetul mesajelor A ,cu un caracter din alfabetul criptogramelor C .
Dacã A={ a1,a2,…,an} atunci C={f(a1),f(a2),…,f(an)} unde f : A C este functia de substituþie , constituind cheia cifrului . Cifrarea unui mesaj M=m1m2…mn se face prin Ek(M)=f(m1)f(m2)…f(mn) .
Deci substituþiile sînt transformãri prin care caracterele (literele) sau grupurile de caractere ale alfabetului secundar . În practicã se aplicã fregvent substituþia care se poate descrie cu ajutorul transformãrii liniare de forma : C=aM+b(mod N) .
În acest scop , se stabileºte o corespondenþã biunivocã între literele alfabetului primar ºi numerele întregi 0,1,…,N-1 care formeazã un inel ZN ,fatã de operaþiile de adunare modulo N ºi înmulþire modulo N . În relaþie , a se numeºte factor de amplificare , iar b , coeficientul de deplasare .Prin particularizarea coeficienþilor a ºi b , se obþin cazuri particulare de transformãri liniare .În cazul cel mai simplu , se stabileºte o corespodenþa între literele mi M ale alfabetului primar ºi elementele alfabetului secundar ( eventual extins ) al criptogramei .
1.2.2.1 Substituþiile monoalfabetice
Transformãrile cu o singurã lege de corespondenþã între literele alfabetului primar ºi cele ale alfabetului secundar , se numesc substituþii monoalfabetice.
Cea mai simplã substituþie monoalfabeticã este cunoscutã sub denumirea de cifrul lui CESAR . În cifrul lui CESAR , atât alfabetul primar , cît ºi alfabetul secundar ,coincid cu alfabetul latin de 26 de litere. Corespondenþa biunivocã între literele celor douã alfabete ,se stabileºte scriind în ordine alfabeticã literele ºi trecând sub fiecare literã corespondenþa acestuia din alfabetul secundar , obþinutã prin deplasarea ciclicã cu trei poziþii la stînga a literelor alfabetului primar . Corespondenþa în cifrul lui CESAR este :
A B C D E … X Y Z
D E F G H …. A B C
Astfel la A corespunde litera D , lui B litera E , etc.
Folosind corespondenþa biunivocã între literele alfabetului latin mi ºi echivalentele lor numerice ei unde ei {0,1, ..25} cifrul lui CESAR se poate scrie sub forma : C(ei)=ei+bi(mod 26) cu bi =3 .
Ulterior ,cifrul lui CESAR , a fost generalizat ,prin alegerea în calitate de cheie, a oricãrei litere din alfabet . În acest caz corespondenþa invariabilã este stabilitã prin funcþia C(ei)=ei+ bi ( mod 26) unde ei,bi {0,1,..25} .
Prin particularizarea , în continuare , a coeficienþiilor ,punând b=0, se obþine o substituþie de litere de forma : C(ei)=aei(mod 26).
Corespondenþa ei C(ei) este biunivocã dacã numerele a ºi 26 sînt relativ prime ,deci (a,N)=1 . În caz contrar ,douã sau mai multe litere primare vor fi cifrate prin aceeaºi literã ºi fiuncþia de cifrare nu admite o inversã . Alegând a astfel încît sã fie relativ prim cu N=26, relatia stabileºte o permutare a alfabetului primar .
De exemplu , luând a=3 ,se obþine urmãtoarea corespondenþa :
Litere primare : A B C D …. X Y Z
Numere echivalente 0 1 2 3 …..23 24 25
3ei (mod 26) 0 3 6 9 …..17 20 23
Cifrul : A D G I …….R U X
Literele cifrului se pot obþine din alfabetul primar ºi prin urmãtorul procedeu de selectare :
Se alege prima literã A ºi apoi în ordine ciclicã , fiecare a treia literã , deci D,G,…,Y . Dupã Y cifrul se continuã cu B, deoarece, în ordine ciclicã , a treia literã dupã Y în alfabetul primar este B, º.a.m.d., motiv pentru care factorul de amplificare a=3 se mai numeºte ºi factor de selectare.
Se poate obþine un alfabet de substituire prin compunerea operaþiei de deplasare cu operaþia de selectare. Astfel , alegând b=4 ºi a=3 se obþine cifrul C(ei)=3(ei+4)( mod 26 ); ceeace este echivalent cu o transformare liniarã generalã de forma C(ei)= 3*ei+12(mod 26);
Cifrul sau permutarea P a literelor alfabetului primar ,unde :
P= A B C ….X Y Z
M P S … D G J
se poate caracteriza în mod univoc prin perechea de numere (3,4) , în care 3 reprezintã factorul de selectare iar 4 coeficientul de deplasare .
În general , perechea de numere (a,b) care defineºte în mod unic o transformare liniarã ,se numeºte cheia substituþiei respective .
Cifrurile , discutate pînã acum ,cifrul CESAR ºi cifrul obþinut prin compunerea operaþiei de deplasare ciclicã de amplitudine b cu operaþia de selectare ,având intervalul de selectare a , pot fi considerate ca cifruri simple ºi slabe la atacuri criptoanalitice . Ele sînt simple deoarece cheile, prin care aceste substituþii se definesc ,sunt numerele a ºi b . Cifrurile sunt slabe la atacuri criptoanalitice ,deoarece este suficient pentru un criptoanalist sã stabileascã o cheie simplã ,pe baza cãreia sã obþinã substituþia tuturor literelor . Cifrul de substituþie cel mai puternic ºi cel mai rezistent la atacurile criptoanalitice este cifrul aleator de substituþie , în care literele alfabetului de substituire se obþin printr-un proces aleator .
1.2.2.2 Cifrul aleator de substituþie
Acest cifru , pe lîngã avantajele referitoare la dificultãþile sporite ale decriptãrii , întrucît literele alfabetului de substituire sunt statistic independente ,prezintã încã un dezavantaj în privinþa generãrii, transmiterii ºi pãstrãrii cheii . Cheia conþine , în acest caz ,26 de perechi de numere echivalente de forma (a,b) unde a,b {1,2,…,25} , ºi ca atare necesitã o memorie de 26 de ori mai mare decît cifrul de substituþie cu transformare liniarã . În plus , memorarea cheii de cifrare ,de cãtre cifrator fiind imposibilã , se recurge la înregistrarea cheii într-o anumitã modalitate ce determinã însã apariþia pericolului pierderii sau furtul cheii . Un sistem de cifrare bazat pe substituþie se poate obþine ºi prin folosirea unei chei mnemonice . Pentru aceasta se alege cheia literalã CERNEALA sub care se scrie cheia numericã ,care se obþine prin numãrarea literelor cuvintului-cheie ,dupã aºezarea lor în ordinea alfabeticã ,deci :
CHEIA LITERALÃ : C E R N E A L A
CHEIA NUMERICÃ : 3 4 8 7 5 1 6 2
în care primul A din cuvintul cheie are numãrul de ordine 1 ,cel de-al doilea A are numãrul de ordine 2 º.a.m.d .În continuare se scriu literele alfabetului primar sub cheia numericã în forma :
C E R N E A L A
3 4 8 7 5 1 6 2
A B C D E F G H
I J K L M N O P
Q R S T U V W X
Y Z
Corespondenþa monoalfabeticã ,corespunzãtoare cuvîntului cheie CERNEALA se obþine prin scrierea sub literele alfabetului primar a literelor coloanelor de mai sus în ordinea crescãtoare ,adicã :
P= A B C …. X Y Z
F N V … C K S
Cu ajutorul acestei corepondenþe se poate cifra orice text clar, obþinând textul cifrat . În acest caz , numãrul corespondenþelor posibile creºte de la 26 la 26! ºi ca atare ,aceastã metodã de cifrare implicã operaþii criptoanalitice de mare complexitate .
Cifrând încã o datã permutarea P ,conform cuvîntului cheie CERNEALA ,se obþine permutarea P2(CERNEALA) .În acest caz ,tabelul pentru a doua substituiþie , arãtã astfel :
C E R N E A L A
3 4 8 7 5 1 6 2
F N V H P X A I
Q Y B J R Z E M
U G O W D L T C
K S
de unde rezultã permutarea :
P2(CERNEALA)= A B C … X Y Z
X Z L … V B O
În mod asemanãtor se pot construi permutãrile P3,….Pn .
Un cifru de substituþie se poate obþine ºi cu un tabel sub formã de scarã. Pentru aceasta se scriu toate literele alfabetului , în ordine alfabeticã, sub literele cheii ,cu condiþia ca litera i sã se completeze începând cu coloana i ,pentru i=1 ,2 ,…. .
Apoi , permutarea fixã ,sau alfabetul cifrat rezultã din scrierea sub literele alfabetului primar , a literelor coloanelor tabelului scarã în ordinea crescãtoare .Astfel de exemplu , pentru cheia mnemonicã :
P R A C T I C A
6 7 1 3 8 5 4 2
1 A B C D E F
2 G
3 H I J K L
4 M N
5 O P Q
6 R S T U V W X
7 Z
care conduce la urmãtoarea permutare :
P = A B C D E …. W X Y Z
R S Z A T….. L N Q Y
Un alt procedeu de obþinere a unui alfabet cifrat constã în repetarea cuvîntului cheie ,pînã rezultã un numãr de litere ,egal cu numãrul literelor din alfabetul primar . Aceasta se scrie sub literele alfabetului primar ºi se numeroteazã în ordine alfabeticã de la 0 la 25 .Litera A se cifreazã prin acea literã care este deasupra lui 0 º.a.m.d .
1.2. 3 Substituþia polialfabeticã
Cifrurile bazate pe substituþie polialfabeticã , constau din utilizarea periodicã a unor substituþii simple , diferite .Fie d alfabete de cifrare C1,C2,…Cd ºi d funcþii fi care realizeazã substituþii de forma :
fi : A Ci
Un mesaj clar M=m1m2…md md+1….m2d va fi cifrat prin repetarea secvenþelor de funcþii f1,….fd la fiecare al d-lea caracter .
Avem astfel EK(M) = f1(m1)….fd(md)f1(md+1) . Utilizarea unei secvenþe periodice de substituþii ale alfabetului ,mãreºte în mod considerabil securitatea criptogramei prin nivelarea caracteristicilor statistice ale limbii . Aceeaºi literã din textul cifrat , poate reprezenta mai multe litere din textul clar , cu diferite fregvenþe de apariþie . În acest caz , numãrul cheilor posibile , se mareºte de la 26! , cîte erau la substituþia monoalafabeticã , la (26!)n . În substituþia n-alafabeticã , caracterul m1 al mesajului clar , este înlocuit cu un caracter din alfabetul A1 , m2 cu un alt caracter din alfabetul A2 º.a.m.d ,mn+1 printr-un alt caracter din alfabetul A1 conform tabelului :
CARACTERE DE INTRARE :m1 m2 m3 m4 m5 m6 m7 m8 m9 ….
ALFABET DE SUBSTITUÞIE :A1 A2 A3 A4 A5 A6 A7 A8 A9….
O substituþie cunoscutã , de acest fel , este cifrul lui Vigenere , când cheia K este o segvenþã de litere de forma : K= k1k2….kd .
Funcþiile fi de substituþie se definesc astfel :
f i ( a )=(a+ k i )(mod n) unde n este lungimea alfabetului .
Ca de exemplu , se considerã cheia de 8 litere , ACADEMIE , care v-a fi utilizatã repetitiv pentru cifrarea mesajului SUBSTITUÞIE POLIALFABETICÃ .Folosind o corespondenþã biunivocã , între literele alfabetului ºi elementele inelului claselor de resturi modulo 26 (A=0,B=1,…. Z=25) ,substituþia 8-alfabeticã ,conduce la urmatorul text cifrat :
TEXT CLAR : SUBSTITUÞIA POLIALFABETICÃ
CHEIA :ACADEMIE
S+A=18+0(MOD 26)=18=S;
U+C=20+2(MOD 26)=22=W;
B+A=1+0(MOD 26)=1(MOD 26)=1=B;
…………………………………………………………………………
C+E=2+4(MOD 26)=6=G;
Ã+A=0+0(MOD 26)=0=A;
TEXT CIFRAT : S W B V X U B Y T K E S S X Q E L H A E I F Q G A
Un cifru Vigerene cu o perioada n , deºi mult mai puternic decît un cifru bazat pe substituþia monoalfabeticã , poate fi spart dacã criptanalistul dispune de cel puþin 2n caractere din textul cifrat . O variantã mai nouã a acestui cifru peste alfabetul binar , este cifrul Vernam care se diferenþiazã prin cheia de cifrare care este reprezentatã de o segvenþã de caractere aleatoare care nu se repetã . Fie M=m1m2 … mn un mesaj clar binar si K=k1k2 … un ºir binar care reprezintã cheia .Criptograma C=EK(M) = c1c2 .. se obþine determinând fiecare caracter ci astfel :
ci=(mi + ki)(mod n) unde i=1,2 , …
Utilizarea o singurã data a cheii (“on time pad “) face ca mesajul sã fie foarte rezistent la criptoanalizã , practic imposibil de spart : aceste cifruri au o largã utilizare în comunicaþii diplomatice ºi militare .
1.3 Metode criptografice simetrice.
Cifrul DES ºi standardul DES :
Sistemul DES este primul standard dedicat protecþiei criptografice , a datelor de calculator . Standardul a fost adoptat în 1977 , în SUA ºi reprezintã o dezvoltare ºi perfecþionare a sistemului LUCIFER .
DES este un cifru bloc , cu lungimea de 64 de biti , prelucraþi în conjuncþie cu o cheie , aceasta fiind compusã din 56 biþi generaþi aleator, ºi 8 biþi folosiþi pentru detectarea erorilor de tarnsmitere . Fiecare din aceºti biþi , prezintã paritatea imparã a celor 8 octeþi ai cheii .Prin aceastã modalitate , cheia este expandatã la lungimea blocului . Aceastã cheie este pãstratã de cãtre toþi membrii unui grup de utilizatori , care astfel pot cifra /descifra datele transmise de la unii la alþii . Cifrarea , constã din trei categorii de prelucrãri care se fac asupra blocului cu text clar de la intrare .
Blocul este mai întîi supus unei permutãri iniþiale IP de forma indicatã în tabelul 3.1.
În cazul acestei permutãri , bitul 58 de la intrare devine primul bit la ieºire , bitul 50 , al doilea , …..,bitul 7 devine ultimul (al 64-lea) .
În continuare , blocul permutat ,trece printr-un calcul complex care depinde de cheie ºi care constã din 16 iteraþii funcþionale identice.
Considerând cei 64 de biþi ai unui bloc supus unei iteraþii i , se noteazã cu Li-1 ºi Ri-1 , cele douã jumãtãþi , de 32 de biþi , stânga ºi dreapta care-l compun . Fie Ki cheia pentru ciclul i , un bloc de 48 de biti, aleºi din cei 64 de biþi ai cheii . Prelucrãrile unei iteraþii i sunt:
Li=Ri-1 ;
Ri=Li-1f(Ri-1,Ki) ;
Cheia Ki corespunzãtoare unui ciclu , este o funcþie de i (numãrul iteraþiei ) ºi KEY , ºirul de 64 de biþi ai cheii iniþiale , adicã : Ki=KS(i,KEY) .
Cei 48 de biþi ai cheii Ki se obþin printr-un procedeu dupã cum urmeazã . Fiecare cheie , este supusã unei permutãri iniþiale P1 , este împãrþitã în douã blocuri de 28 de biþi , Ci ºi Di , deplasate la rândul lor cu cîte una sau douã poziþii la fiecare ciclu . Intrãrile Ki sunt supuse din nou unei permutãri P2 .Cele douã permutãri sunt date de tabelele 3.2 ºi 3.3 .
Tabelul 3.1 Forma lui IP .
Ultima iteraþie este puþin diferitã decît celalalte , fiind definitã de ecuaþiile :
L16= R15;
R16=L15 f(R15,K16);
Funcþia de cifrare f , este “inima schemei “ ºi realizeazã o substituþie neliniarã .Dupã cum se observã , asupra blocului iniþial de 32 de biþi , se aplicã o funcþie E care genereazã 48 de biþi la ieºire (vezi tabelul 3.5) .
Tabelul 3.2 .Forma permutãrii P1
Tabelul 3.3 .Forma permutãrii P2
Tabelul 3.4
Tabelul 3.5
Primii trei biþi sunt cei din poziþiile 32 , 1 ºi 2 iar ultimii din poziþiile 32 ºi 1 . Se observã cã biþii 4,5,8,9,12,13,16,17,20,21,24,25,28,29,32 se regãsesc de cîte douã ori în expandarea E[R(i-1)] .În continuarea prelucrãrilor fãcute de funcþia f , E(Ri-1 ) , se însumeazã mod 2 ,cu cei 48 de biþi ai cheii Ki. Rezultatul este partiþionat în 8 blocuri de 6 biþi , care constituie intrãrile a 8 cutii , Sj , j=1,…,8 care realizeazã o substituþie neliniarã cu 6 intrãri ºi patru ieºiri .Cele opt cutii sunt prezentate în tabelul 3.6 .În cazul unor cutii Sj , dacã B este blocul de 6 biþi de la intrare ,Sj(B) este determinat în felul urmãtor :
Primul ºi ultimul bit al blocului B reprezintã în binar un numãr cuprins între 0 ºi 3 (fie acesta k) .Cei 4 biþi din mijlocul lui B reprezintã în binar un numãr cuprins între 0 ºi 15 ºi fie acesta numãrul 1 . În tabela Sj , la intersecþia rândului k cu coloana l se gãseºte un numãr cuprins între 0 ºi 15 a cãrui reprezentare este de 4 biþi ce constituie ieºirea cutiei Sj .
Tabelul 3.6
1.3.1 Proprietãþi ale algoritmului DES
Efectul de avalanºã
Dacã o micã schimbare a cheii sau a mesajului clar , v-a produce doar o micã shimbare în textul cifrat , aceasta ar însemna reducerea efectivã a dimensiunii spaþiului cheii , sau a mesajului ce ar fi cãutate exhaustiv .
În consecinþã , una din cerinþele de bazã ale unui bun algoritm , este de a produce mari schimbãri în textul cifrat , în urma unor mici modificãri ale textului clar sau ale cheii .DES satisface aceste proprietãþi demonstrate în [KOHN81] . Mayer a arãtat cã dupã cinci iteraþii , fiecare bit al textului cifrat depinde de toþi biþii cheii ºi ai mesajului . Aceastã proprietate poate fi folositã în scopul detectãrii unor erorii sau al autentificãrii . Efectul poate fi produs folosind douã mesaje în clar care doar diferã prin prima poziþie .
X =(11111111111111111111…….1111111111111111);
X’=(01111111111111111111……..1111111111111111);
Complementarietatea
DES este invariant la complementarea mesajului clar , al cheii ºi al textului cifrat .Avem deci cã : DESK( X) = DESK (X’) unde K’ ºi X’ prezintã complementele faþã de 1 ale lui X ºi K . Aceastã proprietate de complementarietate rezultã din modul în care sunt folosite subcheile interne în fiecare iteraþie . Analiza lui DES aratã versiunea expandatã a celor douã pãrþi , dreapta ºi stînga , ale mesajului clar sunt supuse unui proces complicat împreunã cu cheia Ki a iteraþiei i , marcat de funcþia f .
f[Ri,Ki+1] =f [E(Ri) Ki+1] unde E reprezintã expandarea lui Ri de la 32 la 48 de biþi . Complementând atât Ri cît ºi Ki+1 , nu se schimbã valoarea lui f ,deci avem : f [Ri,Ki+1 ]= f [E(R’i,K’i+1].Însã R0 ºi L0 provin din X iar complementarea lui K înseamnã complementarea tuturor subcheilor K1,K2,…,K16 .
Aceastã proprietate , de complementarietate, reduce spaþiul de cãutare exaustivã a unei chei , de la 256 la 255 . Dacã criptanalistul , deþine Y1=DESK(X) ºi Y2=DESK(X’) pentru un mesaj oarecare X , el va cifra mai întâi pe X cu toate cele 255 chei care încep cu ‘0’ .Rezultatul cifrat se comparã cu Y1 ºi cu Y2 .Dacã C <> Y’2 , cheia nu este K’.
Aceastã simetrie reduce efortul de cãutare la jumãtate , testându-se simultan 2 chei , K ºi K’ . Complementarea ar putea fi înlãturatã din algoritm , dacã s-ar înlocui suma modulo doi cu cutii S comandate de biþi ai cheii . În [RIVE85] , se încearcã , folosind douã metode statistice de testare , sã se analizeze dacã cifrul DES reprezintã un grup , ceeace ar constitui o slãbiciune a algoritmului , fãcându-l vulnerabil la atac cu text clar la alegere . Utilizându-se o combinaþie de echipamente ºi programe specializate , autorii ajung la concluzia cã setul de permutãri corespunzatoare lui DES nu posedã proprietatea de grup .
1.3.2 Atacuri criptoanalitice la DES
Existã douã modalitaþi considerate primare , de a sparge un cifru de tipul DES-ului :
-cautare exaustivã .
-folosirea unor tabele .
Le explicãm pe rând :
(a)Cãutarea exaustivã
Reprezintã un atac cu text- clar cunoscut . Fiind dat un text-cifrat, textul-clar este cifrat cu fiecare cheie pînã când DESK( M )= C. Complexitatea , din punct de vedere al timpului , este T=O(n) , iar din punct de vedere al spaþiului , este S=O(1) . Deoarece la DES , n=256 , trebuiesc testate 256=7*1016 chei ; considerând cã o cheie poate fi verificatã într-o microsecundã , rezultã T=106 zile ºi doar folosirea unui milion de chipuri DES , în paralel , ar reduce timpul de gãsire a unei chei la o zi .
Folosirea unor tabele
Reprezintã un atac cu text clar la alegere pentru un Mo ales , criptogramele Ci =EK(M0) sunt calculate în avans pentru i=1, 2 ,…, n. Ca urmare , pentru un text C interceptat , cheia K este gãsitã prin simpla cãutare într-o tabelã în timpul T=O(1) în timp ce complexitatea spaþiului este S=O(n) .În cazul DES , S=56(256)=41018 biþi .Acest lucru , cere 4 miliarde de benzi magnetice , fiecare , aproximativ 109 biþi .
Hellman propune în [HELL80] o metodã de atac care reprezintã un compromis timp-memorie .La fel ca în cazul (b) se face precalcularea unor valori ºi memorarea lor într-o tabelã .Dar dimensiunea tabelei este S=O(n2/3) în timpul de cãutare T=O(n2/3) .
Vom defini funcþia f(k )=R(DESK(M0)) pentru un text ales M0 , unde R este funcþia care reduce blocul de 64 de biþi la unul de 56 de biþi . Pentru un anumit text cifrat C0 = DESK(M0) , obiectivul criptanalizei este sã gãseascã inversa lui f : K= f -1(R(C0)) .
Printr-un calcul anterior , se aleg aleator m puncte de start SP1 , SP2, SP3, SP4,…., SPm din spaþiul cheilor .Apoi se calculeazã urmatoarele valori :
Xio=SPi ; Xij= f(Xi , j-1) , 1<= j <= t ,i,t {1,…,m} .Pentru fiecare punct de start , se calculeazã o tabelã :
SPi=Xi 0 Xi1Xi2Xi3… Xi , t-1Xi , t = EPi .
Punctele de sfârºit EPi reprezintã : EPi=f t (SPi) (1 <= i <= m) .
Perechea (SPi ,EPi ) este memoratã în tabele sortate dupã Epi. Dimensiunea tabelei este S=O(m) iar timpul de precalculare este Tp= O(mt) .Fiind dat un text interceptat , C0=EK(M0) ,determinarea lui K începe întâi cu cãutarea lui în coloana (t-1) a X-ilor calculaþi , apoi în coloana (t-2) etc . Deoarece X nu se memoreazã în tabelã , ei trebuie sã fie calculaþi în punctul de start . La început se calculeazã Y1=f(Xi , t-1) .
Aceasta implicã fie K=Xi , t-1, fie cã f are mai multe inverse (alarmã falsã ). Pentru a vedea dacã Xi , t-1 este corect , se v-a folosi pentru cifrarea mesajului M0, ca urmare K=Xi , t-1 dacã DESK(Xi , t-1) =C0 .În caz contrar , se v-a proceda similar cu coloana t-2 :
Y2 = f (Y1);
K = Xi , t-2;
( numai dacã Y2=EPi ºi DES(Xi,t-2)(M0) =C0)) .Hellman sugereazã o implementare hard cu m=105 ºi t=106 care foloseºte 106 tabele . Fiecare intrare în tabelã , conþinând 56 de biþi pentru SP ºi 56 de biþi pentru EP , rezultã un necesar de 1013 biþi ( aproximativ 10000 de benzi ) .Prin paralelism , timpul ºi resursele pot fi aduse la limite rezonabile .
O soluþie interesantã de criptanaliza a cifrului DES este prezentatã în [BIHA91] ºi se bazeazã pe perechi {text-clar , text-cifrat} care prezintã anumite diferenþe particulare . Prin analiza mai multor astfel de perechi cu aceeaºi diferenþã (aceeaºi valoare obþinutã prin suma modulo 2 a celor douã elemente ale perechi ) se poate localiza cheia cea mai probabilã .
1. 3.3 Critici ºi slãbiciuni ale DES-ului
Controversele privind standardul DES provin din urmãtoarele considerente :
Dimensiunea micã a spaþiului cheilor .
Nepublicarea principiilor de proiectare a algoritmului .
Numãrul de iteraþii .
Algoritmul de generare al cheilor .
Un sistem criptografic (criptosistem) are cinci componente [PATR88b]:
Spaþiul mesajelor în text clar ,notat cu {M}.
Spaþiul mesajelor în text cifrat ,notat cu {C}.
Spaþiul cheilor ,notat cu {K} .
Familia transformãrilor de cifrare ,EK : M C , unde
K{K} .
Familia transformãrilor de descifrare ,DK : C M ,unde
K {K}.
Fiecare transformare de cifrare ,EK ,este definitã de un algoritm de cifrare , comun tuturor transformãrilor familiei , ºi o cheie K, distinctã de la o transformare la alta . În mod similar , fiecare transformare de descifrare DK , este definitã de un algoritm de descifrare D, ºi de cheia K. Pentru K dat , DK, reprezintã inversa lui EK ,adicã avem DK(EK(M))=M, M{M} .
Datele trebuiesc astfel protejate , astfel încât utilizatorii neautorizaþi sã nu poatã reconstitui textul clar , dintr-un text cifrat interceptat . În acest sens este necesar sã se asigure cã :
Utilizatorul neautorizat sã nu poatã determina sistematic transformarea de descifrare DK ,din textul cifrat interceptat C, chiar dacã se cunoaºte textul clar , M , corespondent .
Utilizatorul neautorizat sã nu poatã reconstitui textul clar ,M, din textul cifrat ,C, fãrã cunoasterea transformãrii DK .
Presupunem necesarã explicarea câtorva noþiuni cu care vom putea lucra mai departe :
Protecþia datelor (confidenþialitatea) , impune ca transformarea de cifrare DK(respectiv , cheia) sã fie protejatã .
Autentificarea datelor – cere ca un utilizator neautorizat sã nu fie capabil în mod obiectiv ,sã substituie textul cifrat ,C , cu un text cifrat fals , C’, farã ca acest lucru sã fie detectat .
Nu trebuie sã i se permitã utilizatorului neautorizat :
Sã determine sistematic transformarea EK , cunoscând pe C ºi textul clar corespunzãtor ,M.
Sã gãseascã în mod sistematic C’ ,astfel ca DK(C’) sã fie text clar valid în M .Cerinþele de autentificare impun doar ca transformarea EK(respectiv cheia de cifrare) sã fie protejatã .
=== C2 ===
CAPITOLUL 2
CRIPTOGRAFIA COMPUTAÞIONALÃ CU CHEI
PUBLICE (ASIMETRICÃ )
2.1 Concepte generale :
Criptosisteme cu chei publice
Conceptul de criptosistem cu douã chei (asimetric) a fost introdus de Diffie ºi Hellman în 1976 [DIFF76]. Ei propuneau o nouã metodã de cifrare ,numitã cifrare cu cheie publicã , în cadrul cãreia , doi utilizatori (procese) pot comunica cunoscând fiecare doar cheia celuilalt .
În criptosisteme cu chei publice , fiecare utilizator A , deþine o transformare de cifrare publicã ,EA , memoratã într-un registru (fisier) public , ºi o transformare de descifrare 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 protecþie (confidenþialitate).
La recepþie ,B v-a descifra criptograma C , utilizând transformarea secretã DB cunoscutã doar de el . Avem urmãtoarele transformãri :
DB(C) = DB(EB(M)) = M ;
Schema nu furnizeazã facilitãþi de autentificare , deoarece orice utilizator (proces ) poate avea acces la transformarea publicã EB a lui B ºi îi poate trimite 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 v-a emite C=DA(M) la B , care la recepþie va aplica transformarea publicã EA a lui A adicã EA(C)=EA(DA(M))=M .
Autentificarea este realizatã , deoarece numai A poate aplica transformarea DA dar protecþia nu este asiguratã , întru-cât este posibil ca M sã fie obþinut de oricine aplicând transformarea publicã EA. Pentru a se realiza simultan protecþia ºi autentificarea informaþiilor , spaþiul {M} trebuie sã fie echivalent spaþiului {C} , 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 si DA sã fie mutual inverse , adicã EA(DA(M)) = DA(EA(M)) = M;
Emiþãtorul de mesaj A , v-a aplica mai întîi transformarea secretã a sa DA, mesajului M , apoi v-a cifra rezultatul – utilizând transformarea publicã a lui B ,EB ºi v-a emite criptograma C = EB(DA( M )).
Receptorul B îl obþine pe M , aplicând la început propria-i functie de descifrare , DB , iar apoi transformarea publicã a lui A ,EA ,cea care furnizeazã autentificarea :
EA(DB(C)) = EA(DB(EB(DA(M)))) = EA(DA(M)) = M .
2.1.1 Sistemul de criptare cu cheie publicã ºi folosirea lui pentru autentificare
Vom descrie sistemul de criptare cu cheie publicã în termeni generali , folosind o schema bloc ºi apoi vom arãta cum poate aceasta sã fie folositã pentru a asigura un fel de autentificare , care face posibilã rezolvarea disputelor între emitãtor ºi receptor cu privire la transmiterea unui mesaj .
Sistemul se bazeazã (ca ºi criptografia) pe o clasã specialã de funcþii aºa încât shema bloc a unui astfel de sistem , nu indicã în mod convingãtor cã se poate realiza uºor în practicã . Ca urmare , mai tîrziu vom descrie o formã particularã de sistem cu cheie publicã care a fost propus . Diffie ºi Hellman au descris principiul sistemului cu cheie publicã în [8] . Textul clar este cifrat de emiþãtor ºi transformarea inversã la capãtul receptor îl descifreazã înapoi în textul clar .Diferenþa în sistemul cu cheie publicã constã în aceea cã , cheile utilizate în algoritmul de cifrare si descifrare , sunt diferite .Nu este important dacã algoritmii folosiþi la cele douã capete sunt identici .De fapt , s-au realizat sisteme cu cheie publicã care sunt în funcþiune , în care algoritmii de cifrare-descifrare , sunt identici , într-un caz ºi complet diferit în alt caz . Esenþa metodei este cã cheile sunt diferite .
În mod clar , cele douã chei trebuie sã fie idependente , iar în diagramã , ele sunt arãtate cã fiind deduse , de un algoritm cunoscut dintr-o cheie comunã de start . În unele cazuri, punctul de start va fi cheia secretã ºi din aceasta se deduce cheia publicã printr-un calcul cunoscut . Aºa cum vom vedea mai târziu , o cheie poate cuprinde mai mult de un numãr .Procesul de calculare a cheilor este efectuat de receptorul mesajelor , care pastreazã pentru el însuºi cheia de utilizat -cheia secretã. El transmite emiþãtorului mesajului , cealalaltã cheie , care poate fi denumitã cheie publicã , deoarece nu existã un risc în a o face cunoscutã la scara largã . Deoarece este cunoscutã la scara largã , oricine poate genera ºi transmite un text cifrat , la receptorul care deþine cheia publicã. Într-o conversaþie bilateralã , fiecare parte transmite celeilalte ,cheia sa publicã . Ca ºi în alte forme de criptografie ,algoritmii folosiþi sunt cunoscuþi în mod public , ºi acest lucru este valabil ºi pentru metoda de generare a cheilor .
Se observã unele caracteristici pe care trebuie sã le aibã diversele funcþii . Cea mai importantã este aceea cã funcþiile de cifrare ºi descifrare sunt inverse atunci când l-i se furnizeazã o pereche corectã de chei publice ºi secrete . Este de asemenea evident , cã cheia publicã trebuie sã fie o funcþie greu inversabilã de variabilã cheie secretã ,altfel un intrus ar putea deduce cheia de start ºi din acesta , cheia secretã . Cu toate acestea , aceastã funcþie greu inversabilã se bucurã de o “capcanã”, ce constã în aceea cã , cunoaºterea cheii secrete face posibilã inversarea ei . Deoarece funcþiile arãtate în figurã sunt funcþii greu inversabile, dimensiunea blocurilor de date pe care le cifreazã sau cheile generate trebuie sã fie suficient de mari pentru a împiedica inversarea prin încercare , din eroare sau prin memorare la scarã largã . Acestea nu sunt foarte diferite de cerinþele pentru sisteme normale de criptare . Aºa cum se aratã , sistemul este în principiu , un sistem de cifrare pe blocuri , similar standardului de criptare a datelor . Avantajul sistemului cu cheie publicã constã în faptul cã cheia de cifrare este publicã. Nu mai existã problema dificilã de distribuire secretã a cheilor .
Acest lucru poate fi de mare importanþa acolo unde sunt necesare conversaþii sigure între calculatoare ºi terminale într-un mod ocazional – aºa numitele reþele deschise .
2.1.2 Autentificarea prin sistemele de criptare cu cheie publicã
Pentru a adapta un sistem cu cheie publicã în scopul autentificãrii , trebuie sã presupunem o altã caracteristicã a funcþiilor .În mod clar , ar fi convenabil dacã blocul de text cifrat ar ocupa acelaºi numãr de biþi ca ºi textul în clar . Acest lucru este adevarat în exemplul descris mai jos. Existã totuºi cazuri , în care textul cifrat este mai lung ºi trebuie sã excludem aceste cazuri în considerarea schemelor posibile de autentificare .Presupunând acum cã algoritmul de cifrare face corespondenþa între valorile posibile ale textului clar ºi valorile posibile în numar egal ale textului cifrat , atunci funcþia de descifrare face corespondenþa inversa .Putem trata textul prin aceste douã transformãri în ordine inversã ºi obþinem din nou textul clar .
Deoarece cheia secretã este tot aceea care intrã în algoritmul de descifrare , observãm cã emiþãtorul este cel care transformã textul în clar în secret în timp ce receptorul îl poate transforma din nou în clar , folosind cheia publicã. Dacã un receptor poate face acest lucru , la fel poate proceda oricare altul care cunoaºte cheia publicã . Prin urmare , nu mai putem privi textul transformat ca un text cifrat . Acesta nu este un mecanism pentru securitatea împotriva intercepþiei liniei , ci o metodã de a asigura integritatea ºi de a autentifica originea mesajelor .
Procesul de “cifrare” , restabileºte de data aceasta , textul original . Scopul acestei transformãri a funcþiilor este de a obþine un mijloc prin care receptorii oricãrui mesaj transformat în acest fel ,pot , cu ajutorul unei chei publice , sã dovedeascã lor însuºi , ºi altora , cã mesajele au venit de la emiþãtorul S. Acest lucru este adevãrat , deoarece ele au fost transformate cu ajutorul unei chei secrete care este cunoscutã numai de S. Acelaºi proces care restaureazã textul original , serveºte pentru a verifica faptul cã textul a venit de la S ,presupunând cã suntem siguri cã cheia publicã pe care am folosit-o este aceea a emiþãtorului respectiv .
Caracteritica particularã a metodei prezentate , este aceea cã se pot rezolva disputele . Receptorul nu poate construi un mesaj fals cu semnãtura emiþatorului asa încât nu are sens ca emiþãtorul sã acuze pe receptor de acest lucru . Receptorul se poate adresa unei a treia pãrti , ca de exemplu un judecator legal , în caz de disputã ºi sã prezinte valoarea cheii publice , care este cunoscutã în comun , împreuna cu mesajul transformat , pe care la primit ºi textul clar obþinut (pe care îl poate verifica oricine ) .În felul acesta , se stabileºte conþinutul mesajului ºi identitatea emiþãtorului.
Trebuie doar sã fim siguri cã cheile pe care le folosim sunt autentice . Dacã avem nevoie de o metodã atât pentru autentificarea mesajelor cât ºi pentru cifrarea lor cu ajutorul unei chei publice , se pot folosi cele doua metode prezentate mai sus , în cascadã . O astfel de metodã este de a prezenta o legaturã între emiþãtor ºi receptor , fiecare din ei fiind sigur de identitatea celuilalt dacã se cunoaste cã el foloseºte cheia publicã a celuilalt . Astfel , emiþãtorul cunoaºte cã doar receptorul destinat poate citi mesajul , iar receptorul ºtie cã mesajul a venit de la emiþãtorul respectiv .
Existã o problemã tehnicã , în aplicarea în practicã a sistemului în cascadã . În sistemul cu cheie publicã , care este cel mai potrivit pentru autentificare , dimensiunea blocului pe care se fac transformãrile variazã în funcþie de cheia secretã aleasã .Avem nevoie de o metodã pentru a evita reâmpãrþirea în blocuri a mesajului atunci când el trece între pãrþile de criptare ºi de autentificare ale sistemului , care folosesc chei diferite . O soluþie a fost propusã de Kohnfelder[9] , care foloseºte metoda alternativã în care cele douã subsisteme pot fi îmbinate .Noi am ales succesiunea operaþiilor arãtatã ca în figurã , aºa încât “blocul de decizie “ , poate compara intrarea ºi iesirea din blocul “Cifrare”, S,folosind cheia publicã a emiþãtorului respectiv. În metoda lui Kohnfelder , dacã dimensiunile blocurilor nu sunt egale ,din cauza cã dimensiunea blocurilor generate de subsistemul S este mai mare decât a blocurilor generate de subsistemul R ,se inverseazã ordinea de aplicare a celor douã transformãri la ambele capete ale liniei ºi aceasta rezolvã problema dimensiunilor blocurilor .
Problema nouã este de a decide cum v-a verifica blocul de decizie , transformarea de autentificare ºi a face corespondenþa cu textul în clar, fãrã a cunoaºte cheia de descifrare . El poate compara intrarea ºi ieºirea în blocul “Cifrare” S , ca mai înainte , ºi acesta verificã originea mesajului ,dar în aceasta etapa ea este de forma cifratã . Corespondenþa cu textul în clar este fãcutã dupã cum urmeazã .Receptorul prezintã mesajul în clar , blocului de decizie ºi îi furnizeazã cheia sa publicã (pe care blocul de decizie o poate verifica) .Blocul de decizie cifreazã mesajul , ºi îl comparã cu ieºirea din blocul de “Cifrare “ S .Dacã ele sunt identice ,textul în clar respectiv , corespunde textului cifrat care a fost autentificat .În acest fel , sistemele cu cheie publicã ne pun la dispozitie o funcþie care a fost denumitã “semnãtura electronicã ”. Este o semnãturã nefalsificatã , ºi , în particular , receptorul unui mesaj , deºi poate verifica semnãtura , nu o poate reproduce , sau sã o ataºeze la un alt mesaj .
Între oricare doi utilizatori , se poate comunica confidenþial , cunoscându-se de cãtre fiecare doar cheia publicã a partenerului . În sistemele cu chei publice , fiecare utilizator A are o transformare publicã EA care poate fi înregistratã într-un fisier public , ºi o transformare secretã DA cunoscutã doar de proprietar . Transformarea publicã (numitã ºi cheie publicã ) a destinatarului , permite cifrarea mesajelor care îi sunt destinate . Cu ajutorul transformarii secrete (numitã ºi cheie secretã ) destinatarul ( ºi numai el) poate descifra mesajul recepþionat . Aºa cum s-a vãzut , folosirea cheii secrete ,permite creeare unor semnãturi digitale , care sã ne asigure de autenticitatea mesajelor. Aceste criptosisteme cu chei publice se bazeazã pe o serie de metode matematice de mare complexitate , în aritmetica numerelor mari (de obicei cu 256-512 biþi) a cãror implementare se face cu dificultate .
2.2 Sisteme de cifrare cu chei publice exponenþiale .
Ideea care stã la baza acestui concept constã în faptul cã procedura (cheia) de cifrare este fãcutã publicã de cãtre utilizator , ºi poate fi folositã de cãtre toþi ceilalti utilizatori, pentru cifrarea mesajelor ce îi sunt adresate. În schimb , procedura (cheia) de descifrare, diferitã de prima , – de unde aributul de sistem asimetric, este þinutã secretã . Dacã notãm cu {M} -mulþimea mesajelor, {C} -mulþimea criptogramelor, E-procedura de cifrare, ºi D-procedura de descifrare, un criptosistem cu chei publice trebuie sã satisfacã urmãtoarele cerinþe :
Dacã C = E(M) ,atunci M = D(C) sau D ( E ( M ) ) = M,
M {M};
E ºi D sunt uºor de aplicat .
Dezvãluirea publicã a lui E nu trebuie sã compromitã pe D , ceeace înseamnã cã obþinerea lui D din E este matematic imposibil sau presupune un consum prohibitiv de resurse .Metoda propusã , permite comunicaþii sigure între utilizatorii care au stabilit contacte prealabile .
De exemplu , dacã utilizatorul A , doreºte sã transmitã un mesaj confidenþial utilizatorului B , v-a cãuta în fiºierul public EB ºi v-a transmite la B pe C=EB(M).Conform proprietãþii a treia , B este singurul utilizator care ºtie sã descifreze criptograma C aplicând DB þinutã secretã . În plus, pentru ridicarea gradului de securitate a transmisiei , Diffie si Hellman, propun cã E ºi D sã îndeplineascã urmatoarea proprietate adiþionalã :
(4) Dacã S = D(M) , atunci M=E(S) sau E(D(M))=M pentru oricare M{M};
Valoarea S este numitã semnãtura digitalã ºi reprezintã o metodã de autentificare reciprocã . În timp ce B poate fi sigur cã mesajul recepþionat a venit de la adevãratul A,prin semnarea mesajelor sale ,A poate fi sigur cã nimeni nu v-a putea sã-i atribuie un mesaj fals . Utilizatorul A poate semna mesajul cãtre A astfel : S=DA(M) , ºi apoi trimite criptograma C=EB(S). În aceste condiþii , numai B poate recunoaºte pe S din C , calculând:
DB(C)=DB(EB(S))=S.Apoi mesajul se obþine calculând :
EA(S)=EA(DA(M))=M.
Diffie ºi Hellman sugereazã o metodã de implementare practicã a conceptului propus . Se indicã utilizarea unor funcþii inversabile (“one -way functions”) .Ele îºi au originea în probleme grele din punct de vedere computaþional .
O functie este greu inversabilã dacã este inversabilã ºi uºor de calculat , dar pentru aproape toate valorile y din codomeniu , este imposibil computaþional sã se calculeze x = f -1 (y) .Cu alte cuvinte , este imposibil computational , sã se calculeze f -1 dacã se dispune de o descriere completã a lui f . Cu alte cuvinte , o functie f este greu inversabilã dacã :
Este uºor sã se calculeze y din x , y= f (x) .
Existã inversa lui f.
Este computaþional imposibilã determinarea inversei lui f .
O functie greu inversabilã se spune cã este cu trapã , atunci când f -1 este uºor de calculat numai dacã se dispune de o informaþie numitã trapã . Nerecunoaºterea acestei informaþii face ca funcþia sã fie greu inversabilã .
O astfel de pereche de funcþii (f,f -1) poate constitui perechea (E,D) a unui criptosistem cu chei publice . În general, pentru procedurile E ºi D se indicã scheme bazate pe operaþii modulo n cu elemente din inelul claselor de resturi modulo n .
Schema propusã în [DIFF76] îºi bazeazã securitatea pe dificultatea calculului logaritmilor modulo numãr prim .
Fie q un numãr prim ºi un întreg X , cu X [1,q-1].
Se poate calcula Y = aX (mod q) ,unde a este un element primitiv al cîmpului Galois GF(q). Dupã cum se ºtie , clasele de resturi modulo q , formeazã un inel , ºi dacã q este numãr prim , acesta formeazã un câmp Galois GF(q) . Într-un câmp Galois ,GF(q) ,existã q-1 numere a , care se numesc elemente primitive ale cîmpului .Dacã a,a2,a3,…,a(q) sunt puterile lui a ,acestea au ca resturi mod q , pe 1,2,…,(q) , ceeace înseamnã cã un element primitiv , genereazã prin ridicarea la putere , toate numerele nenule ale cîmpului .
S-a notat cu (q) = indicatorul lui Euler, unde (q)=q-1 .Fiecare utilizator A ,alege în mod aleator un numãr XA ,XA {1,2,…,q} ºi calculeazã YA = aXA (mod q). Numãrul XA este þinut secret , în timp ce YA se face public . Dacã A ºi B doresc sã comunice între ei , se utilizeazã urmatoarea cheie de comunicaþie: KAB=YAXB =YBXA= aXAXB(mod q) .În timp ce utilizatorii A ºi B pot calcula cheia KAB pornind de la X propriu (secret) ºi Y public al partenerului , un criptanalist trebuie sã calculeze pe KAB pornind de la YA ºi YB , singurele publice, procedând astfel : KAB=YAlogYB( mod q).
Acest lucru face ca sistemul sã fie foarte greu de spart , datoritã imposibilitãþii calculului logaritmului modulo q . Calitatea fundamentalã a sistemului este cã nu necesitã stabilirea în avans a unei chei secrete de cifrare între doi utilizatori ai unei reþele care doresc sã comunice date confidentiale , ei facând apel doar la fiºierul de chei publice . Descifrarea mesajelor nu se poate face însã pe baza unor chei din fisierul public , ci doar pe baza perechilor lor , þinute secrete de cãtre fiecare utilizator . Criptosistemele cu chei publice fac parte din clasa sistemelor criptografice sigure computaþional .
2.3 Cifrul POHLING-HELLMAN
In 1979 Pohling ºi Hellman publicã o schemã de cifru bazatã pe calculul exponenþialelor într-un cîmp finit . Aproximativ în acelaºi timp, Rivest- Shamir-Adleman [RIVE79], comunicã o schemã oarecum asemãnãtoare. Atât metoda PH (prescurtarea de la prima metodã) cât ºi RSA ( a doua metodã) cifreazã câte un bloc de mesaj M (0,n-1), calculând exponenþialele: C=Me(mod n) ,unde e ºi n reprezintã cheia publicã a transformãrii de cifrare. Descifrarea se face prin aceeaºi operaþie, utilizând drept cheie secretã un exponent diferit ,d :
M=Cd(mod n) .
Funcþia exponenþialã poate fi implementatã printr-un algoritm rapid de calcul, care calculeazã fastexp =a Z (mod n). Cifrarea ºi descifrarea sunt bazate pe generalizarea lui Euler a teoremei lui Fermat , care afirmã cã pentru orice M relativ prim cu n ,avem :
M(n) (mod n) = 1, unde (n) este indicatorul lui Euler .Acestã proprietate implicã faptul cã e ºi d sã satisfacã proprietatea :
ed(mod (n))=1,
pentru ca descifrarea sã ducã la obþinerea mesajului original .
Într-adevar ,deoarece e d =1(mod (n)),putem scrie :
ed=K (n)+1= (n)+ (n)+…+ (n)+1 .
Rezultã :
Med = M ( n) + ( n) + ( n) +…+ ( n ) +1=M (n) M (n) M (n)…M(mod n).
Dar conform teoremei lui Euler ,M (n) =1(mod n) .
Rezultã Med =M(mod n). În aceste condiþii avem E(D(M))=D(E(M))=M(mod n), M [0,n-1]
Deoarece (Md mod n)e mod n=Mde mod n=M , adicã algoritmul este simetric , el poate fi folosit atât pentru cifrare cât ºi pentru autentificare. Fiind dat (n) ,este uºor sã se genereze perechea (e,d) care sã satisfacã proprietatea cerutã..Tocmai abilitatea cu care se ascunde (n) deosebeºte schema RSA de PH .În metoda PH modulul este ales ca fiind un numãr prim mare .Funcþiile de cifrare ºi descifrare sunt :
C=Me mod p;
M=Cd mod p;
toate aceste calcule fãcându-se în câmpul Galois GF(p).Deoarece p este numãr prim, (p)=p-1 ,deci este derivat în mod trivial din p. Ca urmare metoda PH poate fi folositã doar într-un criptosistem convenþional , atunci când se þin secrete , atît e cât ºi d.Se recomandã un p=2p’+1, unde p’ este un numãr prim mare .
Securitatea schemei rezidã în complexitatea calculãrii unor logaritmi discreþi în câmpul Galois GF(p), criptoanalistul poate calcula pe e (ºi pe d) din perechea (M,C).
Avem deci : E=logM(C) în câmpul Galois GF(p).
Cel mai rapid algoritm publicat de Adleman , pentru calculul unui logaritm în GF(p), cere un numar de paºi egal cu :
T=exp(sqrt(ln(p)ln(ln p)))) .
Dacã are o lungime de 200 de baiþi ,t=2.71011,ceeace înseamnã (la un sistem cu 1 pas/microsec) un calcul de aproximativ trei zile , iar un p de 664 biþi , T=1.21023 ,ceeace va cere aproximativ 1012 zile ,cu totul prohibitiv.
2.4 Cifrul RIVEST-SHAMIR-ADLEMAN (RSA)
Acest cifru cu chei publice ,realizat de trei cercetãtori de la Massachusetts Institute of Technology ,realizeazã standardul de “facto” în domeniul semnãturilor digitale ºi al confidenþialitãþii cu chei publice . El se bucurã de o 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 recunoscutã ca cea mai sigurã metodã de cifrare ºi autentificare disponibilã comercial . 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 Apararii din SUA,National Aeronautics -SUA, Boeing,reþeaua bancarã internaþionalã SWIFT, guvernul Belgiei ), folosesc acest algoritm pentru protejarea ºi autentificarea datelor ,parolelor, fiºierelor ,documentelor memorate sau transmise prin reþele . De exemplu , firma Lotus , dezvoltã un Notes , un concept de lucru în comun
( groupware) ,într-o reþea. La o astfel de legaturã în comun a numeroase programe ºi persoane , se cere însã o mare încredere în informaþie cât ºi o mare confidenþialitate ,ca urmare Lotus foloseºte semnãtura digitalã ºi secretizarea cu ajutorul criptosistemelor RSA.
În sistemul de operare NetWare ,pentru reþele locale , ale firmei Novell ,se foloseºte curent RSA în mecanismele de autentificare care permit utilizatorilor sã acceadã la orice server al reþelei .
Motorola comercializeazã telefoane sigure care încorporeazã o serie de metode de confidenþialitate ºi autentificare a utilizatorilor cât ºi a partenerilor de dialog .Toate acestea se bazeazã pe algoritmul RSA ºi se regãsesc atît în variante de uz general cât ºi în variante pentru comunicaþii militare ,fiind destinate atît transmisiilor de voce, cât ºi de FAX.
Un alt exemplu semnificativ ,de utilizare a sistemului RSA este reþeaua de poºta electronicã a guvernului belgian .Toate protocoalele de asigurare a confidenþialitãþii ºi de autentificare prin semnaturã digitalã folosesc acest algoritm .
Sistemul RSA este de tip exponenþial .În cadrul acestei metode , modulul n este obþinut prin produsul a douã numere prime mari : n=pq , astfel încât indicatorul lui Euler (n) =(p-1)(q-1) ,devine mult mai greu de determinat ,iar schema poate fi folositã cu succes într-un criptosistem cu chei publice. Se vor face publice e ºi n ,iar d va fi þinut secret .În privinta metodei se recomandã alegerea unui d relativ prim cu (n) în intervalul [max(p,q)+1,n-1].În acest caz e se v-a calcula astfel : e=inv(d, (n)), putându-se utiliza o versiune a algoritmului lui Euclid .
Securitatea metodei depinde de dificultatea factorizãrii lui n în p ºi q. Cel mai rapid algoritm publicat de Schroeppel , cere un numar de paºi egal cu :
T=exp(sqrt(ln(n)(ln(n)))) , aceeaºi cu cel al algoritmului în câmpul GF(n).
Rivest-Shamir-Adleman,sugereazã utilizarea unor numere prime p ºi q de 100 de cifre , adicã a unui n de 200 de cifre , ceeace cere pentru factorizare mai multe milioane de ani .Deoarece cifrarea ºi descifrarea sunt funcþii mutual inverse , RSA poate fi utilizatã atât la secretizare cât ºi la autentificare . Fiecare utilizator A, obþine modulul nA ºi exponenþii eA ºi dA.
Apoi A va înregistra într-un fisier public , cheia publicã (nA ,eA) , în timp ce va þine secretã pe dA . Un utilizator B,v-a emite un mesaj secret M, utilizând transformarea de cifrare publicã a lui A :
EA(M)=MeA mod nA.
La recepþie A v-a emite mesajul în clar :
DA(EA(M))= M eA dA mod nA= M .
Utilizatorul A va putea semna mesajul M cãtre B , calculând :
DA(M)=MdA mod nA,
iar B v-a putea autentifica acest mesaj , utilizând cheia publicã A :
EA(DA(M))=M dAeA mod nA =M .
O dificultate în utilizarea criptosistemelor RSA , apare atunci când este nevoie atît de protecþie cât ºi de autentificare ,deoarece este necesar sã se aplice transformãri succesive cu module diferite . De exemplu , pentru ca A sã transmitã la B un mesaj semnat ºi secret ,A va calcula :
C=EA(DA(M)).
Dacã nA > nB , blocul DA(M) nu mai aparþine mulþimii [0,nB-1] corespunzatoare lui EB .Reducerea lui DA(M) mod nB nu rezolva problema, nemaiputându-se apoi obþine mesajul original . Soluþia ,constã în utilizarea unui prag h (de exemplu h=1099 ) astfel încât fiecare utilizator sã aibã douã perechi de transformãri (EA1 , DA1 ) pentru semnãturã ºi
( EA2 , DA2 ) pentru protecþie ,respectând condiþia : nA1 < h < nA2 .
În acest caz , la transmiterea unui mesaj semnat ºi secretizat la B, A v-a calcula : C=EB2(DA1(M)) ,deoarece nA1 <h <nB2 , problema este rezolvatã Utilizatorul B v-a obþine pe M verificând ºi semnãtura :
EA(DB(C))=EA1(DB2(EB2(DA1(M))) = EA1(DA1(M))=M .
O altã soluþie în situaþia în care C=EB(DA(M)) nu este acceptabilã , deoarece nA > nB este indicatã de Konfelder . El recomandã , sã se calculeze C’=DA(EB(M)), observând cã aceasta este calculabilã. Utilizatorul ,B,care cunoaºte atât nA, cât ºi nB ,poate obþine pe M , în douã moduri :
dacã nA < nB atunci :
EA(DB(C))=EA(DB(EB(DA(M))))=EA(DA(M))=M.
dacã nA > nB atunci :
DB(EA(C’))=DB(EA(DA(EB(M)))))=DB(EB(M))=M.
Când apare o disputã între A ºi B asupra autenticitãþii semnãturii lui A , un “judecator “ , v-a trebui sã fie capabil ca sã stabileascã dacã M aparþine lui A:
Dacã nA < nB , B va aplica transformarea sa secretã asupra lui C ºi va prezenta “judecatorului “ X=DB(C) si pe M . “Judecatorul”, va calcula M’=EA(X) , folosind transformarea publicã a lui A , ºi va verifica dacã M’=M.
Dacã nA > nB ,B se va putea prezenta la “judecator”, cu C’ ºi M.
”Judecatorul “ , va calcula :
X=EB(M) ;
X’=EA(C’)=EA(DA(EB(M))) si va verifica dacã X=X’;
Se observã cã protocolul nu cere ca A sau B sã dea “judecatorului”, cheile (transformãrile lor secrete) .Pentru reducerea dimensiunii semnãturii , se sugereazã comprimarea mesajului printr-o functie de hashing ºi apoi semnarea rezultatului .
2.5 Aspecte legate de implementarea algoritmilor exponenþiali.
Proiectarea unor criptosisteme RSA pleacã de la alegerea unor numere prime mari p ºi q pe baza cãrora se calculeazã modulul n . Dimensiunea acestor întregi este esenþialã în asigurarea tãriei criptografice a schemei.
Urmãtorul tabel , extras din [RIVE78] dã o indicaþie a legãturii dintre dimensiunea lui n ºi numãrul de operaþii necesare , în cel mai bun algoritm publicat,pentru factorizarea lui n:
Odatã aleasã dimensiunea lui n , cei doi întregi p ºi q trebuie aleºi pseudoaleator . Teorema numerelor prime aratã însã cã doar (ln n ) întregi pot candida la statutul de numere prime , mai mici ca n. Pentru un n , de mai multe sute de cifre , numai câteva sute de “candidaþi “,trebuie sã fie testaþi ,pentru a gãsi un numar prim .Pentru o mai bunã protecþie împotriva factorizarii ,trebuie luate ºi urmãtoarele mãsuri suplimentare [DENN82]:
p ºi q trebuie sã difere în lungime prin câþiva biþi .
atât (p-1) cât ºi (q-1) trebuie sã conþinã factori primi mari .
cmmdc(p-1,q-1) trebuie sã fie mic.
Pentru a gãsi un numar prim p astfel încât (p-1) sã aibã factor prim mare , se va genera mai întîi un numãr întreg aleator p’, iar apoi se calculeazã :
p=p’i+1, i =2,4,6,…. , pînã când p este prim .O protecþie suplimentarã se poate obþine dacã alegem p’ , astfel încât (p’-1) sã aibã un factor prim mare. Condiþii suplimentare în alegerea lui p ºi q se pot gãsi în [HUBE91].
O altã problemã importantã constã în alegerea exponenþilor e ºi d . Având aleºi întregii p ºi q , ºi deci n=pq , exponenþii e ºi d trebuie sã satisfacã condiþia : ed=1 mod (n) .
Se alege întâi un întreg d > max (p,q) din mulþimea de întregi relativi primi,ºi mai mici ca (n) . Este de asemenea necesar ca atât d cât ºi e sã fie mai mari ca log2n deoarece acest lucru ar face adevãratã egalitatea Xe ( mod n) =X ºi astfel cifrul este ineficient . Alegerea lui e , unde 0 < e < (n) se face astfel încât el sã reprezinte inversul mutiplicativ mod (n) al lui d .Acest lucru se poate realiza folosind o variaþie a algoritmului lui Euclid .
Datã fiind complexitatea calculelor impuse de aplicarea algoritmului RSA o serie de cercetãri au vizat implementarea hardware, fie sub forma unor plãci coprocesor , fie ca chip independent, [KOCH86] sau [RIVE80] . Conform datelor publicate , astfel de implementãri , realizate în SUA ºi supuse embargoului la export, ating performanþe foarte bune ; de exemplu lucrând cu operanzi de 512 biþi , cifrarea/descifrarea ,materializate prin ridicãri la putere modulo , se realizeazã în chipul FAP4 în medie în 100 ms .De asemenea firma CRYPTECH realizeazã plãci coprocesor RSA care cifreazã operanzi de 512 biþi cu o ratã superioarã celei de 126000 bps.
2.6 Atacuri criptoanalitice posibile la RSA
Tãria criptograficã a cifrului RSA a fãcut obiectivul a numeroase cercetãri în literatura de specialitate . Atacul criptoanalitic principal constã în încercarea de a determina cheia secretã d din informaþia care constituie cheia publicã (e,n). Aici existã mai multe cãi posibile :
Factorizarea lui n.
Factorizarea lui n în componentele sale ar permite calculul lui
(n)=(n-1)(p-1 ) ºi apoi determinarea lui d ca invers multiplicativ
mod (n) a lui e . Existã un numar mare de algoritmi de factorizare [KNUT83]. Cel mai rapid însã , aparþinând lui R.Schroeppel, nepublicat, conduce pentru numere de sute de biþi , la valori repezentând volume de calcul prohibitive . În [RIVE85] Rivest ºi Shamir, aratã cã formula lui Schroppel privind numãrul de paºi ºi cea corespunzatoare timpului necesar factorizãrii pot fi reduse prin deþinerea , în procesul criptoanalizei a unor informaþii colaterale : procedura de generare a întregilor primi p ºi q ; lungimea lui p ºi q ,radãcinile modulo n , semnãtura RSA a unui mesaj M , utilizând un modul n corespunzãtor unui exponent public .În plus se demonstreazã cã dacã criptoanalistul poate pune k întrebãri la care sã i se rãspundã cu da sau nu , are loc o reducere dramaticã a timpului de factorizare a lui n (de exemplu dacã k=n/2 sarcina poate deveni banalã : el întreabã reprezentarea binarã a lui p) .Analize ale securitãþii cifrului RSA sunt fãcute în [SCHN83] [CHAU85] [DESM85] .
(2)Calculul lui (n) fãrã factorizarea lui n.:
Existã studii de criptoanalizã a cifrului RSA care propun determinarea directã a lui (n) fãrã obþinerea în prealabil a celor doi factori p ºi q ai lui n. Însã problema , din punct de vedere matematic , nu este mai simplã decât factorizarea lui n , deoarece gãsirea lui (n) conduce apoi la factorizarea simplã a lui n .
Fie : x=p+q=n-1-(n) ºi y=(p-q)2 =x2 – 4n .
Cunoaºterea lui (n) conduce la calculul rapid al lui x ºi y .Utilizând x ºi y , numerele prime p ºi q , pot fi calculate :
p=1/2(x+SQRT(y))
q=1/2(x-SQRT(y))
(3) Determinarea lui d fãrã factorizarea lui n sau calculul lui (n).
A treia metodã de criptoanalizã , constã în calculul exponentului secret d , lucru arãtat în [RIVE78] , cã este computaþional la fel de dificil ca factorizarea lui n .Dacã d este cunoscut , este posibilã calcularea unor multipli ai lui (n) :
ed-1=K(n) , K N . Miller [MILE82] a demonstrat cã n poate fi factorizat utilizând multipli lui (n) .Oponentul poate determina o mulþime de d’, cu proprietatea cã toti d’ , difera prin c.m.m.d.c((p-1)(q-1)) iar dacã se gaseºte unul , atunci n poate fi factorizat .Determinarea însã a fiecãrui d’ este echivalentã computaþional cu factorizarea lui n .
Metoda Simmons-Norris
Simmons ºi Norris [SIMM77] aratã cã cifrul RSA poate fi spart ºi fãrã factorizarea lui p ºi q , în cazul unei alegeri mai puþin atente a acestora . Ei aratã cã pentru anumite chei , recifrarea repetatã a unui mesaj -cifrat poate conduce la mesajul clar .
Fiind dat mesajul cifrat :C0= Me(mod n ), criptoanalistul poate determina pe M , calculând : Ci =Cei-1 ( mod n), i=1,2,3,….( nu foarte
mare ) . Condiþia ca acest fel de atac sã nu fie posibil este ca alegerea lui p sã se facã astfel încât ca (p-1) sã conþinã un factor prim mare p’, pentru care p’-1 sã conþinã un factor prim mare p. Dacã aceºti factori primi sunt mai mari ca 1099 , probabilitatea unui astfel de atac este de cel mult 10-90 .
(5)Atac multiplicativ :
Chaun ºi De Jonge prezintã în [CHAU85] o metoda de atac asupra unei semnãturi RSA bazatã pe redundanþa existentã într-o semnaturã validã .Se presupune cã B construieºte trei mesaje valide M1 , M2 , M3 astfel încât M3=(M1M2) mod n .Dacã B deþine semnãtura validã fãcutã de A , asupra lui M1 ºi M2 , B va putea forma produsul mod n al acestor semnãturi pentru a obþine semnãtura falsã a lui M3 :
SA(M3) = (M1M2)dA mod nA =((M1dA mod nA)
(M2dA mod nA))mod nA=(SA(M1)SA(M2)) mod nA .
Ca urmare B va putea folosi inversa M-1 sau opusul -M ale mesajului M, plecând de la cunoaºterea versiunii semnalate :
SA(M-1 mod nA) =SA(M-1) mod nA ºi SA(- M)= – SA(M) . Astfel dacã B cunoaºte semnãtura lui A asupra mai multor mesaje valide Mi , el v-a putea determina ºi semnãturile lui Mi ºi ale lui -Mi iar atacul multiplicativ indicat mai sus îi va permite semnarea oricãror mesaje false care reprezintã produse ale unor semnãturi SA(Mi ), SA(Mi-1) sau SA(-Mi). Este important de menþionat cã literatura de specialitate cunoaºte ºi importante studii criptoanalitice la adresa lui RSA prin calculul unor logaritmi discreþi în câmpul GF(2n ) [GAMA86][BLACK85] ºi care se bazeazã pe atac cu perechi ( text clar ,text cifrat ) corespondente .
=== C3 ===
CAPITOLUL 3
METODE ªI ALGORITMI DE CIFRARE
CU AJUTORUL CRIPTOSISTEMELOR
3.1 Criptosisteme
Scopul serviciului de criptosistem este de a asigura confidenþialitatea (secretizarea) conþinutului unor mesaje , documente sau fiºiere .Pentru realizarea acestui deziderat , se pot folosi mecanisme criptografice atât din categoria celor simetrice cât ºi a celor cu chei publice .
Fig 5.1 . Criptosistem convenþional.
Criptosistemele simetrice, cu o singurã cheie , (figura 5.1) , sânt relativ simplu de folosit în reþele mici ,cerând schimbul unor chei secrete cu partenerii de comunicaþii . Dar dacã reþelele cresc în dimensiune , schimbul sigur al cheilor criptografice (secrete) devine complicat ºi scump. În plus , se pune problema folosirii în comun a unor informaþii secrete ( cheile ) cu fiecare persoanã cu care se va comunica în reþea . Ca urmare , acestã soluþie a sistemelor criptografice conventionale nu este practicã în reþele medii ºi mari. O soluþie superioarã este bazatã pe sistemele cu chei publice (figura 5.2), fiecare persoanã deþinând o pereche de chei diferite pentru cifrare ºi descifrare. Cheia publicã este fãcutã publicã de cãtre proprietar ºi permite cifrarea mesajelor , iar cheia secretã este cunoscutã doar de catre proprietar, reprezintã inversa cheii publice ºi permite descifrarea mesajelor cifrate . Pentru a trimite un mesaj (fisier ) confidenþial , emiþãtorul extrage din fisier cheia publicã a destinatarului ºi cifreaza mesajul , însã numai destinatarul autentic deþine cheia secretã corespunzatoare cu ajutorul cãreia poate descifra mesajul .
Fig 5.2. Conceptul de criptosistem cu chei publice .
Pentru a putea satisface cerinþele de securitate , ºi pentru a crea o mare varietate de prelucrãri criptografice , am definit urmatoarele tipuri de servicii de tip criptosistem :
(1)Criptosistem secvenþial (Streem Cipher).
Se foloseºte un generator de cheie pseudoaleatoare care este apoi însumatã modulo 2, pentru cifrare , cu textul clar . Pseudocodul de principiu, al serviciului este urmãtorul :
Criptosistem _secvenþial _este :
{
cere_nume_fiºier M ;
scrie(C,articol_header) ;
dacã cheie pe dischetã atunci cere nume_fiºier_cheie K ;
{
repetã până sfârșit fisier
{
citeºte ( M ,bloc) ;
citeºte ( K, cheie );
bloc=bloc cheie ; / suma modulo 2 /
scrie (C, bloc) ;
}
}
altfel
{
cere_sãmânþã (IO) ;
repetã până sfârșit fiºier
{
citeºte ( M , bloc ) ;
genereazã_cuvînt_cheie(IO, cheie ) ;
bloc = bloc cheie ; / suma modulo 2 /
scrie ( C ,bloc ) ;
}
}
}
Criptosistem secvenþial cu reacþie de text cifrat (Streem Cipher With Cipher Feedback-CFB) .
Acest serviciu este similar cu cel anterior , doar cã se introduce o reacþie în generator din textul obþinut prin cifrare .Reactia asigurã criptograme distincte , corespunzãtoare la mesaje în clar identice , îngreunând un atac pentru deducerea cheii . Pseudocodul serviciului este urmãtorul :
Criptosistem_secvenþial_este:
{
cere_nume_fiºier M ;
scrie ( C, articol_header ) ;
dacã cheie_pe_dischetã atunci
{
cere_nume_fiºier_cheie K ;
repetã până EOF
{
citeºte ( M, bloc_nou ) ;
citeºte ( K, cheie ) ;
cheie_nouã=cheie bloc_vechi ;
bloc_vechi=bloc_nou cheie_nouã ;
scrie ( C, bloc_vechi ) ;
}
}
altfel
{
cere_samânþã( IO ) ;
repetã până EOF
{
citeºte ( M , bloc_nou ) ;
genereazã_cuvânt_cheie(IO, cheie ) ;
cheie_nouã=cheie bloc_vechi ;
bloc_vechi=bloc_nou cheie_nouã ;
scrie ( C ,bloc_vechi ) ;
}
}
}
Criptosistem secvenþial pe blocuri (Streem Blocked -nonlinear).
Acest serviciu foloseºte o funcþie F de cifrare simetricã iar cheia este rezultatul unui proces de generare pseudoaleatoare .
Criptosistem_secvenþial_pe_blocuri_este;
{
cere_nume_fiºier M ;
scrie ( C ,articol_header ) ;
dacã cheie_pe_dischetã atunci
{
cere_nume_fiºier_cheie K ;
repetã până EOF
{
citeºte (M, bloc ) ;
F_cifreazã ( bloc, cheie ) ;
scrie ( C, bloc ) ;
}
}
altfel
{
cere_samânță (IO) ;
repetã până sfârșit fiºier
{
genereazã_cuvînt_cheie(IO, cheie ) ;
F_cifreazã ( bloc, cheie ) ;
scrie ( C ,bloc ) ;
}
}
}
Criptosistem secvenþial pe blocuri cu reacþie de text cifrat :
Serviciul este similar cu cel anterior , cu deosebirea cã se introduce în generatorul pseudoaleator o reacþie din textul obþinut prin cifrare .
Criptosistem_secvenþial_pe_blocuri_cu_reacþie_este;
{
cere_nume_fiºier M ;
scrie ( C ,articol_header ) ;
dacã cheie_pe_dischetã atunci
{
cere_nume_fiºier_cheie K ;
repetã până EOF
{
citeºte (M, bloc ) ;
citeºte (K, cheie ) ;
cheie_nouã=cheie bloc ;
F_cifreazã ( bloc, cheie_nouã) ;
scrie ( C, bloc ) ;
}
}
altfel
{
cere_samânță (IO) ;
repetã până sfârșit fiºier
{
citeºte (M, bloc ) ;
genereazã_cuvînt_cheie(IO, cheie ) ;
cheie_nouã=cheie bloc ;
F_cifreazã ( bloc, cheie_nouã ) ;
scrie ( C ,bloc ) ;
}
}
}
Criptosistem bloc (ECB- Electronic Code Book Mode ) .
Acest serviciu face cifrarea clasicã, bloc cu bloc a textului clar , folosind fie un mecanism simetric , fie un criptosistem cu chei publice . Pseudocodul serviciului este urmãtorul :
Criptosistem_bloc _ este :
{
cere_nume_fiºier M ;
cere_cheie_cifrare ;
genereazã_cheile_iteraþie ;
scrie ( C , articol_header ) ;
repetã până EOF
{
citeºte (M, bloc );
cifreazã _ bloc ( bloc ) ; / simetricã(F) sau cu chei publice /
scrie (C ,articol_header );
}
}
(6)Criptosistem bloc cu reacþie (CBC -Cipher Block Chaining Mode ) :
Serviciul este similar cu cel anterior , cu deosebirea cã cifrarea se aplicã unei sume modulo 2 dintre blocul clar ºi reacþia de text cifrat. Pseudocodul serviciului este urmãtorul :
Criptosistem_bloc_cu_reacþie_este :
{
cere_nume_fiºier M ;
cere_cheie_cifrare ;
genereazã_cheile_iteraþie ;
scrie ( C , articol_header ) ;
repetã până EOF
{
citeºte (M, bloc_nou );
bloc= bloc_nou bloc;
cifreazã _ bloc ( bloc ) ; / simetricã(F) sau cu chei publice /
scrie (C ,articol_header );
}
}
(7)Criptosistem cu cifrare multiplã (Multiple Encryption) :
Acest serviciu , necesar în aplicaþiile cu cerinte foarte înalte de securitate , poate face o cifrare succesivã a mesajelor cu ajutorul mai multor criptosisteme simetrice , la alegerea utilizatorului . Fiecare sistem de cifrare foloseºte o cheie distinctã :
Criptosistem_cifrare_multiplã_este :
{
cere_nume_fiºier M ;
cere_cheia_cifrare K
/ din ea se genereazã cheile cheie1,cheie2,…,cheien /
scrie (C, articol_header ) ;
repetã până EOF
{
citeºte (M, bloc ) ;
pentru i=1, n executã F_cifreazãi (bloc, cheiei ) ;
scrie ( C , bloc) ;
}
}
(8)Criptosistem de tip Matyas_Mayer :
Acest serviciu , de înaltã securitate , aplicã succesiv aceeaºi funcþie simetricã F, direct ºi invers , cu douã chei diferite ,k1 ºi k2 .Pseudocodul serviciului este urmãtorul :
Criptosistem_Matyas_Mayer_este :
{
cere_nume_fiºier M ;
cere_cheie_cifrare K ; / din ea se genereazã cheile cheie1,cheie2/
scrie (C, articol_header );
repetã până EOF
{
citeste ( M , bloc);
F_cifreazã ( bloc, cheie1);
F-1_descifreazã (bloc , cheie2) ;
F_cifreazã ( bloc , cheie1) ;
scrie ( C , bloc);
}
}
3.2 Semnãtura digitalã
Serviciul de semnaturã digitalã (Digital Signature ) , trebuie sã asigure originea autenticã a unui mesaj , document sau fiºier . Pentru aceasta , semnãtura trebuie sã asigure douã cerinþe :
sã depindã de mesaj ( pentru a nu putea fi mutatã de la un mesaj la altul ).
sã depindã de emiþãtor ( pentru a nu putea fi falsificatã ) .
Semnãtura olografã din documentele scrise , identificã autorul acestora . Ea certificã ca documentul este original ºi conþine acele informaþii pe care autorul a vrut sã le trimitã . În sistemele de semnaturã digitalã , bazate pe cifruri cu chei publice , emiþãtorul unui document / mesaj / scrisoare va folosi cheia sa secretã pentru crearea semnãturii . Ea se aplicã nu mesajului original , ci unei valori rezumat ( digest ) , obþinutã cu ajutorul unei funcþii de dispersie (hash) , valoare care are de obicei 128 de biþi . Una din condiþiile esenþiale pentru algoritmii de dispersie este cã o schimbare de doar un bit al mesajului original sã producã o avalansã de schimbãri la ieºire ( aproximativ 50% din biþii modificaþi în valoarea rezumat ) . Receptorul mesajului semnat , poate verifica originea autenticã a acestuia ( ºi integritatea ) cu ajutorul cheii publice a emiþãtorului .
În scopul realizãrii acestui tip de serviciu , se folosesc criptosisteme D cu chei publice . Deoarece criptosistemele cu chei publice au o mare complexitate ºi consumã un timp important , semnãtura D se aplicã unei forme condensate a mesajelor ( documente , fiºiere ) , obþinute printr-o funcþie de dispersie Fh a s h .Serviciul are douã funcþii diferite :
creare semnaturã ;
verificare semnaturã ;
Explicãm pe scurt pseudocodul acestor douã funcþii :
Creare_semnãturã_digitalã_este ;
{
cere_nume_fiºier M ;
scrie ( C , articol_header ) ;
repetã până EOF
{
citeºte ( M, bloc) ;
scrie ( C ,bloc ) ;
F_hash ( bloc ) ;
}
cere_nume_fiºier_cheie_secretã ;
semneazã S=DA( bloc ) ;
scrie ( C,S) ;
}
Verificare_semnãturã_digitalã_este ;
{
cere_nume_fiºier C;
citeºte ( C ,articol_header) ;
repetã până EOF-1
{
citeºte ( C , bloc ) ;
scrie ( M , bloc ) ;
F_hash ( bloc ) ;
}
citeºte ( C ,S ) ;
cere_nume_fiºier_cheie_publicã
M’=EA(S) ;
dacã M’ = bloc atunci OK ! altfel ALARMÃ !
}
3.3 Sigiliul digital
Sigiliul digital asigurã douã funcþii de securitate :
confidenþialitatea mesajelor ( documentelor , fiºierelor ) , prin cifrare simetricã .
autenticitatea originii lor prin semnãturã digitalã .
Cele trei funcþii folosite sânt F ( cifrare simetricã ) , DA ( semnaturã digitalã) ºi Fh a s h (dispersie) .Funcþia F de cifrare ,de tip bloc , poate fi fãcutã sã lucreze cu sau fãrã reacþie . Pseudocodul serviciului este urmãtorul :
Creare_sigiliu_digital_este;
{
cere_nume_fiºier M ;
scrie ( C , articol_header ) ;
cere_cheie K ;
repetã până EOF
{
citeºte ( M , bloc ) ;
bloc1 = F_cifreazã(bloc ,K ) ;
rezumat = F_hash( bloc ) ;
scrie ( C , bloc1) ;
}
cere_nume_fiºier_cheie_secretã;
semneazã S = DA(rezumat) ;
scrie (C , S ) ;
}
Verificare _sigiliu_digital_este ;
{
cere_nume_fiºier C ;
cere_cheie K ;
citeºte (C, articol_header) ;
repetã până EOF -1
{
citeºte (C , bloc) ;
bloc1 = F_descifreazã ( bloc , K ) ;
scrie (M , bloc1 ) ;
rezumat = F_hash ( bloc1 ) ;
}
cere_nume_fiºier_cheie_publicã ;
rezumat’ = EA(S) ;
dacã rezumat’ = rezumat atunci OK ! altfel ALARMÃ !
}
Receptorul mesajului poate fi sigur cã atât conþinutul acestuia a fost confidenþial ( nu a putut fi citit de nici o altã persoanã ) cât ºi originea acestuia este sigurã deoarece , numai emiþãtorul deþine cheia cu ajutorul cãreia se poate face crearea semnãturii .
3.4 Anvelopa digitalã
Serviciul de anvelopã digitalã asigurã urmãtoarele funcþii de securitate :
confidenþialitatea mesajului (document , fisier ) , prin funcþia F de cifrare
simetricã .
autenticitatea originii , prin semnãtura digitalã ( DA ) ce se executã asupra unei valori condensate a mesajului ( documentului , fiºierului ) , rezultate printr-o funcþie de hashing .
confidenþialitatea cheii criptografice folosite în funcþia F , cu ajutorul unui criptosistem cu cheie publicã E . În acest fel doar receptorul autentic , care deþine cheia secretã ( D ) , corespunzatoare , va putea reface în clar cheia pentru descifrarea mesajului ( documentului , fiºierului ) .
Acest concept permite comunicaþii sigure între partenerii care nu au stabilit chei secrete în prealabil .Autorul mesajului genereazã o cheie aleatoare simetricã , de fiecare data când emite un mesaj . Cu ajutorul acestei chei se cifreazã mesajul .Problema este cum ºtie receptorul ce cheie sã foloseascã pentru descifrarea mesajului ?
Simplu :
Autorul cifreazã cheia aleatoare cu ajutorul cheii publice a
destinatarului ºi o transmite la destinatie .
Acest ansamblu : document-cifrat , cheie-cifratã constituie o anvelopã digitalã .
La receptie , destinatarul foloseºte propria cheie secretã pentru a obþine cheia aleatoare în clar , iar apoi cu aceasta face descifrarea documentului .
Pseudocodul serviciului , atât pentru creearea anvelopei cât ºi pentru verificarea ei , este urmãtorul :
Creare_anvelopã_digitalã_este ;
{
cere_nume_fiºier M ;
scrie ( C , articol_header ) ;
genereazã_cheie K ;
repetã până EOF
{
citeºte ( M , bloc ) ;
F_cifreazã (bloc, K) ;
scrie (C , bloc ) ;
}
cere_nume_fiºier_cheie_publicã ;
cifreazã K’=EA(K) ;
scrie (C , K’ ) ;
}
Verificare_anvelopã_digitalã_este ;
{
cere_nume_fiºier C ;
citeºte (C , articol_header ) ;
citeºte (C , K’) ;
cere_nume_fiºier_cheie_secretã ;
descifreazã K =DA ( K ) ;
repetã până EOF
{
citeºte ( C , bloc ) ;
F_descifreazã (bloc ,K) ;
scrie ( M , bloc) ;
}
}
3.5 Certificat digital
Acest serviciu asigurã urmãtoarele functii :
Cofidenþialitatea ( optionalã ) a mesajului ( documentului , fiºierului ) printr-un mecanism F de cifrare simetricã .
Autenticitatea originii , prin semnãtura digitalã ( DA ) executatã asupra valorii condensate ( digest ) a mesajului .
Livrarea cheii publice a emitãtorului (EA ) în clar .
Livrarea unui certificat CD al cheii publice , obþinut prin semnarea ei cu cheia secretã a unei autoritãþi de certificare (DCA ) .În acest caz va exista certitudinea asupra autenticitãþii ºi actualitãþii cheii publice EA cu care se va face verificarea semnãturii digitale a emiþãtorului .
Pseudocodul serviciului este urmãtorul :
Creare_certificat_digital_este
{
cere_nume_fiºier M ;
scrie(C , articol_header ) ;
cere_cheie K ;
repetã până EOF
{
citeºte(M , bloc);
bloc1=F_cifreazã(bloc , K) ;
rezumat = F_Hash( bloc ) ;
scrie(C , S ) ;
}
cere_fiºier_cheie_secretã_proprie;
semneazã S = DA ( rezumat ) ;
scrie (C , S ) ;
cere_fiºier_cheie_publicã_partener;
E’A = F_Hash( EA ) ;
scrie (C , EA ) ;
cere_fiºier_cheie_secretã_autoritate;
CD= DCA ( E’A) ;
scrie (C , CD ) ;
}
Verificare_certificat_digital_este
{
cere_nume_fiºier C ;
cere_cheie K ;
citeºte (C , articol_header) ;
repetã până EOF-3
{
citeºte (C , bloc ) ;
bloc1=F_descifreazã (bloc , K) ;
scrie (M, bloc1) ;
rezumat = F_Hash (bloc1) ;
}
citeºte (C, S) ;
citeºte_fiºier _cheie_publicã_partener ;
rezumat’ = EA ( S ) ;
citeºte (C, EA ) ;
rezumat “ = F_Hash ( EA) ;
citeºte (C, CD ) ;
cere_cheie_publicã_autoritate ;
rezumat “’ = ECA(CD) ;
dacã ( rezumat = rezumat’ ) ºi ( rezumat” = rezumat”’)
atunci OK altfel ALARMÃ ;
}
3.6 Notarul digital
Acest serviciu este definit pentru a se satisface urmãtoarele obiective de securitate :
Stamparea mesajului ( documentului , fiºierului ) cu data ºi ora curentã .
Cofidenþialitatea ( optionalã ) a conþinutului acestora printr-un mecanism de cifrare simetricã .
Autenticitatea mesajului , prin semnarea lui de cãtre o entitate numitã notar , cu ajutorul cheii sale secrete (Dno t a r ) .Verificarea semnãturii se face cu cheia publicã a notarului , distribuitã tuturor utilizatorilor .
Acest serviciu se executã de obicei pe un nod specializat al reþelei , pe care se executã un program numit Notar .
Pseudocodul serviciului , atât pentru stampare mesaj cât ºi pentru verificare , este urmãtorul :
Stampare_document _este
{
cere_nume_fiºier M ;
scrie( C , articol _ header) ;
cere_cheie K ;
repetã până EOF
{
citeºte (M , bloc ) ;
bloc1 = F_cifreazã (bloc , K) ;
rezumat = F_Hash ( bloc) ;
scrie ( C , bloc1) ;
}
gettime ( timp ) ;
bloc = F_cifreazã ( timp, K ) ;
scrie ( C , bloc) ;
rezumat = F_Hash (bloc) ;
cere_nume_fiºier_cheie_secretã _ notar ;
semneazã S = Dn o t a r (rezumat) ;
scrie ( C , S ) ;
}
Verificare_stampare_este
{
cere_nume_fiºier C ;
cere_cheie K ;
citeºte (C , articol_header) ;
repetã până EOF-1
{
citeºte (C , bloc) ;
bloc1= F_descifreazã (bloc , K) ;
scrie ( M ,bloc1) ;
rezumat = F_Hash (bloc1) ;
}
verificã_data _ ºi_timpul_citite_în_bloc1;
citeºte ( C , S) ;
cere_nume_fiºier_cheie_publicã_notar ;
rezumat ‘ = En o t a r ( S );
dacã (rezumat = rezumat ‘ ) ºi timp = corect atunci OK
altfel ALAMÃ ;
}
=== C4 ===
CAPITOLUL 4
Noþiuni de securitate în Internet
Internet este o structurã deschisã la care se pot conecta calculatoare , în numãr mare ºi deci greu de controlat. Vorbim în acest caz de vulnerabilitatea reþelelor , în variate planuri .Un aspect esenþial al reþelelor de calculatoare ºi în special al comunicaþiilor prin Internet , îl constituie securitatea informaþiilor .Utilizatorii situaþi la diferite distanþe, trebuie identificaþi , uzual , prin parole .
Din nefericire, sistemele de parole au devenit vulnerabile , atât datoritã “spãrgãtorilor” de reþea ( hackers ) care ºi-au perfecþionat metodele pe zi ce trece , cât ºi alegerii necorespunzãtoare a parolelor de cãtre utilizatori .
Viteza ºi eficienþa comunicaþiilor instantanee de documente ºi mesaje , conferã numeroase atu-uri actului decizional într-o economie concurenþialã . Dar , pe un sentiment adeseori fals , de securitate a comunicaþiilor , care poate transforma potenþialurile câºtiguri generate de accesul rapid la informaþii , în pierderi majore cauzate de furtul de date sau de inserarea de date false sau denaturate . Se impune deci o atitudine corectã faþã de aceastã problemã. Trebuie înþeles cã securitatea calculatorului este, în principal , o problemã personalã , ºi nu a reþelei. Conectare în Internet este importantã , dar implicã un risc împotriva cãruia utilizatorul trebuie sã se protejeze . În cazul Internet-ului , adresele diferitelor noduri ºi serviciile ( numele lor ) pot fi determinate uºor . Existã patru cãi , prin care un calculator conectat la Internet se poate compromite:
Prin alegerea necorespunzãtoare a parolelor .
CERT ( Computer Emergency Response Team ) a semnalat faptul cã 80% din calculatoarele pãtrunse foloseau parole slabe sau evidente . O parolã se considerã a fi bunã dacã :
Este formatã din cel puþin saºe caractere ;
Conþine un amestec de caractere mari , mici , sau numere;
Nu este un cuvânt din dicþionar ;
Nu este formatã din caractere adiacente de la tastaturã ;
(2)Prin importul de software corupt .
Este vorba de clasicele programe de tip ,, cal troian “ . Cumpãrînd software comercial , în special de la firme reputate , riscul este minor. Însã , atunci când programele sunt procurate din arhive publice , riscurile sunt considerabil mai mari . Pentru a diminua aceste riscuri , se recomandã:
Folosirea unor surse oficiale .
Analiza prealabilã a programelor .
Testarea programelor pe o maºinã mai puþin importantã .
Salvarea fiºierelor importante , înainte de folosirea noului program .
(3)Folosind programe prost configurate .
Se pot creea în acest caz breºe , care pot fi apoi speculate de autorul programului pentru pãtrunderea în sistem . În acest context , opþiunile de depanare , care rãmân active pe timpul exploatãrii programului , pot fi folosite pentru aceesul neautorizat .
(4)Introducând corecþii neautorizate la software-ul de bazã .
Este necesarã în acest caz o apreciere corectã în cazul în care calculatorul conectat în reþea a fost atacat .Cea mai simplã cale pentru a constata existenþa unor musafiri nepoftiþi , este analiza jurnalului de conectãri . Se mai poate observa dacã maºina funcþioneazã mai lent ca de obicei , sau dacã au fost ºterse , citite sau modificate fiºiere.
Este bine ca în continuare sã se parcurgã urmatoarele etape :
Examinarea fiºierului de parole ( la Unix /etc/passwd ) ºi verificarea existenþei unor intrãri ciudate , cu multe drepturi asignate.
Listarea tuturor taskurilor în execuþie .
Listarea tuturor directoarelor cu dimensiuni mari ºi analiza datelor ultimelor modificãri ale fisierelor , precum ºi listarea fiºierelor al cãror nume nu este familiar .
4.1 Mecanisme de securitate existente :
Mecanismul de criptare – care are ca scop transformarea datelor , astfel încât ele sã devinã neînþelese ( neinteligibile ) pentru orice observator . Numai entitatea autorizatã sã le citeascã , deþine o cheie secretã pentru a le putea descifra . Acest mecanism este folosit pentru a construi servicii cum ar fi confidenþialitatea datelor .
Mecanismul de semnaturã digitalã – asigurã cã datele pot fi produse numai de cãtre semnatar. Este deseori folosit de cãtre serviciile de integritate ºi autentificare a originii datelor .
Mecanismul de control a accesului – acest mecanism controleazã accesul entitãþilor la resurse ºi se poate baza pe una sau mai multe din urmãtoarele soluþii :
Listã / matrice a drepturilor de acces ( entitate,
resursã ,drept) ;
Parole ;
Capabilitãþi ;
Etichete de securitate ;
Durata accesului ;
Timp de încercare a accesului ;
Rutã ( calea ) de încercare a accesului ;
Mecanismul de integritate a datelor – împiedicã modificarea, ºtergerea sau amestecarea mesajelor pe durata transmisiei .
Mecanismul de autentificare mutualã – este folosit pentru a se
dovedi reciproc, identitãþile entitãþilor . Pot fi folosite parole sau tehnici criptografice ( parole cifrate , cartele magnetice sau inteligente, caracteristici biometrice , biochimice ) .
Principiul este urmãtorul :
Entitatea A trimite identitatea sa ( cifratã sau nu ) entitãþii B , care genereazã o valoare
aleatoare ºi o trimite ( cifrat sau nu ) entitãþii A .
A trebuie sã cifreze data aleatoare cu o cheie privatã ºi sã o trimitã lui B , care verificã
corectitudinea acesteia .
Mecanismul de notorizare – acest mecanism stabileºte o a treia parte
(notar ) , în care au încredere entitãþile, care asigurã garanþii în privinþa integritãþii , originii , timpului sau destinaþiei datelor . Atunci când este folosit acest mecanism , datele sunt comunicate prin notar .
4.2 Posta electronicã cu facilitãþi de securitate
PGP (Pretty Good Privacy )
Nevoia de securitate în poºta electronicã a condus la elaborarea mai multor pachete de programe destinate protecþiei criptografice a scrisorilor trimise prin reþele . Dintre acestea , cel mai popular este PGP (Pretty Good Privacy ) dezvoltat de Philip Zimmermann în SUA. El functioneazã pe diferite platforme : MS-DOS , UNIX , VAX / VMS ºi altele .
PGP satisface trei cerinþe fundamentale :
Caracter privat al poºtei electronice – adicã doar destinatarul desemnat al scrisorii poate sã vadã conþinutul acesteia .
Autentificarea emiþãtorului
Autentificarea mesajelor – adicã certitudinea cã mesajele nu au fost modificate de alte persoane .
PGP nu reclamã un schimb prealabil de chei între utilizatori . El foloseºte o combinaþie a sistemelor criptografice simetrice cu cele publice, adicã :
Sistem simetric , bazat pe cifrul IDEA , cu o singurã cheie K, pentru cifrarea conþinutului scrisorilor sau fiºierelor .
Sistem asimetric RSA ( cu douã chei E ºi D ) pentru protecþia ºi distribuþia cheii K de unicã întrebuinþare ( numitã ºi cheie de sesiune ) cu care se face cifrarea simetricã a scrisorii , precum ºi autentificarea prin semnaturã digitalã a mesajului ºi a emiþãtorului .
La emisia unei scrisori , atunci când sunt folosite atât serviciile de autentificare cât ºi cele de confidenþialitate , PGP executã umãtoarele prelucrãri :
Folosindu-se algoritmul de hash MD5 , se creeazã un cod de autentificare MAC
( Message Autentification Code ) , de 128 de biþi , puternic dependent de corpul mesajului . Codul v-a fi folosit în procesul de autentificare :
MAC = MD5( Mesaj ) ;
Prin cifrare cu cheia secretã KPRIVA , a emiþãtorului A a scrisorii , folosindu-se algoritmul cu chei publice RSA , se creeazã semnãtura digitalã pentru autentificare a mesajului , ºi a originii sale : Semnãtura = RSA ( MAC, KPRIVA) ;
Scrisoarea este comprimatã , folosindu-se cunoscutul program pkzip . Acesta asigurã o reducere a volumului de date ce trebuiesc cifrate ºi apoi transmise .
Mesaj_comprimat = pkzip ( Mesaj ) ;
Se genereazã pseudoaleator o cheie K , de cifrare ( folositã doar pentru acest mesaj ) , numitã cheie de sesiune .Ea reprezintã de fapt , un numãr de 128 de biþi .
Cheie_sesiune =random () ;
Mesajul comprimat anterior , este apoi cifrat cu ajutorul algoritmului IDEA , folosindu-se cheia generatã la pasul precedent .
Mesaj_cifrat = IDEA (Mesaj_comprimat, Cheie_sesiune) ;
Folosindu-se acelaºi sistem cu chei publice ( cheia publicã KPUBB a destinatarului B al scrisorii ) se pune în anvelopã cheia de sesiune pentru a putea fi trimisã în mod sigur la receptor .Acest lucru înseamnã cifrarea cheii de sesiune cu cheia publicã a destinatarului :
Cheie_sesiune_anvelopã = RSA ( Cheie_sesiune , KPUBB) ;
Se creeazã scrisoarea protejatã , în vederea transmiterii ei la destinaþie , folosind serviciile obiºnuite de e-mail :
Scrisoare_protejatã = [Key_ID,Semnãturã,Datã_semnãtura, Cheie_sesiune_anvelopã , Mesaj_cifrat ] ;
Comenzile PGP-ului folosesc la :
Criptarea unui mesaj ;
Trimiterea unui mesaj la mai mulþi destinatari ;
Folosirea criptãrii convenþionale ;
Semnarea unui mesaj ;
Semnarea unui fiºier , urmat de criptarea fiºierului ;
Decriptarea ºi verificarea semnãturilor ;
Generarea de chei ;
Adãugarea cheilor la fiºiere ;
Extragerea cheilor din fiºierul de chei publice ;
Vizualizarea conþinutului fiºierului de chei ;
ªtegerea unei chei sau a unui User-ID din fiºierul de chei publice ;
Semnarea sau certificarea cheii publice a altui utilizator ;
Revocarea cheii utilizatorului ;
4.3 Servere de autentificare Kerberos
Cel mai puternic ºi cel utilizat serviciu de autentificare este Kerberos Autenthification Server , creat în cadrul proiectului Athena la MIT, fiind destinat reþelelor Unix . Kerberos are douã obiective principale:
Autentificarea sigurã a unor aplicaþii de tip client ;
Distribuþia cheilor de cifrare ;
Kerberos permite identificarea sigurã a utilizatorilor individuali. Fiecare utilizator ºi fiecare serviciu foloseºte câte o cheie, în comun cu Centrul de Distribuþie Kerberos ( KDC ) . Cheile sunt chei master , cu ajutorul cãrora se face distribuþia cheilor de sesiune . Kerberos este folosit în cadrul mai multor universitãþi ( inclusiv MIT ºi Carnegie-Mellon ) ºi a fost recent adoptat în partea de standard din pachetul de distribuþie al sistemului de operare DEC Ultrix ºi OSF/1. Odatã cu creºterea numãrului de aplicaþii comerciale din Internet ºi cu necesitatea plãþii anumitor servicii , creºte necesitatea recunoaºterii sigure a utilizatorilor ce sunt autorizaþi sã foloseascã anumite aplicaþii . Kerberos se bazeazã pe o schemã simetricã de cifrare . În cadrul protocolului sãu sunt necesare O(n2) perechi de chei master , fiecare entitate comunicantã folosind o cheie master pentru comunicaþiile cu Kerberos . Kerberos deþine toate cheile master ale comunicaþiilor . În cadrul protocolului Kerberos sunt implicate urmatoarele entitãti :
Kerberos – server de autentificare ;
TGS – entitate de acordare a tichetului ;
C – clientul – care trebuie autentificat pentru a i se acorda acces la un serviciu furnizat de server ;
S – server – la care se cere acces din parte clientului ;
Pentru descrierea protocolului Kerberos se folosesc urmãtoarele notaþii :
KA , B – cheia de sesiune pentru comunicaþiile entitãþilor A ºi B ;
eKA(X) – citirea informaþiei X ,cu funcþia simetricã e ( de exemplu standardul DES ) folosind cheia master KA a entitãþii A .
AC – autentificatorul lui C , cu urmãtorul format :
{ C , adrC , timestamp } KS,C
TC , TGS – tichetul lui C , pentru accesul la TGS .
TC , S – tichetul lui C , pentru accesul la server .Tichetele au urmãtoarea structurã :
Adr -adresa IP a clientului .
TimeStamp – marca de timp curent a tichetului .
LifeTime – perioada de valabilitate .
Descrierea protocolului :
Protocolul derivã din cel propus de Needham ºi Schoeder .
Cientul C , cere de la Kerberos un certificat numit tichet :
C Kerberos : { C, TGS } .
(2)Kerberos autentificã utilizatorul prin cifrare cu cheia sa master KC ºi previne eventualele reluãri de mesaje vechi prin utilizarea unei marci de timp .Kerberos va transmite tichetul pentru acces lui C la TGS . Acest tichet include o nouã cheie de sesiune KC,TGS , care va fi utilizatã pentru schimbul de mesaje dintre C ºi TGS .Tichetul are urmãtoarea structurã :
TC,TGS : [ TGS , C , Adr ,TimeStamp ,LifeTime ,KC,TGS ]
Kerberos C : { eKC (KC ,TGS ,eKTGS (TC,TGS ) }
(3)Utilizatorul C se identificã cãtre TGS , prin prezentarea tichetului sau împreunã cu autentificatorul AC , de forma :
AC : [ C , Adr , TimeStamp ] .
C cere lui TGS , un alt tichet , necesar pentru accesul la serviciul S :
C TGS : { S , eKTGS(TC,TGS),eKC,TGS(AC) }
(4) TGS verificã validitatea tichetului ºi foloseºte marca de timp pentru a detecta eventuale reluari de mesaje vechi .TGS va da lui C tichetul de acces la S .Tichetul va include o pereche de chei noi de sesiune , care vor fi folosite la schimbul de mesaje dintre C ºi S :
TGS C : {eKC,TGS (eKS(TC,S), KC,S )} unde tichetul are urmatoarea structurã :
TC,S : [S , C , Adr , TimeStamp , LifeTime, KC,S ]
(5)Utilizatorul poate face acces la serviciul dorit pe serverul S , prezentând acestuia tichetul , împreunã cu un autentificator :
C S : {eKS(TC,S),eKC,S(AC) } unde AC : [ C ,Adr, TimeStamp ] .
(6) Dacã se doreºte autentificarea bidirectionalã , serverul poate rãspunde prin :
S C : {eKC,S(TimeStamp + 1 ) } .
Cheia clientului KC , este derivatã printr-o transformare neinversabilã a parolei tastate de utilizator .
Serverul poate sã posede cheile private pentru a putea decripta tichetele.
Aceste chei stau intr-o locaþie sigurã de pe calculatorul serverului . Autentificatorii sunt recalculaþi ºi recifraþi de fiecare datã , când se foloseºte un tichet . Fiecare tichet are încorporatã o anumitã perioada de valabilitate . Odatã trecut acest timp , clientul trebuie sã obþinã un nou tichet de la TGS . Dacã ºi tichetul de acces la TGS , a expirat ,trebuie cerut un altul folosind KC .
=== C5 ===
CAPITOLUL 5
PREZENTAREA ªI DISCUÞIA APLICAÞIEI
5.1 Prezentarea aplicaþiei
Aplicaþia ,, Criptarea reþelelor de calculatoare ‘’ este scrisã în mediul Microsoft Visual C++ , ºi ruleazã sub Windows 95 / NT , care sunt sistemele de operare cele mai rãspîndite la ora actualã . Lucrul cu aceastã aplicaþie are loc într-un mod interactiv .În acest caz , în construirea ºi proiectarea unei reþele se poate porni de la zero , sau se poate lucra cu configuraþia unei reþele care existã deja salvatã într-un fiºier , pe harddisk.
Modul de lucru cu aplicaþia, se poate desfãºura dupã urmãtorul algoritm :
Algoritm_de_lucru_este
{
if ( opþiune = = aplicaþie_nouã)Selecteazã_opþiunea File New ;
else
{
Selecteazã File Open ;
Alegere_fiºier_de_configurare ;
Selecteazã OK;
}
Dacã vrem inserare calculator atunci Selecteazã _opþiunea Inserare ;
Dacã vrem ºtergere calculator atunci Selecteazã_Hide_calculator;
if(trasare_linie_calculator(indice_i,indice_j))Show_Hide_Link(1); if(hide_linie_calculator(indice_i,indice_j)) Show_Hide_Link(0);
if(informaþii_calculator==NULL) Setare_Informaþii( ) ;
// urmeazã partea de cifrare ºi descifrare .
// Alte operaþii ;
}
5.2 Discuþia aplicaþiei :
Pentru prezentarea lucrului cu aceastã aplicaþie , vom parcurge urmãtoarele etape :
Iniþializarea aplicaþiei :
Aplicaþia începe prin afiºarea unui meniu Windows standard. În cazul în care vrem sã începem o nouã aplicaþie , alegem opþiunea
File New . Dacã vrem sã lucrãm la o reþea pe care am salvat-o anterior , alegem opþiunea File Open care ne v-a afiºa o casuþã de dialog . Din cãsuþa de dialog alegem fiºierul în care ºtim cã avem salvatã reþeaua .
Cum se creeazã o reþea nouã :
Alegem opþiunea File New , care , cum am spus mai sus, iniþializeazã aplicaþia . Din meniu , alegem opþiunea de inserare , care are ca scop , configurarea punctelor ( nodurilor ) reþelei de calculatoare . Astfel, dupã alegerea opþiunii de inserare , se poate alege cu mouse-ul orice poziþie de pe ecran , iar click stânga , v-a duce la apariþia unei cãsuþe de dalog , cu numãrul calculatorului pe care îl inseraþi . Aici ,avem urmãtoarele subetape , care s-ar putea comenta astfel :
Dacã nu se doreºte inserarea calculatorului , se apasã
CANCEL , altfel OK .
Dacã se doreºte ca acel calculator sã aibã alt numãr la inserare , acesta se poate înlocui doar în faza de inserare .
Nu se poate insera un calculator care are acelaºi numãr cu unul existent
în reþea . O cãsuþã de dialog va avertiza acest lucru .
Legãturile între noduri se vor realiza prin alegerea opþiunii
Show_Hide_Link , care va afiºa o cãsuþã de dialog , necesarã
introducerii informaþiilor despre calculatoarele care se doresc a fi
legate , a parolei publice , a informaþiilor existente în calculator , a
vitezei de transmitere a datelor , etc .
ªtergerea unui calculator :
Se alege opþiunea Hide_Calculator , dupã care , cu mouse-ul , se poate indica calculatorul care trebuie ºters . Din acest moment , calculatorul nu mai existã în gestionarea utilizatorului .
ªtergerea unei legãturi
Se realizeazã prin alegerea opþiunii Show_Hide_Link , care va afisa o cãsuþã de dialog , la fel ca la crearea liniei de comunicaþie , însã la ºtergere , nu mai nevoie precizarea poziþiei liniei în cadrul reþelei , ci doar numerele calculatoarelor între care trebuie invalidatã linia de comunicaþie.
Observaþii :
Nu se ºterg linii care nu existã !
Numãrul calculatoarelor , între care se doreºte invalidatã linia de
comunicaþie , trebuie dat corect. În caz contrar , o procedurã de
verificare a calculatoarelor precizate, într-o mulþime bine definitã de
calculatoare ( care este în acest caz reþeaua , construitã pînã în acel
moment ! ) va verifica aceste numere ºi va da în caz de eºec , un
mesaj de avertizare .
Odatã ºtearsã o linie , nu mai poate fi refãcutã decât prin
iniþializarea unei noi linii între cele douã calculatoare .
Salvarea unei configuraþii de reþea .
Se efectueazã prin alegerea opþiunii , File New Save / Save As . Am precizat , douã modalitãþi de salvare deoarece :
Dacã reþeaua este iniþializatã prima datã , adicã nu a fost luatã de pe
disc , fiºierul va avea un nume nedeclarat , pe care calculatorul nu îl
are înregistrat în gestionare .
În cazul lui Save , calculatorul va salva farã sã mai întrebe altceva , un fiºier care a fost cel puþin odatã salvat , iar în cazul lui Save As , se va salva un fiºier , dar care va fi prefixat de interogarea utilizatorului , asupra numelui care se doreºte sã-l aibã fiºierul .
5.3 Procedee de cifrare / descifrare aplicate documentelor
În cadrul proiectului , avem trei procedee de a cifra ºi descifra un document.
Acestea sunt :
– Cifrarea / descifrarea cu ajutorul unei chei secrete .
– Cifrarea / descifrarea cu ajutorul unei chei cu reacþie .
(3) – Cifrarea / descifrarea cu ajutorul unei chei publice .
În cadrul procesului de cifrare / descifrare , avem opþiuni de a cifra/ descifra un document , care este introdus de la tastaturã , sau luat de pe hard . Mai avem ºi opþiunea de a salva documentul pe care l-am introdus de la tastaturã aºa cum este , fãrã sã fãcem vreo modificare asupra lui. Cifrarea / descifrarea se face cu ajutorul unei cãsuþe de dialog , care ne ajutã la introducerea datelor , necesare în procesul de criptare / decriptare a documentelor .
În cadrul cãsuþei de dialog , prima opþiune va fi de cifrare/ descifrare a unui document luat de pe hard . La alegerea acestei opþiuni, ºi apãsarea butonului OK ,se va cere un fiºier care se doreºte criptat / decriptat . Dupã ce se alege acest fisier ,procesul de criptare/ decriptare se încheie .
Pentru a vedea efectul , se poate alege opþiunea de vizualizare a informaþiilor existente în acel moment pe un anumit calculator alegând opþiunea de vizualizare , dupã care alege calculatorul pe care dorim sã-l vedem .
A doua opþiune din cadrul cãsuþei de dialog , va salva ce am
introdus de la tastaturã , într-un fiºier , pe care n-i se cere sã-l precizãm . Aceastã opþiune însã va mai fi discutatã .
A treia opþiune , va fi validã în cazul în care se doreºte criptarea/ decriptarea unui text introdus de la tastaturã . Se va salva acest text cifrat într-un fiºier , care n-i se cere precizat .
Pentru introducerea cheilor de cifrare / descifrare se vor folosi identificatori numerici , de lungime maxim 20 de cifre ( de exemplu 1239645218443 ). Nu se acceptã caractere , litere speciale , taste funcþionale .
Algoritmul pentru cifrare/descifrare simetricã ( prima variantã ) :
Pentru optiunea 1 :
Algoritm_criptare_decriptare_este ( char cheie[dim_cheie] )
{
Cerere_nume_fiºier ; // functia Show_File( ) ;
Deschide_fiºier_mod_citire ;
Calcul_dimensiune_fiºier ;
int dim_buf = Dimensiune_fiºier ;
if ( dim_buf >=12000 ) return ;
char buf_text[dim_buf];
Citire_fiºier ºi salvare în bufferul buf ;
Transformã conþinutul din buffer astfel :
{
for( indice_i = 0; indice_i < dim_buf ;indice_i ++)
for( indice_ j = 0;indice_ j <dim_cheie;indice_ j ++)
{
buf_text[i]=buf_text[i]^cheie[j] ;
// semnul ( ^ ) este sau exclusiv ;
// se face în acest caz ,un sau exclusiv
// între biþii cheii ºi biþii textului ;
}
}
// Salveazã în variabila globalã ºirr , conþinutul textului cifrat .
returnez ºirr ;
}
Ca exemplu pentru acest algoritm , avem funcþia :
CString Criptar (char cheie[10] ) din fiºierul ReþeleView.cpp iar pentru Cerere_nume_fiºier din algoritmul dat mai sus , am dat ca exemplu,
funcþia LPSTR Show_File( ) , care ne returneazã numele fiºierului care se doreºte criptat. Codul acestei funcþii este dat tot în fiºierul ReþeleView.cpp ,ºi caracteristic pentru ea este doar faptul cã apeleazã o funcþie predefinitã GetOpenFileName( OPENFILENAME ofn) care ne afiºeazã o casutã de dialog , existentã în uneltele Windows 95 / NT . În cazul unei deschideri corecte , se returneazã numele fiºierului , în caz contrar ºirul NULL . Claritatea codului sursã ce caracterizeazã aceastã funcþie este trivialã .
Pentru opþiunea 2:
La opþiunea doi se are în vedere doar salvarea a ceeace s-a scris în câmpul de informaþii al calculatorului .În acest fel , avem urmãtorul algoritm :
Algoritm_de_salvare_text_clar (CString st1)
{
Cere_nume_fiºier_pentru_salvare , ºi returneazã numele ;
// În cazul nostru avem funcþia ªhow_Save( ) ;
Creare_fiºier_gol cu acest nume ;
int dim_text=st1.GetLength();
// aflu dimensiunea textului scris de mine ;
if (dim_text > 12000 ) return ; // nu doresc un fiºier prea mare , însã
// valoarea poate fi modificatã ;
char buf_text[dim_text];
// declar un tablou de caractere , de aceeaºi dimensiune cu textul ;
buf_text = st1; // salveazã în buf_text chiar textul ;
// Funcþia predefinitã _lwrite() ; mã ajutã sã salvez întregul buffer în
// fisierul dat de mine ;
Închidere fiºier salvat ; // _fclose( file) ;
}
Codul acestui algoritm este dat de funcþia :
void Salveazã(CString st1) dat de asemenea în fiºierul ReþeleView.cpp.
Pentru funcþia ªhow_Save() avem aceleaºi precizãri de fãcut ca ºi la funcþia ªhow_File(), cu diferenþa cã foloseºte funcþia predefinitã GetSaveFileName(OPENFILENAME ofn) , care de asemenea pune în folosinþã cutia de dialog Save existentã între uneltele Windows 95 / NT ;
Pentru optiunea 3:
La aceasta opþiune vrem ca sã criptãm un fiºier pe care n-i se cere sã-l alegem .Opþiunea este asemãnãtoare ,cu cea descrisã la cele douã opþiuni anterioare , în afarã de faptul cã se cere pe lângã numele fiºierului sub care vrem sã salvãm , ºi o cheie de tip numeric , care este cheia de cifrare , sub care vrem sã cifrãm fiºierul . Avem astfel o a doua variantã de a cifra un text , ºi o vom explica în continuare . Codul care caracterizeazã aceastã opþiune , este urmãtorul :
Criptare_decriptare_simetricã( CString tS, char cheie[dim_cheie])
{
int dim_buf = tS.GetLegth( ) ;
// calculeazã dimensiunea textului de criptat ;
if ( dim_buf >=12000 ) return ;
char buf_text[dim_buf];
// declar un buffer cu lungimea = dimensiunea textului ;
Salveazã( tS, buf_text); // încarc textul în bufferul , buf_text ;
Transformã conþinutul din buffer astfel :
{
for( indice_i = 0; indice_i < dim_buf ;indice_i ++)
for( indice_ j = 0;indice_ j <dim_cheie;indice_ j ++)
{
buf_text[i]=buf_text[i]^cheie[j] ;
// semnul ( ^ ) este sau exclusiv ;
// se face în acest caz , un sau exclusiv între biþii cheii ºi
// biþii textului ;
}
}
Salveazã în variabila globalã ºirr , conþinutul textului cifrat .
returnez ºirr ;
}
Un exemplu concludent este codul funcþiei :
CString alab(CString tS,char ch[10]) , existent în fiºierul sursã ReþeleView.cpp. Cele trei opþiuni vor fi prezente în toate tipurile de criptãri, pe care le-am discutat în proiect , ºi vor avea deci urmãtoarea ordine :
Prima opþiune v-a deschide un fiºier , ne v-a furniza un text , pe
care îl putem cripta cu cheia publicã pe care o introducem .
A doua opþiune ne salveazã textul introdus de noi , într-un fiºier
pe care îl putem înmagazina pe disc ºi încãrca când dorim .
A treia opþiune , ne va cripta un fiºier , pe care îl avem deja în
câmpul informaþie al calculatorului . Este , în mare asemãnãtoare primei opþiuni , doar cã aici fiºierul este cerut ultima datã , pentru a salva modificãrile textului pe disc ºi a le încãrca atunci când dorim .
Descrierea unor funcþii de bazã , ºi care este rolul lor în cadrul proiectului :
În fiºierul ReþeleView.cpp.
Funcþia :
void OnLButtonDown(UINT nFlags, CPoint point)
În cadrul ei , verificãm dacã sunt activate anumite acþiuni din meniu, ºi modul în care trebuie sã interacþioneze calculatorul . Avem în acest caz o variabilã de tip întreg , generalã , " viz " ,care la o anumitã valoare a ei , se ºtie cã se face ceva ( selecþie a unei opþiuni din submeniu , initializarea unui calculator , etc…) .De exemplu :
Pentru viz = 1 ,se stie ca s-a inserat opþiunea de Inserare_Calculator. În acest caz vom verifica poziþia mouse-ului pe ecran , dupã care afiºãm un calculator .
Pentru viz = 2 , avem ºtergerea calculatorului .
La viz = 3 , putem afla informaþii despre calculatorul selectat , etc …
void aflã(int l,int n) :
Aceastã funcþie ne ajutã la iniþializarea unei linii de comunicaþie între douã calculatoare . Se foloseºte în cadrul în care se interogheazã utilizatorul asupra poziþiei calculatoarelor în cadrul reþelei ºi asupra poziþiei liniei faþã de celor douã calculatoare .
Are douã variabile de intrare :
int n : care ne dã numãrul unuia dintre calculatoare .
int l : latura aleasã .Aici vom avea urmãtorul mod de numerotare a
laturilor :
– latura unu – latura de deasupra ;
– latura doi – latura din dreapta ;
– latura trei – latura din jos ;
– latura patru – latura din stânga ;
Dupã închiderea casuþei de dialog , în care s-au introdus numerele calculatoarelor între care se doreºte legarea ºi poziþia legãturii , legãtura va fi activatã . ªtergerea legãturii are loc în acelaºi mod , cu precizarea cã nu este nevoie sã mai precizaþi poziþia legãturii , ci doar calculatoarele între
care se doreste stergerea legaturii .
void desen(int i,int j,int num)
Aceastã funcþie deseneazã un calculator pe ecran , în pãtratul în care s-a apasat butonul din stânga al mouse-ului . Are ca variabile de intrare , urmãtoarele :
int i : O variabilã de tip întreg , care ne precizeazã x-ul din
stânga sus al pãtratului care încadreazã calculatorul .
int j : O variabilã de tip întreg care ne precizeazã y-ul din
stânga sus al pãtratului care încadreazã calculatorul .
int num : O variabilã de tip întreg , care ne dã numãrul
calculatorului .
void OnShowHideLink() :
În cadrul acestei funcþii , se va afiºa o cãsutã de dialog , în care vom putea alege poziþia unei linii de legãturã , deci activarea unei legãturi între douã calculatoare , cât ºi ºtergerea unei legãturi între douã noduri . Se va apela de douã ori funcþia void aflã(int l,int n) , despre care am discutat anterior , tocmai pentru a ºti care trebuie sã fie capetele liniei pe care vrem sã o activãm . Folosim astfel patru variabile globale , xm1, ym1, xm2, ym2, care vor constitui capetele liniei .
Observaþii :
Nu se admite o dublã activare a unei legãturi , nici de la nodul_unu , spre nodul_doi , nici de la nodul_doi, spre nodul_unu .
Nu se admit activãri între douã calculatoare care nu existã , nici dacã nu existã un calculator . Acelaºi lucru se poate spune ºi despre ºtergere .
Câmpul viteza din cadrul cãsuþei de dialog se poate modifica , pânã la o limitã care este prevãzutã în sistem .
Odatã închisã cãsuþa de dialog , aceste modificãri sunt salvate .
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: Criptarea Retelelor DE Calculatoare (ID: 149312)
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.
