Documente Academic
Documente Profesional
Documente Cultură
Cuprins
Teoretic
Criptar e
T ext criptat
o 6esa$e !i criptare -ac notam mesa$ul clar cu 6% mesa$ul cifrat cu C% func#ia de criptare cu 7% iar func#ia de decriptare cu - atunci n general trebuie respectat rela#ia8 D(E(M)) = M (2.1.1) o 1utentificare% 2ntegritate !i alte termeni Cum am +is mai devreme criptografia% n afar de cifrarea mesa$elor mai poate fi folosit !i la autentificare% verificarea integrit#ii mesa$ului% etc" Autentificarea nseamn% c destinatarul% cel care prime!te mesa$ul criptat poate fi sigur de originea acestuia" Integritate receptorul mesa$ului trebuie s aib posibilitatea de a verifica% daca mesa$ul a fost sau nu schimbat dup momentul trimiterii" Nerepudiere adic posibilitate de a ne asigura c cel care trimite mesa$ul s nu poate nega acest fapt" o 6esa$e !i chei 0n algoritm criptografic folosit pentru criptare respectiv decriptare este o func#ie matematic" Securitatea este oferit doar n ca+ul n care algoritmul este pstrat secret" *n acest ca+ vorbim de un algoritm restrns&Schn(9) :
Bartha Hunor Sistem criptografic de tip secure chat Criptografia modern re+olv acest neavanta$% prin folosirea cheilor de criptare% care pot lua valori ntr4un domeniu larg" *n acest ca+ rela#ia (:"1"1) devine8 D!(E!(M)) = M (2.1.2)
0nele algoritmi folosesc chei diferite pentru criptare !i decriptare% rela#ia care descrie acest procedeu este8 D!1(E!2(M)) = M (2.1.")
-iferen#a esen#ial a acestor algoritmi% fa# de algoritmii restrn!i este securitatea con#inut n cheie !i nu n algoritm% acest lucru permi#nd ca algoritmii s fie publica#i !i anali+a#i fr compromitarea securit#ii" *n figura urmtoare est ilustrat procedeul cu aceste algoritmi8
;e/t necriptat C heie K
%riptare
$ext criptat
C heie K
Decriptare
$ext decriptat
;e/t necriptat
C heie K1
%riptare
$ext criptat
C heie K2
Decriptare
$ext decriptat
criptarea cu chei simetrice si asimetrice o ;ipuri de algoritmi de criptare 7/ist trei tipuri de algoritmi folosi#i n criptografie" 1lgoritmi cu chei simetrice% algoritmi cu chei publice !i algoritmi de sens unic% numite !i func#ii hash ( message digest algorithms)"
Bartha Hunor Sistem criptografic de tip secure chat Cteva e/emple de algoritmi bloc sunt8 <C:% <i$ndael% -7S !i ;riple-7S" ?om pre+enta pe rnd fiecare n cele ce urmea+"
.r. 1 1 2 2 2 2 2 2 1 #i/i $a#el 2.1 .um rul de #i/i cu care este deplasat cheia0 1n func/ie de rund
2igura 2.2.1 Diagrama algoritmului DE3 -up deplasare @C din cele B9 bi#i sunt selecta#i" -eoarece acest algoritm nu numai schimb ordinea bi#ilor dar !i selectea+ un sub4set din bi#ii cheii se nume!te algoritm de compresie" -in cau+a deplasrii un sub4set diferit de bi#i este folosit n fiecare sub4cheie" ermutarea de e#pandare" 1ceast opera#ie mre!te numrul de bi#i n blocul drept al datelor de la >: la @C bi#i" 1ceast opera#ie repet anumite bi#i% de acea este numit opera#ie de e/pandare (e/pansie)" Scopul opera#iei este de a face blocul de mrime egal cu cheia% pentru a aplica F,<% mai departe ofer un re+ultat mai lung care poate fi compresat n procesul de substituire" 6ai are efect !i din punct de vedere criptografic% deoarece un singur bit afectea+ dou substituiri% dependen#a bi#ilor de ie!ire de bi#ii de intrare se rspnde!te mai repede" 1cest efect se nume!te Gefectul de avalan!H" -7S a fost conceput% ca s a$ung ct mai repede n starea% n care fiecare bit din te/tul cifrat s fie dependent de fiecare bit din te/tul de intrare" $locul de su%stituire &$locul S' -up ce cheia compresat este compus cu blocul e/pandat% prin F,<% re+ultatul de @C bi#i intr n blocul de substituire" 1ceste substituiri sunt reali+ate de C blocuri de substituire% care au 9 bi#i ca intrare !i @ ca ie!ire" Cei @C bi#i sunt descompu!i n C blocuri de cte 9 bi#i care sunt trecute prin blocurile S" 1ceste blocuri repre+int de fapt tabele cu patru linii !i 19 coloane% avnd n fiecare po+i#ie un numr de @ bi#i" Cei 9 bi#i ce intr specific po+i#ia valorii care va fi ie!irea" -e e/emplu dac avem intrarea b1b:b>b@bBb9% bi#ii b1 cu b9 formea+ un numr pe : bi#i care va specifica rndul din tabel (=4>)% cei @ bi#i b :b>b@bB formea+ un numr ntre = !i 1B care va specifica coloana din tabel" <e+ultatul acestor substitu#ii produc C grupe de @ bi#i care sunt recombinate ntr4un bloc de >: bi#i" 1cest grup este transmis mai departe la blocul de permutare 5" $locul de ermutare " 1cest bloc face o mapare a fiecrei bit de intrare la o alt po+i#ie la ie!ire" Eici un bit nu este folosit de dou ori !i nici unul nu este ignorat" ;abela dup care se face maparea este urmtoarea8 B
Bartha Hunor Sistem criptografic de tip secure chat 1 ) 2 * + 2 2 ' 2 1 1 ' 2 , " 2 1 2 1 1 1 2 2 2 + * ( " ) 2 " , 1 1 " ) * , " $a#el 2.2 4ermutarea de #loc 4 ( 2 2 1 + 1 1 " 1 ' 1 2 (
*n final re+ultatul acestei permutri este compus prin F,< cu partea stng a blocului ini#ial de 9@ bit% apoi partea dreapt este schimbat cu partea stng !i se ncepe un nou rund" ermutaia final este inversa celei ini#iale" -ecriptarea cu -7S ,pera#iile de la criptare au fost concepute n a!a fel nct acela!i func#ie poate fi folosit la decriptare% ce am folosit !i la criptare" Singura diferen# este% c trebuie s folosim cheile n ordine invers" 1lgoritmul care generea+ sub4cheile folosite la fiecare rund este tot similar cu cel de la criptare% cu diferen#a c deplasarea se face n dreapta% !i numrul po+i#iilor cu care deplasm sunt8 &und 1 2 " ' ( ) * + , 1 2 1 1 2 1 2 2 1 " 2 1 ' 2 1 ( 2 1 ) 1
.r. - 1 2 2 2 2 2 2 1 #i/i $a#el 2." 4o5i/iile de deplasare la decriptarea DE3 Securitatea DES
-e4a lungul multor ani de testare !i criptanali+ -7S s4a dovedit un algoritm sigur% singurele slbiciuni fiind cteva chei slabe !i lungimea cheii" 2ni#ial -7S a fost proiectat cu chei de lungime 11: bi#i% dar pn ce a a$uns standard acesta era redus la B9 de bi#i" 6ul#i au considerat lungimea cheilor nesatisfctoare mpotriva unui atac de for# brut" Cu cre!terea vite+ei chipurilor de$a posibilitatea de a reali+a un aparat care s fie capabil s descifre+e un mesa$ codat a devenit din ce n ce mai accesibil" 5e cnd n 1(C1 Hellman !i -iffie au estimat reali+area unui astfel de aparat la B= de milioane de dolari% n 1((> 6ichael Ieiner a proiectat un astfel de aparat avnd costul de 1 milion de dolari% care era capabil de reali+area unui atac de for# brut reu!it n >%B ore" Ca !i remediu au aprut o sumedenie de algoritmi care au ca ba+ -7S dar ncearc mrirea securit#ii acestuia" Cel mai cunoscut !i rspndit este ;riple-7S"
DES L L : DES
1 DES
criptat
2.1.2.(. )C2
Conform &<S1==)% <C: este un algoritm de criptare cu chei de lungime variabil proiectat de <on <ivest de la <S1 Security 2nc" 7ste un algoritm proprietar% iar detaliile de implementare nu au fost fcute publice" <C: operea+ pe blocuri de 9@ bi#i !i a fost proiectat pentru a nlocui -7S" Conform afirma#iilor firmei este de > ori mai rapid dect -7S% vite+a algoritmului fiind dependent de lungimea cheii alese" 6otivul pentru care <C: !i <C@ sunt folosite destul de mult este n#elegerea ntre S51 (Soft'are 5ublisher 1ssociation) !i guvernul Statelor0nite% conform cruia <C: !i <C@ procesul de aprobare a e/portului algoritmilor este mult mai simpl% cu condi#ia ca cheile s fie mai scurte dect @= de bi#i" ;otu!i% ce ne d de gndit n legtur cu securitatea algoritmului este tocmai aceast n#elegere" 7ste aproape sigur c guvernul S01 nu ar aproba e/portul algoritmilor pe care nu le poate sparge" &Schn(9)
2.1.2.*. )i+ndael
-eoarece -7S a devenit nesigur% nevoia de a4l nlocui a fost din ce n ce mai mare" 5entru a reali+a acest lucru E2S; (Eational 2nstitute of Standards and ;echnology) a #inut o competi#ie n anul 1((D pentru a proiecta 17S (1dvanced 7ncryption Standard)% ca !i succesorul -7S" Ca !i solu#ie temporal a fost acceptat folosirea ;riple-7S% ca un standard temporal pn ce se termin proiectarea 17S" Cei cinci candida#i final pentru 17S au fost 61<S% <i$ndael% Serpent% !i ;'ofish" *n anul :==1 <i$ndael a fost ales ca algoritmul pentru 17S" 1lgoritmul a fost proiectat de Moan -aemem !i ?incent <i$men" Aungimea de cheie poate fi 1:C% 1(:% sau :B9 bi#i conform cerin#elor 17S" Aungimea cheii trebuie s fie una din valorile preci+ate mai sus% nu poate fi arbitrar" Si lungimea de bloc poate fi tot de 1:C% 1(:% :B9 bi#i% teoretic fiind posibile toate cele ( combina#ii a lungimilor cheii !i a lungimilor de bloc% ns lungimea de bloc oficial 17S este 1:C bi#i% deoarece criptanali+a efectuat nainte de a pronun#a <i$ndael standard s4a concentrat mai ales pe blocurile de lungimea 1:C" Eumrul de runde din algoritm este variabil ntre 1= !i 1@ fiind dependent de lungimea de bloc" 1lgoritmul a fost destul de mult criticat pentru numrul redus de runde% dar numrul de runde poate fi schimbat cu u!urin#% dac se va considera c este necesar acest lucru" -escrierea n detaliu a algoritmului poate fi gsit pe pagina &'''=1)
Bartha Hunor Sistem criptografic de tip secure chat S presupunem c 6aria este un notar public" -ac cineva dore!te s ob#in un document semnat trimite la 6aria care trimite napoi mesa$ul semnat" -ac in infractor dore!te s ob#in un document semnat 4 care% n mod normal nu ar fi semnat de 6aria pe care numim m1" 2nfractorul ia o valoare arbitrar x !i calculea+ y = xe mod n% e fcnd parte din cheia public a lui 6aria" 1poi calculea+ m = ym1 mod n% !i trimite la 6aria ca ea s semne+e" Ce va primi de la 6aria va fi md mod n" -up ce atacatorul calculea+ (md mod n)x71 mod n = m1d mod n care este semntura pentru m1" -e fapt sunt mai multe metode pentru a ob#ine acest lucru% comun fiind n toate faptul c e/ploatea+ urmtoarea lege matematic8 (xm)d mod n = xdmd mod n Semntura digital 3olosind criptografia cu chei publice este posibil autentificarea persoanei care a trimis mesa$ul% !i asigurarea ca mesa$ul nu a fost alterat ntre timp" 1cest procedeu se nume!te semntur digital% !i nseamn de fapt criptarea mesa$ului cu chei privat" <S1 permite ca pentru criptarea s folosim oricare dintre chei% acestea putnd fi folosite n mod simetric% anume datele criptate cu una dintre chei pot fi decriptate cu cealalt cheie" -e e/emplu dac 6aria dore!te s trimit un mesa$ semnat lui 6ihai atunci ea criptea+ mesa$ul cu cheia ei privat% care va putea fi decodat folosind cheia ei public" ;rebuie preci+at c n e/emplul de mai sus nu mai e/ist confiden#ialitate deoarece mesa$ul criptat de 6aria poate fi decriptat de oricine% deoarece cheia public este accesibil tuturor" -ac 6aria dore!te s pstre+e securitatea mesa$elor atunci trebuie prima dat s cripte+e mesa$ul cu cheia public a lui 6ihai dup care criptea+ nc o dat re+ultatul ob#inut cu ei privat" 1stfel a ob#inut securitate !i autentificare" 6ihai dup ce prime!te mesa$ul prima dat decriptea+ cu cheia public a lui 6aria% asigurndu4se c mesa$ul a fost trimis de ea apoi decriptea+ cu cheia lui privat" ;otu!i folosirea aceluia!i pereche de chei pentru criptare !i semntur are de+avanta$e% !i poate fi e/ploatat de infractori" Solu#ia pentru aceast problem este folosirea certificatelor digitale"
1=
$a#el 2.".1 %;mpurile certificatelor <.(-, 0n e/emplu de certificat cu cmpurile pre+entate n tabelul :">"1 completate este pre+entat n figura :">"1" *n figura :">"1 avem un certificat F"B=( ?>% cu algoritmul de semntur 6-B'ith<S1" ;rebuie men#ionat c la crearea semnturilor digitale nu se semnea+ ntregul mesa$% n ca+ul nostru ntregul certificat% ci se creea+ o sum de control sau hash folosind un algoritm de acest tip% !i numai codul hash este semnat digital" 1cest procedeu este mult mai eficient !i mai sigur din punct de vedere criptografic" 6dB<S1 nseamn c s4a folosit func#ia hash 6-B pentru creare de hash% iar <S1 pentru semnarea documentului" *n cmpul GSub$ectH se mai poate specifica n afar de nume !i numele organi+a#iei% adresa% #ara 2igura 2.".1 %ertificat <.(-, etc" Conform &rfc:@B() certificatele trebuie s fie codate folosind regulile 1SE"1 (1bstract Synta/ Eotation) -7< (-istinguised 7ncoding <ules) pentru fiecare element" , descriere detailat 1SE"1 poate fi gsit n &'''=:)" -7< este un set de reguli de codare care este de fapt un sub4set al 1SE"1" 0n e/emplu de comunicare ntre 6aria !i 6ihai% folosind certificate8 6aria ia certificatul lui 6ihai dintr4o ba+ de date !i verific autenticitatea acestuia" -ac C1 care a emis certificatul este acela!i pentru amndou atunci verificarea este foarte simpl% 6aria verific doar semntura C1 de pe certificatul lui 6ihai" -ac ns C1 care a emis nu este acela!i cu al lui 6aria atunci situa#ia se complic pentru c ea nu are cheia public (adic certificatul) autorit#ii care a emis certificatul lui 6ihai" 7a trebuie s ia dintr4o ba+ de date certificatul respectivului C1 !i s verifice autenticitatea acestuia% cu certificatul autorit#ii care a emis certificatul" 1cest ciclu se repet pn ce se a$unge la un certificat care e/ist n lista de certificate a 6ariei (adic a$ungem la o autoritate de ncredere din punctul de vedere a 6ariei)" Se poate percepe ca !i o structur de tip arbore% e/emplificat n figura :">":"
11
%>1 %>1 1
6aria
%>2 %>1 2
%>"
Se poate observa c C11 este primul punct comun n lan#ul de certificate% adic C11 este autoritatea de certificate n care au ncredere amndou participan#i"
;rebuie preci+at ca s avem un 5L2 func#ional to#i participan#ii trebuie s aib n lista lor de certificate de ncredere (;rusted certificates) un C1 de ba+ numit !i C1 rdcin" 1ceast arhitectur ns are o mare slbiciune% acest lan# de certificate este la fel de slab ca !i elementul cel mai slab din lan#" 1 garanta identitatea cuiva nu ofer garan#ie asupra e/igen#ei acestuia n verificarea identit#ilor crora le va emite certificate" ;rebuie selectate cu aten#ie autorit#ile pe care considerm c pot fi de ncredere% dar aceast op#iune este dat pentru toat lumea% avnd acces la lista privat de certificate cu posibilitatea de a aduga sau a !terge certificate din list" &;an=>)
Bartha Hunor Sistem criptografic de tip secure chat o 2ntegritate cu parol8 2ntegritatea este garantat printr4un 61C (6essage 1uthentification Code) derivat dintr4o parol introdus" -in punct de vedere a securit#ii sunt preferabile modurile cu cheie public" ;otu!i nu este tot timpul posibil s folosim aceste moduri% cum ar fi de e/emplu situa#ia cnd nu !tim n momentul e/portrii care va fi platforma de destina#ie" ;oate platformele care se conformea+ standardului trebuie s ofere posibilitate de a e/porta !i de a importa fi!iere pfx 4D?" 1cestor fi!iere n func#ie de modul folosit pot fi semnate% sau le este ata!at un 61C" Sinta/a 53F 5-0 ;oate modurile de schimb folosesc acela!i forma 5-0% 1SE"1 !i codarea B7< asigur independen#a de platform" Standardul specific un singur tip de e/port% anume e/portul 1SE"18 53F" 2nstan#ele 53F con#in urmtoarele cmpuri8 1" Indicator de ,ersiune (acest cmp este v> dac se conformea+ standardului 5LCS S1:) :" ContentInfo (preluat din 5LCS SD) a crui cmp de tip contentT/pe este signedData dac s4a folosit modul de integritate cu cheie public sau data dac s4 a folosit modul de integritate cu parol" >" 0acData% care este o instan# op#ional fiind pre+ent numai n modul de integritate cu parol% care con#ine cmpurile% definite n (5LCS SD)% DigestInfo% con#innd valoarea 61C% macSalt !i iterationCount" Cmpul macSalt este folosit pentru a ngreuna atacurile de dic#ionar (dictionary attacR) prin adugarea de date aleatoare la parol" *n &<S1(() se poate gsi o descriere detailat a formatului pf/% a tipurilor folosite n acest standard conform 1SE"1 B7<"
Bartha Hunor Sistem criptografic de tip secure chat 0n posibil atac% dac ultima cerin# nu este ndeplinit ar fi atacul numit Gatacul +ilei de na!tereH (birthday atacR)" 1cest tip de atac !i4a primit numele de la parado/ul +ilelor de na!tere" *n mod surprin+tor% se poate dovedi matematic c probabilitate ca n orice grup de :> de persoane doi sau mai mul#i indivi+i s aib acela!i +i de na!tere este mai mare dect T" 1tacul descris n &Schn(9) presupune folosirea unei func#ii hash care produce un re+ultat de 9@ bi#i" 5a!ii care trebuie parcur!i pentru ca 6ihai s ob#in o semntur de la 6aria pe un document care n4ar fi semnat n condi#ii normale niciodat de 6aria8 1" 6ihai pregte!te dou versiuni a documentului% una care este n ordine !i va fi semnat de 6aria% !i una care con#ine informa#ii false care nu ar fi semnate de 6aria" :" 6ihai face schimbri subtile pe fiecare document (de e/" inserare de spa#ii etc")% ob#innd ::> variante ale documentelor" >" 6ihai calculea+ valorile Hash a fiecrei variante ale celor dou documente% !i gse!te cte una din fiecare grup care produc acelea!i valori H1SH" @" 6ihai trimite varianta modificat a documentului pe care 6aria este dispus s semne+e% folosind un protocol unde se semnea+ numai valoare H1SH" B" 6ihai acuma poate sus#ine c documentul pereche cu informa#iile false a fost semnat de 6aria" Eu este u!or de gsit o func#ie care satisface toate cerin#ele de mai sus% totu!i e/ist destul multe mai mult sau mai pu#in sigure func#ii H1SH folosite n criptografie" &Schn(9) ofer o descriere a celor mai cunoscute dintre aceste func#ii% noi vom aminti doar cteva"
2.1.*.1. 0D3
6-B este o func#ie hash de sens unic% proiectat de <on <ivest" 6- provine din 6essage -igest" 1lgoritmul produce un hash% sau altfel +is imagine de 1:C bi#i a mesa$ului de intrare" 5rincipiile dup care s4a reali+at algoritmul sunt urmtoarele8 o 3ecuritate" Sunt imposibil de gsite dou mesa$e care au acela!i imagine% presupunnd c nu e/ist alt metod de criptanali+ dect cea a for#ei4brute" o 3ecuritate direct " Securitatea nu se ba+ea+ pe presupuneri% cum ar fi de e/emplu dificultatea de a factori+a numere mari% ca !i n ca+ul <S1" o Aite5 " 1lgoritmul trebuie s fie potrivit pentru implementri de soft'are rapide% ba+ndu4se pe manipula#ii de bit cu operan+i de >: bit" o 3implicitate Bi compactitate" 1lgoritmul trebuie s fie ct se poate de simplu% fr structuri mari de date% sau un program complicat" o 2a=ori5are de arhitecturi Cittle7Endian. 1lgoritmul este optimi+at pentru arhitecturi de microprocesoare (mai ales 2ntel)" Calculatoarele mai performante fac transformrile necesare" 5rima variant a algoritmului a fost 6-@% dar acesta dup ce a fost introdus a fost criptanali+at cu succes n pr#i% ce l4a ndemnat pe autor s4si mbunt#easc codul" 1stfel a fost conceput 6-B% ca variant mbunt#it 6-@" Descrierea algoritmului -up ni!te procesri ini#iale 6-B procesea+ te/tul de intrare n blocuri de B1: de bi#i% care sunt mai departe separa#i n 19 sub4blocuri de >: bi#i fiecare" 1lgoritmul produce un set de @ blocuri de >: bi#i% care concatenate dau ie!irea de 1:C bit" 6esa$ul este mrit pentru a fi multiplu de B1:" 1cest procedeu se reali+ea+ prin adugarea unui bit de 1 la sfr!itul mesa$ului !i attea +erouri c#i sunt necesari ca mesa$ul original s aib o lungime cu 9@ de bi#i mai scurt dect un multiplu de B1:" , repre+entare pe 1@
Bartha Hunor Sistem criptografic de tip secure chat 9@ de bi#i este apoi adugat la sfr!itul mesa$ului" 1cest procedeu asigur ca% complementarea s arate diferit pentru mesa$ele diferite" Aa nceput sunt ini#iali+ate patru variabile% numite variabile de legtur8 > = -x-12"'()* D = -x+,a#cdef % = -xfedc#a,+ D = -x*)('"21*ncepe ciclul principal al algoritmului% care este repetat n func#ie de numrul de blocuri de B1: din mesa$ul de intrare" Cele patru variabile sunt copiate n alte variabile% anume8 > n a% D n #% % n c iar D n d. Ciclul principal are patru runde asemntoare" 3iecare rund folose!te o opera#ie diferit de 19 ori" 3iecare opera#ie aplic o func#ie ne4liniar pe trei din variabilele a0#0c0d% adugnd re+ultatul la al patrulea variabil% la un sub4bloc a te/tului de intrare !i o constant" 1poi rote!te re+ultatul ob#inut la dreapta cu un numr variabil de bi#i !i adaug re+ultatul la unul dintre variabilele a0#0c0 sau d" *n final re+ultatul este copiat ntr4unul dintre variabilele de dinainte" 3unc#ionarea buclei principale a algoritmului este pre+entat n figura :"@"1"
< unda :
< @
2igura 1.'.1 Ducla principal MD( Sunt patru func#ii neliniare folosite n fiecare opera#ie" Se folose!te o func#ie diferit n fiecare rund" 3unc#iile neliniare sunt8 2(<0E0F) = (< G E) H ((I<) G F) J(<0E0F) = (< G F) I(E (IF)) @(<0E0F) = < xor E xor F K(<0E0F) = E xor (< H (IF)) Considernd 6$ fiind blocul L din sub4blocul de mesa$e% !i UUUs fiind o rota#ie circular de s bi#i cele patru opera#ii sunt8 22(a0#0c0d0ML0s0ti) 1nseamn JJ(a0#0c0d0ML0s0ti) 1nseamn @@(a0#0c0d0ML0s0ti) 1nseamn KK(a0#0c0d0ML0s0ti) 1nseamn a = # 9 ((a 9 2(#0c0d ) 9 ML 9 ti) ::: s) a = # 9 ((a 9 J(#0c0d ) 9 ML 9 ti) ::: s) a = # 9 ((a 9 @(#0c0d) 9 ML 9 ti) ::: s) a = # 9 ((a 9 K(#0c0d ) 9 ML 9 ti) ::: s)
Cele patru runde (9@ de pa!i) sunt pre+entate n tabelul :"@"1" Constantele ti sunt alese astfel nct n pasul i ti este partea ntreag a valorii 2"2Ma#s(sin(i))0 unde i este n radiani" -up parcurgerea celor 9@ de pa!i valorile a0#0c0d sunt adugate la >0D0%0D !i ciclul se repet cu urmtorul bloc de date" 2e!irea final va fi concatenarea valorilor >0D0% !i D"
1B
)unda 2
VV (a% b% c% d% 61% B% =/f91e:B9:) VV (d% a% b% c% 69% (% =/c=@=b>@=) VV (c% d% a% b% 611% 1@% =/:9BeBaB1) VV (b% c% d% a% 6=% :=% =/e(b9cDaa) VV (a% b% c% d% 6B% B% =/d9:f1=Bd) VV (d% a% b% c% 61=% (% =/=:@@1@B>) VV (c% d% a% b% 61B% 1@% =/dCa1e9C1) VV (b% c% d% a% 6@% :=% =/eDd>fbcC) VV (a% b% c% d% 6(% B% =/:1e1cde9) VV (d% a% b% c% 61@% (% =/c>>D=Dd9) VV (c% d% a% b% 6>% 1@% =/f@dB=dCD) VV (b% c% d% a% 6C% :=% =/@BBa1@ed) VV (a% b% c% d% 61>% B% =/a(e>e(=B) VV (d% a% b% c% 6:% (% =/fcefa>fC) VV (c% d% a% b% 6D% 1@% =/9D9f=:d() VV (b% c% d% a% 61:% :=% =/Cd:a@cCa)
)unda ("
HH (a% b% c% d% 6B% @% =/fffa>(@:) HH (d% a% b% c% 6C% 11% =/CDD1f9C1) HH (c% d% a% b% 611% 19% =/9d(d91::) HH (b% c% d% a% 61@% :>% =/fdeB>C=c) HH (a% b% c% d% 61% @% =/a@beea@@) HH (d% a% b% c% 6@% 11% =/@bdecfa() HH (c% d% a% b% 6D% 19% =/f9bb@b9=) HH (b% c% d% a% 61=% :>% =/bebfbcD=) HH (a% b% c% d% 61>% @% =/:C(bDec9) HH (d% a% b% c% 6=% 11% =/eaa1:Dfa) HH (c% d% a% b% 6>% 19% =/d@ef>=CB) HH (b% c% d% a% 69% :>% =/=@CC1d=B) HH (a% b% c% d% 6(% @% =/d(d@d=>() HH (d% a% b% c% 61:% 11% =/e9db((eB) HH (c% d% a% b% 61B% 19% =/1fa:DcfC) HH (b% c% d% a% 6:% :>% =/c@acB99B)
)unda ("
22 (a% b% c% d% 6=% 9% =/f@:(::@@) 22 (d% a% b% c% 6D% 1=% =/@>:aff(D) 22 (c% d% a% b% 61@% 1B% =/ab(@:>aD) 22 (b% c% d% a% 6B% :1% =/fc(>a=>() 22 (a% b% c% d% 61:% 9% =/9BBbB(c>) 22 (d% a% b% c% 6>% 1=% =/Cf=ccc(:) 22 (c% d% a% b% 61=% 1B% =/ffeff@Dd) 22 (b% c% d% a% 61% :1% =/CBC@Bdd1) 22 (a% b% c% d% 6C% 9% =/9faCDe@f) 22 (d% a% b% c% 61B% 1=% =/fe:ce9e=) 22 (c% d% a% b% 69% 1B% =/a>=1@>1@) 22 (b% c% d% a% 61>% :1% =/@e=C11a1) 22 (a% b% c% d% 6@% 9% =/fDB>DeC:) 22 (d% a% b% c% 611% 1=% =/bd>af:>B) 22 (c% d% a% b% 6:% 1B% =/:adDd:bb) 22 (b% c% d% a% 6(% :1% =/ebC9d>(1)
19
1D
2.(.1. 4im%a+ul C.
Conform &msdnm) limba$ul CS ofer puterea CYY !i simplitatea ?isual Basic" ,biectiva principal a fost simplitatea% nu att vite+" S4a reali+at un compromis interesant prin sacrificarea vite+ei pentru numeroasele beneficii cum ar fi Ggarbage collectionH automatic sau siguran#a de tip" 1u fost introduse numeroase mbunt#iri fa# de CYY% cum ar fi aparenta ine/isten# a referin#elor(pointerilor)% care era principala surs de erori n CYY% sau introducerea tipului Boolean care poate avea valoare $rue sau 2alse ne4fiind posibil folosirea altor tipuri ca !i condi#ii" 1cest tip nici nu poate fi convertit n nici un alt tip" 0n alt element de modernitate este mbunt#irea controlului erorilor prin introducerea e/cep#iilor% care pot fi prinse sau aruncate mai departe" 1cest fel de tratarea erorilor este cel mai eficient n pre+ent !i este folosit !i n Mava" 1stfel se simplific enorm codul surs devenind mult mai clar prin dispari#ia liniilor condi#ionate de valoarea returnat de fiecare func#ie" 5utem ncadra un segment mai mare de cod ntr4un bloc de try% catch astfel asigurnd claritatea codului surs ct !i stabilitatea codului deoarece vom detecta orice tip de eroare din oricare func#ie apelat n blocul try" CS este un limba$ pur orientat pe obiecte" S4a eliminat posibilitatea de mo!tenire multipl" S4a introdus no#iunea de func/ii delegate care sunt echivalentul pointerilor de func#ii din cYY" Ca !i conclu+ie putem afirma c limba$ul de+voltat de microsoft mo!tene!te puterea !i libertatea din cYY% dar ofer un mediu de de+voltare mult mai sigur% fle/ibil !i stabil"
1C
roiectare
C rypto S erver
2igura 2.2.1 >rhitectura aplica/iei Se folose!te att criptografia simetric ct !i cea nesimetric pentru implementarea unei cheme de securitate care permite autentificarea% schimbarea cheilor de sesiune !i transmisia datelor sensibile folosind un algoritm simetric% sigur !i rapid" 0tili+atori !i datele lor personale sunt stocate ntr4o ba+ de date la care are acces nelimitat serverul% clien#ii putnd accesa datele din ba+a de date numai prin intermediul programului server% dup ce s4a stabilit cone/iunea !i au fost satisfcute condi#iile necesare comunica#iei sigure" 1tt serverul ct !i fiecare utili+ator de#in o pereche de chei !i un certificat pentru cheia public" 5rocesul de conectare la server se reali+ea+ prin schimbarea de certificate% ob#innd astfel cheia public a celuilalt% transmiterea cheii de sesiune de la server la client% !i folosind criptarea simetric se transmite numele de utili+atori respectiv parola de la client% la server" -up ce serverul a recep#ionat datele de la utili+ator verific ba+a de date% !i dac datele sunt corecte clientul se poate conecta la server" 1cest algoritm de conectare poate fi u!or urmrit pe figura :"1":"
BHProtocol : Client1 : Server : BHProtocol : Client2 : BHProtocol :
ProcessOutput mesaj impachetat pachet1 Process nput Handle!essage ProcessOutput pachet2 Se considera ca, clientii sunt deja conectati la server si au fiecare cate o cheie simetrica
pachet2
Pentru simplitate pe diagrama nu figureaza criptarea, dar se considera ca datele sint criptate si decriptate la capetele canalelor
-up ce s4a reali+at cu succes conectarea la server datele despre utili+atorul recent conectat sunt trimise la restul clien#ilor conecta#i" 1(
Bartha Hunor Sistem criptografic de tip secure chat Comunicarea ntre doi clien#i se reali+ea+ prin intermediul serverului% deci datele sunt trimise la server care trimite mai departe la clientul corespun+tor" 1stfel se elimin dificult#ile de comunicare ntre clien#ii care fac parte din re#ele locale diferite" 1ceast secven# este pre+entat n detaliu pe figura :"1">
BHCr"pter : Client : Connect %ccept Certificatul serverului 2igura 2.2."4rocesul de transmitere a mesaLelor ProcessCertificate Certificatul clientului SetPeerPu$lic3e" &ncr"pt'ith(S% )ume utilizator si parola criptate #ecr"pt'ith(S% #ate decriptate s)e*+ser,username.%/S& s0alidPass*ord,pas*ordConfirmare nume utilizator si parola 1(+& SetPeerPu$lic3e" ProcessCertificate Begin%ccept Server : BHCr"pter : BH#ata$ase!anager :
&ncr"pted!essage
&ncr"pt'ith(S% date criptate Cerere cheie de sesiune #ecr"pt'ith(S% date decriptate 2enerateSession3e" cheie simetrica SetSession3e"
SetSession3e"
Bartha Hunor Sistem criptografic de tip secure chat Serverul este responsabil de generarea cheilor de sesiune care sunt diferite pentru fiecare client% la fel datele de la un client sunt decriptate !i criptate din nou de server cu cheile corespun+toare fiecrui client" 1cest scenariu este pre+entat pe figura :"1">"
Client1 : !esaj1 criptat cu cheia S1 /oo7upClient Serverul mentine o lista cu clientii conectati momentan6 O$iectele din lista contin referinta la soc7etul, numele de utilizator si cheia simetrica a clientului6 Server : Client2 :
2igura 2.1." Jestionarea cheilor simetrice ?i+ibilitatea clien#ilor este ba+at pe Gliste cu prieteniiH% stocate n ba+a de date conform cruia se vd numai clien#ii care sunt reciproc pre+en#i n listele de prieteni" 5rogramul ofer posibilit#i de modificare a listei cu prietenii% prin !tergere sau adugare de noi prieteni" -iagrama secven#ial este pre+entat pe figura :"1"@"
Client : Server : BH#ata$ase!anager :
4clientul este deja conectat, are cheia simetrica5 prieten nou %dd.riend,src+ser, ne*.rinend%dd.riend1o#ata$ase,ne*.riendprietenul adaugat la lista
2igura 2.1.' >d ugare de proieteni la list 6ai este un scenariu care pn acum nu a fost men#ionat% anume crearea contului unui utili+ator nou pe server" 1cest lucru nseamn pe scurt% adugarea datelor utili+atorului la ba+a de date" Crearea contului este reali+at prin intermediul programului client !i este in mare parte asemntor cu procesul de conectare cu un nume de utili+ator% de$a e/istent% cu u!oare diferen#e" 2mplementarea acestui scenariu s4a reali+at ba+ndu4se pe algoritmii !i func#iile de$a e/istente" 1stfel conectarea socRetului% schimbarea de certificate% trimiterea certificatului este reali+at n mod similar ca !i ca+ul conectrii normale" Se folose!te un artificiu pentru crearea contului" 5entru pstrarea acelora!i algoritmi se reali+ea+ o conectare cu un nume de utili+ator special8 GneQ?serH" 1cest nume de utili+ator este re+ervat% !i pentru server nseamn c este vorba de un utili+ator nou% deci se va a!tepta la ni!te date au/iliare% care vor fi adugate la ba+a de date" Considernd diagrama din figura :"1": modificrile care apar sunt dup verificarea numelui de utili+ator" Qtiind c este vorba de un utili+ator nou se continu procesul e/act cum se arat pe :1
Bartha Hunor Sistem criptografic de tip secure chat diagram dar ca !i un ultim pas se mai adaug o transmisie a datelor noului utili+ator% care vor fi introduse n ba+a de date% dup care cone/iunea va fi nchis" *nchiderea conectrii este necesar pentru c posibilit#ile clientului conectat cu numele de utili+ator re+ervat sunt limitate la trimiterea datelor personale% deci men#inerea unei astfel de cone/iuni este absolut inutil"
::
Bartha Hunor Sistem criptografic de tip secure chat o 0ser-ata repre+int datele necesare de la utili+atori n momentul crerii contului" -atele din aceast clas sunt stocate n ba+a de date" 3igura :"1"9 o 5f/,pen clasa care deschide fi!ierele 5LCS S1: pentru a ob#ine cheia privat respectiv public a utili+atorilor" 3igura :"1"D o 6ain3rame con#ine elementele din interfa#a cu utili+atorul a programului" o 0ser-ata3orm fereastra pentru vi+ionarea datelor utili+atorilor din ba+a de date" *n cele ce urmea+ vom descrie fiecare clas n parte% precum !i rela#ia respectiv dependen#a ntre ele"
:>
9 9 9 9 9 9 ; ; ; ; ; 9 ; ; ; ; ; ; 9 ; ; ; ; ; ; ; ; ; ; ;
ass"metric3e"Size : int container)ame : string m"(S% : (S%Cr"ptoServiceProvider peer(S% : (S%Cr"ptoServiceProvider desCSP : 1riple#&SCr"ptoServiceProvider pf: : Pf:Open ver$ose : $ool 8 false BHCr"pter,BHCr"pter,filename : string, pass* : stringClean+p,- : void getCertB"tes,filename : string- : $"te<= setPeerCertificate,certB"tes : $"te<=- : void ProcessCertificate,:>?@Certificate : $"te<=- : $ool 2enerateSession3e",7e"Size : int, user)ame : string- : $"te<= SetSession3e",session3e" : $"te<=, init0ector : string- : void &ncr"pt,msg : string- : $"te<= &ncr"pt,data : $"te<=- : $"te<= #ecr"pt,encr"pted!sg : $"te<=- : $"te<= SetPeerPu$lic3e",pp7 : (S%Parameters- : void 2et(S%3e"s,pf:Path : string, pf:P*d : string, cerPath : string- : void 2enerate(S%3e"s,3e"Size : int, Container)ame : String- : void &ncr"pt'ith(S%,data1o&ncr"pt : string- : $"te<= &ncr"pt'ith(S%,data1o&ncr"pt : $"te<=- : $"te<= #ecr"pt'ith(S%,encripted#ata : $"te<=- : $"te<= #ecr"pt'ith(S%,encripted#ata : $"te<=, returnString : $ool- : string CreateCertificate,- : $"te<= 2et/ocalCertificate,cerPath : string- : $"te<= #elete3e"s,Container)ame : string- : void createHash,str : string- : $"te<= 3e"size,- : int 4accessor5
2igura 2.1.1 %lasa D@%rypter folosit pentru criptarea datelor. 1lgoritmul asimetric folosit este <S1" 3unc#iile folosite n acest scop sunt EncryptTith&3> respectiv DecryptTith&3> supra ncrcate pentru toate tipurile de parametrii de intrare necesare" EncryptTith&3> cifrea+ informa#iile cu cheia public a partenerului% iar DecryptTith&3> descifrea+ mesa$ul cu cheia privat local" 5entru a reali+a acest lucru avem definite dou cmpuri n cadrul clasei de tipul &3>%rypto3er=ice4ro=ider% anume my&3> care este ini#iali+at cu cheile locale% respectiv peer&3> care este ini#iali+at cu cheia public a partenerului" 2ni#iali+area peer&3> este fcut folosind func#ia Set4eer4u#lic!ey. 3igura :"1": 5re+int secven#a de ini#iali+are8
:@
BHCripter BCO)S1(+C1O(C pf: 8 ne* Pf:Open,-A pf:6/oadPf:,filename, ref pass*-A CspParameters cp 8 ne* CspParameters,-A cp63e"Container)ame 8 pf:6containerA cp63e")um$er 8 ,int-pf:67e"specA m"(S% 8 ne* (S%Cr"ptoServiceProvider,cp-A
ProcessCertificate,certB"tesSetPeerPu$lic3e",pu$lic3e"-
(S%Parameters pu$lic3e" 8 ne* (S%Parameters,-A pu$lic3e"6&:ponent 8 e:ponentA pu$lic3e"6!odulus 8 modulusA if,peer(S%88null-4 peer(S% 8 ne* (S%Cr"ptoServiceProvider,-A 5 peer(S%6 mportParameters,pu$lic3e"-A
2igura 2.1.2 3ec=en/a de ini/iali5are pentru D@%rypter -iferen#a dintre func#ia de criptare !i decriptare este subtil dar foarte important8 pu#lic #yteRS EncryptTith&3>(#yteRS data$oEncrypt)U byte&) encrypted-ata K peer<S1"7ncrypt(data;o7ncrypt% false)O return encryptedDataV W public byte&) -ecryptIith<S1(byte&) encripted-ata)[ byte&) decrypted-ata K my<S1"-ecrypt(encripted-ata% false)O return decryptedDataV W 5entru criptarea simetric avem doar o singur variabil% anume des%34 de tipul $ripleDE3%rypto3er=ice4ro=ider. 2ni#iali+area acestui cmp este fcut de func#ia 3et3ession!ey n ca+ul n care cheia simetric nu este generat local% altfel ini#iali+area se face cu func#ia Jenerate3ession!ey.
:B
2igura 2.1." &ecep/ia asincron Clasa ne ofer func#ii supra ncrcate pentru trimitere !i recep#ionare sincron% asincron% avnd parametrii de intrare de tip vector de #yte sau string" -e asemenea avem !i func#ii care criptea+ sau decriptea+ mesa$ul trimisWrecep#ionat% prin versiunea 3end(3tring message0 #ool Encrypt). 5arametrul boolean preci+ea+ dac dorim ca datele s fie criptate sau nu ( n ca+ul din urm datele probabil au fost de$a criptate)" 7ste de remarcat c pn ce clientul nu este considerat conectat (este diferit de conectarea socRetului\) comunicarea care are loc ntre client !i server este sincron" Clientul este considerat conectat doar dup ce s4a autentificate cu un nume de utili+ator valid !i o parol corespun+toare" Aa server o referin# la obiectul D@%lient este introdus n lista clien#ilor% care va fi !tears n momentul deconectrii" -oar clien#ii care apar n lista de clien#i a serverului sunt considera#i conecta#i" ?om pre+enta mai n detaliu clasa care este inima programului% anume D@3er=er.
BHClient
4namespace8BHClasses5
9 9 9 9 9 9 9 9 ; ; ; ; ; ; ; ; ; ; ; ; 9 ; ; ; ; ; ; ; ; 9 ; ; ; ; ;
clientSoc7et : Soc7et remote p%ddress : string remotePort : int receive1hread : 1hread cr"pter : BHCr"pter timeout : int 8 >??? On(eceive : On(eceive#elegate On#isconnect : On#isconnect#elegate On(eceive#elegate,msg : $"te<=- : delegate void On#isconnect#elegate,- : delegate void BHClient,on(eceive : On(eceive#elegate, on#isconnect : On#isconnect#elegateBHClient,soc7 : Soc7et, on(eceive : On(eceive#elegate, on#isconnect : On#isconnect#elegateBHClient,soc7 : Soc7etnitCr"pter,session3e" : $"te<=, init0ector : string- : void CreateCr"pter,init0ector : string- : void Connect,(emote P : string, (emotePort : int- : void *or7Soc7et,- : Soc7et 4accessor5 (eceive,decr"pt : $ool- : $"te<= (eceive,- : $"te<= Start(eceive,- : void (eceiveCall$ac7,ar : %s"nc(esult- : void SendDsinc,message : String, encr"pt : $ool- : void SendDsinc,message : String- : void SendDsinc,message : $"te<=, encr"pt : $ool- : void SendDsinc,message : $"te<=- : void Send,message : String, encr"pt : $ool- : void Send,message : String- : void Send,message : $"te<=, encr"pt : $ool- : void Send,message : $"te<=- : void SendCall$ac7,ar : %s"nc(esult- : void #isconnect,- : void nitiate#isconnect,- : void getPeer P,- : string get/ocalPort,- : string Connected,- : $ool 4accessor5
:9
Bartha Hunor Sistem criptografic de tip secure chat 5oate fi considerat cea mai important clas din acest program deoarece prin cadrul acestei clase este reali+at acceptarea ncercrilor de conectarea a clien#ilor% transmiterea datelor ntre clien#i !i ctre clien#i% gestionarea listelor cu clien#ii conecta#i% gestionarea firelor de e/ecu#ie asociate cu fiecare client" 1ceast clas ofer o implementare a socRetului% oferind suport pentru clien#i multipli !i suport pentru multi7threading" 2nterfa#a clasei este pre+entat n figura :"1">" BHServer 2nterfa#a clasei este foarte 4namespace8BHClasses5 simpl% ma$oritatea opera#iilor fiind ; !%ED+S&()%!&D/&)21H : int 8 12F client/ist : Hashta$le re+olvate intern% cu func#ii private ; 9 m"#ataBase : BH#ata$ase!anager : BHCr"pter care nu trebuie s fie vi+ibile% 99 m"Cr"pter cr"ptoProtocol : BHProtocol 9 c$On%ccept accesibile clasei care declar 9 on#isconnect: :%ccept#elegate #isconnect#elegate instan#e de obiecte de tipul 9 on nput : nput#elegate 9 online : $ool 8 false D@3er=er" Cele mai importante 9 port : int 9 serverSoc7et : Soc7et func#ii sunt cele de oprire respectiv 9 accept#one : !anual(eset&vent : 1hread pornirea serverului" 1ceste func#ii 9; Chec7Clients1hread %ccept#elegate,ht : Hashta$le- : delegate void #isconnect#elegate,user)ame : String- : delegate void sunt8 3top3er=er respectiv 3tart7 ; ; nput#elegate,remote+ser # : String, msg : $"te<=- : delegate void 3er=er" 5rimul desfiin#ea+ thread4 ; BHServer,function : %ccept#elegate, on!sg : nput#elegate, on#isc : #isconnect#elegate; Port,- : int 4accessor5 ul de ascultare a conectrilor pe ; StartServer,/isteningPort : int- : $ool StopServer,- : void portul specificat (>ccepting$hread)% ; 9 Chec7Clients,- : void : void nchide socRetul ser=er3ocket% iar al 99 %ccept,On%ccept,result : %s"nc(esult- : void : BHClient- : +ser#ata doilea e/act invers% porne!te 99 get+ser#ata,client d$g,str : string- : void 9 d$g,data : $"te<=: void threadul de ascultare% ini#iali+ea+ 9 add.riends1o#B,src+ser : string, msg : string- : void 9 send.riend/ist,destination+ser # : String- : void socRetul" 9 user sOnline,username : string- : $ool 5entru reali+area de trimitere 9 handle!essage,source+ser)ame : String, destination+ser)ame : String, msg : String- : void nput,src+ser # : String, msg : $"te<=- : void efectiv a datelor pe re#ea se 99 handle handle#isconnect, # : String- : void # : String- : void folose!te tehnica delegrii% aceste 99 initiate#isconnect, displa"&rror,e : &:ception- : void func#ii fiind ndeplinite de variabila 2igura 2.1.".%lasa ser=er3ocket de tip 3ocket" D@3er=er 1vem trei func#ii delegate% membre ale clasei care folose!te D@3er=er. 3unc#iile delegate pot avea orice implementare singura condi#ie este s aib acelea!i parametrii de intrare !i tipul returnat s fie de tipul specificat" 1vem o func#ie delegat pentru ca+ul n care se deconectea+ un client% pentru a trimite un mesa$ c s4a recep#ionat ceva !i pentru a semnali+a c s4a acceptat o cone/iune" Cum clasa Main2rame are un parametru de tipul D@3er=er aceste func#ii delegate sunt importante pentru re mprosptarea elementelor grafice de interfa# cu utili+atorul" -e fapt putem spune c func#iile delegate pot fi folosite ca !i mesa$ele din ?isual CYY" 1cceptarea clien#ilor se face pe un thread separat% pentru a preveni blocarea interfe#ei cu utili+atorul" 1ceast clas folose!te e/tensiv clasele pre+entate mai sus% pentru comunicare !i criptarea datelor" BHServer are o list de tipul Hash;able care con#ine referin#e la obiecte de tip %lient care sunt versiuni subtil modificate a clasei D@%lient fiind mai pu#in abstracti+at% avnd un cmp au/iliar care con#ine numele de utili+ator" <ela#ia dintre clasele pre+entate pn acum8
Soc7et 666 666 BHCr"pter 666 666 BHClient Soc7et: clientSoc7et BHCr"pter: m"Cr"pter 666 On(eceive#elegate On#isconnect#elegate 666 Client BHClient: cr"ptoClient String: user)ame 666 BHServer Hash1a$le: client/ist 666 666 client/ist contine referinte la o$iecte de tip Client
:D
Bartha Hunor Sistem criptografic de tip secure chat Clasa implementea+ protocolul de comunica#ie ntre clien#i !i server" S4a ncercat reali+area unei clase u!or e/tensibile% fr ca adugarea noilor func#ionalit#i s afecte+e clasele care se folosesc de$a de cele e/istente" 1cest lucru este foarte important deoarece un protocol de comunica#ie evoluea+ cu timpul mereu apar noi nevoi% fiind nevoie de introducerea mesa$elor noi" Clasa permite introducere de mesa$e noi fr s fie nevoie de orice fel de modificare n clasele care folosesc D@4rotocol. 1ceast fle/ibilitate este oferit de folosirea func#iilor delegate" 2deea este ca s se apele+e o func#ie delegat pentru fiecare tip de mesa$ (bine n#eles dac este definit func#ia delegat respectiv)" -ac func#ia delegat care trebuie apelat la recep#ionarea unui tip de mesa$ nu este definit (adic referin#a la func#ie are valoarea null) nu se ntmpl nimic% este ca !i cum n4ar fi recunoscut mesa$ul respectiv" *n momentul actual protocolul are un set redus de tipuri de mesa$e% dar noi tipuri de mesa$e pot fi adugate cu u!urin#" 5achetele care se trimit n cadrul aplica#iei au un antet de @ octe#i care specific ce tip de mesa$ se trimite ;ipurile de mesa$e care sunt implementate de protocol sunt8 o F)4S8 cerereWrecep#ie lista de prieteni o DISC8 deconectare o 0ES88 mesa$ te/t o ADDF8 adugare prieten o INF98 cerereWrecep#ie informa#ii suplimentare despre client 3le/ibilitatea oferit de func#iile delegate ne ofer posibilitatea de implementare diferit a func#iilor care vor fi apelate la recep#ionarea antetelor diferite" 3r modificarea clasei D@4rotocol se poate reali+a interpretarea diferit a mesa$elor la client !i la server" -e e/emplu dac clientul prime!te un pachet cu antetul 3<AS se apelea+ o func#ie care interpretea+ datele din mesa$ !i re mprosptea+ interfa#a grafic a listei cu prietenii a clientului respectiv" *n schimb dac serverul prime!te pachetul cu antetul de mai sus atunci nu poate fi vorba de altceva dect de o cerere de lista de prieteni% astfel se apelea+ o func#ie care cite!te din ba+a de date lista respectiv !i trimite aceast list la clientul de la care a sosit cererea" -iagrama clasei este pre+entat n figura :"1"@"
BHProtocol
4namespace8BHClasses5
; ; ; ; ; ; ; ; ; ; ; ; ;
On.riend/ist : On.riend/ist#elegate On#isconnect : On#isconnect#elegate On!essage : On!essage#elegate On%dd.riend : On%dd.riend#elegate source+ser # : String BHProtocol,On.riend/ist#elegate,msg : String- : delegate void On#isconnect#elegate,user # : String- : delegate void On!essage#elegate,source+ser # : String, destination+ser # : String, msg : String- : delegate void On%dd.riend#elegate,user # : string, msg : String- : delegate void Process nput,input : String- : void Process nput,src+ser)ame : String, input : String- : void ProcessOutput,destination+ser # : String, msg : String- : string
2igura 2.1.' Diagrama ?MC a clasei D@4rotocol Se poate observa c avem func#iile delegate% care vor fi apelate n func#ie de antetul mesa$ului% mai departe% e/ist dou func#ii 4rocessKnput !i 4rocessNutput. 5rima u!urea+ pregtirea pachetelor nainte de a fi trimise prin adugarea antetelor corespun+toare !i a in forma#iilor suplimentare care pot fi necesare anumitelor tipuri de pachete" 1l doilea inspectnd antetul decide ce func#ie trebuie apelat" 5seudocodul func#iei 4rocessKnput este pre+entat in cele ce urmea+8
:C
1 E
5entru a comunica la ba+a de date se folose!te NDD% ..E$ data pro=ider% iar driverul pentru ba+a de date este 6y,dbc" Clasa BH-atabase6anager ne ofer func#ii pentru a reali+a orice tip de opera#ie necesar% pe tabelul nostru din ba+a de date" 3unc#iile clasei se pot vedea n diagrama clasei pe figura :"1"@"
:(
9 m"Connection : Od$cConnection ; ; ; ; ; ; ; ; ; 9 9 BH#ata$ase!anager,Open,- : void Close,- : void 2et+ser#ata,- : #ataSet %dd+ser1o#B,values : o$ject<=- : $ool %dd.riends1o#B,user # : string, msg : string- : $ool is0alidPass*ord,username : string, p*dHash : $"te<=- : $ool is)e*+ser,username : string- : $ool get.rien/ist.rom#B,username : string- : string compareB"te%rra"s,ar1 : $"te<=, ar2 : $"te<=- : $ool chec7(esultSet,strCommand : string- : $ool
2igura 2.1.' Diagrama ?MC a clasei D@Data#aseManager 3unc#ia >dd?ser$oD# are ca parametru de intrare un vector de obiecte% care repre+int de fapt valorile coloanelor anterior pre+entate" 3unc#ia adaug un rnd la ba+a de date% cu datele noului utili+ator" 1ceast func#ie este folosit cnd se nregistrea+ un utili+ator nou% pentru crearea contului" 6ai avem func#ii pentru verificarea parolei pentru un nume de utili+ator specificat (isAalid4assQord)% sau pentru verificarea dac un nume de utili+ator este de$a pre+ent n ba+a de date (is.eQ?ser)" Ca !i e/emplu pentru e/ecutarea unei cutri vom pre+enta implementarea func#iei isAalid4assQord"
public bool is?alid5ass'ord(string username% byte&) p'dHash)[ if(usernameKK]ne'0ser]) return trueO bool ret?alueO string N0sername K ]^]]YusernameY]^]]O string strCommand K ]S7A7C; pass'ord 3<,6 userdata IH7<7 username K ]Y N0sernameY ]O]O ,dbc-ata<eader my<eader K nullO try[ ,dbcCommand myCommand K ne' ,dbcCommand(strCommand% myConnection)O my<eader K myCommand"7/ecute<eader()O my<eader"<ead()O byte&) stored5'dHash K (byte&))my<eader"Vet?alue(=)O WWif it_s empty an e/ception is WWthro'n ret?alue K compareByte1rrays(stored5'dHash% p'dHash)O return ret?alueO ` catch(2nvalid,peration7/ception)[ WWthe recordset returned is empty ret?alue K falseO ` catch(7/ception e)[ Console"IriteAine(e"6essage)O ret?alue K falseO ` finally[ if(my<eader\Knull aa \my<eader"2sClosed) my<eader"Close()O ` return ret?alueO `
Se poate observa c se face o cutare folosind comen+ile 6ySZA a cror descriere poate fi gsit n manualul de referin# a programului &mysNl)" ;oate celelalte func#ii pentru e/tragerea sau adugarea datelor n ba+a de date au o structur similar" >=
9 9 9 9 9 9 9 9 9 9 9 9 9
username : string 8 null pass*ord : $"te<= 8 null first)ame : string 8 null last)ame : string 8 null street : string 8 null state : string 8 null countr" : string 8 null telephone : string 8 null email : string 8 null *** : string 8 null dataShare : int 8 ? friend/ist : string 8 null photo : $"te<= 8 null
%lasa implementea5 interfa/a K?serData0 care for/ea5 declararea c;mpurilor necesare. MaLoritatea elementelor clasei sunt c;mpuri care con/in datele personale ale utili5atorului. 3ingurele func/ii sunt constructorul Bi o func/ie suplimentar getAalues0 pentru extragerea datelor din c;mpurile clasei Bi preg tite 1ntr7o form adec=at pentru a le ad uga la #a5a de date.
>1
G G G G G G G G G G G G G 9 9 9 9 9 9 9 9 ; ; ; ; ; ; ; ;
1 1/& : String 8 HPf:OpenH C(IP1D&EPO(1%B/& : uint 8 ?:???????1 C(IP1D+S&(DP(O1&C1&# : uint 8 ?:???????2 C(IP1D!%CH )&D3&IS&1 : uint 8 ?:??????2? C(IP1D+S&(D3&IS&1 : uint 8 ?:????1??? C&(1D3&IDP(O0D ).ODP(OPD # : uint 8 ?:???????2 E>?@D%S)D&)CO# )2 : uint 8 ?:???????1 P3CSDJD%S)D&)CO# )2 : uint 8 ?:???1???? (S%DCSPDP+B/ C3&IB/OB : uint 8 1@ &)CO# )2D1IP& : uint 8 P3CSDJD%S)D&)CO# )2 K E>?@D%S)D&)CO# )2 ver$ose : $ool 8 false CSP1"pes : String<= 8 666 7e"specs : String<= 8 4null, H%1D3&I&ECH%)2&H, H%1DS 2)%1+(&H5 pf:cert : E>?@Certificate pf:container : String pf:provname : String pf:provt"pe : uint pf:7e"spec : uint pf:cert7e"size : uint pf:cert7e"e:ponent : $"te<= pf:cert7e"modulus : $"te<= pf:cert7e"e:ponent : $"te<= 7e"e:ponent4 get4 return container,- : String 4accessor5 /oadPf:,pf:filename : String, ps*d : ref String- : $ool provider,- : String 4accessor5 providert"pe,- : uint 4accessor5 7e"spec,- : uint 4accessor5 cert,- : E>?@Certificate 4accessor5 7e"size,- : uint 4accessor5
2igura 2.1.) Diagrama ?MC a clasei 4fxNpen -up e/ecutarea cu succes a func#iei Coad4fx se ini#iali+ea+ variabilele8 pfxpro=name0 pfxpro=type0 pfxkeyspec0 pfxcontainer0 care for con#ine informa#iile necesare pentru ini#iali+area variabilelor care reali+ea+ criptarea cu cheile asimetrice" Clasa 4fxNpen este folosit n clasa D@%rypter pentru ini#iali+area parametrului my&3> de tip &3>%rypto3er=ice4ro=ider.
>:
Bartha Hunor Sistem criptografic de tip secure chat probabil ca n viitorul apropiat s fie folosit pentru o repre+entare universal a datelor putnd fi interpretate de orice aplica#ie"
ApplicationSettings
<from #esign0ie* = 4namespace8Cr"ptoClient5
9 9 9 9 9 9 9 9 9 9 9 9 9 9 9 ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;
file)ame : string 8 HCr"pto!essenger6configH appSettingsChanged : $ool form/ocation : Point formSize : Size minimize1o1ra" : $ool autoConnect : $ool default+ser : string default+serP*d : string serverCertificatePath : string personalCertificatePath : string private3e"Path : string server P : string serverPort : int session3e"Size : int s"mmetric%lgor"thm : string %pplicationSettings,.orm/ocation,- : Point 4accessor5 .ormSize,- : Size 4accessor5 !imimize1o1ra",- : $ool 4accessor5 %utoConnect,- : $ool 4accessor5 #efault+ser,- : string 4accessor5 #efault+serP*d,- : string 4accessor5 ServerCertificatePath,- : string 4accessor5 PersonalCertificatePath,- : string 4accessor5 Private3e"Path,- : string 4accessor5 Server P,- : string 4accessor5 ServerPort,- : int 4accessor5 Session3e"Size,- : int 4accessor5 S"mmetric%lgor"thm,- : string 4accessor5 Save%ppSettings,- : $ool /oad%ppSettings,- : $ool
5arametrul boolean privat app3ettings7 %hanged ne arat dac este nevoie s salvm datele sau nu" 3unc#ionarea unei func#ii de accesare (accesor method)8
Aplicatie : ApplicationSettings :
appSettingsChanged 8 true Save%ppSettings 0erificare appSettingsChangedL #atele sunt salvate din nou numai dacM au fost schim$ate
1stfel fi!ierul de configurare este salvat numai dac chiar s4au schimbat parametrii" 3unc#ia de salvare a parametrilor este apelat n momentul nchiderii ferestrei de setare a preferin#elor% cu >ccept% !i cnd se iese din aplica#ie" 2igura 2.2.1 Diagrama clasei *ncrcarea parametrilor salvate este fcut >pplication3ettings n momentul lansrii programului" -iagrama 06A a celor mai importante clase este pre+entat n figura :"1"1"
2igura 2.1.1 Diagrama ?MC de asocia/ie pentru clasele D@3er=er0 D@%lient Bi %lient
>@
e#perimentale
>B
>9
Bartha Hunor Sistem criptografic de tip secure chat 7. :. $i%liografie ;. @$oA==B C Bo'den% C"% a 1Rdeni+% b"% PCryptography and -emocracy8 -ilemmas of 3reedom%H in Aiberty eds"% Ci#erating %y#erspace: %i=il Ci#erties0 @uman &ights0 and the Knternet% Aondon8 5luto 5ress% 1(((% C141:B" @Sc!n=7B C Bruce Schneier" X>pplied cryptography0 3econd editionP Mohn Iiley a Sons% 2nc% 1((9 @)SA>>B D <S1 Aaboratories% X<S1 AaboratoriesX 3reNuently 1sRed Zuestions 1bout ;odayXs Cryptography% ?ersion @"1P <S1 Security 2nc" :=== @)SA==B D <S1 Aaboratories% G5LCS 1: v1"=8 5ersonal 2nformation 7/change Synta/H <S1 Security 2nc" 1((( @AAA>>B D <i$ndael 7ncryption http:YYQQQ.tropsoft.comYs trongencYriLndael.htm @AAA>1B <i$ndael 5age http8WW'''"esat"Ruleuven"ac"beWcri$menWri$ndaelW @AAA>2B 5agina 1SE"1 http8WWasn1"elibel"tm"frWenW @rfc2*3=B Housley et" al" G2nternet F"B=( 5ublic Ley 2nfrastructureH 27;3% 5LF IorRung Vroup 1((( @Tan>(B D 1ndre' S" ;anenbaum% GComputer Eet'orRs% 3ourth 7dition P 5entice Hall :==> @msdnmB D Moshua ;rupin GSharp Ee' Aanguage8 CS ,ffers the 5o'er of CYY and Simplicity of ?isual BasicH 6S-E 6aga+ine% September :=== @msdn>*B D 6ichel 2" Vallant G5LCS S1: 3ile ;ypes8 5ortable 5rotected Leys in "E7;H 6S-E article% :==@ 1dresa 'eb8 http8WW'''"microsoft"comWindonesiaWmsdnWpRcs1:"asp @m/sElB C 6ichael Iidenius% -avid 1/marR F6ySZA <eference 6anualH ,_<eilly a 1ssociates% 2ncorporated% :==:
>D
de a%re,ieri
17S (1dvanced 7ncryption Standard) ES1 (Eational Security 1gency) E2S; (Eational 2nstitute of Standards and ;echnology)
>C
>(