Elaborarea Unei Aplicatii Demonstrative “metode Clasice DE Ciptare”

TEZA DE LICENȚĂ

ELABORAREA UNEI APLICAȚII DEMONSTRATIVE

“METODE CLASICE DE CIPTARE”

CUPRINS

ADNOTARE

ABSTRACT

АННОТАЦИЯ

LISTA ABREVIERILOR

INTRODUCERE

1. EVOLIȚIA SISTEMELOR DE CRIPTARE

1.1 Necesitatea aplicării metodelor criptografice

1.2 Scurt istoric al evoluției metodelor de criptare

1.3 Metode clasice de criptare

1.3.1 Cifrul Cezar

1.3.2 Cifrul Affin

1.3.3 Cifrul Vigenere

1.3.4 Cifrul Polybios

1.3.5 Cifrul Playfair

1.3.6 Cifrul de Transpoziție

1.4 Cifruri moderne

1.4.1 Cifruri simetrice

1.4.2 Cifruri asimetrice

1.5 Concluzii la capitolul 1

2. PROIECTAREA ȘI REALIZAREA APLICAȚIEI INSTRUCTIVE ”METODE CLASICE DE CRIPTARE”

2.1 Etapele proiectării

2.2.1 Introducere în Java

2.2.2 Crearea și rularea programelor Java cu ajutorul platformei Eclipse

2.3 Descrierea instrumentelor Java utilizate

2.3.1 Componentele de bază

2.3.2 Clasele Java utilizate

2.3.3 Metodele clasei MainJFrame

2.3.4 Metodele clasei AffinJFrame

2.4 Concluzii la capitolul 2

3. DESCRIEREA APLICAȚIEI „METODE CLASICE DE CRIPTARE”

3.1 Ghid utilizator

3.1.1 Descrierea meniului de bază a cifrurilor

3.2 Utilitățile aplicației

3.3 Testarea produsului final

3.4 Concluzii la capitolul 3

CONCLUZII GENERALE ȘI RECOMANDĂRI

BIBLIOGRAFIE

ANEXĂ

Aprob

Șef Catedră TIC

Iuri Dubcovețchi, dr., conf. univ.

_________________________

”___” ________________ 2015

S A R C I N A

pentru teza de licență a studentului grupei TI-41 Crețu Alexandr

Tema: „Elaborarea unei aplicații demonstrative Metode Clasice de Criptare”

aprobată prin ordinul nr____ din ”___” _____________ 2015

Conținutul notei explicative 1. Analiza algoritmilor, metodelor și sistemelor clasice de criptare. 2. Elaborarea și realizarea unui algoritm și respectiv unei aplicații pentru criptarea și decriptarea mesajelor prin intermediul principalelor cifruri clasice. 3. Analiza algoritmului elaborat.

Lista materialului grafic 1. Clasificarea algoritmilor, metodelor existente de criptare.2. Structura algoritmului de criptare și decriptare. 3. Rezultatele cercetărilor și testărilor algoritmului elaborat.

Data înmânării sarcinii: ”___” _____________ 2015.

Executant

Crețu Alexandr,

Studentul grupei Ti-41

Conducătorul tezei

Aureliu Zgureanu, dr. conf. univ.

ADNOTARE

Crețu Alexandr, Elaborarea unui program demonstrativ „Metode clasice de criptare’’, teză de licență la specialitatea Tehnologii Informaționale, Chișinău, 2015.

Acest proiect cuprinde introducerea, trei capitole, concluzii respectiv cu recomandări, bibliografia din 31 titluri. Ea este perfectată pe 75 pagini, conține 20 figuri și 10 tabele.

Cuvinte cheie: criptografie, securitate, sistem.

Domeniul de studiu al tezei este securitatea sistemelor informatice.

Scopul și obiectivele lucrării constă în cercetarea, proiectarea și elaborarea unui software pentru criptarea și decriptarea mesajelor cu ajutorul metodelor clasice de criptare.

Semnificația teoretică a lucrării constă în cercetarea cifrurilor clasice și elaborarea unui algoritm ce le imbină pentru realizarea unei aplicatii intructiv metodice.

Valoare aplicativă a lucrării: Aplicația elaborată poate fi cu succes utilizată în sistemul de invățămănt pentru familiarizarea studenților cu algoritmii clasici de criptare.

ABSTRACT

Cretu Alexandr, „Develop a demonstration of classical encryption methods ” thesis for specialty Information Technologies, Chisinau, 2015.

This project contains the introduction, three chapters, conclusions and recommendations, bibliography of 31 titles. It consist of 75 pages, and including 20 figures and 10 tables.

Keywords: cryptography, security, system.

Field of study of this thesis is security systems.

Goals and objectives is to research, design and development of a software to encrypt and decrypt messages using classical methods of encryption.

The theoretical significance of the work is to include classic ciphers is to research and develop an algorithm that combines them to achieve a methodical application instructions.

Aplicativ value of the work: The application developed can be successfully used in the education system to familiarize students with classical encryption algorithms

АННОТАЦИЯ

Крецу Александр, „Разработка демонстративной программы ” дипломная работа по специальности Информационные технологии, Кишинев, 2015.

Этот проект включает в себя введение, три главы, выводы, и рекомендации, библиография из 31 наименований. Он выполнен на 75 страницах, содержит 20 фигуры и 10 таблицы.

Ключевые слова: криптография, безопасность, система.

Область исследования работы является системы безопасности.

Цели и задачи работы состоит в исследовании, проектировании и разработке программного обеспечения для шифрования и дешифрования сообщения, используя классические методы шифрования.

Теоретическая значимость работы заключается в том щтоб исследовать и разработать алгоритм, который объединяет их для достижения методические инструкции по применению

Прикладная значимость работы является приложение, разработанное которое может быть успешно использована в системе образования, чтобы ознакомить студентов с классических алгоритмов шифрования.

LISTA ABREVIERILOR

PAV – Predare – Aplicare – Verificare

DES – Data Encryption Standard

IDEA – International Data Encryption Algorithm

CAST- Carlisle, Adams, Stafford, Tavares

RC4 – Ron 's Cipher 4

SEAL – Software-Optimized Encryption Algorithm

RDR – Registru de deplasare cu reacție

ISO – International Organization for Standardization

ASCII – American Standard Code for Information Interchange

INTRODUCERE

Actualitatea și importanța problemei abordate. Importanța problemelor de securitate a datelor confidențiale care sunt transmise este actuală încă din cele mai vechi timpuri. În ziua de azi sunt implimentați algoritmi noi de criptare ce corespund cerințelor timpului. La baza lor însă se află aceleași idei care constituiau algoritmii clasici de criptare. Din acest punct de vedere este important ca studenții specialităților IT să cunoască și să opereze cu metodele de criptare clasice, în acest scop este bine venit un software care va inbina principalele cifruri clasice pentru a fi înțelese mai ușor de către viitorii specialiști.

Scopul și obiectivele tezei. Aplicația care este dezvoltată în teza de față are ca scop de a majora procentul de securitate a datelor care respectiv sunt introduse, și anume prin criptarea și decriptarea mesajelor cu chei numerice sau chei alfanumerice. Principalul avantaj este că în aplicația care este dezvoltată ne oferă la dispoziție șase cifruri de criptare, cu care putem să operăm simultan fiecare dintre ele. Aplicația este dezvoltată în limbajul de programare Java, și are la baza sa anumite metode și anumite clase utilizate. Un alt scop al acestei aplicații este că poate fi implimentat cu ușurință în mai multe domenii, ca spre exemplu în învățămănt, deoarece învățarea cu ajutorul tehnologiei urmărește acordarea unui control sporit asupra învățării studentului, prin care acesta își asumă responsabilități cu privire la ceea ce învață, a modului în care învață și a momentului în care decide să învețe.

Instruirea asistată de calculator permite realizarea unei educații bazate pe profilul intelectual al elevului. Pune elevul în situații de interacțiune și comunicare rapidă, realizate într-un mediu care permite o difuzare masivă a conținuturilor și o flexibilitate a timpului prin îmbinarea mijloacelor de comunicare sincrone cu cele asincrone, fiecare din aceste cifruri oferă mediul său de seruritate a datelor, de asemenea este importat să știm că Java este un limbaj complet orientat pe obiecte, în care secțiunile de cod reprezintă obiecte ce interacționează unele cu altele.

Importanța teoretică și valoarea aplicativă a lucrării. Pentru a pune în practică modelul propus, am dezvoltat o aplicație care implimentează aceste crifruri de criptare într-o singură aplicație. Fiecare din aceste cifruri clasice de criptare care leam analizat au un avantaj major unul față de altul, deoarece fiecare are algoritmul său unic și oferă procentul său de securizare. Existența cifrurilor la moment în formă electronică au un dezavantaj mare, deoarece nu ne oferă posibilitatea de a face comparație unul cu altul și nu sunt implimentate într-o aplicație pe care am fi putut să o deschidem și să operăm ușor cu ea.

Noutatea șiințifico-practică a rezultatelor obținute constă în folosirea componentelor a aplicației pentru a cripta și a decripta date. Astfel utilizatorul nu va fi restricționat să caute de sine stătător cifrul dorit, ci va putea cu ușurință de a lucra chiar cu toate șase cifruri concomitent, care sunt introduse în aplicația dată. Pentru a nu depinde de limbajele de programare sau de alte tipuri de softuri care permite deschiderea aplicațiilor, la aplicația de față este necesar doare de instalat Java Runtime Environment și aplicația se deschide fără oricare probleme.

Sumarul compartimentelor tezei. Teza de față conține introducere, trei capitole, concluzii, lista bibliografică din 31 titluri și anexa. Ea este perfectată pe 75 pagini, dintre care 44 pagini constituie partea de bază, conține 20 figuri și 10 tabele.

Capitolul 1 prezină câteva noțiuni despre criptografie, tipurile ei, diferențele dintre cea simetrică și cea asimetrică, și folosirea acestora, la fel în capitolul 1 este descris despre istoria criptografiei și de asemenea este descris despre cifrurile clasice și sunt descrise fiecare în parte.

De asemenea la descrierea fiecărui cifru de criptare sunt demonstrate exemple cu introducerea cheilor a cifrului dat și este criptat un mesaj și la rîndul său este decriptat.

Capitolul 2 este dedicat proiectării aplicației, unde sunt descrise metodele, instrumentele și clasele folosite pentru dezvoltarea softului dat. În continuare în capitolul 2 este descris mediul în care a fost dezvoltat sistemul de față, și este descris că nn program scris în limbajul Java este supus unei compilări în urma căreia se obține un cod intermediar (cod de octeți) care este apoi interpretat și executat de o aplicație specializată, care poate fi asimilată unui procesor virtual.

Capitolul 3 conține implimentarea sistemului și descrierea fiecărei componente, și anume sunt descrise meniurile de bază a softului. În continuarea în capitolul 3 este descris despre utilitățile aplicației, anume unde și în ce domenii poate fi introdusă aplicația, și de asemenea un rol foarte important în are subcapitolul unde este descris despre testarea produsului final.

EVOLUȚIA SISTEMELOR DE CRIPTARE

Utilizarea calculatorului în procesul de învățămănt devine o necesitate în prezent cănd tehnologia informației și a comunicațiilor evoluează din ce în ce mai rapid.

Tănăra generație, care este deja obișnuită deja cu avalanșa de informații multimedia, percepe conceptul de asistare a procesului de învățămănt cu calculatorul ca o cerință foarte mare, cu atăt mai mult cu căt oamenii trebuie să își asigure o dezvoltare căt mai profesională rapidă, iar acest lucru nu se poate realiza decăt dacă fiecare individ are competențele necesare pentru a trăi și a munci într-o societate care se schimbă în permamență.

Calculatorul este perceput de către fiecare om în parte, în funție de vărsta la care face cunoștință cu el, ca un mijloc de recreere, un instrument de lucru, o sursă de documentare. Utilizarea calculatorului a devenit deja o rutină în ceea ce privește comunicarea, informarea sau instruirea. Conceptul în sine de asistare a procesului de învățămănt cu ajutorul calculatorului descrie foarte bine procesul educațional Predare – Aplicare – Verificare (PAV). Materializarea acestui concept se observă foarte bine la clasă prin faptul că :

lecțiile de comunicare a cunoștințelor sunt ușor de predat ;

sistematizarea noilor cunoștințe sunt foarte bine realizate ;

lecțiile sau grupurile de lecții sunt verif prezent cănd tehnologia informației și a comunicațiilor evoluează din ce în ce mai rapid.

Tănăra generație, care este deja obișnuită deja cu avalanșa de informații multimedia, percepe conceptul de asistare a procesului de învățămănt cu calculatorul ca o cerință foarte mare, cu atăt mai mult cu căt oamenii trebuie să își asigure o dezvoltare căt mai profesională rapidă, iar acest lucru nu se poate realiza decăt dacă fiecare individ are competențele necesare pentru a trăi și a munci într-o societate care se schimbă în permamență.

