Sistem Pentru Implementarea Web a Interfețelor Utilizator Steganografice

=== l ===

Cuprins

9 Anexe

Introducere

Motivarea alegerii temei

De la apariția internetului, unul dintre cei mai importante aspecte ale tehnologiei informației și a comunicațiilor îl reprezintă securitatea datelor. Aceasta nu este doar o problema contemporană ci una foarte veche. De-a lungul timpului persoanele de rang înalt și instituțiile doreau să își păstreze informațiile într-un mod cât mai sigur. Două dintre cele mai utilizate tehnici care sporesc gradul de securitate al informațiilor sunt criptografia și steganografia.

Site-urile de socializare online au devenit astazi repere importante pentru tinerii din toată lumea. Mulți utilizatori au ales această metodă de comunicare deoarece platformele folosite de ei au implementat o multitudine de caracteristici tehnologice.

Aplicația pe care am dezvoltat-o este compusă din două componente: un plugin pentru IE si un site de socializare demostrativ.

Steganografia

Dorința de a trimite un mesaj în condiții de siguranță cât mai ridicată a fost un punct de

interes încă din cele mai vechi timpuri. Informația reprezintă bogăția oricărei organizații. Acest lucru face ca problemele de securitate să devină prioritate pentru organizații care se ocupă cu date confidențiale. Oricare ar fi metoda pe care o alegem în scopul securității, principala preocupare o reprezintă gradul acelei securități. Steganografia reprezintă o artă de ascundere a informației.

Steganografia este adesea confundată cu criptologia deoarece ambele sunt utilizate în scopul potejării informațiilor importante. Diferența dintre cele doua este că steganografia implică ascunderea unor informații care par a nu fi ascunse. Dacă o persoana sau mai multe persoane privesc un obiect în interiorul căruia sunt ascunse informații, aceștia nu vor avea nici o idee ca există ceva ascuns, prin urmare ei nu vor încerca să decripteze informația. În zilele noastre steganografia se referă la informații sau la fișiere care sunt ascunse în imagini sau în alte fișiere precum cele audio sau cele video. În esență steganografia exploatează percepția umană; simțurile nu sunt instruite pentru a căuta fișiere care au informații ascunse în interiorul lor.

În general, în steganografie, informațiile actuale nu sunt menținute în formatul lor original și prin urmare acestea sunt convertite în fișiere multimedia precum imagini, video sau audio care la rândul lor sunt ascunse în alte obiecte. Acest mesaj aparent(cunoscut sub denumirea de text ascuns în termenii uzuali) este trimis prin intermediul rețelei la destinatar.

Steganografia provine din cuvintele grecești ”steganós”(ascuns) and ”graptos” (scriere). Originea acestei tehnici este biologica și fiziologică. Termenul de „steganografie” a intrat în uz în jurul anilor 1500 dupa apariția cărții ”Steganografia” scrisă de către Johannes Trithemius. O scurtă prezentare a acestui domeniu se poate diviza în trei părți: trecut, prezent și viitor.

În tehnică cuvântul ”steganografie” reprezintă ”scriere ascunsă”. Originile sale antice pot fi identificate încă de prin anii 440 î.Hr.. Deși termenul de steganografie a fost inventat la sfârșitul secolului al 15-lea, acesta însă datează de mai multe milenii. În antichitate mesajele au fost ascunse pe partea din spate a tablelor de scris din ceara, scrise pe stomacurile iepurilor sau tatuate pe scalpul sclavilor. Cerneala invizibilă a fost utilizată timp de secole, pentru a se distra de către copii și studenți și pentru spionaj grav de către teroriști și spioni.

Criptografia a fost foarte utilizată în Evul Mediu. Scrierea ascunsă a fost folosită atât de Biserica Catolică în diversele sale lupte de-a lungul anilor, cât și de către majoritatea guvernelor din acele timpuri. Steganografia a fost utilizată în mod normal împreună cu criptografia pentru a ascunde informații secrete suplimentare.

Majoritatea sistemelor steganografice de astăzi folosesc obiecte multimedia cum ar fi imagini, video, audio deoarece oamenii obișnuiesc să transmită imagini prin intermediul email-ului sau prin alte metode de comunicare pe internet. Într-o abordare mai modernă, în funcție de tipul obiectelor ascunse, steganografia se poate împărți in cinci categorii:

Steganografia în texte

Steganografia în imagini

Steganografia în fișiere video

Steganografia în fișiere audio

Steganografia în protocoale

Deci, în epoca modernă multe tehnici steganografice au fost proiectate să funcționeze

cu toate tipurile de obiecte specificate mai sus. Cel mai adesea în dezvoltarea securității din zielele noastre, folosim o combinație de criptografie și steganografie care ne permite să păstrăm datele confindențiale. Diverse instrumente software sunt de asemenea disponibile în acest scop.

În zilele noastre noastre întâlnim un termen des auzit, și anume ”hacking”(piraterie). Acest termen nu este altceva decât un acces neautorizat a datelor care pot fi colectate în timpul trasmisterii acestora. În ceea ce privește steganografia, această problema este cunoscută sub numele de steganaliză. Steganaliza este un proces în care o persoană analizează obiectul pentru a obține datele ascunse. Deci, oricare ar fi tehnica ce va fi dezvoltată în viitor, gradul de securitate trebuie avut în vedere tot timpul. Să sperăm că steganografia împreună cu criptografia poate fi una dintre soluțiile de viitor pentru problema menționată mai sus.

Criptografia

Termenul de criptografie, de origine grecească, desemnează ramura matematicii ce are în vedere securizarea informației precum și cu autentificarea și restricționarea accesului într-un sistem informatic. În realizarea acestora se utilizează atât metode matematice cât și metode de criptare cuantică. În limba greacă el este compus din ”kryptós” (ascuns) și ”gráfein” (a scrie).

Semnificația actuală a termenului criptografie este diferită fața de cea din trecut. Acesta desemna în mod exclusiv criptarea, procesul de conversie a informației obișnuite într-un text text cifrat. Procesul invers al criptării este cel prin care se realizează conversia de la textul cifrat la textul clar. Un cifru este o pereche de algoritmi care efectuează atât această criptare cât și decriptarea. Controlul modului de operare al unui cifru se face printr-un algoritm și o cheie. Cheia este cunoscută doar celor care comunică, fiind un parametru secret în cadrul unui schimb de mesaje. Importanța cheilor variabile este esențială întrucât, în lipsa acestora, cifrurile sunt simplu de spart. Pe parcursul istoriei cifrurile erau utilizate atât pentru criptare cât și pentru decriptare, lăsând la o parte procedurile adiționale.

În trecut, criptografia se ocupa doar cu asigurarea confidențilității mesajelor, adică criptare – proces prin care mesajele sunt converite dintr-o formă inteligibilă într-una non-inteligibilă și invers astfel încât mesajul să fie imposibil de înțeles de către cei care ar putea să-l intercepteze și nu dispun de informații secrete adiționale cum ar fi spre exemplu cheia pentru decriptarea mesajului. În ultimii ani, pe lângă problemele de confidențialitate , în domeniul criptografiei s-au dezvoltat tehnici de verificare a integrității mesajului, semnătură electronică, autentificare a trimițătorului si receptorului, calcule securizate.

Cu câteva secole în urmă, în cadrul scrierii secretizate era nevoie doar de puțin mai mult decât hârtie și un creion deoarece puțini oameni stiau să citească. Creșterea complexității criptografiei a fost datorată creșterii alfabetizării. Tipurile clasice de cifruri se împart în două categorii: cifrurile cu transpoziție care schimbă poziția literelor dintr-un mesaj și cifrurile cu substituție care înlocuiesc sistematic literele sau grupurile de litere cu alte litere, respectiv grupuri de litere.

Scopul criptării este de a asigura secretul comunicațiilor cum sunt cele între lideri militari si diplomați, între spioni dar a avut și aplicații religioase. Un exemplu, erau vechii creștini care foloseau criptografia în scopul ascunderii unor aspecte ale scrierilor lor religioase și astfel reușeau să evite persecuțiile; numărul 666 sau, în unele manuscrise mai vechi, 616, numărul fiarei din Apocalipsă, uneori facea referință la împăratul Nero, care era cunoscut pentru persecuția creștinilor. Criptografia este recomandată și în Kama Sutra ca metodă de comunicare pentru îndrăgostiți astfel încât aceștia sa nu poată fi descoperiți.

Cifrurile clasice și cele moderne produc texte cifrate care pot furniza informații statistice despre textul clar, care apoi pot fi ultilizate pentru spargerea acestora. În jurul secolului al IX-lea înțeleptul arab, al-Kindi, a descoperit analiza frecvenței și multe dintre aceste cifruri au devenit relativ ușor de spart de către un atacator bine informat. Majoritatea acestor cifruri erau vulnerabile până la apariția cifrurilor polialfabetice, de către Leon Battista Albertini în jurului anului 1467. Această noutate reprezenta folosirea cifrurilor diferite pe părțile diferite ale mesajului. În ceea ce privește cifrul polialfabetic Vigenère, criptarea folosește un cuvânt cheie în vederea controlului substituției în funcție de litera utilizată a cuvântului cheie. La jumătatea secolului al XIX-lea, Charles Babbage a demostrat că acest tip de cifruri polialfabetice rămân însă vulnerabile în cadrul tehnicilor de analiză a frecvenței.

Mașina Enigma, care realiza un cifru polialfabetic electro-mecanic complex securizarea comunicațiilor sensibile, a fost utilizată de aramata germană în perioada interbelică. Un factor ce a decis victoria Aliaților a fost spargerea codurilor mașinii Enigma de către Biuro Szyfrów, și apoi decriptarea traficului Enigma la Bletchley Park.

Criptarea a rămas eficientă în practică deși tehnica de analiză a frecvenței este puternică și generală; mulți dintre criptanaliștii amatori nu reușesc să stăpânească această tehnică. Pentru a sparge un mesaj fără a folosi această tehnică, este necesară cunoașterea cifrului folosit, ceea ce implică spionaj, mită sau dezertări. În secolul al XIX-lea, s-a constatat că orice schemă criptografică adecvată trebuie să rămână sigură, chiar dacă algoritmul de cifrare este cunoscut de adversar. Pentru ca un bun cifru sa-și poata păstra confidențialitatea în cazul unui atac, ar trebui sa fie suficient secretul cheii. În anul 1883, Auguste Kerckhoffs a enunțat acest principiu fundamental, care apoi a fost reformulat mai concis de Claude Shanoon sub numele de Maxima lui Shannon – ” Inamicul cunoaște sistemul”.