Calculatorul este perceput de către fiecare om în parte, în funție de vărsta la care face cunoștință cu el, ca un mijloc de recreere, un instrument de lucru, o sursă de documentare. Utilizarea calculatorului a devenit deja o rutină în ceea ce privește comunicarea, informarea sau instruirea. Conceptul în sine de asistare a procesului de învățămănt cu ajutorul calculatorului descrie foarte bine procesul educațional Predare – Aplicare – Verificare (PAV). Materializarea acestui concept se observă foarte bine la clasă prin faptul că :

lecțiile de comunicare a cunoștințelor sunt ușor de predat ;

sistematizarea noilor cunoștințe sunt foarte bine realizate ;

lecțiile sau grupurile de lecții sunt verificate în mod automat.

Calculatorul și software-ul acestuia sunt considerate a fi instrumente tehnologice reprezentative ale prezentului, care urmează să fie adaptate și valorificate în actul educațional. Apariția și răspăndirea instruirii asistate de calculator și a e-learning-ului desemnează demersul educativ modern, care nu doar favorizează construcția activă și flexibilă a cunoștințelor, ci și reduce restricțiile de ordin temporal, social și spațial. În același timp, progresul ascendent al tehnologiei informației și comunicațiilor a generat preocupări serioase în ceia ce privește utilizarea calculatorului în procesul de instruire.

Softurile educaționale este un produs – program special pentru a fi utilizat în procesul de învățare. Este de menționat faptul că softurile educaționale trebuie privite ca un instrument complementar de educație, prin care să se urmărească obiectivele, scopurile și finanțările propuse de programa educațională. Astăzi există softuri educaționale complexe care încurajează construcția activă a cunoștințelor, asigurănd contexe semnificative pentru învățare, promovănd reflexia șistimulănd activitatea intelectuală.

Instituția de învățământ trebuie să țină pasul cu tehnologia, să înțeleagă și să anticipeze impactul asupra modului de învățare. Din momentul în care calculatoarele au fost întroduse în programele educaționale, acestea le oferă celor ce se instruiesc o libertate și o flexibilitate mai mare, dar și individualitate în clasă. Utilizarea Internetului la clasă a fost o idee care a dat roade rapid. Folosirea eficientă a Internet-ului de către elevi și studenți a dat naștere mai multor proiecte orientate înspre elevi, inițiate de elevi și, nu în ultimul rând, conduse de elevi.

Prin învățarea cu ajutorul tehnologiei se urmărește acordarea unui control sporit asupra învățării studentului, prin care acesta își asumă responsabilități cu privire la ceea ce învață, a modului în care învață și a momentului în care decide să învețe. O consecință a acestei practici o reprezintă necesitatea ca omul să își asume o responsabilitate ridicată în contextul învățării. Ei trebuie să conștientizeze faptul că persoana care predă la clasă nu le va mai spune ce, cum, unde și când să gândească, și că a sosit momentul ca ei să înceapă să o facă.

Necesitatea aplicării metodelor criptografice.

În prezent criptografia este un set de standarde și protocoale pentru codificarea datelor și mesajelor, astfel încât acestea să poată stoca și să transmită mai sigur. Ea stă la baza multor servicii și mecanisme de securitate folosite în INTERNET, folosind metode matematice pentru transformarea datelor, în intenția de a ascunde conținutul lor sau de a le proteja împotriva modificării. Criptografia vă ajută să aveți comunicații mai sigure, chiar și atunci cînd mediul de transmitere (de exemplu, Internetul) nu este de încredere. De asemenea, se poate utiliza pentru criptarea fișierelor sensibile, astfel ca probabilitatea de a fi înțelese de intruși să fie mai mică. Criptografia poate fi utilizată pentru a contribui la asigurarea integrității datelor, precum și la menținerea lor ca secrete. Criptografia vă ajută să verificați originea datelor și a mesajelor prin utilizarea semnăturilor digitale și a certificatelor. Cînd utilizați metode criptografice, cheile criptografice trebuie să rămână secrete. Algoritmii, dimensiunea cheilor și formatele de fișiere pot fi făcute publice fără a compromite securitatea.

Atunci cănd trimitem o scrisoare prin poștă, majoritatea oamenilor obișnuiesc să sigileze plicul. Dacă iam întreba de ce fac asta, probabil că mare parte dintre ei ar spune fie că acționează din reflex sau că fac la fel ca toată lumea, fie că lipirea plicului împedică scrisoarea să se rătăcească. Chiar dacă plicurile nu conțin informații personale sau strict secrete , mulți speră ca scrierile lor să nu fie citite decăt de destinatar, motiv pentru care ei aleg să sigileze plicurile. Cu toate acestea, dacă cineva își dorește cu adevărat să citească conținutul unei scrisori care nu îi aparține, ar putea să o facă foarte ușor, rupând plicul. La fel se întâmplă și în cazul email-urilor, care ar putea fi citite cu ușurință de unii programatori iscusiți. Pentru a evita astfel de neplăceri, am putea apela la criptografie, metoda de codare care ne asigură că scrisoarea va rămâne neînțeleasă pentru intruși, măcar o perioadă de timp, până când aceștia reușesc să găsească cheia cu care a fost criptat un text anumit.Criptografia este o știință destul de veche care a apărut cu necesitatea de a transmite mesaje secrete și de a comunica eficient fără ca dușmanul să cunoască conținutul scrisorii și a textului criptat.

Dar criptografia reprezintă și o ramură a matematicii care se ocupă cu securizarea informației precum și cu autentificarea și restricționarea accesului într-un sistem informatic. În realizarea acestora se utilizează atât metode matematice (profitând, de exemplu, de dificultatea factorizării numerelor foarte mari), cât și metode de criptarea cuantică. Criptologia este considerată ca fiind cu adevărat o știință de foarte puțin timp. Aceasta cuprinde atât criptografia – scrierea secretizată – cât și criptanaliza.

Scurt istoric al evoluției metodelor de criptare

Criptografia este o știință destul de veche care s-a născut din necesitatea de a transmite mesaje secrete și de a comunica eficient fără ca dușmanul să cunoască conținutul scrisorii. Așa cum era de așteptat, primele încercări de a trimite mesaje secrete s-au bazat pe ascunderea propriu-zisă a textului. Unele dintre cele mai vechi exemple au fost semnalate de Herodot în scrierile sale. Prezentând disputele dintre greci și persani, părintele istoriei explică cum numai arta scrierii secrete a salvat Grecia de mânia armatei persane, atunci când elenii nu i-au trimis tribut și daruri lui Xerxes, Regele Regilor. Spre norocul, grecilor, în Persia trăia Demaratos, un grec exilat care deși locuia în orașul persan Susa se simțea încă loial țării natale, așa că a trimis acasă un mesaj prin care să avertizeze conducătorii de pericolul ce îi aștepta. Neputând să trimită o simplă scrisoare, el a ras ceara de pe o tăbliță, a scrijelit mesajul pe lemn și a reacoperit suprafața cu ceară. Conform lui Herodot, grecii nu au știut ce să facă cu tăblița până când, fiica lui Cleomenes și soția lui Leonidas, Gorgo, și-a dat seama că mesajul se afla sub ceara. Mulțumită acestui avertisment trimis printr-o metodă ingenioasa, grecii l-au învins pe Xerxes chiar în ziua atacului, în data de 23 septembrie 480 î.Hr.

Așa a luat naștere steganografia, comunicarea secretă creată prin ascunderea mesajului care s-a manifestat prim mijloace inedite în primele secole, de la tatuarea mesajelor pe scalpul unui sol, așa cum a făcut Histaios atunci când i-a trimis un mesaj de încurajare lui Aristagoras din Milet pentru a-l convinge să lupte împotriva regelui persan, până la scrierea sa pe o bucată de mătase ce urma a fi împăturită și acoperită cu ceară pentru ca mesagerul să o poată înghiți, așa cum era obiceiul la vechii chinezi.[13]

În Cartea Codurilor scrisă de Simon Singh, autorul susține că istoria europeană îl indică drept prim mare cartograf pe Giovanni Soro, care a fost numit în funcția de secretar criptograf al Veneției în 1506. Soro era faimos în toată Italia iar statele prietene îi trimiteau mesaje pentru a le descifra. Chiar și Vaticanul, care la ora aceea era al doilea centru activ de analiză, apela la serviciile lui. Probabil cel mai reprezentativ și cunoscut caz care a implicat criptanaliza a fost cel al Reginei Maria a Scoției, a cărei soartă a fost hotărâtă de un petec de hârtie. În anul 1568, Maria merge în Anglia unde caută refugiu, fiind alungată de nobilime, însă Regina Elisabeta I, o arestează sub pretextul că și-ar fi omorât propriul soț. De fapt, adevăratul motiv era că Maria, o catolică, reprezenta o amenințare pentru verișoara ei Elisabeta care încerca să persuadeze poporul și să adopte protestantismul. În 1586, după 18 ani de închisoare, ea primește de un val de scrisori cu mesaje criptate de la susținători. Mai mulți tineri plănuiesc să o elibereze pe Maria și să o înlăture pe "uzurpatoarea" Elisabeta, fiica nelegitimă a lui Henric.[11]

În 1918, inventatorul german Arthur Scherbius a construit o mașină criptografică care avea la bază discul de cifrare creat în secolul al XV-lea, o invenție a unui arhitect italian, pe numele său Leon Alberti. Enigma, așa cum a fost botezată mașina, a devenit în scurt timp cel mai de temut sistem de criptare din istorie. Cu ajutorul acestei mașini, expeditorul putea să tasteze textul în clar, iar mașina genera mesajul criptat. La rândul său, destinatarul, dotat și el cu o Enigma și un exemplar al cărții de coduri, tasta textul cifrat pentru a genera mesajul în clar. În acest caz, chiar dacă inamicul captura o astfel de mașină, decriptarea mesajului era una dificilă în lipsa configurațiilor inițiale folosite pentru scrierea mesajului. Fără cartea de coduri, inamicul trebuie să încerce toate cele 17.576 configurații posibile de codare. Cu timpul, mașina a primit îmbunătățiri datorită cărora Germania ajunsese să se bucure de cel mai sigur sistem de comunicații din lume.[21]

După nașterea ARPANet, în 1969, care a permis conectarea a 4 situri într-un an, și care, mai târziu, a dus la dezvoltarea internetului, criptograful Whitfield Diffie, pasionat de problema codurilor, se dovedește a fi capabil să schimbe istoria. El a prevăzut revoluția digitală și gândindu-se că va veni o vreme când aproape fiecare om va avea propriu calculator și-a imaginat situați în care un individ ar dori să cumpere bunuri de larg consum prin intermediul internetului și cu ajutorul unui card de credit. În astfel de cazuri, cele două părți ar trebui să cunoască cheia. Dificultatea, însă, constă în faptul că acea cheie nu poate fi cunoscută de ambele părți decât dacă una dintre ele călătorește până la cealaltă pentru a o împărtăși. Împreună cu profesorul Martin Hellman de la Universitatea Stanford, California, Diffie crează criptografia asimetrică sau criptarea cu cheie publică. Tehnica utilizează o pereche de chei: o cheie publică și o cheie privată. Un utilizator care deține o astfel de pereche își publică cheia publică astfel încât oricine dorește să o poată folosi pentru a îi transmite un mesaj criptat. Numai deținătorul cheii secrete (private) este cel care poate decripta mesajul astfel criptat. Metaforic vorbind, criptografia asimetrică poate fi imaginată astfel: un lacăt poate fi închis de oricine apasă pe el, dar numai deținătorul cheii îl mai poate deschide.

Așa cum a prezis Diffie la începutul anilor 70, omenirea a intrat în Epoca Informației, o eră postindustrială unde cel mai de preț bun este informația. Schimbul de informație digială este o parte integrată a societății și miliarde de e-mailuri sunt trimise zi de zi. Banii se transmit cu rapiditate prin cyberspațiu și se estimează că zilnic, jumătate din PIB-ul lumii trece prin rețeaua Societății Internaționale de Telecomunicații Financiare Interbancare. În acest context, este de înțeles de ce în Epoca Informației, criptografia reprezintă una din cele mai importante științe. Informațiile care circulă de la un capăt al lumii la altul, prin intermediul internetului trebuie să fie protejată. Timp de 2000 de ani criptografia a fost importantă pentru regi, regine, guverne și armată, dar acum ea facilitează și dezvoltarea afacerilor și chiar protejarea intimității.

Metode clasice de criptare

Criptografia clasică este criptografia dinaintea calculatorului, de unde și denumirea de criptografie pre-computațională. În criptografia clasică, algoritmii erau bazați pe caracter și constau dintr-o serie de transformări elementare (substituții, transpoziții) ale caracterelor textului clar. Unii algoritmi aplicau aceste transformări în mod repetat, îmbunătățind în acest mod securitatea algoritmului. În criptografia modernă bazată pe calculator (criptografie computațională), lucrurile s-au complicat, dar multe dintre ideile criptografiei clasice au rămas nemodificate.

În primii 3000 de ani dezvoltarea ei nu a fost una continuă. În unele locuri criptologia se năștea și murea odată cu civilizația ce i-a dat naștere. În altele ea a rezistat pătrunzând în literatură pentru ca generațiile următoare să poată urca spre nivele mai înalte ale criptologiei. Înaintarea spre aceste nivele era lentă și anevoioasă. Mai multe erau pierdute decât păstrate. Cunoștințele acumulate au căpătat amploare numai la începutul Renașterii europene. O regula de baza în criptografie stabilește necesitatea cunoașterii metodei generale de criptare de către orice criptanalist. Acest principiu are la bază constatarea ca pentru a inventa, testa și instala o nouă metodă de criptare este necesară o cantitate prea mare de efort pentru ca acest procedeu să fie practic. In consecința, cel mai important element devine cheia de criptare. Cheia constă într-un șir de caractere care definește / selectează una sau mai multe criptări potentiale. Spre deosebire de metoda generală, care, in mod tradițional, se schimbă doar la cațiva ani, in zilele noastre cheia poate fi schimbată oricăt de des este necesar. Modelul de bază al criptării folosețte o metodă generală cunoscută, care este parametrizata cu o cheie secretă, ce poate fi schimbată.
Componența secretă a criptării este cheia, a carei lungime devine foarte importantă. In mod evident, cu cat cheia este mai lungă, cu atăt elementele ei sunt mai greu de determinat. De exemplu, pentru o secventa de n cifre (0,…,9), exista 10 n posibilitati de a o crea. Astfel, pentru determinarea unei secvente de 6 cifre ar trebui parcurse 1 milion de posibilitati. In cazul in care cheile ar contine litere, numarul de alternative creste.[13]

1.3.1. Cifrul Cezar

Cifrul lui Cesar (sau Cezar). În acest cifru fiecare literă a textului clar este înlocuită cu o nouă literă obținută printr-o deplasare alfabetică. Cheia secretă k, care este aceeași la criptare cât și la decriptare, constă în numărul care indică deplasarea alfabetică, adică k€{1, 2, 3,…, n–1}, unde n este lungimea alfabetului. Criptarea și decriptarea mesajului pentru cifrul Cezar poate fi definită de formulele :

c = ek(x) = x + k (mod n),

m = dk(y) = y – k (mod n),

unde x este reprezentarea numerică a caracterului respectiv al textului clar. Funcția numită Modulo (a mod b) returnează restul împărțirii numărului întreg a la numărul întreg b. Această metodă de criptare este numită așa după Iulius Cezar, care o folosea pentru a comunica cu generalii săi, folosind cheia k = 3. Pasul de criptare al cifrului lui Cezar este de obicei încorporat în scheme mai complexe precum Cifrul Vigenère (vezi mai jos).[21]

Tabelul 1.1 Exemplu pentru un cifru Cezar cu cheia k=3

De exemplu, pentru k = 3 avem :

ek(S) = 18 + 3 (mod 26) = 21 = V

dk(V) = 21 – 3 (mod 26) = 18 = S

Exemplu: Textul clar

„EXEMPLIFICARE CEZAR”,

prin aplicarea cheii k = 3 se transformă în textul criptat

„HAHPSOLILFDUH FHCDU”.

Cifrul lui Cezar este foarte ușor de spart, deci este un cifru foarte slab. Astfel, un criptanalist poate obține textul clar prin încercarea celor 25 de chei. Nu se știe cât de util era cifrul Cezar în timpul când era folosit de către cel de la care îi provine numele, dar este probabil ca el să fie destul de sigur, atât timp cât numai câțiva dintre inamicii lui Cezar erau în stare să scrie și să citească, dar mai ales să cunoască concepte de criptanaliză.

1.3.2. Cifrul Affin

Cifrul affin putem spune că este o generalizare a cifrului Cezar.

Cheia :k = {(a, b) | a, b E Z26 = {0, 1, 2, …, 25}, cmmdc(a, 26) = 1}, iar funcțiile de criptare și decriptare (pentru o cheie k = (a, b)) sunt :

ek(x) = ax + b (mod 26),

dk(y) = a −1 y + a −1 (26 − b) (mod 26).

De exemplu, pentru a = 7, b = 16 funcția de criptare este ek(x) = 7x + 16, care poate fi reprezentată cu Tabelul 1.2:

Tabelul 1.2 Exemplu pentru cifrul afin cu cheia k = (7, 16)

Astfel, textul clar LA MULTI ANI se criptează în PQ WAPTU QDU.

Deoarece = 15 (mod 26), decriptarea se realizează matematic folosind funcția :

Dk (y)=15y+15(26−15)(mod 26)=15y+15·11 (mod 26)=15y + 9 (mod 26).

Condiția cmmdc(a, 26) = 1 asigură de asemenea injectivitatea funcției ek . De exemplu, pentru ek(x) = 10x + 1, A și N se transformă ambele în B, iar O nu apare ca imagine în alfabetul substituției.

Orice cheie k a cifrului afin este determinată complet de valorile întregi (a, b) pentru care cmmdc(a, 26) = 1. Sunt posibile 12 valori pentru a: 1, 3, 5, 7, 9, 11, 15, 19, 21, 23, 25 și 26 valori pentru b, care se iau independent de a, cu o singură excepție a = 1, b = 0 (care se exclude deoarece nu conduce la nici o criptare). Așadar mulțimea cheilor în acest caz este alcătuită din:

12·26 – 1 = 311

chei diferite, număr suficient de pentru atacul prin forța brută.[11]

1.3.3. Cifrul Vigenere

Cifrul Vigenere. La fel ca cifrul Cezar, cifrul Vigenere deplasează literele, dar, spre deosebire de acesta nu se poate sparge ușor în 26 combinații.

Criptarea se face în felul următor:

Ci=Mi +Ki (mod 26).

Cheia poate fi, de exemplu, k = (21, 4, 2 19, 14, 17) și ar provoca deplasarea primei litere cu 21, = + 21 (mod 26), a celei de a doua cu 4, = + 4 (mod 26), ș.a.m.d. până la sfârșitul cheii și apoi de la început, din nou. Cheia este de obicei un cuvânt, pentru a fi mai ușor de memorat –cheia de mai sus corespunde cuvântului „vector”. Metoda cu deplasare multiplă oferă protecție suplimentară din două motive:

primul motiv este că ceilalți nu cunosc lungimea cheii.

cel de al doilea motiv este că numărul de soluții posibile crește; de exemplu, pentru lungimea cheii egală cu 5, numărul de combinații care ar fi necesare la căutarea exhaustivă ar fi 265 = 11 881 376.

Decriptarea pentru cifrul Vigenere este asemănătoare criptării. Diferența constă în faptul că se scade cheia din textul cifrat,

Mi= Ci-Ki (mod 26).

Pentru simplificarea procesului de cifrare se poate utiliza următorul tabel, numit Tabula Recta.

Aici toate cele 26 cifruri sunt22 situate pe orizontală și fiecărui cifru îi corespunde o anumită literă din cheie, reprezentată în colana din stânga tabelului. Alfabetul corespunzător literelor textului clar se află în prima linie de sus a tabelului. Procesul de cifrare este simplu – este necesar ca având litera x din cheie și litera y din textul clar să găsim litera textului cifrat care se află la intersecția liniei x și coloanei y. a b c d e f.

Tabelul 1.3 Tabula Recta pentru cifrul Vigenere

Se poate de procedat și în conformitate cu ecuațiile ce definesc cifrul Ci=Mi +Ki (mod 26) și Mi=Ci – Ki(mod 26), așa cum este arătat în exemplul ce urmează.[11]

Exemplu. De cifrat, utilizând cifrul Vigenere, mesajul „Per aspera ad astra” folosind cheia

K= SUPER. Pentru a cifra sau descifra mai întâi facem corespondența următoare:

Tabelul 1.4 Numerotarea literilor

Apoi alcătuim și completăm tabelul:

Tabelul 1.5 Criptarea mesajului

C= HYGEJHYGERVUHXIS.

Pentru decriptare procedăm la fel, cu = –(mod 26) apoi alcătuim și completăm tabelul:

Tabelul 1.6 Decriptarea mesajului

M = PERASPERAADASTRA.

1.3.4. Cifrul Polybios

În cifrul Polibios pentru fiecare alfabet se construiește un careu aparte de cifrare, de cele mai dese ori cu numărul de coloane și linii egal (însă nu e o condiție necesară). Dimensiunile careului depind de lungimea n a alfabetului. Pentru a crea careul se iau două numere întregi, produsul cărora e cel mai aproape de n. Liniile și coloanele se numerotează. După aceasta literele alfabetului se înscriu în acest careu în ordinea apariției. Dacă nu sunt suficiente celule pentru literele alfabetului se pot înscrie întro celulă 2 litere (de frecvența cât mai redusă).[21]

Pentru alfabetul latin, putem avea careuri Polibios 5×5, după cum este reprezentat în Tabelul 1.4:

Tabelul 1.7 Exemple de tabele ale cifrului Polibios

În operația de criptare, fiecare caracter m va fi reprezentat printr-o pereche de litere (x, y), unde x, y E {A, B, C, D, E} (unde ABCDE este cheia cifrului) sau x, y E{1, 2, 3, 4, 5} (cheia este 12345) care dau linia, respectiv coloana pe care se află M.

Sunt diverse versiuni ale sistemului Polybios. Astfel, dacă se folosesc drept coordonate cifrele 1, 2, 3, 4, 5 în loc de A, B, C, D, E, sistemul a fost folosit în penitenciarele rusești și de către prizonierii americani din Vietnam. Este foarte simplu de învățat și poate fi aplicat folosind diverse semne drept coordonate-chei (cifre, puncte, figuri, etc). Cifrul Polibios a fost utilizat de asemenea în cadrul altor sisteme de criptare, cum ar fi sistemul nihilist, cifrul ADFGVX (utilizat de armata germană în primul război mondial) sau sistemul Bifid, inventat de Dellastell în 1901. Punctul slab al sistemelor de criptare monoalfabetice constă în frecvența de apariție a caracterelor în text. Dacă un text criptat este suficient de lung și se cunoaște limba în care este scris textul clar, sistemul poate fi spart printr-un atac bazat pe frecvența apariției literelor într-o limbă.

Sunt construite diverse structuri de ordine relativ la frecvența apariției literelor în fiecare limbă europeană. De obicei, cu cât un text criptat este mai lung, cu atât frecvența literelor folosite se apropie de această ordonare generală. O comparare între cele două relații de ordine (cea a caracterelor din textul criptat și cea a literelor din alfabetul limbii curente) conduce la realizarea câtorva corespondențe (literă text clar – literă text criptat), ceea ce stabilește în mod univoc cheia de criptare. Pentru sistemul Cezar este suficientă stabilirea unei singure perechi; pentru sistemul afin trebuiesc două perechi.

1.3.5. Cifrul Playfair

Cifrul Playfair se folosea în scopuri tactice de către forțele militare britanice în timpul celui de-al doilea război al Burilor (1899-1902) dar și în primul război mondial. La fel a fost utilizat de către australieni și germani în timpul celui de-al doilea război mondial. El era utilizat deoarece era suficient de rapid în aplicare și nu necesita nici un utilaj special. Scopul principal al utilizării lui era protecția informației importante (însă nu și secrete) pe parcursul unei lupte. La momentul când criptanaliștii inamici spărgeau cifrul, informația deja nu mai era utilă pentru inamic. Utilizarea cifrului Playfair în prezent nu are sens deoarece laptop-urile moderne pot sparge cu ușurință cifrul în câteva secunde. Primul algoritm de spargere pentru Playfair a fost descris în anul 1914 de către locotenentul Iosif O. Moubornom într-o broșură de 19 pagini.

Tabelul 1.8 Exemplu de cifru Playfair

Primele litere din pătrat reprezintă un cuvânt cheie k (literele care se repetă se scriu o singură dată, în acest exemplu cheia fiind k=PLAYFAIR), după care pătratul se completează cu literele alfabetului, fără repetarea literelor. Cifrarea se executa după următoarele reguli:

dacă sunt dispuse în vârfurile opuse ale unui dreptunghi, atunci sunt caracterele din celelalte vârfuri ale dreptunghiului, fiind în aceeași linie cu m1. De exemplu AB devine PD, deci AB → PD;

dacă și se găsesc într-o linie, atunci și se obțin printr-o deplasare ciclică spre dreapta a literelor și . De exemplu AF → YP iar XM → MI;

dacă și se află în aceeași coloană atunci și se obțin printr-o deplasare ciclică a lui , de sus în jos. De exemplu RC → CK iar LU → RL etc.;