Pentru facilitarea lucrului cu cifrurile s-au utilizat diverse dispozitive fizice. O primă modalitate a fost scytalul din Grecia antică, un sul folosit de spartani pentru a-i ajuta la criptarea și decriptarea prin intermediul unui cifru cu transpoziție. O altă uneltă care a fost inventată în epoca medievală este grila de cifru, folosită însă și pentru un tip de steganografie. Datorită inventării cifrurilor polialfabetice, au apărut si alte unele mai sofisticate, printre care amintim discul lui Alberti, schema cu tabula recta a lui Johannes Trithemius, și multicilindrul lui Thomas Jefferson. Începutul secolului al XX-lea marchează invenția aparatelor mecanice de criptare/decriptare, printre care pot fi menționate mașinile rotitoare, cea mai cunoscută fiind mașina Enigma folosită în al doilea război mondial de către Germania. Alte mașini similare, dar îmbunătățite au determinat o creștere importantă a gradului de dificultate al criptanalizei după al doilea război mondial.

Cifrurile au devenit din ce în ce mai complexe odată cu dezvoltarea electronicii și a calculatorelor numerice. Avantajul semnificativ al calculatoarelor consta în faptul ca acestea permiteau criptarea oricărui tip de date în format binar, în comparație cu cifrurile clasice care puteau cripta doar texte în limbaj scris. Venind în întâmpinarea creșterii complexității cifrurilor, calculatoarele i-au ajutat pe criptanaliști, dar chiar și în aceste condiții, cifrurile moderne bune au reușit să rămână cu un pas înaintea criptanalizei.

În domeniul criptografiei, cercetările academice au debutat în anii 1970 cu specificațiile publice ale DES (Data Encryption Standard) la NBS, lucrarea Diffie-Hellman, și publicarea algoritmului RSA. După aceste cercetări, criptografia a devenit o unealtă folosită în comunicații, rețele de calculatoare, și în general în securitatea informatică. Gradul actual de securitate al majorității tehnicilor criptografice moderne are la bază dificultatea unor anumite probleme computaționale, cum ar fi problema factorizării întregilor sau a calculului logaritmilor discreți. Sunt demonstrații matematice care indică faptul că unele tehnici criptografice sunt sigure în cazul în care o problemă computațională nu își găsește rezolvarea eficientă.

Cei care intențonează să implementeze sisteme și algoritmi criptografici, trebuie să ia în considerație și posibile dezvoltări ulterioare, pe lângă cunoașterea istoriei criptografiei. Odata cu dezvoltarea puterii de calcul a calculatoarelor a crescut gradul de acoperire în cazul atacurilor cu forță brută la specificarea lungimii cheilor.

Până în anii 1900 criptografia s-a ocupat de șabloanele lingvistice, însă de atunci, centrul de interes a devenit folosirea extensivă a matematicii, chiar și a aspectelor legate de statistică, complexitatea algoritmilor, algebra abstractă, combinatorica și teoria numerelor. Criptografia este și o ramura a ingineriei, dar una neobișnuită, întrucât se ocupă de opoziția activă, inteligentă și răuvoitoare.

Tehnologii utilizate

Platforma .NET

Platforma .NET este o platformă software care poate fi instalată pe computerele care rulează sisteme de operare Microsoft Windows. Exită și o versiune pentru dispozitive mobile (.NET Compact Framework) precum și o portare pentru sistemele de operare Linux (MonoProject).

Cadrul de lucru .NET (.NET Framework) este compus din două mari componente: mașina virtuală – CLR (Common Language Runtime) și o biblioteca de clase FCL(Framework Class Library). Mașina virtuală asigură un “strat” operațional între aplicațiile .NET și sistemul de operare. Compilatoarele ce produc cod pentru platformă reprezintă acest cod într-o formă intermediară abstractă, independentă de limbajul de programare sursă folosit și independentă de sistemul de operare pe care codul va fi executat. Reprezentarea intermediară pusă la dispoziție asigură interoperabilitatea extinsă dintre limbaje. În biblioteca de clase întâlnim o gamă largă de clase dedicate interfeței cu utilizatorul, conectivității la baze de date, accesului la date, dezvoltărilor de aplicații web, comunicațiilor de rețea și algoritmilor numerici.