pentru separarea liniilor identice alăturate se introduc niște caractere de separare care, de regula, au frecventa de apariție redusă, cum sunt de exemplu literele X, Q în limba româna. În cazul în care numărul de caractere în textul clar este impar se procedează la fel. La descifrare aceste litere introduse se omit.

Descifrarea se executa după reguli asemănătoare cu cele de cifrare.

Exemplu. Folosind exemplul de mai sus (k = PLAYFAIR) textul clar „VINE IARNA” obținem textul cifrat „TE VD EP KE YE”. Aici am introdus la sfârșitul mesajului litera X iar AX → YE. La descifrare după sensul mesajului se omite această literă.

1.3.6. Cifrul de Transpoziție

Criptarea prin metoda transpoziției este o tehnică mai eficientă decât criptarea prin substituție, dar are, la rândul ei, o mulțime de dezavantaje. Textul criptat prin metoda transpoziției păstrează toate caracterele textului inițial, dar în altă ordine obținută prin aplicarea algoritmului ce va fi prezentat în continuare.

Criptarea prin transpoziție constă în scrierea textului inițial din care sau eliminat spațiile și semnele de punctuație într-o matrice de dimensiune M×N și interschimbarea anumitor linii (sau coloane) între ele. Textul criptat se obține prin scrierea caracterelor din noua matrice de pe fiecare coloană în parte, începând cu colțul din stânga-sus. Dacă lungimea textului inițial este mai mică decât numărul de elemente ce pot fi scrise în matrice, atunci textul se completează cu elemente aleatoare, până ajunge la dimensiunea M·N.

Pentru textul „Misiunea a fost îndeplinită”, care are lungimea de 24 de caractere, se pot alege mai multe matrice de dimensiune M×N, o posibilitate ar fi ca matricea să aibă 4 linii și 6 coloane, dar pentru ca textul să fie mai greu de decodificat trebuie să conțină și caractere alese aleator, sau într-un mod mai inteligent, care să îngreuneze munca celui care dorește să afle conținutul secret din mesajul criptat. Fie am ales o matrice care are 5 linii și 6 coloane. Textului inițial i se adaugă 6 caractere aleatoare și se obține textul Misiun eaafos tîndep linită xyztwu care se scrie în matricea din partea stângă, așa cum e arătat în Tabelul 1.6:

Tabelul 1.9 Exemplu de cifru cu transpoziție

Prin scrierea liniilor 1, 2, 3, 4, 5 în ordinea 5, 3, 4, 1, 2, se obține matricea din partea dreaptă. Textul criptat care se obține este: xtlMe yîiia znnsa tdiif wetuo upăns.

Transpoziție cu cheie. Pentru ca procesul de decriptare să fie mai simplu și să nu mai fie nevoie de ordinea în care au fost puse liniile din matricea creată, se folosește o versiune a criptării prin transpoziție care se bazează pe o cheie. Pentru a cripta un text folosind o cheie și metoda transpoziției, se alege o cheie ale cărei litere determină ordinea în care se vor scrie coloanele din matricea aleasă. Pentru a afla ordinea în care vor fi scrise coloanele din textul inițial, se ordonează alfabetic literele din cheie, și fiecărei litere i se asociază numărul de ordine din șirul ordonat. Lungimea cheii trebuie să fie egală cu numărul de coloane din matrice.[16]

Considerăm textul anterior, scris într-o matrice de dimensiuni 5×6, și cheia „vultur”. Literele din cheie se ordonează alfabetic și se obține șirul: l, r, t, u, u, v. Indicele 1 este asociat cu litera l, indicele 2 cu litera r, indicele 3 cu litera t, indicele 4 cu prima literă u din cheie, indicele 5 cu a doua literă u din cheie, iar indicele 6 este asociat cu litera v.

Pentru a scrie coloanele, pentru fiecare indice i din șirul ordonat se caută indicele j, care reprezintă poziția literei cu indicele i, din cheie și se scrie coloana j, astfel:

Tabelul 1.10 Exemplu de transpoziție cu cheie

Textul cifrat care se obține în final este:

sannz nspău ifdit iaîiy uoetw Metlx

1.4. Cifruri moderne

Criptografia modernă utilizează în principiu aceeași algoritmi ca și criptografia tradițională (transpoziția și substituția), dar accentul cade pe complexitatea algoritmilor. Obiectivul criptografic din actuala perioadă este de a concepe algoritmi de criptare atât de complecși și de ireversibili încât chiar și în situația în care atacatorul (sau criptanalistul) având la dispoziție cantități mari de text criptat la alegerea sa, el să nu poată face nimic fără cheia secretă.

În criptografia modernă un sistem criptografic (criptosistem) este definit ca o structură cu cinci componente:

P = { t / t T* } care este spațiul textelor în clar, scrise pentru un alfabet nevid T (în mod obișnuit T={0,1})

K spațiul cheilor de criptare, kK

Familia funcțiilor de criptare dependentă de chei și de un algoritm de criptare E

Ek : P C , Ek = {ek / ek(t)=w și ek este injectivă}

Familia funcțiilor de decriptare dependentă de chei și de un algoritm de decriptare D

Dk : C P , Dk = { dk / dk(ek( t )) = t t P }

C spațiul mesajelor cu text criptat unde:

C={ w / k K, aP, w = Ek(a) }

Pentru ca un sistem criptografic să fie “bun” (principiile au fost enunțate încă din secolul XVII de Francisc Bacon) el trebuie să îndeplinească următoarele condiții:

Fiind date ek și aP să fie ușor de calculat ek(a).

Fiind date dk și wC să fie ușor de determinat dk (w).

Să fie imposibil de determinat t din w, fără a cunoaște dk.

Textul criptat să fie un text banal fără suspiciuni.

Dacă funcția ek este bijectivă atunci sistemul este simetric , iar dacă funcția ek nu este bijectivă atunci sistemul este asimetric.

Există două tipuri de sisteme simetrice (cunoscute și sub denumirea de sisteme cu cheie secretă): sisteme care se bazează pe algoritmi de tip bloc și sisteme care se bazează algoritmi de tip șir. Algoritmii de tip bloc acționează asupra blocurilor de text în clar și text cifrat. Algoritmii de tip șir se aplică șirurilor de text în clar și text cifrat, la nivel de bit sau octet.

1.4.1. Cifruri simetrice

Criptarea cu cheie secretă, cunoscută sub numele de criptare simetrică, utilizează o singură cheie pentru a cripta sau decripta datele.

Securitatea algoritmului cu cheie secretă este deseori legată de cât de bine este păstrată sau distribuită cheia secretă.

Algoritmii de chei secrete sunt împărțiți în algoritmi de bloc (block cipher), care procesează datele în blocuri măsurate la un moment dat, sau algoritmi de șiruri (stream cipher), care procesează la un moment dat un singur byte. Algoritmii de bloc excelează în criptarea datelor de lungime fixă, în timp ce algoritmii de stream-uri sunt utilizați îndeosebi la criptarea stream-urilor aleatoare de date, precum traficul de rețea între două routere.

Între avantajele criptării cu cheie simetrică se numără rapiditatea procesului de criptare și simplitatea utilizării acestuia. Dezavantajele sunt legate de distribuirea în siguranță a cheii secrete și de managementului cheilor.

Printre exemplele cele mai întâlnite de algoritmi cu cheie simetrică cu criptare în bloc se numără Data Encryption Standard (DES), International Data Encryption Algorithm (IDEA), CAST-128 (numit după inventatorii acestuia – Carlisle, Adams, Stafford, Tavares) și Blowfish. Printre algoritmii de criptare a stream-urilor se numără Ron 's Cipher 4 (RC4) și Software-Optimized Encryption Algorithm (SEAL).

Criptosistemele cu chei simetrice sunt criptosistemele pentru care cheile folosite la criptare și decriptare sunt identice, de unde și denumirea de criptosisteme cu chei simetrice.

Ke = Kd = K (1.1)

Cheia K este secretă, fapt ce conduce la denumirea de sisteme cu cheie secretă. Criptarea și decriptarea se realizează extrem de simplu dacă se cunoaște K :

EK (M ) = C (1.2)

DK (C) = DK (EK (M )) = M (1.3)

După tipul algoritmului folosit, criptosistemele cu chei simetrice se clasifică în două categorii:

cu cifruri bloc (block ciphers) sunt cifrurile care acționează asupra unei diviziuni a textului în clar; blocurile de la intrare se cifrează independent, lungimea tipică a blocurilor fiind n=32 ÷ 128 biți. Transformările de bază folosite pentru criptare și decriptare sunt substituțiile și transpozițiile, repetate iterativ.

cu cifruri secvențiale (stream ciphers): mesajul de la intrare este considerat ca o succesiune (șir) de simboluri. Criptarea operează asupra textului în clar simbol cu simbol. Cheia K este generată de un registru de deplasare cu reacție (RDR) având starea inițială S0 controlată de o cheie compactă.

Figura 1.1 Schema de aplicare a unui algoritm simetric

1.4.2. Cifruri asimetrice

Criptografia cu cheie publică sau criptografia asimetrică utilizează o pereche de chei. Una dintre aceste chei, cheia publică, este distribuită și publicată, în timp ce cealaltă cheie trebuie ținută secretă. Dată fiind numai cheia publică, este imposibil să se determine cheia secretă. Chiar și cu cel mai modern hardware, algoritmii de generare a cheilor publice utilizează intensiv procesorul.[8]

Datorită acestei probleme legate de rapiditatea algoritmului, aceștia nu sunt utilizați pentru a cripta datele brute. În schimb, datele sunt criptate cu un algoritm simetric. Multe din tehnologiile prezentate utilizează o combinație de algoritmi cu cheie publică și secretă în care criptografia cu cheia publică este utilizată pentru a securiza cheia simetrică care este utilizată la criptarea datelor brute. O cheie simetrică care a fost securizată utilizând un algoritm cu cheie publică se numește plic digital.

Cheile private corespunzătoare cheilor publice trebuie întotdeauna securizate. Unul dintre mecanismele utilizate pentru stocarea cheii private este smart card-ul – un dispozitiv electronic asemănător unei cărți de credit. Un smart card criptografic are abilitatea de a genera și stoca chei în el însuși, asigurându-se astfel faptul că cheia privată nu este expusă către mașina locală. Smart card-urile pot fi vulnerabile la atacuri, dar oferă o mult mai mare securitate față de stocarea cheilor private pe o mașină locală.

În locul unei singure chei, secrete, criptografia asimetrică folosește două chei, diferite, una pentru cifrare, alta pentru descifrare. Deoarece este imposibilă deducerea unei chei din cealaltă, una din chei este făcută publicã fiind pusă la dispoziția oricui dorește să transmită un mesaj cifrat.[17]

Doar destinatarul, care deține cea de-a doua cheie, poate descifra și utiliza mesajul. În sistemele cu chei publice, protecția și autentificarea sunt realizate prin transformări distincte.

Criptosistemele cu chei publice sunt criptosistemele pentru care cheile folosite la criptare și decriptare diferă, de unde derivă și denumirea de sisteme asimetrice:

Ke≠Kd (1.4)

Cheia publică – așa cum îi spune și numele – poate fi accesata public (asemănător unei cărți de telefon), iar cheia privată este secretă. Caracteristic acestor sisteme este că funcția de criptare și cea de decriptare se realizează ușor dacă se cunosc Kd și Ke, dar aflarea lui M, dacă se cunosc C și Ke este computațional nefezabilă.

Tehnica cheilor publice poate fi folosită și pentru autentificarea mesajelor, prin așa numita semnătură digitală, fapt care i-a sporit popularitatea. Folosind algoritmi cu cheie publică (asimetrici), se creează criptosisteme cu două chei, prin care doi utilizatori (procese) pot comunica cunoscând fiecare doar cheia publică a celuilalt.[11]

Figura 1.2 Schema de aplicare a unui algoritm asimetric

1.5. Concluzii la capitolul 1

Cripografia și laturile conexe criptografiei reprezintă un important complex de instrumente care ne prmite să criptăm mesaje și care ne oferă posibilitatea de a majora procentajul securității informaționale.

Acest lucru este foarte important deoarece în prezent se pune un foarte mare accent pe baza securității informaționale, și chiar dacă ne uităm în istoria care este descrisă în capitolul 1, vom vedea că și în trecut securitatea informațională avea un rol foarte important. Fiecare metodă de criptare are felul său de criptare sau decriptare, prin introducerea a două chei sau prin introducerea a unei singure, sau prin introducerea unor chei numerice sau alfanumerice, de unde reiese și procentajul de securitatea a mesajelor criptate prin diferența metodelor descrise în compartimentul 1.

De asemenea este descris eficiența criptării cu cheie simetrică și cu cheie asimetrică, unde vedem că criptarea cu cheie simetrică utilizează o singură cheie pentru a cripta sau decripta datele. Securitatea algoritmului cu cheie secretă este deseori legată de cât de bine este păstrată sau distribuită cheia secretă iar cea asimetrică utilizează o pereche de chei. Una dintre aceste chei, cheia publică, este distribuită și publicată, în timp ce cealaltă cheie trebuie ținută secretă. Dată fiind numai cheia publică, este imposibil să se determine cheia secretă.

2. PROIECTAREA ȘI REALIZAREA APLICAȚIEI INSTRUCTIVE ”METODE CLASICE DE CRIPTARE”

2.1. Etapele proiectării

Pe baza cerințelor din faza de analiză, acum se stabilește arhitectura sistemului: componentele sistemului, interfețele și modul lor de comportare:

Componentele sunt blocurile de construcție ale produsului. Acestea pot fi create de la zero sau reutilizate dintr-o bibliotecă de componente. Componentele rafinează și capturează semnificația detaliilor din documentul cerințelor;

Interfețele ajută la îmbinarea componentelor. O interfață reprezintă granița dintre două componente, utilizată pentru comunicarea dintre acestea. Prin intermediul interfeței, componentele pot interacționa;

Comportamentul, determinat de interfață, reprezintă răspunsul unei componente la stimulii acțiunilor altor componente.

Documentul de proiectare descrie planul de implementare a cerințelor. Se identifică detaliile privind limbajele de programare, mediile de dezvoltare, dimensiunea memoriei, platforma, algoritmii, structurile de date, definițiile de tip globale, interfețele, etc.

În această fază trebuie indicate și prioritățile critice pentru implementare. Acestea sugerează sarcinile care, dacă nu sunt executate corect, conduc la eșecul sistemului. Totuși, chiar dacă prioritățile critice sunt îndeplinite, acest fapt nu duce automat la succesul sistemului, însă crește nivelul de încredere că produsul va fi o reușită.

Folosind scenariile tipice și atipice, trebuie realizate compromisurile inerente între performanță și complexitatea implementării. Analiza performanțelor presupune studierea modului în care diferitele arhitecturi conduc la diferite caracteristici de performanță pentru fiecare scenariu tipic. În funcție de frecvență de utilizare a scenariilor, fiecare arhitectură va avea avantaje și dezavantaje. Un răspuns rapid la o acțiunea a utilizatorului se realizează deseori pe baza unor costuri de resurse suplimentare: indecși, managementul cache-ului, calcule predictive etc. Dacă o acțiune este foarte frecventă, ea trebuie realizată corect și eficient. O acțiune mai rară trebuie de asemenea implementată corect, dar nu este evident care e nivelul de performanță necesar în acest caz. O situație în care o astfel de acțiune trebuie implementată cu performanțe maxime este închiderea de urgență a unui reactor nuclear.

În proiectarea și realizarea aplicației instructive ”CIFRURI CLASICE” am folosit metoda CASCADĂ, care ne permite ca activitățile fundamentale de proces specificativ, unde dezvoltarea, validarea și evoluția sunt reprezentate ca faze separate precum specificarea cerințelor, proiectarea software, implementare, testare.

În modelul cascadă, cunoscută și sub numele de modelul „secvențial”, are loc mai întâi faza de analiză, apoi cea de proiectare, urmată de cea de implementare și testare, iar în final operarea și mentenanța. Echipele care se ocupă de fiecare fază pot fi diferite, iar la fiecare tranziție de fază poate fi necesară o decizie managerială.

Principalele etape ale modelului cascadă sunt următoarele:

Analiza și definirea cerințelor. Serviciile, constrângerile și obiectivele sistemului sunt inițial stabilite prin consultare cu utilizatorii sistemului. Aceste cerințe sunt definite în detaliu și servesc ca specificație a sistemului.

Proiectarea sistemului și a software-ului. Procesul de proiectare a sistemului partiționează cerințele ca fiind de natură hardware sau software. Etapa aceasta are de asemenea rolul de a stabili arhitectura generală a sistemului. Proiectarea software-ului prespune identificarea și descrierea abstractizărilor software ale sistemului fundamentale și a interacțiilor între acestea.

Implementarea și testarea sistemului. În această etapă sunt integrate și testate diversele unități individuale de program în cadrul unui sistem complet pentru a se asigura faptul că cerințele software cerute au fost îndeplinite. După testare sistemului software este livrat clientului.

Operarea și mentenanța. În mod normal (deși nu și necesar) aceasta reprezintă cea mai lungă dintre fazele modelului. Sistemul este instalat și dat spre folosire. Mentenanța presupune corectarea erorilor ce nu au fost descoperite în etapele anterioare a ciclului de dezvoltare, îmbunătățirea implementării unităților sistemului și îmbunătățirea serviciilor oferite de sistem pe măsură ce sunt descoperite și adoptate noi cerințe de exploatare.

Rezultatul fiecărei etape reprezintă unul sau mai multe documente ce sunt aprobate (eng. „signed off”). Următoarea fază nu poate începe până când faza anterioară nu s-a terminat. În practică însă fazele pot fi întrețăsute astfel încât informații din fiecare etapă13 pot influența rezultatele altei etape. În timpul proiectării, de exemplu, pot fi identificate diverse probleme legate de cerințe incorecte formulate în etapa de analiză. Procesul software, în practică, nu este un simplu model secvențial ci presupune o secvență de iterații ale activităților de dezvoltare.

Metodologia secvențială este potrivită când complexitatea sistemului este mică iar cerințele sunt statice. Ea spune că mai întâi trebuie să ne gândim ce trebuie construit, apoi să stabilim un plan de lucru și apoi să realizăm proiectul, ținând cont de standardele de calitate. De asemenea, se aliniază metodelor de inginerie hardware. Forțează menținerea unei discipline de lucru care evită presiunea scrierii codului înainte de a cunoaște precis ce produs va trebui de fapt construit.

Figura 2.1 Metoda Cascadă

De multe ori, în procesul de implementare mam aflat în situația de a programa înainte de finalizarea analizei, ceea ce conduce inevitabil la descoperirea unor părți de cod inutile sau care contribuie foarte puțin (poate chiar și ineficient) la funcționalitatea produsului final. Totuși, acest cod devine un balast foarte dificil de abandonat și greu de schimbat. Această metodologie forțează analiza și planificarea înaintea implementării, o practică foarte nimerită în multe situații.

Codul sursă reprezintă reprezintă textul scris folosind formatul și sintaxa unui limbaj de programare ales, în cazul nostru limbajul de programare este limbajul Java. Codul este special conceput pentru a facilita munca, astfel oferind posibilitatea acestuia să specifice operatiile ce vor fi realizate de către calculator. El poate fi văzut ca o modalitate prin care utilizatorul informează calculatorul ce și cum are de făcut în scopul manipulării anumitor date. Odată ce un program a fost realizat el va fi convertit în cod binar numit cod mașină, care poate apoi fi citit si executat. Prin scrierea de cod utilizatorul informează un compilator sau interpretor cum să realizeze codul binar folosit pentru rularea programului. Majoritatea aplicațiilor sunt distribuite într-un format de tip executabil, care nu conține cod sursă. Utlizatorul nu trebuie să cunoască modul cputănd fi interpretat, dar și compilat. De asemenea, este un sistem care funcționează independent pe orice sistem de operare, lucru apreciat pentru ca nu consuma foarte multe resurse. Un alt element important din construcția acestui limbaj de programare este tocmai robustețea sa, reprezentată prin eliminarea erorilor comune care apar de obicei in producția de limbaje de programare. Iar veste bună pentru utilizatorii săi este ca variantele cele mai noi permit crearea unor documente în care pot fi înserate cu ușurință diverse animații și elemente multimedia.
Într-o lume în care competiția este cheia succesului pentru unii intreprinzători, va veți intreba, desigur, de ce să alegeti Diosoft ca furnizor pentru aplicații desktop si servicii de programare.
Răspunsul este concret și simplu. Pentru ca Diosoft, folosindu-se de experiența sa acumulată în domeniu, vă va oferi aplicații desktop și servicii de programare Java la comandă, de calitate exceptională, permanent actualizate, și la un raport calitate/preț exceptional.

Potrivit specialistilor în IT, dezvoltarea pieței de aplicații desktop și de softuri de programare, în special programarea Java  este extrem de importantă pentru utilizatori. Existența unor asemenea aplicații și servicii conduce la o diversificare a procesului de creație în domeniu. De asemenea, variatele aplicații desktop oferă utilizatorului exact acel grad de eficiență și profesionalism dorit, întrucât reprezintă tocmai acele instrumente necesare pentru a-și putea face munca apreciată, dar mai ales cunoscută. Aplicațiile desktop recente se caracterizează prin accesibilitate ușoară – printr-un simplu click, adaptabilitate – majoritatea functionează sau au forme specifice de adaptare pentru orice tip de computer folosit sau cu orice sistem de operare, multe se actualizează constant pentru a vă oferi dumnevoastră cele mai noi variante de lucru, iar în caz de blocare nu vă vor afecta întregul sistem de operare.

În funcție de modul de execuție al programelor, limbajele de programare se împart în două categorii :

interpretate: instrucțiunile sunt citite linie cu linie de un program numit interpretor și traduse în instrucțiuni mașină; avantaj: simplitate; dezavantaj: viteza de execuție redusă;

compilate: codul sursă al programelor este transformat de compilator într-un cod ce poate fi executat direct de procesor; avantaj: execuție rapidă; dezavantaj: lipsa portabilității, codul compilat într-un format de nivel scăzut nu poate fi rulat decât pe platforma pe care a fost compilat.

Programele Java sunt atât interpretate cât și compilate

Codul de octeți este diferit de codul mașină. Codul mașină este reprezentat de o succesiune de 0 și 1; codurile de octeți sunt seturi de instrucțiuni care seamănă cu codul scris în limbaj de asamblare. Codul mașină este executat direct de către procesor și poate fi folosit numai pe platforma pe care a fost creat; codul de octeți este interpretat de mediul Java și de aceea poate fi rulat pe orice platformă care folosește mediul de execuție Java.

Fazele prin care trece un program Java sunt:

Cod sursa Java -> (compilare) -> Cod de octeti -> (interpretare)

2.2.1. Introducere în Java.

Java este la ora actuală unul dintre cele mai folosite limbaje de programare, ce poate fi

utilizat atăt pentru aplicații desktop, căt și Web. Java este un limbaj complet orientat pe obiecte, în care secțiunile de cod reprezintă obiecte ce interacționează unele cu altele.

Inainte de a prezenta în detaliu aspectele tehnice ale limbajului Java, să amintim caracteristicile sale principale, care l-au transformat într-un interval de timp atăt de scurt într-una din cele mai pupulare opțiuni pentru dezvoltarea de aplicații, indiferent de domeniu sau de complexitatea lor.

Simplitate – elimină supraîncărcarea operatorilor, moștenirea multiplă ¸si toate ”facilitățile” ce pot provoca scrierea unui cod confuz.

Ușurința în crearea de aplicații complexe ce folosesc programarea în rețea, fire de execuție, interfață grafică, baze de date, etc.

Robustețe – elimină sursele frecvente de erori ce apar în programare prin renunțarea la pointeri, administrarea automată a memoriei și elim-inarea pierderilor de memorie printr-o procedură de colectare a obiectelor care nu mai sunt referite, ce rulează în fundal (”garbage collector”).

Complet orientat pe obiecte – elimină complet stilul de programare procedural.

Securitate – este un limbaj de programare foarte sigur, furnizănd mecanisme stricte de securitate a programelor concretizate prin: verificarea dinamică a codului pentru detectarea secvențelor periculoase, impunerea unor reguli stricte pentru rularea proceselor la distanță.

Neutralitate arhitecturală – comportamentul unei aplicații Java nu depinde de arhitectura fizică a mașinii pe care rulează.

Portabililtate – Java este un limbaj independent de platforma de lucru, aceeași aplicație rulănd fără nici o modificare ¸si fără a necesita recompilarea ei pe sisteme de operare diferite cum ar fi Windows, Linux, Mac OS, Solaris, etc. lucru care aduce economii substanțiale firmelor dezvoltatoare de aplicații.

Este compilat și interpretat, aceasta fiind soluția eficientă pentru obținerea portabilității.

Performanță – deși mai lent decăt limbajele de programare care generează executabile native pentru o anumită platformă de lucru, compilatorul Java asigură o performanță ridicată a codului de octeți, astfel încăt viteza de lucru puțin mai scăzută nu va fi un impediment în dezvoltarea de aplicații oricăt de complexe, inclusiv grafică 3D, animație.

Salvarea fișierelor sursă se va face în fișiere care au obligatoriu extensia java, nici o altă extensie nefiind acceptată. Este recomandat ca fișierul care conține codul sursă al clasei primare să aibă același nume cu cel al clasei, deși acest lucru nu este obligatoriu.