Această platformă dispune de un set de limbaje de programare (C#, Visual Basic .NET, J#, Managed C++, Smalltalk, Perl,Fortran, Cobol, Lisp, Pascal etc) și înglobează o serie de tehnologii (ASP, XML, OOP, SOAP,WDSL, UDDI).

În cadrul elaborării unei aplicații pe framework-ul .NET trebuie să avem în vedere 3 componente esențiale:

un set de medii de dezvoltare (Visual Studio .NET, Visio),

un set de limbaje (C#, Visual Basic .NET, J# etc),

o bibliotecă de clase pentru crearea aplicațiilor desktop Windows, aplicațiilor Web și serviciilor Web.

Un mare avantaj îl constituie interoperabilitatea extinsă între limbajele de programare care produc aplicații pentru platformă– interoperabilitate realizată nu doar la nivel de apel reciproc al funcțiilor ci la nivel de clase, un program scris într-un limbaj putând moșteni clase scrise în alt limbaj și compilate de un alt compilator.

Figura 2.1 Arhitectura .NET Framework

(Sursă: http://www.scribd.com/doc/55953630/Introducere-in-Net-Framework-Suport-de-curs-pentru-elevi )

Avantaje ale Framework-ului .NET

îi ajută pe profesioniștii IT să integreze mai bine sisteme deja existente prin suport nativ pentru serviciile web,

asistă implementarea aplicațiilor software la utilizatori si pe servere,

facilitează dezvoltarea de software prin îmbunatățiri ale scalabilității, performanței și securității,

îi ajută pe dezvoltatori să fie mai productivi astfel:

face reutilizarea codului mai ușoară,

integrează mai ușor componentele scrise în mai mult de 20 de limbaje de programare,

ajută la construirea mult mai ușoară a software-ului pentru o gamă largă de dispozitive folosind aceleași unelte.

Limbajul C#

”În ultimii ani, programarea a suferit o schimbare de paradigmă de la un peisaj dominant de sisteme izolate la un mediu on-line, în care sistemele sunt conectate în rețea. În epoca în care pentru foarte mulți ”rețeaua este calculatorul”, limbajele de programare, sistemele de operare și instrumentele de dezvoltare s-au străduit să țină pasul. Limbajul C# a fost inventat ca răspuns la necesitatea unui limbaj de programare modern, care să corespundă cerințelor lumii interconectate” [1].

Limbajul C# este un limbaj de programare simplu, modern, orientat pe obiecte, ce a fost inventat în anul 2000 de o echipă de la firma Microsoft condusă de Anders Hejlsberg.

C# reprezintă următorul pas în dezvoltarea limbajelor de programare. Limbajul a preluat cele mai bune rezultatele din trecut, înglobând și ultimele descoperiri din proiectarea limbajelor de programare moderne. Spre exemplu, C# a împrumutat facilități atât din C++, cât și din Java. Însă C# a adus și inovații proprii, cum ar fi indexările și delegările. Datorită faptului ca C# folosește arhitectura .NET, codul rezultat este portabil și permite programarea și în limbaj mixt. De exemplu, componentele software care sunt dezvoltate în C# sunt compatibile cu codul creat în alte limbaje de programare, atunci când acesta este destinat tot arhitecturii .NET.

Ideea centrală a limbajului C# este programarea orientată spre obiecte (POO). Metodologia orientată spre obiecte este inseparabilă de C#, toate programele C# fiind cel puțin într-o anumită măsură orientate spre obiecte. Datorită importanței deosebite în C#, este bine de înțeles principiile de bază ale POO înainte de a scrie chiar programe simple în C#.

POO reprezintă o modalitate puternică de abordare a activității de programare. Metodologiile de programare s-au schimbat dramatic de la apariția calculatoarelor, în primul rând pentru a ține pasul cu complexitatea din ce în ce mai mare a programelor.

Pentru a implementa principiile programării orientate spre obiecte, toate limbajele POO, inclusiv C#, au trei caracteristici comune: încapsularea, polimorfismul și moștenirea.

Într-o mare proporție, limbajul moștenește atât sintaxa cât și principiile de programare folosite în C++. Există o serie de tipuri noi de date sau funcțiuni diferite ale datelor din C++, iar în componența realizării unor secvențe de cod sigure (safe), unele funcțiuni au fost adăugate (de exemplu, interfețe și delegări), diversificate (tipul struct), modificate (tipul string) sau chiar eliminate (moștenirea multiplă și pointerii către funcții). Unele funcțiuni (cum ar fi accesul direct la memorie utilizând pointerii) au fost menținute, dar acele secvențele de cod sunt considerate ”nesigure”.

Limbajul C# beneficiază de serviciile CRL, printre care putem aminti: interoperabilitatea limbajelor, gestionarea memoriei și securitate ridicată.

Avantaje:

permite o dezvoltare cât mai rapidă a aplicațiilor,

acces la resursele specifice platformei,

funcționarea inter-platforme.

Alte caracteristici, care sunt comune atât pentru limbaj cât și pentru platformă sunt:

folosirea excepțiilor în cadrul semnalării și tratării erorilor,

managementul automat al memoriei – memoria se alocă explicit de către programator, dar dealocarea este realizată de către sistem când acesta consideră că este cazul,

suportul pentru versiuni ale codului – datorită cerințelor care se schimbă în timp și codul suferă modificări, și în .NET această problemă se tratează corespunzător.

ASP.NET

Figura 2.2 Logo ASP.NET

(Sursă: http://www.thekavanagh.com/images/microsoft.net.png )

ASP.NET este următoarea generație ASP (Active Server Pages), dar nu este o versiune îmbunătățită a ASP-ului. Este o tehnologie complet nouă pentru script-urile pe parte de server. ASP.NET este cea mai avansată platformă de dezvoltare existentă pe piață la momentul actual și a fost rescrisă de la zero în conformitate cu framework-ul .NET pe care rulează.

Această tehnologie oferă o infrastructură și un model de programare cu ajutorul cărora se pot dezvolta aplicații Web și servicii Web XML. Cele mai importante caracteristici ale platformei ASP.NET sunt următoarele:

aplicațiile ASP.NET sunt compilate. În cadrul ASP-ului clasic unul dintre dezavantajele principale în constituia faptul că pagina Web conținea scripturi ceea ce implica o interpretare a codului în primă fază și apoi execuția lui. Începând cu ASP.NET codul este compilat si apoi executat. O aplicatie ASP.NET este compilată în două faze:

prima fază în care codul C# (și altele) este compilat într-un assembly ce conține cod intermerdiar IL,

a doua fază în care compilarea este realizată de JIT chiar înaintea execuției propriu-zise a paginii și constă în transformarea codului IL în cod nativ optimizat pentru sistemul pe care se află serverul Web.

ASP.NET este multi-limbaj. Se poate alege orice limbaj CLI pentru a dezvolta o aplicație Web. Aceasta deoarece rezultatul compilării va fi cod IL adică un cod scris pentru .NET și poate rula în interiorul unui mediului protejat oferit de CLR.

o aplicație ASP.NET folosește mediul de execuție oferit de CLR, ceea ce implică:

management automat al memoriei,

type safety,

multithreading: o aplicație Web poate utiliza mai multe fire de execuție la un moment dat, pentru a executa operații asincrone sau pentru a efectua o operație în mod continuu pe întrega durată de viață a aplicație.

ASP.NET este orientat pe obiecte . Un exemplu sunt controalele ce pot fi create și modificate programatic astfel încât să răspundă la evenimente într-un anumit fel sau să aibă un anumit aspect.

o aplicație ASP.NET este atât ușor de instalat cât și de configurat. În majoritatea cazurilor, instalarea unei aplicații implică doar copierea fișierelor aplicației într-o cale de pe disc, cale care este configurată in IIS (Internet Information Services) ca director virtual.

suport pentru aplicații mobile. Se pot dezvolta aplicații care să ruleze pe sisteme de calcul mobile ca telefoanele mobile si PDA-urile (Personal Digital Assistants).

compatibilitate cu ASP clasic. ASP.NET folosește o nouă extensie pentru fișiere “aspx”, ceea ce va face ca ambele tipuri de aplicații să funcționeze pe același server.

securitate îmbunătățită.

Ajax

Reprezintă un grup de metode corelate, folosite pentru dezvoltarea web în partea de client, pentru a crea aplicații web interactive. Cu Ajax, aplicațiile web pot transmite date catre server și sa primească date de la acesta asincron fără a interfera cu ceea ce este afișat in pagina exitentă. Datele sunt primite te obicei folosind obiectul XMLHttpRequest.Chiar dacă numele obiectului este prefixat de XML, folosirea acestuia nu este necesară (JSON este adesea folosit în locul XML-ului) și nu e nevoie ca cererile să fie asincrone.

Ca și DHTML și LAMP, Ajax nu este o tehnologie ci un grup de tehnologii. Ajax folosește o combinație de HTML și CSS. DOM-ul (Document Object Model) este accesat cu JavaScript pentru o afișare dinamică și pentru a permite user-ului să interacționeze cu informația prezentată. JavaScript și obiectul XMLHttpRequest oferă o metodă pentru extragerea datelor vehiculate între browser și server în mod asincron pentru a evita rîncărcarea totală a paginilor.

Scurt istoric

În anii `90, majoritatea site-urilor se bazau complet pe pagini HTML; fiecare acțiune a utilizatorului presupunea ca pagina sa fie reîncrcată de pe server sau încarcată o nouă pagină. Acest proces este ineficient, așa cum se reflectă din experiență utilizatorilor: toate elementele paginilor dispar și apoi reapar dupa incărcare, etc. De fiecare dată o pagină este reincarcată după o schimbare parțială, tot conținutul paginii trebuie retransmis în locul a doar informație utile ( care cere o modificare). Aceste lucruri conduc la marirea numarului de sarcini pe care trebuie să le efectueze serverul și la ocuparea lațimii de bandă.

Încărcarea asincronă a conținutului unei pagini s-a putut realiza practic după întroducerea applet-urilor Java în prima versiune a limbajului Java în 1995. Acestea au permis codului compilat de către client să primească date de la server în mod asincron după încarcarea unei pagini web. Ulterior folosirea acestei tehnologii s-a dovedit foarte folositoare si salvatoare de timp și resurse, fiind dezvoltată și perfecționată continuu.

Tehnologiile

Termenul de Ajax a ajuns să fie cunoscut ca un spectru larg de tehnologii web care pot fi folosite pentru a implementa aplicații web care comunică cu un server în background, fără a înterfera cu statusul curent al paginii. Se spune că Ajax incorporează următoarele tehnologii:

HTML sau XHTML și CSS pentru prezentare

Document Object Model (DOM) pentru afișarea dinamică și interacținuile cu datele

XML pentru schimbul de date, și XSLT pentru manipularea acestora

Obiectul XMLHttpRequest pentru comunicarea asincronă

JavaScript pentru unirea acestor tehnologii

După cum s-a dovedit ulterior JavaScript nu este singurul limbaj pe partea de client care este folosit pentru implementarea aplicațiilor Ajax. Alte limbaj cum ar fi VBScript sunt de asemenea capabile să efectueze sarcinile necesare relizării functionalității în utilizarea Ajax-ului.

Dezavantaje:

Orice utilizator al carui browser nu suporta JavaScript sau XMLHttpRequest sau aceste funcționalități sunt dezactivate, nu vor putea folosi paginile care depinde de Ajax.

Stilul de programare asincron callback necesitat poate conduce catre cod complex care este greu de mentiunt și depanat.

Platforma SpicIE (Simple Plug-In Creator for Internet Explorer)

Figura 2.3 Logo Framework SpicIE

(Sursă: http://archive.msdn.microsoft.com/SpicIE )

Internet Explorer dispune de interfețe COM pentru a extinde funcționalitățile de bază ale browser-ului. SpicIE este un framework pentru dezvoltarea extensiilor gestionate de browser-ul IE.

SpicIE este conceput pentru simplitate. Crearea inițială a unui simplu plug-in pentru IE cu ajutorul acestei platforme, dureaza doar câteva minute pâna se obține cod pentru depanat la care se pot adăuga propriile funcționalități. Există multe aplicații în cadrul cărora plug-in-urile browser-elor pot fi utile. SpicIE permite dezvoltarea funcționalității browser-ului propriu cu eforturi tehnice minime.

Cu SpicIE se pot dezvolta următoarele controale:

evenimente ale browser-ului IE,

butoane pentru bara de instrumente,

meniuri de intrare,

meniuri contextuale de intrare,

bara de explorare,

bara de instrumente.

Figura 2.4 Arhitectura SpicIE

(Sursă: http://archive.msdn.microsoft.com/SpicIE )

Interfețele COM ale Internet Explorer:

funcționalitate ridicată,

complexitate ridicată,

dificil de utilizat.

Controalele SpicIE/elementele interfeței grafice pentru utilizator clase de bază pentru a vizualiza extensiile in IE:

simplu – IE desenează elementele de grafică pentru utlizator,

complex – realizarea propriului design folosind formularele Windows sau cu WPF.

Nucleul Framework-ului SpicIE:

interfețele COM ale Internet Explorer,

oferă funcționalități de bază pentru a fi gazduite ca o extensie de navigator în IE,

managementul de cod.

Codul plugin customizat:

trebuie implementat de utilizator,

cod gestionat de plugin care extinde funcționalitatea IE prin intermediul evenimentelor, elementele UI sau acces direct la interfețele COM,

C#, VB.NET, Managed C++, …

SpicIE este testat cu Internet Explorer 7 și 8. Se pot dezvolta plug-in-uri cu toate versiunile de Visual Studio 2008. Plug-in-urile SpicIE pot fi executate pe următoarele versiuni ale platfromei .NET:

.NET 2.0,

.NET 3.0,

.NET 3.5.

Exemplu de cod, în care la evenimentul de încărcare al paginii va apărea mesajul ”Primul plug-in realizat!”.

Algoritm de steganografie LSB

Steganografia este o tehnică digitală pentru a ascunde informații secrete în imagini, fișiere audio sau video. Acest capitol este dedicat uneia dintre cele mai utilizate metode de ascundere a unui mesaj într-o imagine, și anume LSB (Last Significant Bits).

Introducere

Conceptul de LSB este unul simplu. Acesta exploatează faptul că nivelul de precizie în

multe formate de imagine este mult mai mare decât nivelul perceptibil prin viziunea umană medie. Prin urmare, o imagine modificată, cu variații ușoare în culorile sale va fi imposibil de distins de original, de o ființă umană, doar uitându-se la ea. Prin folosirea celui mai puțin semnificativ bit al pixelului de culoare pentru stocarea mesajului ascuns, imaginea în sine va părea nealterată.

La fel de important ca tehnica de steganografie este alegerea imaginii de acoperire. În cadrul LSB-ului, puține imaginii de acoperire pot conduce la o stego-imagine care sa fie ușor diferențiabilă de original. Formatele de imagine actuale pot fi împărțite în două mari categorii: cu pierdere și fără pierdere. Formatele de imagine cu pierdere sunt acelea care pierd o cantitate din date cand sunt memorate. Un exemplu ar fi formatul JPEG. Partea bună a formatelor cu pierdere, în particular JPEG, este aceea că realizează o compresie destul de bună, menținând o calitate bună a imaginiilor. Cu toate acestea, prin natura formatelor de imagini cu pierderi, nu este potrivit pentru tehnica LSB. Ținând seama ca LSB-ul împrăștie mesajul ascuns în informațiile despre imagine, pierderea unor asemenea informații prin compresie duce la pierderea unor părți din mesajul ascuns. Pe de altă parte, imaginile fără pierdere sunt potrivite pentru LSB, ținând cont ca integritatea imaginii este păstrată. Totuși nu au rația de compresie bună pe care formatele cu pierdere o au.

Figura 3.1 Model de bază al steganografiei

(Sursă: http://eprints.utm.my/4339/1/71847.pdf )

Prezentare alogritm

Se poate spune că cea mai simplă implementare a LSB-ului este prin utilizarea imaginilor în format bitmap pe 24 de biți. Structura unei imagini bitmap pe 24 de biți este reprezentată dintr-un antet, urmat de informațiile pixelilor. Fiecare pixel este reprezentat pe 3 octeți, reprezentând valorile culorilor roșu, verde și albastru. LSB-ul folosește faptul că schimbarea LSB a acestor octeți ar produce doar o schimbare nesemnificativă pentru valoarea de culoare. Ideea este de a coda un bit din fiecare octet al pixelilor pentru a codifica mesajul ascuns.

Figura 3.2 Schema bloc a codificatorului

(Sursa: http://www.kgsepg.com/project-id/7881-method-image-steganography )

Exemplu: Se va ascunde textul ”Ana” cu metoda LSB clasic.

Pasul 1. Conversia textului în forma binară.

Ana= 01000001 01101110 01100001

Pasul 2. Conversia imaginii în spectrul RGB.

Primul pixel: R=125(01111101) , G=179(10110011), B=233(11101001).

Al doi-lea pixel: R=234(11101010), G=134(10000110), B=104(01101000).

Al trei-lea pixel: R=89(01011001), G=178(10110010), B=204(11001100).

Pasul 3. Ascunderea literei ”A” în trei pixeli.

Primul pixel: R=01111100 G=10110011 B=11101000

Al doi-lea pixel: R=11101010 G=10000110 B=01101000

Al trei-lea pixel: R=01011001 G=10110011 B=11001100

Algoritmul implementat diferă de LSB-ul clasic. Îmbunătățirile aduse sunt următoarele: mărirea gradului de securitate, creșterea vitezei algoritmului și a lungimii textului care va fi ascuns. În cadrul acestui algoritm pentru pixelii aflați pe poziție pară se vor modifica ultimii doi biți ai culorilor rosu(red) și verde(green), iar pentru cei de pe poziția impară se vor modifica ultimii doi biți ai culorilor verde(green) și albastru(blue).

Vom folosi tot litera ”A”, dar în cadrul acestui algoritm avem nevoie doar de doi pixeli pentru a putea ascunde un caracter.

Exemplu:

Pasul 1. Conversia textului în forma binară.

Ana= 01000001 01101110 01100001

Pasul 2. Conversia imaginii în spectrul RGB.

Pixelul par: R=125(01111101) , G=179(10110011), B=233(11101001).

Pixelul impar: R=234(11101010), G=134(10000110), B=104(01101000).

Pasul 3. Ascunderea literei ”A” în doi pixeli.

Pixelul par: R=01111101 G=10110000 B=11101000

Pixelul impar: R=11101010 G=10000100 B=01101001

Figura 3.3 Schema bloc a decodificatorului

(Sursă: http://www.kgsepg.com/project-id/7881-method-image-steganography )

Alte variante ale LSB

Diferite variante ale tehnicii LSB de bază au fost dezvoltate pentru a o face pe aceasta cat mai robustă. O variantă ar fi LSB-ul aleator, în care datele secrete sunt răspândite în imagine într-un mod aparent aleator. Aceste date pot fi accesate dacă și emițătorul și receptorul imaginii dețin cheia secretă. Această cheie se folosește pentru generarea de numere pseudo aleatoare care vor identifica unde și în ce ordine este răspândit mesajul. Avantajul acestei metode este acela că încorporează unele părți de criptografie în care difuzia se aplică mesajului secret. Cu toatea cestea, metoda merge dincolo de ceea ce face dificil pentru un atacator să știe că există un mesaj secret pentru a descoperi mesajul. De asemenea face greu de determinat faptul că în imaginie există un mesaj secret. Motivul este reprezentat de faptul că mesajul încorporat în imagine pare mai degrabă ca fiind zgomot al imaginii.

Avantaje și dezavantaje ale LSB-ului

După cum s-a prezentat avantajul LSB-ului este acela că este simplu de implementat. Acest lucru este valabil mai ales in cazul imaginilor bitmap pe 24 de biți. Acesta de asemenea permite o sarcină mai mare, memorând un bit din mesajul secret la fiecare octet de data dintr-un pixel. În plus, acesta este, de asemenea, aparent nedetectabilă de către om dacă este facută corect. Totuși ipoteza a fost că imaginea-stego este de nedistins de către ochiul uman față de imaginea originală de acoperire. S-au realizat numeroase tehnici pentru calculul statistic care să determine dacă o imagine poate reprezenta subiectul LSB-ului.

În afară de a fi vulnerabil la tehnici de detectare, LSB-ul este extrem de vulnerabil la corupție. Acest lucru înseamnă că integritatea mesajului din imagina poate fi oșor de distrus. Atacatorul ar putea să nu știe chiar că este vorba de o stego-imagine, dar astfel de acțiuni ar distruge mesajul secret.

Datorită acestor posibile atacuri, LSB-ul este relativ nesigur, cel puțin în forma sa primitivă. Cu toate acestea, datorită avantajelor sale, este util pentru aplicații de securitate în cazul în care este de dorit, dar nu este necesar. De asemenea, este un fundament bun pentru a construi tehnici steganografice mai sigure.

Algoritmul de criptare/decriptare DES

Algoritmul DES este cea mai folosită metodă de criptare din acest moment în întreaga lume. În ciuda loviturii primite de la organizația EFF (Electronic Frontier Foundation) ce a creat o mașină în valoare de 220.000 $ special pentru „spargerea” algoritmului DES, acesta continuă să fie folosit de guvernul SUA și de bancile comerciale în continuare prin noua sa extensie denimită „triple-DES”.

Scurt istoric

Primele versiuni de DES au fost dezvoltate de IBM; în prezent, algoritmul este utilizat pe majoritatea platformelor UNIX, pentru criptarea parolelor. DES este autorizat și de NBS (National Bureau of Standards-Biroul Național de Standarde) și de NSA (National Security Agency-Agenția Națională de Securitate). De fapt începând cu 1977, DES a reprezentat metoda general acceptată pentru protejarea datelor confidențiale. În figura următoare este prezentat un scurt istoric al dezvoltării DES:

Fig.4.1 Scurt istoric al dezvoltării DES

(Sursă: http://telecom.etc.tuiasi.ro/pns/cc/lab_cc/cript_des_rsa.pdf )

DES a fost proiectat în principal pentru protejarea anumitor informații secrete ce puteau exista în birourile federale.

Datorită inexistenței unei tehnologii criptografice generale în afara domeniului securității naționale și deoarece produse de securitate, cum ar fi cele de criptare, erau necesare în aplicațiile secrete folosite pe calculatoarele federale și guvernamentale, NBS (National Bureau of Standards) a inițiat în 1973 un proiect pentru asigurarea securității sistemelor de calcul, proiect care cuprindea și dezvoltarea unui standard pentru criptarea datelor din calculatoare.

Prezentare

DES oferă un algoritm implementabil în dispozitivele electronice pentru criptarea–

decriptarea datelor. Ideea de „standardizare” în criptografie este revoluționară. Înaintea publicării lui DES, nu se cunoștea o altă publicație conținând descrierea unui algoritm criptografic în uz.

În general, cei mai mulți dintre proiectanții de criptosisteme au încercat să ascundă detaliile algoritmilor folosiți. DES constituie o excepție, algoritmul este publicat. Aceasta poate constitui o veritabilă provocare pentru oricine încearcă spargerea acestuia.

Caracteristici:

lungimea unui bloc este de 64 de biți,

cheia este pe 64 de biți dintre care 8 sunt biți de paritate,

flexibilitatea implementării și utilizării în diferite aplicații,

fiecare bloc cifrat este independent de celelalte,

nu este necesară sincronizarea între operațiile de criptare/decriptare ale unui bloc.

Fiecare grup de 4 biți reprezintă un număr hexazecimal.

Exemplu:

0001 – 1

0010 – 2

0011 – 3

1010 – A

1011 – B

1100 – C

1111 – F

Algoritmul DES acționează asupra grupurilor de 64 de biți, sau altfel spus asupra unui număr hexa de 16 cifre. Pentru criptare DES folosește chei ce aparent au lungimea de 64 de biți, din care sunt folosiți însă doar 56. Operațiile de criptare și decriptare, potrivit algoritmului DES, se desfășoară după cum urmează.

Figura 4.2 Schema de funcționare a algoritmului DES

(Sursă: http://eed.usv.ro/~mariusc/CSI/ )

I.Pași preliminari. Impărțirea în blocuri de 32 biți

Cei 64 de biți se vor împărți în 2 blocuri de câte 32 de biți denumiți L(left) și R(right), după modelul de mai jos:

M = ABC123D4E890F234

M = 1010 1011 1100 0001 0010 0011 1101 0100 1110 1000 1001 0000 1111 0010 0011 0100

L = 1010 1011 1100 0001 0010 0011 1101 0100

R = 1110 1000 1001 0000 1111 0010 0011 0100

II.Pași preliminari. Alegerea cheii

Fie K cheia hexazecimală :

K = 267BBACF0DB853A1

Reprezentarea binară a cheii este:

K = 00100110 01111011 10111010 11001111 00001101 10111000 01010011 10100001

Pasul 1 – Crearea a 16 sub-chei de 48 de biți fiecare

P1.1

Cheia originală este permutată conform tabelei PC-1:

57 49 41 33 25 17 9

1 58 50 42 34 26 18

10 2 59 51 43 35 27

19 11 3 60 52 44 36

63 55 47 39 31 23 15

7 62 54 46 38 30 22

14 6 61 53 45 37 29

21 13 5 28 20 12 4

Tabela 4.1 Matricea PC-1

Observație: Primul bit din K+ va fi cel de-al 57-lea din K, al doilea bit din K+ va fi cel de-al 49-lea din K, ș.a.m.d.

K = 00100110 01111011 10111010 11001111 00001101 10111000 01010011 10100001(64b)

K+ = 1010110 0010010 1010100 1110110 0100111 1000110 0100111 1100110(56b)

(Grupările s-au făcut pe 7b , nu 8!)

P1.2

K+ se va împărți în cele două jumătăți ale sale care vor fi denumite C0 și D0:

K+ = 1010110 0010010 1010100 1110110 0100111 1000110 0100111 1100110(56b)

C0 = 1010110 0010010 1010100 1110110

D0 = 0100111 1000110 0100111 1100110

P1.3

Folosind cele două jumătăți, C0 și D0, se vor crea Cn, Dn n=1,16. Fiecare Cn, Dn

va fi creat din Cn-1, Dn-1 folosind tabela următoare, în care se vor face rotații la stânga, în funție de numărul din cea din cea de-a doua coloană:

Tabela 4.2 Rotiri stânga

Din C0, D0 originali, vom obține:

C0 = 1010110001001010101001110110

D0 = 0100111100011001001111100110

C1 = 0101100010010101010011101101

D1 = 1001111000110010011111001100

C2 = 1011000100101010100111011010

D2 = 0011110001100100111110011001

C3 = 1100010010101010011101101010

D3 = 1111000110010011111001100100

C4 = 0001001010101001110110101011

D4 = 1100011001001111100110010011

C5 = 0100101010100111011010101100

D5 = 0001100100111110011001001111

C6 = 0010101010011101101010110001

D6 = 0110010011111001100100111100

C7 = 1010101001110110101011000100

D7 = 1001001111100110010011110001

C8 = 1010100111011010101100010010

D8 = 0100111110011001001111000110

C9 = 0101001110110101011000100101

D9 = 1001111100110010011110001100

C10 = 0100111011010101100010010101

D10 = 0111110011001001111000110010

C11 = 0011101101010110001001010101

D11 = 1111001100100111100011001001

C12 = 1110110101011000100101010100

D12 = 1100110010011110001100100111

C13 = 1011010101100010010101010011

D13 = 0011001001111000110010011111

C14 = 1101010110001001010101001110

D14 = 1100100111100011001001111100

C15 = 0101011000100101010100111011

D15 = 0010011110001100100111110011

C16 = 1010110001001010101001110110

D16 = 010011110001100100111110011

P1.4

Se calculează sub-cheile Kn n=1,16 aplicând următoarea permutare celor 16 numere binare obținute prin concatenarea CnDn:

14 17 11 24 1 5

3 28 15 6 21 10

23 19 12 4 26 8

16 7 27 20 13 2

41 52 31 37 47 55

30 40 51 45 33 48

44 49 39 56 34 53

46 42 50 36 29 32

Tabela 4.3 Matricea PC-2

Observație: Primul bit din Kn va fi cel de-al 14-lea din sirul concatenat Cn Dn, al doilea bit din Kn va fi cel de-al 17-lea din Cn Dn, ș.a.m.d.

C1D1 = 0101100 0100101 0101001 1101101 1001111 0001100 1001111 1001100

K1 = 100001 010010 101110 100001 000010 010011 011011 101011

C2D2 = 1011000 1001010 1010011 1011010 0011110 0011001 0011111 0011001

K2 = 011110 101010 000101 001110 011010 000111 011111 110001

C3D3 = 1100010 0101010 1001110 1101010 1111000 1100100 1111100 1100100

K3 = 001010 001100 110000 001111 001110 111100 100000 101111

C4D4 = 0001001 0101010 0111011 0101011 1100011 0010011 1110011 0010011

K4 = 011000 010010 100100 111110 110001 100101 110110 010010

C5D5 = 0100101 0101001 1101101 0101100 0001100 1001111 1001100 1001111

K5 = 101001 001010 110010 110001 100011 010010 001101 111101

C6D6 = 0010101 0100111 0110101 0110001 0110010 0111110 0110010 0111100

K6 = 110101 110010 111000 110010 111100 111101 101011 000000

C7D7 = 1010101 0011101 1010101 1000100 1001001 1111001 1001001 1110001

K7 = 111011 101011 011010 010000 010100 001000 011100 111111

C8D8 = 1010100 1110110 1010110 0010010 0100111 1100110 0100111 1000110

K8 = 010111 101001 011001 001110 100111 110011 110010 001100

C9D9 = 0101001 1101101 0101100 0100101 1001111 1001100 1001111 0001100

K9 = 101000 010000 111111 110001 000010 010011 011011 100111

C10D10 = 0100111 0110101 0110001 0010101 0111110 0110010 0111100 0110010

K10 = 110101 010111 001010 110001 111111 101110 100010 100001

C11D11 = 0011101 1010101 1000100 1010101 1111001 1001001 1110001 1001001

K11 = 100101 111001 011111 010000 001000 100100 111101 011111

C12D12 = 1110110 1010110 0010010 1010100 1100110 0100111 1000110 0100111

K12 = 010111 100101 001011 000111 100111 111011 000110 010010

C13D13 = 1011010 1011000 1001010 1010011 0011001 0011110 0011001 0011111

K13 = 001110 111101 000101 001100 111001 010100 011101 100001

C14D14 = 1101010 1100010 0101010 1001110 1100100 1111000 1100100 1111100

K14 = 000010 000100 000111 101111 010110 101010 101001 001110

C15D15 = 0101011 0001001 0101010 0111011 0010011 1100011 0010011 1110011

K15 = 101100 010100 100100 111101 111101 001101 010110 011100

C16D16 = 1010110 0010010 1010100 1110110 0100111 1000110 0100111 1100110

K16 = 010111 101101 110010 001010 100011 111011 110010 001100

Pasul 2 – Criptarea fiecărui grup de 64 de biți

P2.1

Se va efectua o permutare asupra grupului inițial de 64 de biți pe care o vom numi IP (initial permutation):

58 50 42 34 26 18 10 2

60 52 44 36 28 20 12 4

62 54 46 38 30 22 14 6

64 56 48 40 32 24 16 8

57 49 41 33 25 17 9 1

59 51 43 35 27 19 11 3

61 53 45 37 29 21 13 5

63 55 47 39 31 23 15 7

Tabela 4.4 Matricea IP

Observație: Primul bit din IP va fi cel de-al 58-lea din M, al doilea va fi cel de-al 50-lea din M, ș.a.m.d.

M = 1010 1011 1100 0001 0010 0011 1101 0100 1110 1000 1001 0000 1111 0010 0011 0100

IP = 0101 1010 1110 1000 1000 1000 0000 0111 0111 1011 1101 0101 0001 0001 0100 0101

P2.2

Permutația IP se va împărți în două jumătăți de câte 32 de biți fiecare: L0 (left) și R0 (right):

L0 = 0101 1010 1110 1000 1000 1000 0000 0111

R0 = 0111 1011 1101 0101 0001 0001 0100 0101

P2.3

Trecând prin 16 iterații și utilizând o funcție f ce acționează asupra a două blocuri, unul de date de 32 de biți și unul de subcheie de 48 de biți, și va produce un rezultat de 32 de biți. Se va nota cu + operația pe biți XOR.

În iterații vom efectua următoarele calcule:

Ln = Rn-1
Rn = Ln-1 + f(Rn-1,Kn)

Exemplu:

pentru n=1, vom avea:

K1 = 100001 010010 101110 100001 000010 010011 011011 101011

L1 = R0 = 0111 1011 1101 0101 0001 0001 0100 0101

R1 = L0 + f(R0,K1)

Pentru a calcula f(Rn-1,Kn) va trebui expandat fiecare bloc de 32 de biți la unul de 48 folosind tabela de permutări E:

32 1 2 3 4 5

4 5 6 7 8 9

8 9 10 11 12 13

12 13 14 15 16 17

16 17 18 19 20 21

20 21 22 23 24 25

24 25 26 27 28 29

28 29 30 31 32 1

Tabela 4.4 Matricea E

Primii trei biți din E(Rn-1) sunt de fapt biții din pozițiile 32, 1, 2 din Rn-1.

Exemplu: Se va calcula E(R0) din R0 după cum urmează:

R0 = 0111 1011 1101 0101 0001 0001 0100 0101 (32b)

E(R0) = 101111 110111 111010 101010 100010 100010 101000 001010 (48b)

Obs: Fiecare bloc de 4 biți originali au fost expandați la 6 biți în E(R0)

K1 = 100001 010010 101110 100001 000010 010011 011011 101011

E(R0) = 101111 110111 111010 101010 100010 100010 101000 001010

K1+ E(R0) = 001110 100101 010100 001011 100000 110001 110011 100001

Rezultatul ultimei operații XOR este un număr pe 48 de biți. Din formula R1 = L0 + f(R0,K1)

se observă că R1 este însă pe 32 de biți. Pentru a obține acest număr de 32 de biți se va trece din nou printr-o serie de permutații.

Se va scrie Kn + E(Rn-1) =B1B2B3B4B5B6B7B8, unde fiecare Bi este un grup de 6 biți.

Se va calcula S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8), unde Si(Bi) este rezultatul folosirii permutației Si.

Fiecare funcție S de va avea drept intrare un grup de 6 biți și va avea drept ieșire un grup de 4 biți.

Exemplu:

Nr. Nr. Coloană

Linie 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

0 14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7

1 0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8

2 4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0

3 15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13

Tabela 4.5 Matricea S1

I. Primul și ultimul bit din cei 6 va reprezenta un număr binar de 2 cifre din intervalul [0,3] și îl se va numi generic I.

II. Cei 4 biți din mijlocul blocului de 6 biți reprezintă un număr din intervalul [0,15] și se va numi generic J.

III. Se caută numărul aflat pe linia I și coloana J în matricea de mai sus. Acesta va fi ieșirea funcției S1(B).

Exemplu:

B = 001110

I = 00 = 0 (linia)

J = 0111 = 7 (coloana)

S1(001110) = 8 (1000)

S1

14 4 13 1 2 15 11 8 3 10 6 12 5 9 0 7

0 15 7 4 14 2 13 1 10 6 12 11 9 5 3 8

4 1 14 8 13 6 2 11 15 12 9 7 3 10 5 0

15 12 8 2 4 9 1 7 5 11 3 14 10 0 6 13

S2

15 1 8 14 6 11 3 4 9 7 2 13 12 0 5 10

3 13 4 7 15 2 8 14 12 0 1 10 6 9 11 5

0 14 7 11 10 4 13 1 5 8 12 6 9 3 2 15

13 8 10 1 3 15 4 2 11 6 7 12 0 5 14 9

S3

10 0 9 14 6 3 15 5 1 13 12 7 11 4 2 8

13 7 0 9 3 4 6 10 2 8 5 14 12 11 15 1

13 6 4 9 8 15 3 0 11 1 2 12 5 10 14 7

1 10 13 0 6 9 8 7 4 15 14 3 11 5 2 12

S4

7 13 14 3 0 6 9 10 1 2 8 5 11 12 4 15

13 8 11 5 6 15 0 3 4 7 2 12 1 10 14 9

10 6 9 0 12 11 7 13 15 1 3 14 5 2 8 4

3 15 0 6 10 1 13 8 9 4 5 11 12 7 2 14

S5

2 12 4 1 7 10 11 6 8 5 3 15 13 0 14 9

14 11 2 12 4 7 13 1 5 0 15 10 3 9 8 6

4 2 1 11 10 13 7 8 15 9 12 5 6 3 0 14

11 8 12 7 1 14 2 13 6 15 0 9 10 4 5 3

S6

12 1 10 15 9 2 6 8 0 13 3 4 14 7 5 11

10 15 4 2 7 12 9 5 6 1 13 14 0 11 3 8

9 14 15 5 2 8 12 3 7 0 4 10 1 13 11 6

4 3 2 12 9 5 15 10 11 14 1 7 6 0 8 13

S7

4 11 2 14 15 0 8 13 3 12 9 7 5 10 6 1

13 0 11 7 4 9 1 10 14 3 5 12 2 15 8 6

1 4 11 13 12 3 7 14 10 15 6 8 0 5 9 2

6 11 13 8 1 4 10 7 9 5 0 15 14 2 3 12

S8

13 2 8 4 6 15 11 1 10 9 3 14 5 0 12 7

1 15 13 8 10 3 7 4 12 5 6 11 0 14 9 2

7 11 4 1 9 12 14 2 0 6 10 13 15 3 5 8

2 1 14 7 4 10 8 13 15 12 9 0 3 5 6 11

Tabela 4.6 Matricile Si

Exemplu: Pentru prima iterație se obține

K1+ E(R0) = 001110 100101 010100 001011 100000 110001 110011 100001

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 1000 1010 1100 1111 0100 1011 0101 0010

Pasul final al calculării funcției f este efectuarea unei permutații f pentru S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8).

16 7 20 21

29 12 28 17

1 15 23 26

5 18 31 10

2 8 24 14

32 27 3 9

19 13 30 6

22 11 4 25

Tabela 4.7 Matricea P

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 1000 1010 1100 1111 0100 1011 0101 0010

f= 1101 0010 1111 1111 0011 0001 0100 0000

R1 = L0 + f(R0 , K1 ) = 0101 1010 1110 1000 1000 1000 0000 0111

+ 1101 0010 1111 1111 0011 0001 0100 0000

= 1000 1000 0001 0111 1011 1001 0100 0111

E(R1) = 110001 010000 000010 101111 110111 110010 101000 001111

K2 = 011110 101010 000101 001110 011010 000111 011111 110001

K2+ E(R1) = 101111 111010 000111 100001 101101 110101 110111 111110

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 0111 0011 1001 0011 0010 0001 1111 1000

f = 1100 1110 0101 0000 1110 0111 1000 0011

R2 = L1 + f(R1,K2) = 0111 1011 1101 0101 0001 0001 0100 0101

+ 1100 1110 0101 0000 1110 0111 1000 0011

= 1011 0101 1000 0101 1111 0110 1100 0110

E(R2) = 010110 101011 110000 001011 111110 101101 011000 001101

K3 = 001010 001100 110000 001111 001110 111100 100000 101111

K3 + E(R2) = 011100 100111 000000 000100 110000 010001 111000 100010

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 0000 0001 1010 1110 1111 0110 0000 1011

f = 0010 1001 0110 0110 0101 1001 1100 1100

L2 = R1 = 1000 1000 0001 0111 1011 1001 0100 0111

R3 = L2 + f(R2,K3) = 1000 1000 0001 0111 1011 1001 0100 0111

+ 0010 1001 0110 0110 0101 1001 1100 1100

= 1010 0001 0111 0001 1110 0000 1000 1011

L3 = R2 = 1011 0101 1000 0101 1111 0110 1100 0110

E(R3) = 110100 000010 101110 100011 111100 000001 010001 010111

K4 = 011000 010010 100100 111110 110001 100101 110110 010010

K4 + E(R3) = 101100 010000 001010 011101 001101 100100 100111 000101

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 0010 1001 0011 1110 1101 1111 1000 1101

f = 0011 1101 0110 1100 0111 1010 0110 1101

R4 = L3 + f(R3,K4) = 1011 0101 1000 0101 1111 0110 1100 0110

+ 0011 1101 0110 1100 0111 1010 0110 1101

= 1000 1000 1110 1001 1000 1100 1010 1011

L4 = R3 = 1010 0001 0111 0001 1110 0000 1000 1011

E(R4) = 110001 010001 011101 010011 110001 011001 010101 010111

K5 = 101001 001010 110010 110001 100011 010010 001101 111101

K5 + E(R4) = 011000 011011 101111 100010 010010 001011 011000 101010

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 0101 1001 0111 0110 0101 1100 0101 1100

f = 0011 1110 0101 1101 1101 0000 0010 1110

R5 = L4 + f(R4,K5) = 1010 0001 0111 0001 1110 0000 1000 1011

+ 0011 1110 0101 1101 1101 0000 0010 1110

= 1001 1111 0010 1100 0011 0000 1010 0101

L5 = R4 = 1000 1000 1110 1001 1000 1100 1010 1011

E(R5) = 110011 111110 100101 011000 000110 100001 010100 001011

K6 = 110101 110010 111000 110010 111100 111101 101011 000000

K6 + E(R5) = 000110 001100 011101 101010 111010 011100 111111 001011

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 0001 0011 1111 1011 0011 0101 1100 0011

f = 1110 0100 0101 0011 0110 1001 1100 1111

R6 = L5 + f(R5,K6) = 1000 1000 1110 1001 1000 1100 1010 1011

+ 1110 0100 0101 0011 0110 1001 1100 1111

= 0110 1100 1011 1010 1110 0101 0110 0100

L6 = R5 = 1001 1111 0010 1100 0011 0000 1010 0101

E(R6) = 001101 011001 010111 110101 011100 001010 101100 001000

K7 = 111011 101011 011010 010000 010100 001000 011100 111111

K7 + E(R6) = 110110 110010 001101 100101 001000 000010 110000 110111

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 0111 1000 0110 0000 0111 0001 1010 0000

f = 0010 0000 0000 1101 1010 0110 1000 0111

R7 = L6 + f(R6,K7) = 1001 1111 0010 1100 0011 0000 1010 0101

+ 0010 0000 0000 1101 1010 0110 1000 0111

= 1011 1111 0010 0001 1001 0110 0010 0010

L7 = R6 = 0110 1100 1011 1010 1110 0101 0110 0100

E(R7) = 010111 111110 100100 000011 110010 101100 000100 000101

K8 = 010111 101001 011001 001110 100111 110011 110010 001100

K8 + E(R7) = 000000 010111 111101 001101 010101 011111 110110 001001

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 1110 1010 0010 0000 1111 1000 1000 1010

f = 0111 1001 1000 1110 1000 0010 1000 0101

R8 = L7 + f(R7,K8) = 0110 1100 1011 1010 1110 0101 0110 0100

+ 0111 1001 1000 1110 1000 0010 1000 0101

= 0001 0101 0011 0100 0110 0111 1110 0001

L8 = R7 = 1011 1111 0010 0001 1001 0110 0010 0010

E(R8) = 100010 101010 100110 101000 001100 001111 111100 000010

K9 = 101000 010000 111111 110001 000010 010011 011011 100111

K9 + E(R8) = 001010 111010 011001 011001 001110 011100 100111 100101

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 1111 0011 1100 0001 0110 0101 1000 1110

f = 1100 1000 1000 0111 1110 0011 1010 1011

R9 = L8 + f(R8,K9) = 1011 1111 0010 0001 1001 0110 0010 0010

+ 1100 1000 1000 0111 1110 0011 1010 1011

= 0111 0111 1010 0110 0111 0101 1000 1001

L9 = R8 = 0001 0101 0011 0100 0110 0111 1110 0001

E(R9) = 101110 101111 110100 001100 001110 101011 110001 010010

K10 = 110101 010111 001010 110001 111111 101110 100010 100001

K10 + E(R9) = 011011 111000 111110 111101 110001 000101 010011 110011

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 0101 1001 0111 0010 0110 0100 0011 1100

f = 0000 1110 0100 1101 1100 0100 1010 1110

R10 = L9 + f(R9,K10) = 0001 0101 0011 0100 0110 0111 1110 0001

+ 0000 1110 0100 1101 1100 0100 1010 1110

= 0001 1011 0111 1001 1010 0011 0100 1111

L10 = R9 = 0111 0111 1010 0110 0111 0101 1000 1001

E(R10) = 100011 110110 101111 110011 110100 000110 101001 011110

K11 = 100101 111001 011111 010000 001000 100100 111101 011111

K11 + E(R10) = 000110 001111 110000 100011 111100 100010 010100 000001

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 0001 1110 1011 1111 0000 1110 1001 0001

f = 1101 0110 0110 1000 0001 1001 0101 1111

R11 = L10 + f(R10,K11) = 0111 0111 1010 0110 0111 0101 1000 1001

+ 1101 0110 0110 1000 0001 1001 0101 1111

= 1010 0001 1100 1110 0110 1100 1101 0110

L11 = R10 = 0001 1011 0111 1001 1010 0011 0100 1111

E(R11) = 010100 000011 111001 011100 001101 011001 011010 101101

K12 = 010111 100101 001011 000111 100111 111011 000110 010010

K12 + E(R11) = 000011 100110 110010 011011 101010 100010 011100 111111

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 1111 1011 0001 1010 1101 1110 0110 1011

f = 0111 1101 1111 1110 1100 1110 0100 1010

R12 = L11 + f(R11,K12) = 0001 1011 0111 1001 1010 0011 0100 1111

+ 0111 1101 1111 1110 1100 1110 0100 1010

= 0110 0110 1000 0111 0110 1101 0000 0101

L12 = R11 = 1010 0001 1100 1110 0110 1100 1101 0110

E(R12) = 101100 001101 010000 001110 101101 011010 100000 001010

K13 = 001110 111101 000101 001100 111001 010100 011101 100001

K13 + E(R12) = 100010 110000 010101 000010 010100 001110 111101 101011

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 0001 0101 0101 1101 0011 1000 0011 1010

f = 1011 1110 0000 0011 0101 0100 1101 0010

R13 = L12 + f(R12,K13) = 1010 0001 1100 1110 0110 1100 1101 0110

+ 1011 1110 0000 0011 0101 0100 1101 0010

= 0001 1111 1100 1101 0011 1000 0000 0100

L13 = R12 = 0110 0110 1000 0111 0110 1101 0000 0101

E(R13) = 000011 111111 111001 011010 100111 110000 000000 001000

K14 = 000010 000100 000111 101111 010110 101010 101001 001110

K14 + E(R13) = 000001 111011 111110 110101 110001 011010 101001 000110

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 0000 0101 0111 0101 0110 0111 0001 0100

f = 1000 0110 0010 0101 0111 0000 1011 1100

R14 = L13 + f(R13,K14) = 0110 0110 1000 0111 0110 1101 0000 0101

+ 1000 0110 0010 0101 0111 0000 1011 1100

= 1110 0000 1010 0010 0001 1101 1011 1001

L14 = R13 = 0001 1111 1100 1101 0011 1000 0000 0100

E(R14) = 111100 000001 010100 000100 000011 111011 110111 110011

K15 = 101100 010100 100100 111101 111101 001101 010110 011100

K15 + E(R14) = 010000 010101 110000 111001 111110 110110 100001 101111

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 0011 0001 1011 1100 1110 1010 0110 1101

f = 0001 1101 0011 0100 0101 1111 1110 0110

R15 = L14 + f(R14,K15) = 0001 1111 1100 1101 0011 1000 0000 0100

+ 0001 1101 0011 0100 0101 1111 1110 0110

= 0000 0010 1111 1001 0110 0111 1110 0010

L15 = R14 = 1110 0000 1010 0010 0001 1101 1011 1001

E(R15) = 000000 000101 011111 110010 101100 001111 111100 000100

K16 = 010111 101101 110010 001010 100011 111011 110010 001100

K16 + E(R15) = 010111 101000 101101 111000 001111 110100 001110 001000

S1(B1)S2(B2)S3(B3)S4(B4)S5(B5)S6(B6)S7(B7)S8(B8) = 1011 1010 1000 0101 0001 0100 1101 0110

f = 1110 0010 1001 1010 0001 0011 0010 1011

R16 = L15 + f(R15,K16) = 1110 0000 1010 0010 0001 1101 1011 1001

+ 1110 0010 1001 1010 0001 0011 0010 1011

= 0000 0010 0011 1000 0000 1110 1001 0010

L16 = R15 = 0000 0010 1111 1001 0110 0111 1110 0010

L16 și R16 se vor concatena invers: R16L16 și se va aplica o ultimă permutație IP-1, după cum urmează:

40 8 48 16 56 24 64 32

39 7 47 15 55 23 63 31

38 6 46 14 54 22 62 30

37 5 45 13 53 21 61 29

36 4 44 12 52 20 60 28

35 3 43 11 51 19 59 27

34 2 42 10 50 18 58 26

33 1 41 9 49 17 57 25

Tabela 4.8 Matricea IP-1

R16L16 = 00000010 00111000 00001110 10010010 00000010 11111001 01100111 11100010

IP-1 = 00101000 11001111 00001100 00110100 00110001 00111010 00101010 00100011

În hexazecimal valoarea este: 28CF0C34313A2A23

În final:

Mesaj = ABC123D4E890F234

Parola = 267BBACF0DB853A1

Text criptat = 28CF0C34313A2A23

Algoritmi utilizați în compresia/decompresia șirurilor de caractere

În jurul anilor 1950 a început istoria compresiei datelor. Cercetători precum G. Gallager, David Huffman, Claude E. Shannon au contribuit decisiv la dezvoltarea acestui subdomeniu al matematicii.În acest capitol sunt prezentați doi dintre cei mai utilizați algoritmi de compresie: Algoritmul Huffman static și Algoritmul Lempel-Ziv.

Introducere

Prin compresie se înțelege micșorarea spațiului ocupat sau diminuarea timpului necesar transmiterii unei anumite cantități de informație. Există, în linii mari, două metode de compresie: metodele de compresie cu pierdere și cele fără pierdere.

Primul tip de metode de compresie, cele cu pierdere de informație sunt specifice transmisiei semnalului audio și video. În aceste caz, pierderea de informație determină reducerea calității sunetului, respectiv imaginii.

Pe de altă parte, compresia de date fără pierdere este aparent imposibil de realizat. Cu toate acestea, ea există în programele de arhivare, în sistemele de transmisiune a datelor, evoluând de-a lungul timpului. O formă primitivă a compresiei de date sunt prescurtările și abrevierile uzuale : prof., etc., CEC, ș.a.Compresia de date fără pierdere a evoluat pornind de la algoritmi simpli precum suprimarea zerourilor sau codarea pe șiruri și ajungând la algoritmii complecși utilizați în prezent.

Procesul compresiei prezintă o serie de avantaje. În primul rând, este redus spațiul destinat depozitării unei cantitpți de informație, iar în al doilea rând este diminuat timpul de transmitere a unor mesaje. Cel de-al doilea avantaj al compresiei duce la scăderea costului per mesaj și la creșterea traficului într-o rețea de transmisiuni. Scăderea timpului este determinată în mod direct de micșorarea cantității de informație și indirect de micșorarea pierderilor de timp datorate protocoalelor de comunicație. De asemena, un alt avantaj ar fi scăderea timpului de rulare a unui program datorită timpului de acces la disc.

Ideea ce stă la baza metodelor de compresie fără perderi este cea conform căreia cantitatea de informație prelucrată (transmisă, depozitată) conține o anumită redundanță datorată:

modului de distribuție a caracterelor (anumite caractere au apar mai des decât altele),

repetării conscutive a unor caractere,

modului de distribuție a grupurilor de caractere (anumite grupuri de caractere apar mai des decât altele și există grupuri care nu apar deloc),

distribuției poziției (unele caractere sau grupuri ocupă poziții preferențiale predictibile în anumite blocuri de date).

Considerând aceste tipuri de redundanțe se poate înțelege de ce o anumită tehnică de compresie poate avea un rezultat bun pentru un anumit tip de surse, în timp ce pentru altele rezultatul poate fi dezastruos. Perspecivele actuale în studiul compresiei au în vedere obținerea unui algoritm care să determine o compresie cât mai bună pentru tipuri de surse cât mai diferite.

Cu ajutorul factorului de compresie se realizează aprecierea cantitativă a compresiei. Factorul de compresie este definit ca : F=, unde n este lungimea în biți a mesajului inițial și n lungimea după compresie, precum și prin eficiența codării definită prin ƞ=, unde, unde H(S) reprezintă entropia sursei informaționale ce este codată, reprezintă lungimea medie a cuvintelor, iar m reprezintă numărul simbolurilor din alfabetul de codare.

Tipologia algoritmilor de compresie fără pierderi

Există trei tipuri de algoritmi de compresie de date fără pierdere:

algoritmii statici care se bazează pe o statistică bine cunoscută a sursei și dau rezultate bune în cazul în care sursele au o statistică asemănătoare cu cea presupusă. În caz contrar, rezultatul poate fi o extensie în loc de o compresie.

algoritmii semiadaptivi sau în două treceri. Aceștia folosesc statistica simbolurilor mesajelor. Acești algoritmi nu pot fi folosiți într-o transmisiune.

algoritmii adaptivi, cei mai potriviți pentru orice tip de sursă. Construirea unui „dicționar de codare” al simbolurilor mesajului stă la baza tehnicilor adaptive. Acest dicționar se va construi identic la recepție, pe baza informației recepționate.

Prezentare algoritmi

Algoritmul Huffman static (codarea Huffman statică binară)

Algoritmul Hoffman reprezintă un algoritm optimal întrucât nici un alt algoritm nu asigură o mai mică lungime medie a cuvintelor. În anumite situații există și alți algoritmi care pot da o lungime medie egală cu cea dată de algoritmul Huffman, dar niciodată mai mică. Algoritmul presupune următoarele etape:

clasificarea mesajelor sursei în ordinea descrescătoare a probabilităților,

alcătuirea unui mesaj restrâns din ultimele două două mesaje, r=ss având p(r) = p(s) + p(s),

includerea mesajului r1 în mulțimea celorlalte mesaje, în ordinea descrescătoare a probabilităților, alcătuind șirul ordonat R1,

repetarea algoritmului de restrângere până când ultimul șir ordonat Rk conține doar două mesaje.

Pentru a obține cuvintele de cod corespunzătoare fiecărui mesaj se procedează astfel: simbolului rk-1 i se aloca ‘0’, iar lui rk’1’, apoi la fiecare diviziune în două se alocă, în aceeași ordine ca la prima diviziune, simbolurile ‘0’ sau ‘1’ și operația se continuă până când se ajunge la mulțimi formate dintr-un singur mesaj.

Algoritmul Lempel-Ziv

Algoritmul de compresie Lempel-Ziv este de tipul variabil-bloc și are mai multe versiuni. În continuare vor fi prezentate două versiuni ale sale. Acest algoritm este de tipul variabil-bloc.

În cazul uneia dntre cele mai cunoscute versiuni, codorul împarte șirul simbolurilor generate de sursă în subșiruri de lungime variabilă fără a depăși lungimea maximă impusă. În dicționarul codorului sunt memorate subșirurile, în ordinea creării lor. Fiecărui subșir ăi corespunde un pointer. Crearea unei noi intrări în dicționar sau a unui nou subșir se realizează căutând în dicționar cel mai lung subșir identic cu începutul datelor care urmează să fie codate (subșir rădăcină). Apoi se adaugă la acest subșir următorul simbol de date care poartă denumirea de simbol de inovare. Pe baza pointer-ului primit, decodorul realizează un dicționar identic. Astfel, fiecare nou subșir este transmis prin pointerul coresunzător șirului rădăcină și simbolului de inovare.

Inițializarea dicționarului se realizează cu subșirurile formate dintr-un singur simbol. Dicționarul devine din ce în ce mai mare, iat pointerul din ce în ce mai lung. Pentru a înlătura din dicționar șirurile rar folosite este nevoie de o procedură folosită atât de decodor cât și de codor.

Tabelele 5.1 și 5.2 prezintă exemple de aplicare a algoritmului pentru un șir de simboluri binare (00101100010111010101…) și pentru un șir de simboluri dintr-un alfabet cu patru simboluri distincte (notate a, b, c și d: aabddacbccabc…) și reprezentate în binar prin 00, 01, 10 și 11.

Tabela 5.1 Aplicare a algoritmului pentru un șir de simboluri binare

Tabela 5.2 Aplicare a algoritmului pentru un șir de simboluri dintr-un alfabet cu patru simboluri distincte

Dicționarul este limitat la doar 16 cuvinte de către un pointer de numai 4 biți. Practic, este necesară folosirea unui dicționar mult mai voluminos pentru creșterea performanței algoritmului.Un dicționar cu 2 subșiruri va necesita cuvinte de cod de lungime n + 1 pentru un alfabet al sursei binar, n + 2 pentru un alfabet cu patru simboluri distincte sau n + 8 pentru un alfabet cu 2 simboluri distincte (cazul codului de 8 elemente pentru reprezentarea caracterelor). De regulă, lungimea cuvintelor de cod trebuie să fie egală cu n plus numărul de simboluri binare necesare pentru a reprezenta simbolul de inovare, adică pentru a reprezenta simbolurile distincte ale alfabetul.

Eficiența algoritmului este redusă la începutul procesului de codare când subșirurile care se introduc în dicționar sunt de lungime mică. Compresia devine mai eficientă odată cu avansarea în procesul de codare când subșirurile devin mai lungi. Este necesară eliminarea intrărilor mai vechi atunci când dicționarul finit este plin.

Algoritmul prezentat mai sus are și un dezavantaj întrucât simbolul de inovare este transmis necomprimat, reducând semnificativ randamentul compresiei. Spre exemplu, presupunând un alfabet format din 256 de simboluri, reprezentate fiecare prin opt biți și că entropia sursei este de 3 biți/simbol (octet), algoritmul va coda subșirurile lungi într-un cod apropiat de entropia sursei, dar va adăuga simbolul de inovare în forma necodată. Dacă subșirurile au o lungime medie de 5 simboluri (din alfabetul sursei), înseamnă că pointerii ar avea o lungime ceva mai mare de 5 x 3 = 15 simboluri binare, iar cuvintele de cod vor fi de lungime ceva mai mare de 15 + 8 = 23 simboluri binare, rezultând un raport de compresie deaproximativ 48/23 (aprox. 2,08), în loc de 8/3 (aprox. 2,66).

Tabela 5.3 Aplicare a algoritmului Miller-Wegman pentru un șir de simboluri dintr-un alfabet cu patru simboluri distincte

Dezavantajul transmiterii simbolului de inovare în forma necodată este eliminat de varianta Miller-Wegman a algoritmului Lempel-Ziv. Aceasta amână specificitatea sa la iterația următoare, fiind primul simbol al subșirului transmis și fiind astfel transmis într-o formă codată. Un nou subșir introdus în dicționar se formează din subșirul transmis anterior, la care se adaugă primul simbol (ca simbol de inovare) al actualului șir transmis (codat) și recepționat. În tabelele 5.3 și 5.4 este exmplificată această variantă, folosind aceleași mesaje de mai sus..

Tabela 5.4 Aplicare a algoritmului Miller-Wegman pentru un șir de simboluri binare

Varianta Miller-Wegman are avantajul că un dicționar de mărime 2 necesită un cuvânt de cod pentru transmisiune de lungime n și nu n plus numărul de simboluri binare folosite pentru a reprezenta simbolurile sursei. Asrfel se realizează o reducere semnificativă atunci când alfabetul sursei este mare.

Dezvoltarea aplicație S.I.W.I.U.S.

Aplicația realizată este compusă din două componente: un plugin pentru IE și un site de socializare demostrativ.

Realizarea unui plugin pentru IE

Pentru a implementa un plugin pentru browserul Internet Explorer 7/8, se va folosi framewor-ul SpicIE (Simple Plug-In Creator for Internet Explorer). Kit-ul acestei platforme se descărca de la adresa http://archive.msdn.microsoft.com/SpicIE și apoi se instalează. Dupa finalizarea instalării, pentru a putea dezvolta propriul plugin se va utiliza mediul de programare Visual Studio, în care se alege Visual C# ca limbaj de programare și SpicIE Browser Plugin reprezentând tipul aplicației, la fel ca în figura 6.1.

Figura 6.1 Crearea unui proiect de tip Spice Browser Plugin

Plugin-ul pe care l-am dezvoltat este format dintr-un textbox și un buton numit, ”Salveaza”, ca în figura 6.2. Utilizatorul adaugă parola care a fost utilizată în cadrul ascunderii mesajului în imagine. Acestă parolă va fi salvată folosind cookie-ul, pentru că în cazul în care ultizatorul închide browser-ul și apoi îl redeschide, să nu mai fie nevoit sa mai reintroduca parola.

Figura 6.2 Interfață plugin

Toate fișirele care sunt necesare pentru acest plugin au fost incluse în cadrul unui setup creat cu ajutorul programului WinRAR. Astfel, utilizatorii care doresc să folosească acest plugin, vor trebui să instaleze acest setup.

Figura 6.3 Instalare plugin

Site demostrativ

Site-ul a fost dezvoltat folosind ASP.NET care este o tehnologie Microsoft. Utilizatorii acestui site vor dispune de o opțiune mai specială. Ei vor putea încarca poze în cadrul carora pot ascunde doua mesaje cu doua parole diferite. Scopul acestei aplicații este de a păstra informația intr-un mod cât mai securizat. Spre exemplu în cadrul unui grup de prieteni se dorește ca atunci cand aceștia vor încărca poze, să poată ascunde câte un mesaj privat pe care îl vor vedea doar ei și un meaj public care va fi vizibil pentru ceilalti utilizatori.

În figura 6.4 este prezentat modul în care utilizatorul încarcă imaginea și cele doua mesaje care vor fi ascunse în interiorul acesteia.

Figura 6.4 Incărcarea imaginii și ascunderea celor două mesaje

În figura 6.5 este prezentată schema prin care cele două mesaje sunt ascunse în interiorul imaginii.

Figura 6.5 Ascunderea celor două mesaje în imagine

Figura 6.6 Mesajul privat

În cazul în care utilizatorul introduce parola ”parolaprivata” în cadrul plugin-ului acesta va vedea sub imagine mesajul ”acesta este un mesaj privat” ca în figura 6.6 , respectiv

parola ”parolapublica” , mesajul va fi ”acesta este un mesaj public” prezentat în figura 6.7.

Figura 6.7 Mesajul public

Concluzii

În prezent, informația, dar mai ales securitatea acesteia reprezintă un aspect foarte important în diferite contexte ale comunicării. În acest sens, de-a lungul timpului, s-au dezvoltat o serie de tehnici de securizare și secretizare a datelor. În prezenta lucrare ne-am ocupat în special de două dintre cele mai frecvent utilizate tehnici, și anume steganografia și criptografia.

Steganografia și criptografia au în comun scopul pentru care au fost proiectate, și anume protejarea și ascunderea unor informații de maximă importanță. Totuși, acestea au la bază principii relativ diferite. Astfel, criptografia presupune codificarea sau cifrarea unor date care rămân totuși vizibile utilizatorilor. Pe de altă parte, steganografia are ca principiu de funcționare ascunderea mesajelor în cadrul altor mesaje mai puțin importante, nepermițând utilizatorului să descopere existența mesajului secret.

Alte îmbunătățiri care pot fi aduse acestei aplicații sunt: implementarea acestui plugin și pentru alte browser-ere web cum ar fi Mozila Firefox, Google Chrome sau Opera, dezvoltarea aplicației în cadrul unor site-uri de socializare consacrate precum Facebook sau Hi5.

Bibliografie

[1] Traducere de Bogdan Pisai, C#: A Beginner’s Guide, Ed.Teora, București, 2002

[2] Adrian Niță, Maria Niță, Nicolar Olăroiu, Introducere în .Net Framework, Byblos SRL, 2008

[3] Jessica Fridrich, Steganography in Digital Media: Principles, Algorithms, and Applications, Hardcover , 2009

[4] Emil Simion, David Naccache, Criptografie și securitatea informatiilor – Aplicații, Matrixrom, 2011

[5] http://www.jiit.ac.in/jiit/ic3/IC3_2008/IC3-2008/APP2_21.pdf

[6] http://www.eed.usv.ro/~mariusc/CSI/1 – DES.ppt

[7] http://www.scribd.com/doc/51645039/13/Platforma-NET

[8] http://users.cs.tuiasi.ro/~igavrila/sdm2011/l08sd.pdf

[9] http://telecom.etc.tuiasi.ro/pns/cc/lab_cc/cript_des_rsa.pdf

[10] http://rosu-e.marte.ro/

[11] http://www.math.uaic.ro/~cgales/csharp/Curs1.pdf

[12]http://www.comm.pub.ro/_curs/cic/curs/CIC_Capitolul%208%20Compresia%20datelor.pdf

[13]http://telecom.etc.tuiasi.ro/tti/laborator/TTI1-L6-AlgoritmiDeCompresieFolositiInSistemeleModerneDeArhivareCodareaHuffman.pdf

[14] http://skipperh.wordpress.com/2010/12/12/35/

[15] http://archive.msdn.microsoft.com/SpicIE

[16] http://en.wikipedia.org/wiki/Ajax_(programming)

[17] http://www.kgsepg.com/project-id/7881-method-image-steganography

Similar Posts