Pentru compilare vom folosi compilatorul javac din distribuția J2SDK. Apelul compilatorului se face pentru fișierul ce conține clasa principală a aplicației sau pentru orice fișier/fișiere cu extensia java. Compilatorul creează căte un fișier separat pentru fiecare clasă a programului. Acestea au extensia .class și implicit sunt plasate în același director cu fișierele sursă.

Limbajului Java lucrează în mod nativ folosind setul de caractere Unicode. Acesta este un standard internațional care înlocuiește vechiul set de caractere ASCII și care folosește pentru reprezentarea caracterelor 2 octeți, ceea ce înseamnă că se pot reprezenta 65536 de semne, spre deosebire de ASCII, unde era posibilă reprezentarea a doar 256 de caractere. Primele 256 caractere Unicode corespund celor ASCII, referirea la celelalte făcăndu-se prin \uxxxx, unde xxxx reprezintă codul caracterului.

O altă caracteristică a setului de caractere Unicode este faptul că întreg intervalul de reprezentare a simbolurilor este divizat în subintervale numite blocuri, căteva exemple de blocuri fiind: Basic Latin, Greek, Arabic, Gothic, Currency, Mathematical, Arrows, Musical, etc.

Mai jos sunt oferite căteva exemple de caractere Unicode:

\u0030 – \u0039 : cifre ISO-Latin 0 – 9;

\u0660 – \u0669 : cifre arabic-indic 0 – 9;

\u03B1 – \u03C9 : simboluri grecești α – ω;

\u2200 – \u22FF : simboluri matematice ;

\u4e00 – \u9fff : litere din alfabetul Han (Chinez, Japonez, Coreean)

2.2.2. Crearea și rularea programelor Java cu ajutorul platformei Eclipse.

La pornirea mediului Eclipse este cerută  calea unui director care va fi spațiul de lucru al platformei. Aici se vor salva proiectele  și vor fi stocate datele necesare rulării proiectelor în lucru.

Figura 2.2 Selecția spațiului de lucru

Dacă  se utilizează  același spațiu de lucru pentru toate proiectele, se poate bifa căsuța de validare Use this as the default and do not ask again, pentru a elimina această  întrebare la fiecare pornire a platformei.

O perspectivă  indică  numărul de ferestre vizibile, poziția lor  și opțiunile vizibile în aceste ferestre, în funcție de limbajul utilizat în proiectul deschis. În capturile de ecran prezentate în acest îndrumar se va folosi perspectiva Java. Perspectiva curentă  se poate schimba de la butoanele dedicate situate în partea dreaptă sus a workbench-ului Eclipse.

Figura 2.3 Componența perspectivei Java

Crearea unui proiect nou :

Din meniul File→New  se alege opțiunea Java Project.

Un program scris în limbajul Java este supus unei compilări în urma căreia se obține un cod intermediar (cod de octeți) care este apoi interpretat și executat de o aplicație specializată, care poate fi asimilată unui procesor virtual. Această aplicație 2 poartă denumirea de "mașină virtuală java" (eng. Java Virtual Machine, JVM denumită mai nou JRE – Java Runtime Environment). Codul rezultat în urma compilării poate fi transferat și apoi executat pe orice calculator pe care există instalat JVM.

Aplicațiile Java pot fi realizate în mai multe moduri. Cel mai economic mod este scrierea aplicației într-un editor (Notepad este suficient) urmată de compilare și execuție, ambele realizate prin comenzi în fereastra Command.

Aplicațiile scrise în Java conțin una sau mai multe clase. De regulă clasele sunt conținute în fișiere distincte ale căror nume coincid cu numele claselor. Una dintre clase va conține metoda principală, main(), care definește punctul de început a aplicației. Deși inițierea în Java folosind un editor simplu, compilatorul javac și procesorul virtual java poate fi o abordare în învățarea limbajului, în cele ce urmează aplicațiile vor fi dezvoltate folosind unul dintre mediile integrate,

Figura 2.4 Crearea unui proiect Java în Eclipse

În fereastra care se deschide trebuie specificat numele proiectului. Este indicat să fie selectată  opțiunea Create separate folders for sources and class files din secțiunea Project layout, pentru a nu amesteca fișierele ce conțin codul sursă  cu cele ce conțin codul de octeți, executabil. Pentru un proiect complet nou este bine să se aleagă opțiunea Create new project in workspace a secțiunii Contents. Apăsarea butonului Next va determina accederea la mai multe opțiuni, cum ar fi importul unor librării suplimentare, modificarea directoarelor unde vor fi salvate sursele și codul de octeți al proiectului, etc. Crearea  și deschiderea în workbench a noului proiect se realizează  prin apăsarea butonului Finish.

2.3. Descrierea instrumentelor Java utilizate.

2.3.1. Componentele de bază

Componentele de bază care am folosit pentru dezvoltarea acestui soft sunt :

Jframe- Fereastra de bază a aplicației

Jpanel- Conteiner care conține mai multe componente de bază

Jlabel – componentă Java pentru a ne oferi posibilitatea de a scrie text

JscrollPane

JtextArea – Componentul de introducere a textului

Jbutton – buton care ne oferă posibilitatea de a crea evenimente

JcomboBox

JtextField

Jmenu

JmenuItem

JmenuBar

Pentru a crea evenimentele utilizăm clasa Listener din Biblioeca ActionListener.

Figura 2.5 Cuvinte cheie în Java

2.3.2. Clasele Java utilizate.

Clasele reprezintă principiile de bază ale programării orientate obiect. Clasele reprezintă noțiuni abstracte, povești, modele (blueprints), ce descriu:

caracteristicile, atributele unui obiect; reprezintă ceea ce știe sau ce este obiectul;

ce știe sa facă obiectul, comportamentul acestuia descris de metodele sale.

Pe baza claselor, programatorul poate defini ceva concret, obiecte. Astfel, prin instanțierea clasei (atributele definite in clasă, sunt inițializate cu valori) se obțin variabile de tip obiect. Pentru cei care au cunostințe de C, o clasă este asemenea unei structuri, definița prin struct, în care poti defini și metode.

Termenul de Programare Orientată Obiect descrie o metodologie prin care aplicația software poate fi descompusă în obiecte, ce reprezintă componente dezvoltate pentru a rezolva probleme mai mici. Obiectivul Programării Orientată pe Obiect este de a descompune soluția complexă în probleme mai mici (clase) și mai ușor de gestionat.

La definirea de clase se ține cont de:

într-un fișier Java, .java, pot fi definite mai multe clase;

într-un fișier Java, doar o clasă poate fi definită publică;

fișierul sursă Java care conține clasă publica se are același nume ca și clasa (la nivel case sensitive);

blocul unei clase este definit de { si } ;

dacă într-un fișier sursă .java sunt definite mai multe clase, atunci prin compilarea fișierului se obține bytecode, fișiere .class, pentru fiecare clasă.

În prezentul program am folosit următoarele clase :

MainJFrame

AffinJFrame

CezarJFrame

PlayfairJFrame

PolibiosJFrame

TranspozJFrame

VigenereJFrame

Clasele reprezintă principiile de bază ale programării orientate obiect. Clasele reprezintă noțiuni abstracte, povesti, modele (blueprints), ce descriu:

caracteristicile, atributele unui obiect; reprezintă ceea ce știe sau ce este obiectul;

ce stie sa faca obiectul, comportamentul acestuia descris de metodele sale;

Pe baza claselor,programatorul poate defini ceva concret, obiecte. Astfel, prin instanțierea clasei (atributele definite in clasă, sunt inițializate cu valori) se obțin variabile de tip obiect.

Când scriem programe într-un limbaj orientat pe obiect, nu definim obiecte ci clase de obiecte, unde o clasă reprezintă un șablon pentru mai multe obiecte cu caracteristici similare. Clasele întrupează toate caracteristicile unei mulțimi particulare de obiecte. De exemplu, ne putem gândi la clasa Copac care descrie caracteristicile tuturor copacilor (au rădăcini, trunchi și frunze, cresc, produc clorofilă, își schimbă frunzele, etc). Clasa Copac reprezintă un model abstract pentru conceptul de copac – pentru a planta un copac, a-l atinge, a-i rupe o frunză sau a-l tăia avem nevoie de un copac concret, altfel spus de o instanță a copacului. Bineînțeles că, odată ce avem clasa copac, putem crea oricâte instanțe diferite ale copacului respectiv – ”copaci concreți”. Aceștia pot avea caracteristici diferite (unii sunt înalți, alții pitici, unii își pierd frunzele toamna, alții nu, etc) .

Comportamentul unei clase determină cum operează o instanță a unei clase. De exemplu, cum reacționează un obiect atunci când un alt obiect sau o altă clasă îi cere să facă ceva. De exemplu clasa Mașină. Comportamentul unei mașini constă în: pornește, oprește, frânează, schimbă viteza, schimbă direcția, etc.

Pentru a defini comportamentul unei clase se definesc metode, echivalentul funcțiilor sau procedurilor din alte limbaje de programare. Spre diferență de alte limbaje de programare, în Java nu se pot defini funcții în afara claselor. Prin urmare, metodele sunt funcții definite în interiorul claselor care operează în instanțele claselor respective.

Metoda unui obiect poate fi apelată de către un alt obiect sau o altă clasă.

Ca și în cazul atributelor, există două tipuri de metode: metode instanță și metode clasă. Metodele instanță operează doar în cadrul instanței unei clase. În schimb, metodele clasă operează în interiorul clasei.

2.3.3. Metodele clasei MainJFrame.

jMenuItem2ActionPerformed

jMenuItem3ActionPerformed

jMenuItem5ActionPerformed

jMenu6ActionPerformed

jMenuItem4ActionPerformed

jMenuItem6ActionPerformed

jButton1ActionPerformed(java.awt.event.ActionEvent evt)

jButton2ActionPerformed(java.awt.event.ActionEvent evt)

jButton4ActionPerformed(java.awt.event.ActionEvent evt)

jButton3ActionPerformed(java.awt.event.ActionEvent evt)

jButton5ActionPerformed(java.awt.event.ActionEvent evt)

public static void main(String args[]) de l-a aceasta metoda se inceme executia programului.

Multe atribute ale unei clase sunt stocate în variabile de instanță. O variabilă  de instanță  reprezintă o locație de memorie folosită pentru stocarea datelor specifice unei instanțe a clasei. Să presupunem că în definiția clasei sunt definite două variabile de instanță și sunt create cinci obiecte ale clasei. Java rezervă cinci seturi de variabile de instanță, independente unul față de celălalt. Totuși, fiecare dintre cele cinci obiecte folosește același set de metode – cele asociate clasei.

Etapele scrierii și citirii unui obiect în/din fișier.

trebuie implementată  interfața Serializable în clasa a cărei obiecte urmează să  le scrieți în fișier. Interfața Serializable permite ca instanțele clasei respective să fie transformate într-un flux de octeți care poate fi scris pe disc sau trimis pe rețea. Această  operație se numește serializare. La citirea obiectului, fluxul de octeți este deserializat și este reconstituită instanța clasei.

crearea unei instanțe a clasei  și atribuirea valorii variabilelor de instanță. Apoi se deschide fișierul apelând constructorul clasei FileOutputStream, căruia i se transmite numele fișierului. Operatorul new returnează  o referință  a unui obiect FileOutputStream. Această  referință  este transmisă  constructorului clasei ObjectOutputStream, care definește metodele folosite pentru scrierea unui obiect într-un fișier.

după  crearea unei instanțe ObjectOutputStream se scrie un obiect în fișier. Pentru acest lucru se apelează metoda writeObject() și se transmite o referință a obiectului dorit a fi scris în fișier. Variabilele statice ale obiectului nu sunt salvate. Ultimul pas constă în apelarea metodei close(), pentru a închide fișierul.

Citirea unui obiect dintr-un fișier este la fel de simplă  ca  și scrierea unui obiect într-un fișier. Totuși, în locul clasei ObjectOutputStream se folosește clasa ObjectInputStream, iar în locul clasei FileOutputStream se folosește clasa FileInputStream. Se citește un obiect din fișier apelând metoda readObject(), definită  în clasa ObjectInputStream. Metoda readObject() returnează o referință de tip Object. Această referință trebuie convertită  la tipul specific al clasei obiectului citit.

2.3.4. Metodele clasei AffinJFrame.

jComboBox1ActionPerformed

jButton1ActionPerformed

jButton2ActionPerformed

private String cript(String text, String key1, String key2) { – impleminteaza algoritmul de criptare Affin

-private String decript(String text, String key1, String key2) – implementeaza algoritmul de decriptare Affin

public static void main(String args[]) { de l-a aceasta metoda se inceme executia programului.

După cum am arătat în capitolul 2, o clasă este un șablon pentru mai multe obiecte cu caracteristici asemănătoare. Un obiect este o colecție de variabile (atribute) și metode asociate descrise în clasă.

Clasa poate fi asemănată cu un tip de date iar obiectul cu o variabilă. Dacă se declară o variabilă folosind numele unei clase ca și tip, această variabilă conține o referință către un obiect al clasei respective. Cu alte cuvinte, variabila nu va conține obiectul actual ci o referință către un obiect / o instanță a clasei. Deoarece folosind numele unei clase ca și tip se declară o referință către un obiect, aceste tipuri poartă numele de tipuri referință.

Se disting două caracteristici principale ale obiectelor în Java:

obiectele sunt întotdeauna alocate dinamic. Durata de viață a unui obiect este determinată de logica programului. Ea începe atunci când obiectul este creat și se termină în momentul în care obiectul nu mai este folosit, el fiind distrus de un mecanism de curățenie oferit de limbajul Java – garbage collector (colectorul de gunoaie).

obiectele nu sunt conținute de către variabile. O variabilă păstrează o referință către un obiect. o referință este similară cu ceea ce se numește pointer în alte limbaje de programare cum ar fi C++. Dacă există două variabile de același tip referință și o variabilă este atribuită celeilalte, ambele vor referi același obiect. Dacă informația din obiect se modifică, schimbarea este vizibilă în ambele variabile.

O variabilă referință poate conține și o referință către nimic. Valoarea unei asemenea variabile referință este null.

În Java nu se permite tipurilor referință să fie convertite către tipuri primitive sau invers.

Modificatorii clasei sunt:

public: dacă o clasă este declarată public, ea este accesibilă oricărei alte clase. Dacă modificatorul public nu apare, clasa poate fi accesată doar de către clasele din pachetul căruia aparține clasa (dacă nu se specifică un anume pachet, toate clasele din directorul curent sunt considerate a fi în același pachet). Spațiul de căutare este definit de variabila sistem CLASSPATH.

abstract: o clasă declarată abstractă este o clasă șablon adică ea este folosită doar pentru a crea un model comun pentru o serie de subclase. O clasă trebuie declarată abstractă daca ea este incomplet implementată adică nu toate metodele ei sunt definite. O astfel de clasă nu poate fi instanțiată, dar poate fi extinsă de alte clase care să implementeze metodele nedefinite. Doar clasele abstracte pot să conțină metode abstracte (metode declarate dar nu implementate).

final o clasă poate fi declarată finală dacă a fost complet definită și nu se dorește să fie extinsă (să aibă subclase); cu alte cuvinte ea nu poate apare în clauza extends a altei clase.

Dacă clasa este abstractă înseamnă că ea conține metode neimplementate și, prin urmare trebuie extinsă de o altă clasă care să le implementeze. Dar, dacă ar fi și finală, nu ar putea fi extinsă.

După numele clasei se pot specifica, dacă este cazul, clasele moștenite și interfețele implementate. O clasă poate moșteni o singură clasă, prin urmare dacă apare clauza extends ea este urmată doar de numele unei clase. Însă, o clasă poate implementa mai multe interfețe, ale căror nume apar după clauza implements și trebuie separate prin virgulă. Asupra moștenirii și interfețelor se găsesc mai multe detalii în subcapitolele „Moștenire” respectiv „Interfețe”

Corpul unei clase urmează după antetul clasei și este cuprins între acolade. Conține:

declararea variabilelor instanță și clasă care împreună formează variabilele membru;

definirea metodelor instanță și clasă care împreună formează metodele membru.

2.4. Concluzii la capitolul 2

În acest compartiment a fost stabilit limbajul și mediul de programare unde a fost realizat aplicația de bază „Metode Clasice de Criptare”. Au fost descrise unele metode a claselor utilizate și au fost descrise însuși clasele java utilizate. De asemenea a fost descris cum se face crearea și rularea programelor Java cu ajutorul platformei Eclipse, și am descris că Java este la ora actuală unul dintre cele mai folosite limbaje de programare, ce poate fi utilizat atăt pentru aplicații desktop, căt și Web. Java este un limbaj complet orientat pe obiecte, în care secțiunile de cod reprezintă obiecte ce interacționează unele cu altele și la începutul copartimentului 2 sunt descrise etapele proiectării, unde este descris că documentul de proiectare descrie planul de implementare a cerințelor. Se identifică detaliile privind limbajele de programare, mediile de dezvoltare, dimensiunea memoriei, platforma, algoritmii, structurile de date, definițiile de tip globale, interfețele, etc.

3. DESCRIEREA APLICAȚIEI ”METODE CLASICE DE CRIPTARE”

3.1. Ghid utilizator

Interfața grafică (GUI) a aplicației „CIFRURI CLASICE” este simplă, și oricare dintre utilizatori poate sa interacționeze cu ușurință funcționalitățile acestei aplicații. Interfața grafică oferă pictograme și indicatori vizuali, în contrast cu interfețele bazate pe text care oferă doar nume de comenzi (care trebuie tastate) sau navigația text.

Fereastra de bază a aplicației este formată din :

Meniu – Fereastra unde sunt reprezentate 6 butoane sub numele (cifruri clasice), unde fiecare buton ne oferă posibilitatea de a alege cifrul dorit:

1.Cifrul Cezar – criptarea și decriptarea cu ajutorul cifrului clasic Cezar ;

2.Cifrul Afin – criptarea și decriptarea cu ajutorul cifrului clasic Affin ;

3.Cifrul Vigenere – criptarea și decriptarea cu ajutorul cifrului clasic Vigenere ;

4.Cifrul Polibios – criptarea și decriptarea cu ajutorul cifrului clasic Polibios ;

5.Cifrul Playfair – criptarea și decriptarea cu ajutorul cifrului clasic Playfair ;

6.Cifrul de Transpoziție – criptarea și decriptarea cu ajutorul cifrului de Transpoziție ;

Aceste 6 butoane sunt reprezentate în fugura 3.1.

Figura 3.1 Meniul de bază

Meniul este compus din 2 itemi, unde fiecare item este compus din subitem:

Aplicație:

1.Ieșire – acest subitem închide toate procesele care sunt executate la moment .

Acest item este reprezentat în figura 3.2

Figura 3.2 Reprezentarea itemului Aplicație

Ajutor:

1.Ce înseamnă criptare – acest subitem permite utilizatorilor care nu cunosc informații despre criptare, cu ce se ocupă criptarea și ce este criptanaliza;

2.Cifruri clasice – în acest subitem este descris ce este criptografia clasică ;

3.Tipuri de crifruri – aici sunt descrise tipurile de criptare, unde este reprezentat ce este ciptarea cu cheie publică și ce sunt semnăturile digitale.

4.Despre program – în subsistemul dat este descrisă informația despre aplicație, versiunea, autorul etc.

Itemul dat este reprezentat în figura 3.3

Figura 3.3 Reprezentarea itemului Ajutor

3.1.1. Descrierea meniului de bază a cifrurilor.

Meniul de bază a cifrurilor care sunt reprezentate în aplicația dată sunt asemănătoare și au aceleași funcționalități, și este descris meniul cifrului Cezar în baza fiecărui cifru.

Primul cifru care este reprezentat în această aplicație este cifrul Cezar, în acest cifru fiecare literă a textului clar este înlocuită cu o nouă literă obținută printr-o deplasare alfabetică. Cheia secretă k, care este aceeași la criptare cât și la decriptare, constă în numărul care indică deplasarea alfabetică, adică k∈{1, 2, 3,…, n–1}, unde n este lungimea alfabetului.

Meniul acestui cifru este reprezentat în figura 3.4.

Figura 3.4 Reprezentarea meniului cifrului Cezar

În acest compartiment al cifrului este reprezentat un cămp cu numele (key) ceia ce ne oferă posibilitatea de a introduce o cheie cu care va fi criptat textul care respectiv este introdus în cîmpul cu numele „Text de intrare”. Deasemenea utilizatorul poate apela la butonul sub numele de „Generarea key”, acest buton ne oferă posibilitatea de a genera o cheie automat, fără ca utilizatorul să introducă manual cheia de la tastatură.

După ce textul a fost criptat, în cîmpul cu numele „Text de ieșire” apare textul criptat, acest text criptat poate fi adăugat simplu în cîmpul cu numele „Text de intrare” cu ajutorul butonului care este aplasat mai jos.

Pentru a decripta utilizatorul va avea nevoie de însuși cheia cu care a fost criptat textul, și este necesar de tastat pe subitemul „Decriptare” care este reprezentat în Figura 3.4.

Meniul cifrului dat are la baza sa și două iteme, care respectiv sunt reprezentate în figura 3.5 și figura 3.6

Figura 3.5 Reprezentarea itemului aplicație

Aplicație

1.Închide – acest subitem închide toate procesele care sunt executate la moment îm baza cifrului Cezar.

Figura 3.6 Reprezentarea itemului Ajutor

Ajutor

În acest item sunt reprezentate 4 subiteme care urmează a fi descrise.

1.Despre Cifrul Cezar – în acest subitem este reprezentat informațiile generale care se referă la cifrul de criptare Cezar. Subitemul dat oferă posibilitatea utilizatorului de a cunoaște informație sumplimentară despre cifrul Cezar.

2.Descrierea Cifrului Cezar Matematic – în acest subitem este reprezentat informație despre ceia că folosind aritmetica modulară prin transformarea literelor în numere conform schemei A = 0, Ă = 1,…, Z = 30. Astfel alfabetul devine o secvență de 31 de numere, iar criptarea unei litere cu poziția din alfabet x printr-o deplasare spre dreapta cu n poziții poate fi descrisă matematic ca[2].

3.Tehnici de spargere – Acest subitem oferă utilizatorului de a cunoaște informații generale despre tehnicile de spargere, și despre probabilele părți slabe a cifrului care este ales de către utilizator.

4.Ajutor – cu ajutorul acestui subitem utilizatorul va avea posibilitatea de a studia principiul de lucru a aplicației date, unde respectiv este descris cum rulează aplicația.

Aceste iteme și subiteme sunt reprezentate în meniul fiecărui cifru prezent în această aplicație și oferă informație ce se adresează la fiecare cifru în parte.

În cazul cifrului Affin este oferită posibilitatea ca să putem introduce cheia (a) și cheia (b) (fig3.7), ceia ce ne oferă o securitate mai înaltă a mesajelor criptate de către utilizator.Respectiv unlele cifruri ne oferă posibilitatea de a introducere cheie Alfanumerică sau Numerică, exemplu este reprezentat în figura 3.8.

Figura 3.7 Exemplu de introducere a două chei

Figura 3.8 Exemplu de introducere a cheiei Numerice și Alfanumerice

3.2. Utilitățile aplicației

Importanța implementării tehnologiei informației și a comunicațiilor în activitatea didactică a devenit în ultimele decenii un laitmotiv al discursului despre educație la toate nivelurile: curriculum, practica didactică, formarea cadrelor didactice, dezvoltarea instituțiilor școlare și politici educaționale.

La baza acestora doresc să spun că aplicația dată este un exemplu foarte bun de instruire, dar și de implimentare intr-un domeniu.

După părerea mea personală această aplicație poate fi introdusă în domeniul milităriei, care are un scop concret de a proteja datele personale a unei țări sau spre exemplu a unei companii sau chiar a datelor persoanelor cu caracter personal. Lumea în care trăim devine din ce în ce mai interdependentă, iar acest lucru se datoreză în mare parte evoluțiilor din domeniul tehnologiei informației și comunicațiilor. Această interdependență crescândă generează numeroase avantaje, cât și dezavantaje, având în vedere faptul că instituții publice și companii private au devenit aproape în totalitate dependente de sistemele informatice pentru a îndeplini activități importante. Așadar, guvernele de peste tot în lume trebuie să se pregătească pentru a face față unor provocări noi care pot apărea în spațiul cibernetic, deoarece viața de zi cu zi a oricărui cetățean, economia națională, precum și securitatea națională a oricărui stat depind în prezent de stabilitatea și securitatea spațiul cibernetic, dar pentru a stabili un procentaj de securitate care ar face față unor atacuri informaționale trebuie de implimentat noi tehnologii și aplicații.

Aceste provocări sunt incluse în conceptul de “securitate cibernetică” care se referă la amenințări, vulnerabilități și necesitatea ca guverne și structuri supra-statale să dezvolte o strategie de securitate cuprizătoare pentru rețeaua lor digitală. Acest lucru implică crearea și finanțarea unor instituții care să se ocupe doar de securitatea cibernetică, realizând planuri pentru prevenirea atacurilor cibernetice, pentru posibilitatea de a avea un răspuns rapid în cazul în care asemenea evenimente au lor, pentru abilitatea de a descoperi persoanele sau organizațiile responsabile pentru acestea astfel încât să fie aduse în fața justiției și, nu în ultimul rând, pentru abilitatea de a înlocui sau repara în cel mai scurt timp componentele afectate ale rețelei digitale. Securitatea cibernetică reprezintă o provocare ce trebuie abordată prin cooperare între diverși actori naționali, precum instituții, companii private sau organizații nonguvernamentale, dar și la nivel internațional, prin cooperarea între state, organizații regionale și globale, având în vedere faptul că securitatea cibernetică este o problemă globală, spre exemplu cum a fost problema companiei „STAR NET” în anul 2014.

Aplicația dată ne descrie 3 categorii de bază :

Confidențialitatea – Aproape fiecare organizație are informații care, dacă sunt divulgate sau furate, ar putea avea un impact semnificativ asupra avantajului competițional, valorii de piață sau a veniturilor. Adițional, o firmă poate fi facută responsabilă pentru divulgarea de informații private.

Integritatea – protecția informațiilor împotriva modificărilor intenționate sau accidentale neautorizate; condiția ca informația din într-un mediu informatic reflectă sursa sau procesele pe care le reprezintă.

Disponibilitatea – se referă la asigurarea ca sistemele de calcul sunt accesibile utilizatorilor autorizați cănd și unde aceștia au nevoie și în formă necesară (condiția ca informația stocată electronic este unde trebuie să fie, cănd trebuie să fie acolo și în formă necesară).

Această aplicație cu ușurință poate fi întrodusă în domeniul învățămăntului deoarece evaluarea asistată de calculator asigură corectarea imediată a răspunsurilor de către elev, dându-și astfel seama ce parte a materiei stăpânește mai puțin. Stocarea rezultatelor elevilor la diferite teste și interpretarea grafică a acestora permite profesorului o analiză rapidă și corectă a rezultatelor. Calculatorul și software-ul acestuia sunt considerate a fi instrumente tehnologice reprezentative ale prezentului, care urmează să fie adaptate și valorificate în actul educațional. Apariția și răspăndirea instruirii asistate de calculator și a e-learning-ului desemnează demersul educativ modern, care nu doar favorizează construcția activă și flexibilă a cunoștințelor, ci și reduce restricțiile de ordin temporal, social și spațial. În același timp, progresul ascendent al tehnologiei informației și comunicațiilor a generat preocupări serioase în ceia ce privește utilizarea calculatorului în procesul de instruire.

Softurile educaționale este un produs – program special pentru a fi utilizat în procesul de învățare. Este de menționat faptul că softurile educaționale trebuie privite ca un instrument cmplementar de educație, prin care să se urmărească obiectivele, scopurile și finanțările propuse de programa educațională. Astăzi există softuri educaționale complexe care încurajează construcția activă a cunoștințelor, asigurănd contexe semnificative pentru învățare, promovănd reflexia șistimulănd activitatea intelectuală.[23]

Aplicația de față poate fi foarte ușor introdusă în ajutorul învățămăntului deoarece învățarea cu ajutorul calculatorului și a elementelor multimedia este o metodă didactică activă.

Instruirea asistată de calculator permite realizarea unei educații bazate pe profilul intelectual al elevului. Pune elevul în situații de interacțiune și comunicare rapidă, realizate într-un mediu care permite o difuzare masivă a conținuturilor și o flexibilitate a timpului prin îmbinarea mijloacelor de comunicare sincrone cu cele asincrone, un exemplu foarte bun și o comparație este cu obiectul Analiza Dispozitivelor Numerice.

Instruirea asistată de calculator permite realizarea unei educații bazate pe profilul intelectual al elevului. Pune elevul în situații de interacțiune și comunicare rapidă, realizate într-un mediu care permite o difuzare masivă a conținuturilor și o flexibilitate a timpului prin îmbinarea mijloacelor de comunicare sincrone cu cele asincrone. In cazul unei instruiri asistate de calculator, interactivitatea este generalizată, oferind celui care învată un feedback permanent, deoarece se produc efecte vizibile și imediate pe ecranul calculatorului. Instruirea asistată de calculator presupune o cercetare a elevului supravegheată și îndrumată de profesor, care îl ajută în realizarea operațiilor tehnice, a celor de documentare, în identificarea legăturilor între informații, conducându-l către o nouă cunoaștere.

Învățarea cu ajutorul calculatorului permite instrumentarea de situații și contexte favorabile realizării de formalizări abstracte ale achizițiilor elevilor și incurajează personalizarea actului educațional prin oferirea unei libertăți de acțiune.

Unitatea de învățare este o parte componentă a modulului de studiu, care are următoarele caracteristici:

Integrează competențe specifice;

Determină formarea unui anumit comportament al cursantului, generat prin integrarea unor competențe specifice;

Este unitară din punct de vedere tematic;

Se desfășoară în mod sistematic;

Se finalizează prin evaluare.

Modulul este structurat pe următoarele trei unități de învățare:

Software educațional;

Clasificarea aplicațiilor de instruire asistată de calculator;

Proiectarea aplicațiilor multimedia pentru educație.

Metoda instruirii asistate de calculator valorifică următoarele operații didactice integrate la nivelul unei acțiuni de dirijare euristică și individualizată a activităților de predare– învățare–evaluare :

organizarea informației conform cerințelor programei adaptabile la capacitățile fiecărui student ;

provocarea cognitivă a studentului prin secvențe didactice și întrebări care vizează depistarea unor lacune, probleme, situații problemă ;

rezolvarea sarcinilor didactice prezentate anterior prin reactivarea sau obținerea informațiilor necesare de la resursele informatice apelate prin intermediul calculatorului ;

realizarea unor sinteze recapitulative după parcurgerea unor teme , module de studiu, lecții, grupuri de lecții, subcapitole, capitole, discipline școlare ;

asigurarea unor exerciții suplimentare de stimulare a creativității elevului ;

Proiectarea Instruirii este știința creării metodelor precise pentru conceperea, dezvoltarea, implementarea, evaluarea și exploatarea (menținerea) structurilor funcționale care facilitează învățarea pentru unități mici sau mari de subiecte științifice, indiferent de complexitatea structurii acestor unități.

3.3. Testarea produsului final

Testarea produselor software este un proces sau o serie de procese, menite să asigure că atunci când se execută un cod de program să facă ceea ce trebuie să facă și nimic altceva. Produsul software trebuie să fie predictibil și consistent, să nu ofere nici o supriză unui utilizator.

Testarea software este ușoară, în anumite metode, datorită faptului că multitudinea de produse software și sisteme de operare sunt mult mai sofisticate decât niciodată, furnizând rutine intrinsece bine testate care pot fi incorporate în aplicație fără ajutorului unui programator care să le construiască de la început. Interfețele grafice (GUI), de exemplu, pot fi construite dintr-o librărie a limbajului de dezvoltare și, dacă aceastea sunt obiecte preprogramate care au fost testate și corectate anterior, nevoia de a testa această parte a unei aplicații personalizate este mult mai redusă.

Testarea reprezintă o etapă importantă in procesul de realizare a produselor software. Tehnicile și metodele moderne de dezvoltare a produselor software au ca scop inlăturarea erorilor de analiză, proiectarea , programarea si obținerea unei aplicații software.În literatură există multe definiții a termenului de software testing, însa toate se rezumă la aceeasi idee: software testing inseamnă operația de a rula un produs software într-o manieră controlată, pentru a vedea dacă acesta se comportă conform specificațiilor. Acest termen se folosește în general alături de alti doi termeni : verificare și validare.Verificarea este procesul de testare a unui obiect, inclusiv un produs software, pentru a îi determina conformitatea și consistența în corelație cu specificațiile sale. Testarea software este de fapt un fel de verificare. Validarea este procesul de confirmare a faptului că produsul indeplinește cererile clientului.

Termenul de bug este adesea folosit pentru a descrie o problemă într-un calculator. Există două tipuri de bug-uri : cele de software și cele de hardware. In această privință testarea software nu ar trebui asociată cu debugging. Debugging-ul este procesul de analiză și localizare a bugului atunci cănd produsul nu se comportă conform așteptărilor. Deși identificarea unor bug-uri vor fi evidente atunci cănd evaluăm softwar-ul , o abordare metodică a acestor probleme este necesară pentru a le rezolva.

Aplicația de bază a fost supusă unor testări și nu oferă utilizatorului nici o surpriză nouă și nici nu execută procese greșite.Unele exemple de testare a aplicației date vor fi reprezentate în figurile ce urmează :

Figura 3.9 Exemplu de criptare fără introducerea cheiei

Dacă se oprețte testarea prea devreme, se riscă apariția de erori la rularea propriu-zisă a sistemului. Dacă testarea continuă pentru o perioadă prea lungă se poate amă na lansarea produsului, fapt ce poate duce la degradarea imaginii companiei sau chiar pierderi de venituri.

Figura 3.10 Exemplu de criptare fără introducerea textului

În aceste imagini este reprezentat cum aplicația este supusă să execute criptarea fără ca să introducem informația necesară, care oferă utilizatorului informație adăugătoare la folosirea acestei aplicații în modul corect.În ambele imagini putem să vedem că aplicația dată nu criptează informații fără a introduce cheie fără text și invers.

Calitatea reprezintă totalitatea caracteristicilor unei entități care are abilitatea de a satisface anumite nevoi implicite sau explicite. Conform DIN-ISO 9126 calitatea software-ului include: siguranța, uzabilitate, eficiență, mentenabilitate și portabilitate și aplicabilitate.

Siguranța reprezintă abilitatea produsului software de a exercita funcțiile cerute în condiții specificate pentru o anumită perioadă de timp sau pentru un anumit număr de cicli. Un exemplu de siguranță a aplicației date este reprezentat în figura 3.11 și figura 3.12 și 3.13 este este demonstrat că aplicația dată execută criptarea și decriptarea strict după criteriile și instrucțiunile introduse de către utilizator.

Uzabilitate – Capacitatea produsului software de a fi înțeles, învațat, utilizat și atractiv pentru utilizator atunci cănd este folosit în anumite condiții.

Mentenabilitate – Ușurința prin care un produs software poate fi modificat pentru a se corecta anumite defecte, pentru a avea noi cerințe, pentru a face ca în viitor mentența să fie mai ușoară sau pentru a se adapta la un mediu schimbat.

Portabilitatea – Ușurinta prin care un produs software poate fi transferat de pe un echipament pe altul sau dintr-un mediu în altul.

Asigurareacalitatii – Parte a managementul calității concentrată pe furnizarea încrederii ca cerințele de calitate vor fi respectate.

Figura 3.11 Exemplu de criptare a unui text

Figura 3.12 Exemplu de decriptare a textului

Figura 3.13 Exemplu de decriptare a textului criptat din figura 3.12 dar cu altă cheie

În figura 3.13 este reprezentat decriptarea textului din figura 3.12 dar cu schimbarea altei chei, ceia ce ne dă dovadă ca nu este posibil și aplicația decripteaza textul dat cu cheia cu care respectiv acesta a fost criptat.

În baza mesajelor criptate și decriptate putem înțelege că criptarea (în engleză encryption) reprezintă transformarea unui mesaj clar într-un format care nu poate fi ușor interpretat de către o persoană neautorizată. La modul general, criptarea reprezintă conversia datelor dintr-un format ușor interpretabil de către oricine, într-un format dificil, sau chiar imposibil de interpretat de către o persoană (sau un sistem), dar ușor de interpretat de către persoanele autorizate. Operațiunea inversă de transformare a mesajului codificat în mesajul clar, original, pentru a putea fi interpretat se numește decriptare (în engleză decryption).

O schem ă de criptare cu chei publice con ține urm ătoarele elemente cum este reprezentat în figura 3.12:

Textul clar: Acesta este un mesaj sau date de intrare pentru algoritmul de criptare.

Algoritmul de criptare: Transform ă textul clar în text cifrat.

Cheia publică și cheia privată: Este o pereche de chei, una utilizată pentru criptare (cea publică) și cealaltă pentru decriptare (cea privată).

Textul cifrat: Textul produs în urma algoritmului de criptare. Pentru un mesaj dat, două chei diferite vor produce două texte cifrate diferite.

Algoritmul de decriptare: Decriptează textul cifrat, în urma căruia rezult ă textul clar.

3.4. Concluzii la capitolul 3

Sistemul prezentat a fost proiectat pentru a oferi siguranța necesară pentru transmiterea datelor necesare confidențiale într-un mod securizat, ceia ce ne oferă aplicația. În timpul testării produsului au fost descoperite unele erori dar au fost cu succes lichidate.

Aplicația realizată este descrisă detaliat în cele două compartimente a lucrării de față, și la fel sunt descrise clasele folosite, mediul de programare a alpicației și ce module sau folosit pentru realizarea aplicației.

De asemenea în compoartimentul trei a fost descris utilitățile aplicației, adică unde poate în ce domenii poate fi introdusă aplicația, unde respectiv sunt descrise unele domenii așa cum ar fi introducerea aplicației în domeniul milităriei sau în procesul învățămîntului.

CONCLUZII GENERALE ȘI RECOMANDĂRIRodica Bita. Criptogr

Similar Posts