Asigurarea Securitatii Tranzactiilor de Date Folosind Metode Criptografice

CUPRINS

ABSTRACT 2

AHHOTAЦИЯ 2

LISTA ABREVIERILOR 3

INTRODUCERE 5

1. ANALIZA METODELOR CRIPTOGRAFICE MODERNE 7

1.1. Noțiuni generale ale criptografiei 7

1.2. Criptografia clasică 12

1.3. Criptografia modernă 17

1.3.1. Criptografia simetrică 17

1.3.2. Criptografia asimetrică 19

1.3.3. Semnături digitale 20

1.4. Concluzii la compartimentul 1 23

2. PRIMUL STANDARD DE CRIPTARE CU CHEIE SECRETĂ 24

2.1. Principii generale ale algoritmului DES 25

2.2. Operațiile de bază ale rundei DES 27

2.3. Criptanaliza DES. 30

2.4. Variante de DES 30

2.5. Cronologia algoritmului de criptare DES 33

2.6. Concluzii la compartimentul 2 34

3. DESCRIEREA ȘI ANALIZA APLICAȚIEI DE CRIPTARE ȘI DECRIPTARE A DOCUMENTELOR 35

3.1. Date generale despre aplicație 35

3.2. Date statistice despre aplicație 38

3.3. Concluzii la compartimentul 3 42

CONCLUZII GENERALE ȘI RECOMANDĂRI 44

BIBLIOGRAFIE 45

ANEXĂ 47

ABSTRACT

Moisei Denis, „Securing transactions data using cryptographic methods” thesis for specialty Applied Informatics, Chisinau, 2014.

The thesis contains the introduction, three chapters, conclusions and recommendations, bibliography of 30 titles. It consists of 62 pages, including 15 figures and 8 tables.

Keywords information security , transaction data , cryptography , encryption.

Field of study of the thesis is information security.

Goals and objectives are to research, design and analysis of applications which perform data encryption required for data transactions.

Novelty and originality of this work is creating of a cryptographically-based application which can serve as a model and a starting point for the realization of other applications that will be used to ensure the security of data transactions.

The theoretical significance of the is analysis of the situation in the field of cryptography, classification of cryptographic methods which can be applied to secure data transactions.

Applicative value of the work: this system can be applied to transactions of the data, the confidentiality of which is required by a very little time.

Implementation results. The developed system has been tested in simulations of data transactions. Data were sent, received and restored without loss.

AHHOTAЦИЯ

Moиceй Дeниc, „Oбecпeчeниe бeзoпаcнocти тpанзакций c данными c пpимeнeниeм кpиптoгpафичecкиx мeтoдoв”, диплoмная pабoта пo cпeциальнocти Пpикладная Инфopматика, Кишинeв 2014.

Пpoeкт включаeт ввeдeниe, тpи главы, вывoды и peкoмeндации, библиoгpафию из 30 наимeнoваний. Oн выпoлнeн на 62 cтpаниц, coдepжит 15 фигypы и 8 таблицy.

Ключeвыe cлoва: инфopмациoнная бeзoпаcнocть, тpанзакции данныx, кpиптoгpафия, шифpoваниe.

Oблаcть иccлeдoвания pабoты являeтcя инфopмациoнная бeзoпаcнocть.

Цeли и задачи pабoты cocтoят в иccлeдoвании, пpoeктиpoвании и анализe пpилoжeния для шифpoвания данныx, нeoбxoдимoй для oпepаций т данныx.

Hoвизна и opигинальнocть pабoты являeтcя coзданиe пpилoжeния ocнoваннoгo на кpиптoгpафичecкиe мeтoды, кoтopoe мoжeт cлyжить в качecтвe мoдeли и oтпpавнoй тoчкoй для peализации дpyгиx пpилoжeний, кoтopыe бyдyт иcпoльзoватьcя для oбecпeчeния бeзoпаcнocти тpанзакций данныx.

Teopeтичecкая значимocть pабoты являeтcя анализ cитyации в oблаcти кpиптoгpафии, клаccификация кpиптoгpафичecкиx мeтoдoв кoтopыe мoгyт быть пpимeнeны для oбecпeчeния тpанзакций c данными.

Пpикладная значимocть pабoты являeтcя тo, чтo эта cиcтeма мoжeт быть пpимeнeна к cдeлкам c данными, кoнфидeнциальнocть кoтopыx актyальна oчeнь кopoткoe вpeмя.

Peзyльтаты внeдpeния. Pазpабoтанная cиcтeма была пpoтecтиpoвана пpи мoдeлиpoвании oпepаций пepeдачи данныx. Данныe были oтпpавлeны, пoлyчeны и вoccтанoвлeны бeз пoтepь.

LISTA ABREVIERILOR

AES – Advanced Encription Standard

DES – Data Encription Standard

EFF – Electronic Frontier Foundation

FIPS – Federal Information Processing Standards

NBS – National Bureau of Standards

INTRODUCERE

Actualitatea și importanța problemei abordate. Una dintre caracteristicile societății moderne o reprezintă Informatizarea. Tehnologii informaționale noi sunt permanent implementate în diverse domenii ale activității umane. Prin utilizarea calculatoarelor și a software-ului respectiv sunt dirijate procese complexe din cele mai diverse domenii de activitate. Calculatoarele stau la baza mulțimilor de sisteme de prelucrare a informației, care înfăptuiesc păstrarea, prelucrarea informației, distribuirea ei către utilizator, realizând astfel tehnologii informaționale moderne.

Odată cu dezvoltarea mecanismelor, metodelor și formelor de automatizare a proceselor de prelucrare a informației crește și dependența societății de gradul de securitate a proceselor de gestionare a informației, realizat prin intermediul diverselor tehnologii informaționale aplicate, de care depinde bunăstarea, sau uneori și viața multor oameni.

Soluționarea problemelor legate de securitatea informației constituie obiectul de studiu al Criptografiei, care este o ramură a matematicii moderne, ce se ocupă de elaborarea metodelor matematice capabile să asigure confidențialitatea, autentificarea și non-repudierea mesajelor, precum și integritatea datelor vehiculate. Criptografia este un set de standarde și protocoale pentru codificarea datelor și mesajelor, astfel încât acestea să poată fi stocate și transmise mai sigur. Ea stă la baza multor servicii și mecanisme de securitate, folosind metode matematice pentru transformarea datelor, în intenția de a ascunde conținutul lor sau de a le proteja împotriva modificării. Criptografia ne ajută să avem comunicații mai sigure, chiar și atunci când mediul de transmitere (de exemplu, Internetul) nu este de încredere. Ea poate fi utilizată pentru a contribui la asigurarea integrității datelor, precum și la menținerea lor în calitate de date secrete, ne permite să verificăm originea datelor și a mesajelor prin utilizarea semnăturilor digitale și a certificatelor.

Astfel, într-o societate informatizată, Criptografiei îi revine un rol important în asigurarea funcționalității acesteia, deoarece orice domeniu de activitate este bazat pe un volum tot mai mare de informație, folosit în diverse procese manageriale.

Scopul și obiectivele tezei. Ținând cont de faptul că Criptografia este unul din principalele instrumente de protecție a informației, inclusiv în procesul de tranzacție a datelor, în teză se face un studiu al sistemelor actuale de criptare și se propune o aplicație software ce va permite de utilizat un sistem de criptare pentru cifrarea fișierelor text înainte de a face schimbul de date, și respectiv descifrarea acestor fișiere la primirea lor de către adresat.

Noutatea științifico-practică a rezultatelor obținute constă în faptul că am aplicat un algoritm de criptare pentru a putea cripta fișierele text, fără a introduce aparte textul în aplicație.

Importanța teoretică și valoarea aplicativă a lucrării constă în faptul că a fost făcută o analiză și o sistematizare a sistemelor criptografice clasice și moderne, și a fost modernizat unul din fostele standarde de criptare cu cheie secretă (algoritmul DES) pentru a fi posibil de cifrat fișierele text și nu însăși textul aparte, ceea ce reprezintă un avantaj în tranzacțiile de date.

Sumarul compartimentelor tezei. Teza de față conține introducere, trei capitole, concluzii cu recomandări, lista bibliografică din 30 titluri și anexa. Ea este perfectată pe 62 pagini, dintre care 45 pagini constituie partea de bază, conține 15 figuri și 8 tabele.

În Capitolul I se face o sinteză a diferitor metode criptografice clasice și moderne. Se accentuează rolul lui Claude Elwood Shannon care a pus bazele teoretice ale sistemelor cu secretizare [23], precum și al matematicienilor Whitfield Diffie și Martin E. Hellman, care în anul 1976 prin publicarea articolului „New Directions in Cryptography” [11] au arătat că comunicația secretă poate fi făcută fără transmiterea cheii secrete, inventând astfel criptografia cu chei publice. În teză sunt descrise diverse tipuri de sisteme de criptare aplicate în trecut și prezent, cu trecerea în revistă a celor mai frecvent întâlnite în practică. Sunt evidențiate părțile slabe și cele puternice ale acestor sisteme și domeniile de aplicabilitate ale unora dintre ele.

Capitolul doi conține descrierea primului standard de criptare – algoritmul DES care stă la baza algoritmului nou elaborat. De asemenea sunt descrise la general diversele variante modernizate ale algoritmului DES.

Capitolul trei conține descrierea și analiza produsului software realizat în baza algoritmului DES. Acest produs criptează fișierele text cu extensiile txt, doc, xls, dar și fișiere pdf sau fișiere grafice cum sunt fișierele jpeg, bmp ș.a. . Softul a fost analizat și testat pe diverse fișiere de diferite mărimi și toate aceste extensii, datele fiind introduse în tabele și construite diagrame.

La teză se anexează listingul softului elaborat în limbajul Delphi (versiunea 6).

1. ANALIZA METODELOR CRIPTOGRAFICE MODERNE

Soluționarea problemei de securitate informațională nu poate fi realizată fără a lua în considerație doi factori importanți, ce influențează nemijlocit atingerea scopului final:

dezvoltarea mijloacelor de comunicații informaționale;

dezvoltarea sistemelor performante de criptare.

Aceste două domenii de activitate se completează reciproc și permit obținerea unor rezultate importante în asigurarea securității de manipulare cu masive mari de informație. În același timp criptografia este cea mai sigură metodă de protecție a datelor confidențiale, ea fiind aplicată la nivelul corespunzător ne asigură confidențialitatea datelor chiar în cazurile în care informația a fost pierdută, furată sau în alte cazuri similare.

1.1. Noțiuni generale ale criptografiei

Criptografia reprezintă 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ă în mare parte metode matematice, profitând de unele probleme cu complexitate de rezolvare suficient de înaltă. Termenul „criptografie” este compus din cuvintele de origine greacă κρυπτός, kryptós (ascuns) și yράφειν, gráfein (a scrie). Criptografia urmărește următoarele obiective:

Confidențialitatea (privacy) – proprietatea de a păstra secretul informației, pentru ca aceasta să fie folosită numai de persoanele autorizate.

Integritatea datelor – proprietatea de a evita orice modificare (inserare, ștergere, substituție) neautorizată a informației.

Autentificare – proprietatea de a identifica o entitate conform anumitor standarde. Este compusă din:

autentificarea unei entități;

autentificarea sursei informației;

Non-repudierea – proprietatea care previne negarea unor evenimente anterioare.

Celelalte obiective legate de securitatea informației (autentificarea mesajelor, semnături, autorizare, validare, controlul accesului, certificare, timestamping, confirmarea recepției, anonimitate, revocare) pot fi derivate din aceste patru [1].

Împreună cu Criptografia se dezvoltă Criptanaliza – (din greacă, kryptós, „ascuns”, și analýein, „a dezlega”) este studiul metodelor de obținere a înțelesului informațiilor criptate, fără a avea acces la informația secretă necesară în mod normal pentru aceasta. De regulă, aceasta implică găsirea unei chei secrete [15].

Criptografia și Criptanaliza împreună constituie Criptologia (din greacă, kryptós, „ascuns”, și λόyoς, „cuvânt”) – știința care se ocupă cu metodele de criptare și decriptare.

În continuare sunt date unele noțiuni fundamentale cu care se operează în criptologie.

Un mesaj în forma sa originară se numește text clar (uneori text în clar, în engleză plaintext) și îl vom nota cu pt sau cu m (de la „message” – mesajul).

Rescrierea textului clar, folosind o metodă cunoscută numai de expeditor (eventual și de destinatar), se numește criptare (sau cifrare) a mesajului.

Text criptat sau text cifrat (în engleză ciphertext) se numește textul obținut în rezultatul operației de criptare aptanaliza – (din greacă, kryptós, „ascuns”, și analýein, „a dezlega”) este studiul metodelor de obținere a înțelesului informațiilor criptate, fără a avea acces la informația secretă necesară în mod normal pentru aceasta. De regulă, aceasta implică găsirea unei chei secrete [15].

Criptografia și Criptanaliza împreună constituie Criptologia (din greacă, kryptós, „ascuns”, și λόyoς, „cuvânt”) – știința care se ocupă cu metodele de criptare și decriptare.

În continuare sunt date unele noțiuni fundamentale cu care se operează în criptologie.

Un mesaj în forma sa originară se numește text clar (uneori text în clar, în engleză plaintext) și îl vom nota cu pt sau cu m (de la „message” – mesajul).

Rescrierea textului clar, folosind o metodă cunoscută numai de expeditor (eventual și de destinatar), se numește criptare (sau cifrare) a mesajului.

Text criptat sau text cifrat (în engleză ciphertext) se numește textul obținut în rezultatul operației de criptare a textului plan. Textul criptat îl vom nota cu ct sau cu c (de la „cipher” – cifrul). Textul cifrat se mai numește criptogramă.

Procesul retransformării criptogramei în textul original este numit decriptare.

Un canal este o cale pentru fluxul de informații.

Destinatarul primește printr-un canal textul criptat și îl decriptează, știind metoda folosită pentru criptare, obținând mesajul inițial. În literatura de specialitate expeditorul de obicei este numit Alice iar destinatarul este numit Bob. Deci, Alice și Bob trebuie să stabilească în prealabil detaliile modalității de criptare și de decriptare. Așadar, criptarea este o metodă de camuflare a textului clar în așa fel încât substanța să nu sufere modificări semantice.

Criptarea se folosește pentru a fi siguri că informația este inaccesibilă oricărei persoane care nu deține instrumentul necesar decriptării, chiar dacă oricine poate vedea datele în formă criptografică. Oricum nu va înțelege nimic, care să conducă spre descifrarea textului original.

Persoana care interceptează criptograma și încearcă să obțină textul clar aplicând diverse metode, însă fără a avea cheia de decriptare, este numită criptanalist.

Sistemul care realizează operațiile de criptare și decriptare se numește sistem de criptare (sau sistem criptografic, sau criptosistem).

În criptografia modernă un sistem de criptare este definit ca o structură cu cinci componente (P, C, K, E, D):

P = {pt / ptT*} – spațiul (mulțimea) textelor în clar, scrise pentru un alfabet nevid T (în mod obișnuit T={0,1});

K – spațiul (mulțimea) cheilor de criptare k, kK;

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

Ek : P C, Ek = {ek / ek (pt) = ct ș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 (pt))= pt pentru orice ptP};

C spațiul (mulțimea) mesajelor cu text criptat unde:

C={ct / există k K, aP, ct = Ek (a)}.

Schema aplicării unui sistem de criptare este prezentată în Figura 1.1.

Pentru ca un sistem de criptare să fie considerat bun, el trebuie să îndeplinească trei criterii (enunțate de Francis Bacon în sec. XVII):

1. Fiind date ek și ptP să fie ușor de calculat ek (pt).

2. Fiind date dk și ctC să fie ușor de determinat dk (ct).

3. Să fie imposibil de determinat pt din ct, fără a cunoaște dk.

Fig. 1.1. Schema aplicării unui sistem de criptare

Criteriile 1 și 2 implică că pentru utilizatorii legali sistemul de criptare nu trebuie să fie prea complicat (se presupune că utilizatorii au un timp acceptabil pentru calcule). În criteriul 3 „imposibilitatea” e înlocuită în prezent cu „dificultatea de a calcula”. Se presupune că un interceptor de asemenea are acces la tehnica de calcul. Ultimul criteriu definește – sub o formă vagă – ideea de ”securitate” a sistemului. La aceste criterii, Bacon adăuga și o a patra regulă:

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

Această condiție nu mai poate fi considerată importantă și este utiliză astăzi doar de un subdomeniu strict al criptografiei, numit steganografie – știința despre transmiterea secretă a informației prin păstrarea secretului a însuși faptului transmiterii acestei informații.

Metodele de criptare pot fi divizate pe categorii în felul următor:

În funcție de tipul operațiilor folosite:

Bazate pe substituții

Bazate pe transpuneri

În funcție de tipul de chei folosite:

Sisteme Simetrice (single-key, secret-key, private-key)

Sisteme Asimetrice (two-key, public-key)

Metoda prin care datele sunt procesate:

Cu cifruri bloc

Cu cifruri fluide (flux, șir, “stream”)

Cifrurile clasice foloseau substituția sau transpoziția. Printre metodele moderne de criptare deosebim două direcții principale: sistemele cu cheie secretă (sau sisteme simetrice) în care ek este bijectivă și sisteme cu chei publice (sau sisteme asimetrice) – sistemele în care ek nu este bijectivă.

Fig. 1.2. Clasificarea cifrurilor

Există două tipuri de sisteme simetrice [6]: sisteme care se bazează pe algoritmi de tip bloc și sisteme care se bazează algoritmi de tip șir (sau flux, în engleză stream cipher). Algoritmii de tip bloc acționează asupra blocurilor de text clar și text cifrat. Algoritmii de tip șir se aplică șirurilor de text clar și text cifrat, la nivel de bit sau octet. În Figura 1.2 sunt prezentate tipurile de cifruri utilizate în trecut sau prezent.

Algoritmii moderni de tip bloc criptează mesajul în blocuri de 64 – 265 biți și mai mult. Pentru acesta se aplică o funcție matematică între un bloc de biți ai mesajului în clar și cheie (care poate varia ca mărime), rezultând același număr de biți pentru mesajul criptat. Funcția de criptare este realizată astfel încât să îndeplinească următoarele cerințe:

știind un bloc de biți ai textului clar și cheia de criptare, sistemul să poată genera rapid un bloc al textului criptat;

știind un bloc de biți ai textului criptat și cheia de criptare/decriptare, sistemul să poată genera rapid un bloc al textului clar;

știind blocurile textului clar și ale textului criptat, să fie dificil de generat cheia.

Cifrurile șir (sau cifruri fluide) la fel formează o clasă importantă de algoritmi de criptare. Ceea ce le caracterizează și le diferențiază față de cifrurile bloc este faptul că cifrurile șir procesează informația în unități oricât de mici, chiar bit cu bit, aplicând funcția XOR între biții cheii și biții de cifrat, iar funcția de criptare se poate modifica în cursul criptării. Cifrurile șir sunt algoritmi cu memorie, în sensul că procesul de criptare nu depinde doar de cheie și de textul clar, ci și de starea curentă. În cazul în care probabilitatea erorilor de transmisie este mare, folosirea cifrurilor șir este avantajoasă deoarece au proprietatea de a nu propaga erorile. Ele se folosesc și în cazurile în care datele trebuie procesate una câte una, datorită lipsei de spațiu de memorie.

Cifruri asimetrice utilizează o pereche de chei: o cheie publică și o cheie privată. Un utilizator care deține o astfel de pereche își publică o cheie (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.

Cele două chei sunt legate matematic, însă cheia privată nu poate fi obținută din cheia publică. În caz contrar, orcine ar putea decripta mesajele destinate unui alt utilizator, fiindcă oricine are acces la cheia publică a acestuia. O analogie foarte potrivită pentru proces este folosirea cutiei poștale. Oricine poate pune în cutia poștală a cuiva un plic, dar la plic nu are acces decât posesorul cheii de la cutia poștală.

Criptografia asimetrică se mai numește criptografie cu chei publice și e compusă din două mari ramuri:

Criptarea cu cheie publică – un mesaj criptat cu o cheie publică nu poate fi decodificat decât folosind cheia privată corespunzătoare. Metoda este folosită pentru a asigura confidențialitatea.

Semnături digitale – un mesaj semnat cu cheia privată a emițătorului poate fi verificat de către oricine, prin acces la cheia publică corespunzătoare, astfel asigurându-se autenticitatea mesajului.

1.2. Criptografia clasică

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. Criptografia clasică se încadrează în clasa criptografiei cu chei simetrice.

Cifrul de substituție (substitution cipher) este cifrul bloc la care fiecare caracter sau grup de caractere ale textului clar m este substituit cu un alt caracter sau grup de caractere în textul cifrat c, descifrarea făcându-se prin aplicarea substituției inverse asupra textului cifrat. În criptografia clasică există patru tipuri de cifruri de substituție. Deosebim cifruri cu substituție monoalfabetică și polialfabetică.

Cifruri de substituție monoalfabetică (monoalphabetic ciphers) sunt cifrurile în care fiecare caracter al textului în clar m este înlocuit cu un caracter corespunzător în textul cifrat c. Mai jos sunt prezentate câteva dintre cele mai cunoscute cifruri de substituție monoalfabetică:

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 (Tabelul 1.1). Pasul de criptare al cifrului lui Cezar este de obicei încorporat în scheme mai complexe precum Cifrul Vigenère.

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ă.

Cifrul afin este o generalizare a cifrului Cezar. Cheia

k = {(a, b) | a, b ∈ 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 −1y + a −1(26 − b) (mod 26).

Condiția ca a să fie prim cu 26 asigură existența lui a −1 în Z26.

Cifrul Polibios. Cifrul Cezar nu este cel mai vechi algoritm de criptare. Se pare că primul astfel de algoritm a fost utilizat de Polybios (istoric grec mort cu 30 ani înaintea nașterii lui Cezar). Inițial acesta a fost doar un sistem maritim de semnalizare cu torțe iar ulterior i s-a dat o semnificație criptografică.

Î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 într-o celulă 2 litere (de frecvența cât mai redusă).

Aceste trei cifruri, dar și multe altele dintre cele clasice sunt monoalfabetice. 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ă.

Diferența dintre cifrurile polialfabetice și cele monoalfabetice constă în faptul că substituția unui caracter variază în text, în funcție de diverși parametri (poziție, context etc.). Aceasta conduce bineînțeles la un număr mult mai mare de chei posibile. Se consideră că primul sistem de criptare polialfabetic a fost creat de Leon Battista în 1568. Unele aplicații actuale folosesc încă pentru anumite secțiuni astfel de sisteme de criptare.

Unul dintre astfel de cifruri este 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. Cifrul Vigenere folosește o deplasare multiplă. Cheia nu este constituită de o singură deplasare, ci de mai multe. Cheia este constituită din câțiva întregi ki, unde 0 ≤ ki ≤ 25.

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, c1 = m1 + 21 (mod 26), a celei de a doua cu 4, c2 = m2 + 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”.

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).

Un alt tip de cifruri clasice este cifrul de transpoziții. Spre deosebire de cifrurile cu substituție, care păstrează ordinea literelor din textul sursă dar le transformă, cifrurile cu transpoziție (transposition ciphers) reordonează literele, fără a le „deghiza”.

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 s-au 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 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.

De la apariția cifrurilor cu substituție și a celor cu transpoziție anii au trecut și tehnicile de criptare au evoluat foarte mult.

Problema construirii unui cifru imposibil de spart a preocupat îndelung pe criptanaliști; ei au dat o rezolvare teoretică simplă încă de acum câteva decenii dar metoda nu s-a dovedit fiabilă din punct de vedere practic.

Sistemele de criptare pot fi aduse la un grad mai mare de securitate dacă se folosesc mijloace mecanice de criptare. Astfel de mecanisme special construite vor ușura operațiile de criptare/decriptare și în același timp vor fi capabile să creeze un număr mult mai mare de chei posibile. Primele astfel de mecanisme au apărut încă în antichitate.

Printre cele mai cunoscute astfel de mecanisme se numără Schitala – un baaston în jurul căruia se înfășura spiră lângă spiră o panglică foarte îngustă de piele, papirus sau pergament pe care, pe generatoare se scriau literele mesajelor (Figura 1.3). După ce textul era scris panglica se desfășura, mesajul devenea indescifrabil, deoarece literele erau dezasamblate. Mesajul se putea descifra numai de o persoană care dispunea de un baston de grosime și lungime identice cu bastonul inițial pe care se înfășura din nou panglica primită de receptor. Astfel Schitala realiza o transpoziție, aceasta fiind o primă formă a acestei metode de criptare. Un alt mecanism de criptare a fost Criptograful lui Alberti, care era alcătuit din două discuri concentrice cu diametre diferite, suprapuse (Figura 1.4). Fiecare disc era împărțit în 24 sectoare pe care erau înscrise litere și cifre. Pe discul exterior, care rămânea static, erau scrise 20 de litere ale alfabetului italian (alfabetul italian nu avea literele H, J, K, W, X, Y) în ordinea lor firească, iar apoi cifrele 1, 2, 3, 4. Pe discul interior care se rotea, erau scrise 23 de litere ale alfabetului latin (fără J, K, Y) și conjuncția ET. Ordinea lor era arbitrară. Pentru cifrare se stabilea o cheie, de exemplu G=a. Aceasta însemna că pentru cifrare litera a de pe discul mic se așeza în dreptul literei G de pe discul mare și apoi începea cifrarea. Alberti recomanda schimbarea cheii după un număr de cuvinte.

Ideea de mașină de criptare apare clar prima dată la Thomas Jefferson, primul secretar de Stat al Statelor Unite (președinte era George Washington), care a inventat un aparat de criptat numit roată de criptare, folosit pentru securitatea corespondenței cu aliații – în special cei francezi. Un cilindru Jefferson (Figura 1.5) este format din n discuri de dimensiuni egale (inițial n = 26 sau n = 36) așezate pe un ax. Discurile se pot roti independent pe ax, iar pe muchia fiecăruia sunt înscrise cele 26 litere ale alfabetului, într-o ordine aleatoare (dar diferită pentru fiecare disc).

La criptare, textul clar se împarte în blocuri de n caractere. Fiecare astfel de bloc se scrie pe o linie (generatoare) a cilindrului, rotind corespunzător fiecare disc pentru a aduce pe linie caracterul căutat. Oricare din celelalte 25 linii va constitui blocul de text criptat.

Pentru decriptare este necesar un cilindru identic, în care se scrie pe o linie textul criptat (de n caractere) și apoi se caută printre celelalte 25 linii un text cu semnificație semantică. Probabilitatea de a avea un singur astfel de text crește cu numărul de discuri din cilindru. Ordinea discurilor poate fi de asemenea schimbată. De exemplu, un cilindru cu n = 20 discuri poate realiza 20! = 2 432 902 008 176 640 000 texte criptate diferite pentru același text clar. Cilindrul Jefferson realizează o substituție polialfabetică de perioadă n. Dacă ar fi privit ca un sistem de criptare Vigenere, lungimea cheii este enormă (de multe ori nn, în funcție de modalitățile de aranjare a alfabetelor pe discuri). Cilindrul Jefferson a fost reinventat ulterior de mai multe ori, cea mai celebră fiind se pare mașina de criptat „Enigma”.

Mașinile cu rotor au fost folosite activ pe parcursul războiului II mondial. Pe lângă mașina germană Enigma au fost folosite și Sigaba (SUA), Typex (Marea Britanie), Red, Orange, Purple (Japonia) [10, 19]. Mașinile cu rotor au fost vârful criptografiei formale deoarece realizau cifruri suficient de rezistente într-un mod relativ simplu.

Atacurile încununate de succes asupra mașinilor cu rotor au fost posibile numai la începutul anilor 40 odată cu apariția mașinilor electronice de calcul. Tot în această perioadă criptografia devine științific ramură aparte a matematicii odată cu publicarea (anul 1949) articolului lui Claude Elwood Shannon „Communication Theory of Secrecy Systems”., care a pus bazele științifice ale sistemelor de criptare cu cheie secretă (sistemelor simetrice).

1.3. Criptografia modernă

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 atacatorul (sau criptanalistul), chiar și în situația în care are la dispoziție cantități mari de text criptat la alegerea sa, să nu poată face nimic fără cheia secretă.

1.3.1. Criptografia simetrică

Algoritmii criptografici folosiți în sistemele simetrice de criptare se împart în cifruri bloc (block ciphers) și cifruri flux sau cifruri șir (stream ciphers). Cifrurile flux pot cripta un singur bit de text clar la un moment dat, pe când cifrurile bloc criptează mai mulți biți (64, 128, 256 sau alt număr de biți) la un moment dat [2].

Algoritmii de tip bloc criptează mesajul în blocuri de n de biți. Se aplică o funcție matematică între un bloc de biți ai textului clar și cheie (care poate varia ca mărime), rezultând același număr de biți pentru mesajul criptat. Funcția de criptare este realizată astfel încât să îndeplinească următoarele cerințe:

știind un bloc de biți ai textului clar și cheia de criptare, sistemul să poată genera rapid un bloc al textului criptat;

știind un bloc de biți ai textului criptat și cheia de criptare/decriptare, sistemul să poată genera rapid un bloc al textului clar;

știind blocurile textului clar și ale textului cifrat ale sistemului să fie dificil să genereze cheia.

Cifrurile șir (sau cifruri fluide) formează o clasă importantă de algoritmi de criptare; ele pot fi cifruri cu chei simetrice sau cu chei publice. Ceea ce le caracterizează și le diferențiază față de cifrurile bloc este faptul că cifrurile șir procesează textul clar în unități oricât de mici, chiar bit cu bit, aplicând funcția XOR între biții cheii și biții de cifrat, iar funcția de criptare se poate modifica pe parcursul criptării. Cifrurile șir sunt algoritmi cu memorie, în sensul că procesul de criptare nu depinde doar de cheie și de textul în clar, ci și de starea curentă. În cazul în care probabilitatea erorilor de transmisie este mare, folosirea cifrurilor șir este avantajoasă deoarece au proprietatea de a nu propaga erorile. Ele se folosesc și în cazurile în care datele trebuie procesate una câte una, datorită lipsei de spațiu de memorie.

Sistemele de criptare cu cheie privată sau sistemele simetrice de criptare sunt sistemele în care cheia de criptare coincide cu cheia de decriptare. Sistemele simetrice sunt folosite pentru protecția datelor memorate în fișiere, baze de date sau a informațiilor transmise în rețele.

Dintre sistemele cu cheie privată putem menționa următoarele:

Algoritmul Lucifer [16, 28] – un proiect al companiei IBM inițiat în anul 1970. Acest algoritm prezintă o rețea de permutări și substituții.

Algoritmul DES (Data Encryption Standard) [18, 20] a fost elaborat de către firma IBM și în 1977 a fost aprobat ca standard oficial în SUA. DES are blocuri de 64 de biți și o structură Feistel [13] de 16 cicluri, folosind o cheie de 56 de biți și o combinare de transformări liniare și neliniare la criptare.

Cifrul RC4 [17, 28] – un cifru șir cu cheie de lungime variabilă, dezvoltat în 1987 de către Ron Rivest pentru compania RSA Data Security. Criptograma se obține sumând modulo 2 textul clar cu cheia, care este generată în mod pseudoaleator.

RC5 [16, 28] – un cifru pe blocuri, notabil pentru simplitatea sa. A fost elaborat de căte Ron Rivest pentru RSA Data Security în anul 1994. El are un număr variabil de blocuri și runde precum și o lungime variabilă a cheii. Spre deosebire de predecesorii săi folosește operația de strămutare cu un număr variabil de biți.

Algoritmul AES (Advanced Encryption Standard) [9, 12], sau Rijndael este un algoritm pe blocuri (lungimea blocului este de 128 biți, lungimea cheii este de 128, 192 sau 256 biți), aprobat în calitate de standard de criptare în SUA în 2002 și care este valabil și în prezent.

1.3.2. Criptografia asimetrică

Sistemele de criptare în locul unei singure chei secrete, folosesc două chei diferite: una pentru cifrare, alta pentru descifrare [5]. Deoarece este imposibilă deducerea unei chei din cealaltă, una din chei este făcută publică, fiind pusă la îndemâna oricui dorește să transmită un mesaj cifrat. În practica aplicațiilor Internet, cifrurile cu chei publice sunt folosite în general pentru semnătura digitală asociată mesajelor, pentru autentificarea conținutului și a emițătorului, dar și pentru cifrarea și distribuția cheilor simetrice, folosite în secretizarea mesajelor, operație numită anvelopare a cheii. În anul 1976 Whitfield Diffie și Martin E. Hellman au publicat articolul „New Directions in Cryptography”, în care au arătat că comunicația secretă poate fi făcută fără transmiterea cheii secrete, inventând astfel criptografia cu chei publice. Aici a fost aplicată problema logaritmului discret [22], iar un an mai târziu a fost inventat celebrul algoritm RSA [21], la baza căruia stă problema complicată a factorizării numerelor mari de forma unde p și q sunt numere prime mari.

Printre cele ami cunoscute sisteme cu cheie publică se numără:

Algoritmul Merkle-Hellman [14, 22, 25], publicat în 1978 de către Ralph Merkle și Martin Hellman. Algoritmul bazat pe problema rucsacului, o problemă NP-completă.

Algoritmul RSA [14, 21, 22] – a fost publicat în 1978 de Ron Rivest, Adi Shamir și Leonard Adleman la Massachusetts Institute of Technology. Puterea sa criptografică se bazează pe dificultatea problemei factorizării numerelor întregi, problemă la care se reduce criptanaliza RSA și pentru care toți algoritmii de rezolvare cunoscuți au complexitate exponențială.

Algoritmul ElGamal [3, 14, 22] este elaborat de Taher Elgamal în 1984 și publicat in 1985. La baza algoritmului se află problema calculării logaritmului discret într-un câmp finit.

1.3.3. Semnături digitale

Un rol important în securitatea tranzacțiilor de date îl ocupă autenticitatea documentelor electronice. Ea poate fi asigurată cu ajutorul semnăturilor digitale, care la rândul lor se bazează pe sistemele de criptare cu cheie publică.

Semnătura digitală este o schemă matematică pentru demonstrarea autenticității unui mesaj sau document electronic. O semnătură digitală validă este un motiv de încredere pentru destinatarul mesajului că acest mesaj a fost creat de către un expeditor cunoscut, astfel încât el nu va putea nega faptul trimiterii mesajului (autentificarea și non-repudierea) și că mesajul nu a fost modificat în drum (integritatea). Semnăturile digitale sunt în general utilizate pentru distribuția de software, în tranzacțiile financiare, precum și în alte cazuri în care este importantă detectarea falsificării sau manipulării.

Semnătura electronica nu este o semnătură scanată, pictogramă, o poză sau o holograma și nici nu este un smart-card.

O schemă de semnătură digitală se bazează pe trei algoritmi:

algoritmul de selectare aleatoare a unei chei private care se va asocia unei chei publice;

algoritmul de semnare care, aplicat unei chei private și unui document digital, generează semnătura digitală;

algoritmul de verificare a semnăturii digitale, care aplicat cheii publice și semnăturii digitale, acceptă sau respinge mesajul de conformitate.

Semnăturile digitale reprezintă echivalentul electronic al semnăturilor de mână, acest concept fiind introdus ca funcționalitate adițională a criptosistemelor cu cheie publică de către Diffie și Hellman în 1976, în absența unei scheme criptografice pentru acest scop. Obiectivul principal de securitate pe care îl asigură semnăturile digitale îl reprezintă non-repudierea, și anume faptul că o entitate odată ce a semnat o informație nu poate nega că a emis acea informație și orice altă entitate neutră poate verifica acest lucru. Semnăturile digitale reprezintă deci o valoare numerică care leagă conținutul unui mesaj de identitatea unei entități. În principiu, orice algoritm asimetric poate fi utilizat pentru crearea unei semnături digitale prin inversarea rolului cheii publice cu cea privată, iar primele propuneri de semnături digitale se găsesc în lucrările lui Rivest, Rabin și ElGamal. Subliniem că și algoritmi simetrici pot fi folosiți pentru a crea semnături digitale de tip one-time dar acestea sunt rar utilizate în practică.

Pentru o semnătură digitală sunt necesare două proprietăți de bază:

În primul rând, o semnătură generată dintr-un mesaj fix și o cheie fixă privată ar trebui să verifice autenticitatea acestui mesaj utilizând cheia publică corespunzătoare.

În al doilea rând, ar trebui să fie imposibil de generat o semnătură validă pentru o entitate care nu posedă cheia privată.

Mai trebuie de menționat câteva proprietăți ale semnăturilor digitale:

Trebuie să fie ușor de calculat doar de către cel care semnează mesajul (funcția de semnare trebuie să fie ușor de calculat).

Trebuie să fie ușor de verificat de către oricine (funcția de verificare trebuie să fie ușor de calculat).

Trebuie să dețină o durată de viață corespunzătoare, adică semnătura să nu poată fi falsificată până când nu mai este necesară scopului în care a fost creată.

Precizăm încă odată cele trei motive principale pentru care se recomanda folosirea semnăturilor digitale:

Autenticitatea. Deși documentele digitale pot să includă informații despre identitatea celui care le-a emis, aceste informații pot să nu fie corecte. Semnătura digitală poate fi folosită pentru autentificarea sursei documentului. Atunci când dreptul de proprietate asupra unei semnături digitale aparține unei anumite persoane, semnătura digitală arată că documentul a fost eliberat de către acea persoană. Importanța acestui aspect apare în dovedirea autenticității documentelor digitale în context financiar-contabil. De exemplu actele contabile ale unei firme sunt trimise corect de către firma de contabilitate către administratorul firmei. Daca acesta va modifica aceste acte încercând să schimbe informațiile financiare sau orice fel de informații transmise ca fișier PDF/A semnat electronic, pentru a putea obține un credit de la o bancă, în momentul în care banca deschide acele documente, semnătura electronică va fi invalidată, deci firma de contabilitate nu va putea fi considerată responsabilă de conținutul documentului, persoana care a transmis documentul modificat nu va putea fi urmărită în justiție pentru fals și uz de fals, iar banca va fi asigurată că nu cade în capcana acordării unui credit pe baza unor documente false.

Integritatea. Semnătura digitală aplicată unui document electronic reprezintă o garanție a integrității documentului atunci când este validată de o autoritate publică. Cheia aleatoare se creează pe baza unor criterii multiple care includ printre altele și detalii despre conținutul documentului. Orice modificare a conținutului unui document digital înseamnă o cheie aleatoare nouă diferită de cheia aleatoare folosită pentru aplicarea semnăturii digitale. În clipa în care se solicită validarea documentului cele două chei aleatoare vor fi diferite, iar documentul se va putea considera ca având conținutul alterat.

Imposibilitatea repudierii (non-repudiere). Odată ce este emis un document digital semnat electronic, atâta vreme cât semnătura electronică este validă pe documentul digital, autorul documentului nu își poate declina răspunderea pentru conținutul documentului cu semnătura electronică validă. În plus, nu poate nega faptul că documentul a fost semnat personal, deoarece legislația în vigoare prevede faptul că deținătorul unei semnături digitale nu are dreptul să înstrăineze sau împrumute token-ul (dispozitivul criptografic) pe care există certificatul digital calificat pe care îl deține. Din acest punct de vedere, exemplul de mai sus în care firma de contabilitate transmite documentele financiare firmei pentru care le întocmește, dacă a comis greșeli în întocmirea acestor acte, rămâne responsabilă pentru datele prezentate, câta vreme documentul digital transmis poartă o semnătură validă.

Pentru o semnătură digitală a mesajului m de către entitatea A putem folosi notația SigA(m).

Există două categorii distincte de semnături digitale [4]:

Semnături digitale cu recuperarea mesajului. La utilizarea acestor semnături mesajul poate fi recuperat direct din semnătura digitală. Cel mai simplu exemplu de construcție este prin inversarea rolului cheii publice și private în cazul schemei RSA. Pentru a evita fraudarea lor este obligatorie aplicarea unei funcții de redundanță asupra mesajului după care semnătura propriu-zisă se aplică asupra mesajului redundant.

Semnături digitale cu anexă (sau cu apendice). Acestea sunt semnături digitale din care mesajul nu poate fi recuperat, drept care este trimis adițional ca anexă la semnătura digitală. Se pot construi ușor prin aplicarea unei funcții hash asupra mesajului și semnarea hash-ului obținut. Datorită eficienței computaționale în semnarea mesajelor de dimensiuni mari (deoarece se semnează efectiv doar hash-ul mesajului care are o lungime fixă pentru fiecare algoritm hash indiferent de lungimea mesajului), aceste semnături sunt cele mai utilizate în practică. Totodată orice semnătură digitală cu recuperarea mesajului poate fi ușor convertită în semnătură cu anexă.

Fig. 1.3. Schema unei semnături digitale fără criptarea mesajului

Cele mai utilizate semnături digitale la momentul actual sunt semnăturile bazate pe algoritmii cu cheie publică RSA, ElGamal și DSS.

1.4. Concluzii la compartimentul 1

Istoria Criptografiei începe de câteva mii de ani. Ea s-a dezvoltat odată cu trecerea anilor, fiind folosită acolo unde conta confidențialitatea datelor. Sunt cunoscute multe cazuri în istorie când unele state, companii sau persoane au suferit pierderi colosale din cauza pierderii de informații secrete, de aceea Criptografia a fost, este și cred că se va menține mult timp consolidarea securității schimbului de date confidențiale, iar luând în considrație că în periada contemporană foarte multe tranzacții se fac cu aplicarea documentelor electronice, rolul Criptografiei devien unul primordial.

Criptografia modernă utilizează două tipuri de sisteme de criptare: sistemele cu cheie privată și sisteme cu chei publice, care fiind aplicate conform standardelor elabobrate vor garanta succesul tranzacțiilor, păstrându-le confidențialitatea.

Aceste considerente, precum și faptul că serviciile de spionaj de diferite nivele și din diferite domenii ating performanțe noi în interceptarea informației și mai ales în restabilirea informației criptate, impun cercetarea și inventarea de noi sisteme de criptare mai performante, mai eficiente, mai sigure. Aceasta reprezintă o problema actuală de importanță majoră în societatea modernă. Astfel, într-o societate informatizată, Criptografiei îi revine un rol important în asigurarea funcționalității acesteia, deoarece orice domeniu de activitate este bazat pe un volum tot mai mare de informație, folosit în diverse procese manageriale.

2. PRIMUL STANDARD DE CRIPTARE CU CHEIE SECRETĂ

Plecând de la algoritmul “Lucifer” conceput în Laboratoarele IBM a fost dezvoltat algoritmul de criptare DES (Data Encryption Standard). Algoritmul a fost conceput pentru guvernul Statelor Unite dar și pentru folosință publică. Trebuie de menționat că chiar și cei mai mari experți în domeniul criptografiei fac diverse presupuneri referitor la versiunea algoritmului Lucifer care a fost predecesorul lui DES. În mai 1973, revista Federal Register a sintetizat principiile care trebuie să stea la baza proiectării unui algoritm criptografic standard:

algoritmul trebuie să asigure un înalt nivel de securitate;

algoritmul trebuie să fie complet specificat și simplu de înțeles;

securitatea algoritmului trebuie să fie asigurată de cheie și nu trebuie să depindă de păstrarea secretă a algoritmului;

algoritmul trebuie să fie disponibil tuturor utilizatorilor;

algoritmul trebuie să fie adaptabil pentru diverse aplicații;

algoritmul trebuie să fie implementabil pe dispozitivele electronice;

algoritmul trebuie să fie eficient în utilizare;

algoritmul trebuie să poată fi validat;

algoritmul trebuie să fie exportabil.

DES a fost oficial adoptat ca standard federal la 23 noiembrie 1976, iar în 1977 specificațiile sale au fost făcute publice.

2.1. Principii generale ale algoritmului DES

Algoritmul DES este o combinație complexă, folosind două blocuri fundamentale în criptografie: substituția și permutarea (transpoziția). Acest cifru bloc acceptă un bloc de 64 de biți la intrare și generează un bloc cifrat de 64 de biți. DES este un algoritm simetric. Același algoritm și aceeași cheie sunt folosiți atât la criptare cât și la decriptare.

Algoritmul este constituit din 16 cicluri repetate ale blocurilor fundamentale. Textul inițial este descompus în blocuri de 64 de biți. Cheia este de 64 biți din care doar 56 sunt efectivi, ceilalți fiind biți de paritate. Folosirea substituției provoacă confuzie prin sistematica substituire a unor biți cu alții. Transpozițiile provoacă difuzie prin re-ordonarea biților [20, 24].

Algoritmul folosește numai operații aritmetice și logice clasice cu număr de până la 64 de biți, ceea ce face relativ ușor de implementat atât software cât mai ales hardware: unul din scopurile declarate ale algoritmului fiind ușoara lui implementare hardware într-un cip specializat.

Parcurgerea celor 16 cicluri are loc după schema din figura 2.1:

Fig. 2.1 Detalii pentru folosirea algoritmului DES

La intrare datele sunt împărțite în blocuri de 64 biți, care sunt transformate folosind cheia de 64 de biți. Cei 64 de biți sunt permutați prin „permutarea inițială – IP”. În continuare, urmează operațiile ce constituie un ciclu. Blocul de 64 de biți este separat în două, „jumătatea stângă” și “jumătatea dreaptă”, fiecare de 32 de biți. Cheia este deplasată la stânga cu un număr de biți și permutată: ea se combină cu “partea dreaptă” care apoi se combină cu “partea stângă”; rezultatul devine noua “parte dreaptă”; vechea “parte dreaptă” devine noua “parte stângă” (fig. 2.2).

Fig. 2.2 Manipularea cheii în algoritmul DES

După repetarea acestui ciclu de 16 ori se face permutarea finală care este inversă permutării inițiale.

Pentru combinarea unei secvențe de 32 biți cu cheia de 64 biți se folosesc expandări de la 32 biți la 48 biți și reducerea cheii de la 64 biți la 48 biți prin alegerea anumitor biți, operații ce le numim “permutare expandată” și “permutare aleasă” (fig. 2.3).

Fig. 2.3 Manipularea permutării în algoritmul DES

2.2. Operațiile de bază ale rundei DES

În fiecare ciclu practic au loc patru operații separate [27]:

partea dreaptă este expandată de la 32 la 48 biți;

partea dreaptă este combinată cu o formă a cheii;

rezultatul este substituit și condensat în 32 biți,

cei 32 biți sunt permutați și apoi combinați cu partea stângă pentru a da o nouă parte dreaptă (figura 2.4).

Permutarea expandată este definită în Tabelul 2.1:

Tabelul 2.1. Definirea permutării expandate în DES

Cheia este împărțită în două părți de 28 biți deplasate la stânga cu un număr de biți apoi reunite și 48 din cei 56 de biți sunt permutați și folosiți ca o cheie de 48 de biți de-a lungul ciclului.

Cheia dintr-un ciclu este combinată printr-o funcție sau exclusiv cu “partea dreaptă” expandată. Rezultatul este operat în 8 “cutii-S” care efectuează substituția. O “cutie-s” este o tabelă în care 6 biți de date sunt înlocuiți de 4 biți. Permutările sunt efectuate de tabele numite “cutii-P”.

Cu algoritmul DES se poate face atât criptarea cât și decriptarea unui mesaj. Rezultatul este adevărat pentru că ciclul j derivă din ciclul ( j –1) astfel:

S j = Dj–1 (1)

Dj = S j–1 Å f (Dj–1, kj), (2)

unde Å este operația sau exclusiv, f este funcția rezultată din operațiile dintr-un ciclu.

Aceste ecuații arată că rezultatul fiecărui ciclu depinde numai de ciclul precedent.

Descriind ecuațiile pentru Dj–1 și S j–1 avem :

Dj–1 = S j (3)

și

S j–1 = Dj Å f (Dj–1, kj), (4)

Înlocuind (3) în (4) avem:

S j–1 = Dj Å f (Sj, kj), (5)

Ecuațiile (3) și (5) arată că aceleași valori pot fi obținute în cicluri ulterioare. Această proprietate face algoritmul DES reversibil.

Fig. 2.4. Ciclul în algoritmul DES

Deci putem face criptarea unor date și decriptarea lor folosind același algoritm, făcând observația că la decriptare cheia se ia în ordine inversă.

Datorită lungimii cheii de lucru și a operațiilor elementare pe care le folosește algoritmul, nu se ridică probleme deosebite într-o implementare software; singura observație este că, datorită modulului de lucru (cu secvențe de date, cu tabele) practic algoritmul este lent într-o implementare software. Modul de concepere îl face însă perfect implementabil hard (într-un cip) ceea ce s-a și realizat, existând multiple variante de mașini hard de criptare.

2.3. Criptanaliza DES.

Deși DES a fost cel mai celebru algoritm al secolului XX este considerat la această oră nesigur pentru multe aplicații. Pare paradoxal, dar aceasta este consecința măririi considerabile a puterii de calcul de la confirmarea DES – ului ca un standard criptografic și până in anul 2000. Slăbiciunea pleacă de la lungimea prea mică a cheii de 56 de biți. Varianta algoritmului cunoscută ca triplu-DES este cea care este considerată sigură și la această oră.

Insecuritatea DES-ului pleacă de la premiza că un atac “în forță” are șanse de reușită în condițiile puterii de calcul disponibile astăzi; până în 2004 cel mai eficient atac este datorat criptanalizei liniare care folosind 243 texte cunoscute generează o complexitate temporală de 239-43 (Junod 2001); în condițiile unui atac cu text ales complexitatea poate fi redusă de patru ori (Knudsen și Mathiassen, 2000) [7, 8].

2.4. Variante de DES

DES multiplu. Când s-a descoperit că cheile pe 56 de biți folosite de DES nu sunt suficiente pentru a proteja împotriva atacurilor „bute force”, au fost folosite variantele 2DES și 3DES [27] ca modalități simple de a mări spațiul cheilor fără nevoia de a trece la un nou algoritm. 2DES constă în două acționări succesive ale algoritmului DES, cu două chei DES diferite sau egale. Utilizarea sa este pur didactică deoarece este vulnerabilă la atacurile cu întâlnire la mijloc (Meet-in-the-middle attack). 2DES este exemplul cel mai des folosit pentru a demonstra viabilitatea unui astfel de atac, dar valoarea sa practică este aproape de zero.

Utilizarea a trei pași este esențială pentru a evita atacurile cu întâlnire la mijloc care sunt eficiente împotriva criptării cu 2DES. Mulțimea funcțiilor de criptare DES cu toate cheile posibile nu formează cu operațiunea de compunere a funcțiilor o structură matematică de grup; dacă ar fi fost așa, construcția 3DES ar fi fost echivalentă cu o operațiune DES și astfel, la fel de nesigură ca aceasta. Deoarece DES nu este un grup, textul cifrat rezultat este mult mai greu de spart folosind căutarea exhaustivă (forța brută): 2112 încercări în loc de 256 încercări.

Cea mai simplă variantă de 3DES funcționează astfel (figura 2.4):

C = DES(k3; DES(k2; DES(k1; M))),

unde M este blocul în clar, iar k1, k2 și k3 sunt cheile DES. Această variantă este cunoscută sub notația EEE deoarece toate cele trei operațiuni efectuate cu cheile sunt criptări. Pentru a simplifica interoperabilitatea între DES și 3DES, pasul din mijloc se înlocuiește de obicei cu decriptarea (modul EDE): 

C = DES(k3; DES –1(k2; DES(k1; M))),

și astfel o singură criptare DES cu cheia k poate fi reprezentată ca 3DES-EDE cu cheile k1= k2 =k3 = k. Alegerea decriptării pentru pasul al doilea nu afectează securitatea algoritmului.

Fig. 2.4. Schema algoritmului 3DES

O variantă, numită 3DES cu două chei, folosește k1 = k3, reducând astfel lungimea cheii la 112 biți și lungimea de stocare la 128 de biți. Totuși, acest mod de funcționare este susceptibil la unele atacuri cu text clar ales sau text clar cunoscut și astfel este considerat de NIST ca având securitate echivalentă cu doar 80 de biți.

DES cu sub-chei independente. O altă variantă de DES constă în folosirea unei sub-chei diferite pentru fiecare trecere, în loc de a o genera dintr-o singură cheie de 56 de biți [30] . Deoarece în fiecare din cele 16 treceri se folosește o cheie de 48 de biți, rezultă că lungimea cheii pentru această variantă este de 768 biți, ceea ce va crește semnificativ dificultatea unui atac în forță împotriva algoritmului, acesta având complexitatea de 2768.

Totuși, un atac de tip “întâlnire la mijloc” este posibil, ceea ce reduce complexitatea atacului la 2384; încă destul de lung pentru orice nevoie imaginabilă de securitate.

Această variantă poate fi analizată folosind criptanaliza diferențială și poate fi spartă cu 261 texte în clar date. Se pare că nici o modificare în planificarea cheilor nu conduce la întărirea semnificativă a algoritmului DES.

DESX este o variantă DES dezvoltată de RSA Data Security, care a fost inclusă încă din 1968 în programul de securitate pentru poștă electronică MailSafe. DESX folosește o tehnică numită albire, pentru a ascunde intrările și ieșirile DES. În plus față de cheia DES de 56 de biți, DESX are o cheie suplimentară de albire de 64 de biți. Acești 64 de biți sunt operați XOR cu textul în clar înainte de prima trecere DES. 64 de biți suplimentari, calculați ca o funcție bijectivă de toți cei 120 de biți ai cheii DES, sunt operați XOR cu textul cifrat înaintea ultimei treceri. Albirea îl face pe DESX mult mai puternic decât DES față de un atac în forță; atacul necesită (2120)/n operații cu n texte în clar cunoscute. De asemenea se îmbunătățește securitatea împotriva criptanalizei liniare și diferențiale – atacul necesită 261 texte în clar date și 260 de texte în clar cunoscute.

CRYPT(3) este o variantă de DES întâlnită în sistemele UNIX. Este folosită în mod obișnuit pentru parole, dar uneori și pentru criptare. Diferența între CRYPT(3) și DES este că CRYPT(3) are o permutare de chei cu 212 posibilități [29], astfel încât să nu permită folosirea cipurilor DES la construcția unui dispozitiv hardware de spart parole.

DES-ul generalizat (GDES) a fost proiectat să mărească viteza DES-ului și să întărească algoritmul. Mărimea totală a blocului crește, în timp ce suma calculelor rămâne constantă.

GDES operează pe blocuri de text clar de lungime variabilă. Blocurile criptate sunt împărțite în q sub-blocuri; numărul exact depinde de mărimea totală a blocului. În general q este egal cu lungimea blocului împărțită la 32.

Funcția f este calculată o dată la fiecare trecere, pe ultimul bloc din dreapta. Rezultatul este operat XOR cu toate celelalte părți, care sunt apoi rotite spre dreapta. GDES are un număr variabil de treceri, n. Exista o mică modificare la ultima trecere, astfel încât procesele de criptare și decriptare diferă doar prin ordinea sub-cheilor. De fapt, pentru q=2 și n=16 se obține algoritmul DES.

Biham și Shamir arată că, folosind criptanaliza diferențială, GDES cu q=8 și n=16 este vulnerabil cu doar șase texte în clar date. Dacă se folosesc și sub-chei independente, sunt necesare 16 texte în clar date. Pentru q=8 și n=64, GDES e mai slab decât DES; sunt necesare 249 texte în clar date pentru a-l sparge. De fapt, orice schemă GDES este mai rapidă decât DES, dar este de asemenea mai puțin sigură.

RDES este o variantă care înlocuiește schimbarea stânga-dreapta de la sfârșitul fiecărei treceri cu o schimbare dependentă de cheie. Schimbările sunt fixe, depinzând doar de cheie. Aceasta înseamnă că cele 15 schimbări dependente de cheie se petrec cu 215 posibilități și că această variantă nu rezistă la criptanaliza diferențială.

O idee mai bună este ca schimbarea să aibă loc doar în partea dreaptă, la începutul fiecărei treceri, iar schimbarea să depindă de datele de intrare și nu de cheie. În RDES-1 se practică o schimbare dependentă de date de cuvinte pe 16 biți la începutul fiecărei treceri. În RDES-2 există o schimbare de octeți dependentă de date la începutul fiecărei treceri, după o schimbare ca în RDES-1. Se poate continua în același mod până la RDES-4. RDES-1 este sigură atât față de criptanaliza liniară cât și față de cea diferențială.

2.5. Cronologia algoritmului de criptare DES

Tabelul 2.2. Cronologia evenimentelor algoritmului DES

2.6. Concluzii la compartimentul 2

Trebuie de menționat că utilizarea la momentul actual a algoritmului de criptare DES nu ne asigură o securitate dorită, însă în această teza el va este utilizat ca exemplu de principiu pentru aplicarea unui algoritm simetric la criptarea directă a documentelor electronice care pot fi utilizate la tranzacțiile electronice și nu a conținutului documentului aparte. Acest principiu poate fi aplicat și asupra oricărui algoritm de criptare sigur și mult mai complex. În compartimentul 3 este descrisă aplicația software la baza căreia se află algoritmul de criptare DES și care criptează și decriptează fișiere cu extensiile txt, doc, xls, pdf, jpeg, bmp.

3. DESCRIEREA ȘI ANALIZA APLICAȚIEI DE CRIPTARE ȘI DECRIPTARE A DOCUMENTELOR

3.1. Date generale despre aplicație

În rezultatul cercetărilor și analizei metodelor criptografice utilizate în prezent pentru protecția tranzacțiilor de date a fost luată decizia de a modela unul din algoritmii care a servit o perioadă de timp în calitate de standard criptografic. Evident, acest algoritm nu mai este sigur, la momentul de față, însă în teză a fost înaintată problema modelării unui algoritm de criptare (nu neapărat unul sigur) a celor mai des utilizate fișiere în tranzacțiile de date. Astfel de fișiere sunt fișierele txt, doc, xls, pdf, jpeg, bmp.

Pentru criptarea acestor fișiere a fost realizat un program în limbajul Delphi (versiunea 6). Algoritmul elaborat constă din 3 etape:

a) la criptare

deschiderea fișierului sursă (care trebuie criptat) care au extensia txt, doc, xls, pdf, bmp sau jpeg;

aplicarea algoritmului DES cu cheia introdusă asupra blocurilor de biți ai fișierului;

înscrierea datelor într-un fișier nou cu extensia des (Fig. 3.1).

Fig. 3.1. Criptarea fișierelor cu aplicația elaborată

a) la decriptare

deschiderea fișierului sursă (care trebuie decriptat) care au extensia des;

aplicarea algoritmului DES cu cheia introdusă asupra blocurilor de biți ai fișierului;

înscrierea datelor într-un fișier nou cu extensia originală (Fig. 3.2).

Fig. 3.2. Decriptarea fișierelor cu aplicația elaborată

Fișierele criptate, precum și cele decriptate (Fig. 3.3) sunt salvate în directorul cu fișierul inițial (atât fișierele cu extensiile txt, doc, xls, pdf, jpeg cât și cele cu extensia des), iar luând în considerație particularitățile algoritmului DES (cantitatea de biți la intrare este egală cu cantitatea de biți la ieșire), ele au aceleași dimensiuni.

Fig. 3.3. Salvarea fișierelor în același director

În cazul în care cheia de decriptare nu coincide cu cheia de criptare aplicația va anunța despre o eroare și ne va sugera o posibilă cheie secretă greșită (Fig. 3.4).

Fig. 3.4. Decriptarea fișierelor cu aplicația elaborată

În acest caz este necesar de a introduce cheia corectă sau altfel nu vom putea decripta mesajul (fără a aplica unele posibile metode de spargere).

3.2. Date statistice despre aplicație

În tabelele 3.1, 3.2, 3.3, 3.4 și 3.5 și figurile 3.5, 3.6, 3.7, și 3.8 ce urmează sunt prezentate date experimentale care descriu viteza, dar și corectitudinea lucrului aplicației elaborate cu fișiere de toate extensiile menționate și de diferite mărimi. Menționez aici că pentru exactitatea experimentelor fișierele doc, txt și xls conțin numai informație textuală, fără inserări grafice.

Figura 3.5. Timpului de lucru a aplicației pentru criptarea și decriptarea fișierelor doc

Tabelul 3.1. Date statistice referitoare la criptarea-decriptarea fișierelor doc

Pentru fișierele doc aceste date sunt prezentate în Tabelul 3.1 iar pentru fișierele txt – în Tabelul 3.2.

Tabelul 3.2. Date statistice referitoare la criptarea-decriptarea fișierelor txt

Pentru fișierele xls datele statistice sunt prezentate în Tabelul 6. Observăm că situația la criptarea și decriptarea acestor fișiere este exact aceeași ca și la fișierele txt.

Tabelul 3.3. Date statistice referitoare la criptarea-decriptarea fișierelor xls

Reprezentarea grafică a rezultatelor pentru aceste fișiere este arătată în Figura 3.6.

Figura 3.6. Timpului de lucru a aplicației pentru criptarea și decriptarea fișierelor txt și xls

Datele referitoare la fișierele pdf sunt prezentate în tabelul 3.4 și în Figura 3.7. Din tabel și figură observăm că aceste date diferă foarte puțin de parametrii sistemului pentru fișierele txt șu xls, acești parametri fiind puțin în creștere pentru fișierele pdf.

Tabelul 3.4. Date statistice referitoare la criptarea-decriptarea fișierelor pdf

Figura 3.7 Timpului de lucru a aplicației pentru criptarea și decriptarea fișierelor pdf

La testarea lucrului aplicației cu fișiere grafice (jpeg, bmp) s-a dovedit că timpul de criptare și decriptare pentru ambele extensii același (Tabelul 3.5 și Figura 3.8). În tabel nu au fost incluse fișiere mari din imposibilitatea de a le găsi în așa mărimi în formatele respective.

Tabelul 3.5. Date statistice referitoare la criptarea-decriptarea fișierelor grafice

Figura 3.8. Timpului de lucru a aplicației pentru criptarea și decriptarea fișierelor grafice

3.3. Concluzii la compartimentul 3

Au fost efectuate testări pentru a verifica lucrul aplicației. S-au testat fișiere de toate tipurile (extensiile) cu care aplicația lucrează, acestea având diverse mărimi (de la circa 0,1MB până circa 110MB). Rezultatele testărilor au arătat că aplicația lucrează fără erori. Toate fișierele testate au fost criptate și decriptate fără pierderi sau erori.

În rezultatul acestor testări observăm că pentru criptarea sau decriptarea unui MB de informație reprezentată în fișierele cercetate sunt necesare între 2,5 și 4,25 secunde. Cele mai mari cheltuieli de timp sunt necesare pentru criptarea/ decriptarea fișierelor grafice.

CONCLUZII GENERALE ȘI RECOMANDĂRI

În ziua de azi informația are o importanță primordială pretutindeni, ea nu poate fi neglijată în nici un fel ci trebuie actualizată și utilizată la nivelul respectiv pentru a avea succes în orice domeniu de activitate. Cu atât mai importantă este securitatea acestei informații, care în caz de scurgere poate cauza daune colosale proprietarilor acestei informații.

Astfel, în orice tranzacții de date în format electronic un instrument indispensabil este aparatul criptografic, care oferă poate cea mai sigură cale de a păstra informația confidențială chiar și în cazurile de pierdere, furt sau scurgeri al ei.

În ziua de azi pentru tranzacțiile de date sunt utilizate diverse instrumente hardware, token-uri etc, ele sunt metode sigure, dar comerciale.

În teza de față am elaborat și creat o aplicație care va fi una freeware – pentru orice utilizator și care poate servi în calitate de instrument demonstrativ pentru tranzacțiile de date. Acest instrument, cu regret, poate fi utilizat cu siguranță doar pentru perioade foarte scurte de timp (algoritmul care se află la baza aplicației este la momentul actual vulnerabil la atacuri), însă poate servi ca aparat demonstrativ în operațiile de tranzacție a datelor, dar și pentru criptarea-decriptarea fișierelor în general.

BIBLIOGRAFIE

Bogdan Groza, Introducere în Criptografie, 2012. http://www.aut.upt.ro/~bgroza/Books/IntroCripto.pdf (vizitat 12.04.2014).

Oprea Dumitru, Protectia si securitatea informatiilor, București, 2007, 448 p.

Popa Sorin Eugen, Securitatea sistemelor Informatice, 2007, http://bogdanelb.files.wordpress.com/2009/12/curs_securit_sist_inf.pdf (vizitat 12.04.2014).

Răcuciu Ciprian, Criptogrfie și securitatea informației, Editura Universității „Titu Maiorescu”, București, 2010. 250p.

Salomaa A., Criptografie cu chei publice, București: Ed. Militară, 1994. 255 p.

Zgureanu A., Securitatea informațională și metode de criptare bazate pe mulțimi de relații multi-are. Autoref. tezei de dr. șt. fiz.-mat. Chișinău, 2011. 30 p. http://www.cnaa.md/files/theses/2011/20507/aureliu_zgureanu_abstract.pdf (vizitat 12.04.2014).

Biham E. and Shamir A., Differential Cryptanalysis of the Full 16-Round DES, Advances in Cryptology, Proceedings of CRYPTO '92, 1992, pp. 487–496.

Biham E., and Shamir A., Differential Cryptanalysis of the Data Encryption Standard, Springer Verlag, 1993. 186 p.

Daemen J., Rijmen V., The Design of Rijndael: AES – The Advanced Encryption Standard, Springer-Verlag, 2002. 255 p.

Devours C., Kahn D., Kruh L., Mellen G., Winkel B., Cryptology: Machines, history and Methods, Artech House, 1989, 520 p.

Diffie W. and Hellman M. E., New Directions in Cryptography. IEEE Transactions on Information Theory, vol. IT-22, Nov. 1976, pp. 644–654.

FIPS PUB 197, The official AES standard. http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf (vizitat 19.03.2014).

Forré R., Methods and instruments for designing S-boxes, Journal of Cryptology 1990, 2, pp. 115–130.

Hoffstein J., Pipher J., Silverman J. H., An Introduction to Mathematical Cryptography, Springer Science+Business Media, LLC, 2008. 524 p.

Kahn D., The Codebreakers – The Story of Secret Writing, abridget ed. New York, NY: Signet, 1973. 1164 p.

Katz J. & Lindell Y., Introduction to Modern Cryptography, Chapman & Hall/CRC, 2008. 552 p.

Konheim Alan G., Computer Security and Cryptography, John Wiley & Sons, Inc., 2007, 544 p.

Menezes A., van Oorschot P., Vanstone S., Handbook of Applied Cryptography, CRC Press, 1996. 816 p.

Mogollon M., Cryptography and Security Services: Mechanisms and Applications, New York, Cybertech Publishing, 2008, 489 p.

National Bureau of Standards, Data Encryption Standard, FIPS PUB 46 (Jan. 1977) http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf (vizitat 18.03.2014).

Rivest R. L., Shamir A., Adleman L., A method for obtaining digital signatures and public key cryptosystems, Comm ACM 21, 1978, pp. 120–126.

Schneier B., Applied Cryptography, Second Edition. John Wiley & Sons, 1996, http://f3.tiera.ru/ShiZ/math/other/Applied%20Cryptography%202nd%20ed.%20-%20%20B.%20Schneier.pdf (vizitat 18.03.2014).

Shannon C. E., Communication Theory of Secrecy Systems, Bell System Technical Journal. v. 28, n. 4, 1949, pp. 656-715.

Tuchman W. L. and Meyer C., Efficacy of the Data Encryption Standard in Data Processing, Proceedings of Compcon’78, 1978, pp. 340–347.

Aгpанoвcкий A. B., Xади P. A., Пpактичecкая кpиптoгpафия, алгopитмы и иx пpoгpаммиpoваниe, Mocква, 2009. 258 c.

Бeлoв E. Б. и дp., Ocнoвы инфopмациoннoй бeзoпаcнocти. M.: Гopячая линия – Teлeкoм, 2006. 544 c.

Гатчин Ю.A., Климoва E.B., Ocнoвы инфopмациoннoй бeзoпаcнocти, Cанкт-Пeтepбypг, 2009. 84 c.

Mаo B., Coвpeмeнная кpиптoгpафия (тeopия и пpактика), M.: Bильямc, 2005, 768 c.

Cычeв Ю.H, Ocнoвы инфopмациoннoй бeзoпаcнocти. Mocква, 2007. 301 c.

Щepбакoв A.Ю. Coвpeмeнная кoмпьютepная бeзoпаcнocть. Teopeтичecкиe ocнoвы. Пpактичecкиe аcпeкты. — M.: Книжный миp, 2009. 352 c.

ANEXĂ

Sursa fișierului des.dpr

program des;

uses

Forms,

des_u in 'des_u.pas' {Form1};

{$R *.RES}

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

end.

Sursa fișierului des_u.pas

unit des_u;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls,

Forms, Dialogs, StdCtrls, FileCtrl;

type

TForm1 = class(TForm)

Button2: TButton;

Edit1: TEdit;

Label1: TLabel;

Edit2: TEdit;

Button1: TButton;

OpenDialog1: TOpenDialog;

Label2: TLabel;

Label3: TLabel;

procedure Button3Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormShow(Sender: TObject);

private

public

end;

str8=string[8];

var

fsmallbuffer:array[1..8]of byte;

fkey:string;

FRoundKeys : Array [1..16,1..48] Of Byte;

FC: Array [1..28] Of Byte;

FD: Array [1..28] Of Byte;

FInputValue : Array [1..64] Of Byte;

FOutputValue : Array [1..64] Of Byte;

FL, FR, FFunctionResult : Array [1..32] Of Byte;

Const

IP : Array [1..64] Of Byte = (58,50,42,34,26,18,10,2,

60,52,44,36,28,20,12,4,

62,54,46,38,30,22,14,6,

64,56,48,40,32,24,16,8,

57,49,41,33,25,17, 9,1,

59,51,43,35,27,19,11,3,

61,53,45,37,29,21,13,5,

63,55,47,39,31,23,15,7);

InvIP : Array [1..64] Of Byte = (40, 8,48,16,56,24,64,32,

39, 7,47,15,55,23,63,31,

38, 6,46,14,54,22,62,30,

37, 5,45,13,53,21,61,29,

36, 4,44,12,52,20,60,28,

35, 3,43,11,51,19,59,27,

34, 2,42,10,50,18,58,26,

33, 1,41, 9,49,17,57,25);

E : Array [1..48] Of Byte = (32, 1, 2, 3, 4, 5,

4, 5, 6, 7, 8, 9,

8, 9,10,11,12,13,

12,13,14,15,16,17,

16,17,18,19,20,21,

20,21,22,23,24,25,

24,25,26,27,28,29,

28,29,30,31,32, 1);

P : Array [1..32] Of Byte = (16, 7,20,21,

29,12,28,17,

1,15,23,26,

5,18,31,10,

2, 8,24,14,

32,27, 3, 9,

19,13,30, 6,

22,11, 4,25);

SBoxes : Array [1..8,0..3,0..15] Of Byte =

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

PC_1 : Array [1..56] Of Byte = (57,49,41,33,25,17, 9,

1,58,50,42,34,26,18,

10, 2,59,51,43,35,27,

19,11, 3,60,52,44,36,

63,55,47,39,31,23,15,

7,62,54,46,38,30,22,

14, 6,61,53,45,37,29,

21,13, 5,28,20,12, 4);

PC_2 : Array [1..48] Of Byte = (14,17,11,24, 1, 5,

3,28,15, 6,21,10,

23,19,12, 4,26, 8,

16, 7,27,20,13, 2,

41,52,31,37,47,55,

30,40,51,45,33,48,

44,49,39,56,34,53,

46,42,50,36,29,32);

ShiftTable : Array [1..16] Of Byte =

(1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1);

DESKEYLENGTH = 8;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button3Click(Sender: TObject);

begin

form1.Close;

end;

procedure TForm1.FormActivate(Sender: TObject);

begin

Left:=(screen.Width-Width)div 2;

Top:=(screen.Height-Height)div 3;

end;

function cheie(s:string):string;

begin

repeat

s:=s+s;

until length(s)>=8;

cheie:=s;

end;

Function GetBit (Var Data; Index : Byte) : Byte;

Var

Bits : Array [0..7] Of Byte ABSOLUTE Data;

Begin

Dec (Index);

If Bits[Index DIV 8] And (128 SHR (Index MOD 8))>0 then

GetBit:=1 Else GetBit:=0;

End;{GetBit}

Procedure SetBit (Var Data; Index, Value : Byte);

Var

Bits : Array [0..7] Of Byte ABSOLUTE Data;

Bit : Byte;

Begin

Dec (Index);

Bit:=128 SHR (Index MOD 8);

Case Value Of

0 : Bits[Index DIV 8]:=Bits[Index DIV 8] And (Not Bit);

1 : Bits[Index DIV 8]:=Bits[Index DIV 8] Or Bit;

End;

End;{SetBit}

Procedure F (Var FK);

Var

K : Array [1..48] Of Byte ABSOLUTE FK;

Temp1 : Array [1..48] Of Byte;

Temp2 : Array [1..32] Of Byte;

n, h, i, j, Row, Column : Integer;

Begin

For n:=1 to 48 Do Temp1[n]:=FR[E[n]] Xor K[n];

For n:=1 to 8 Do Begin

i:=(n-1)*6; j:=(n-1)*4;

Row:=Temp1[i+1]*2+Temp1[i+6];

Column:=Temp1[i+2]*8 + Temp1[i+3]*4 +

Temp1[i+4]*2 + Temp1[i+5];

For h:=1 to 4 Do Begin

Case h Of

1 : Temp2[j+h]:=(SBoxes[n,Row,Column] And 8) DIV 8;

2 : Temp2[j+h]:=(SBoxes[n,Row,Column] And 4) DIV 4;

3 : Temp2[j+h]:=(SBoxes[n,Row,Column] And 2) DIV 2;

4 : Temp2[j+h]:=(SBoxes[n,Row,Column] And 1);

End;

End;

End;

For n:=1 to 32 Do FFunctionResult[n]:=Temp2[P[n]];

End;

Procedure Shift (Var SubKeyPart);

Var

SKP : Array [1..28] Of Byte ABSOLUTE SubKeyPart;

n, b : Byte;

Begin

b:=SKP[1];

For n:=1 to 27 Do SKP[n]:=SKP[n+1];

SKP[28]:=b;

End;

Procedure SubKey (Round : Byte; Var SubKey);

Var SK : Array [1..48] Of Byte ABSOLUTE SubKey; n, b : Byte;

Begin

For n:=1 to ShiftTable[Round] Do Begin

Shift (FC);

Shift (FD);

End;

For n:=1 to 48 Do Begin

b:=PC_2[n];

If b<=28 then SK[n]:=FC[b] Else SK[n]:= FD[b-28];

End;

End;

Procedure SetKeys;

var

n: BYTE;

Key: Array [0..7] of BYTE;

begin

move(FKey[1], Key, DESKEYLENGTH);

For n:=1 to 28 Do Begin

FC[n]:=GetBit(Key,PC_1[n]);

FD[n]:=GetBit(Key,PC_1[n+28]);

End;

For n:=1 to 16 Do SubKey(n,FRoundKeys[n]);

end;

Procedure EncipherBLOCK;

var n, i, b, Round : Byte;

begin

For n:=1 to 64 Do FInputValue[n]:=GetBit (FSmallBuffer,n);

For n:=1 to 64 Do If n<=32 then FL[n]:=FInputValue[IP[n]] Else FR[n-32]:=FInputValue[IP[n]];

For Round:=1 to 16 Do Begin

F (FRoundKeys[Round]);

For n:=1 to 32 Do

FFunctionResult[n]:=FFunctionResult[n] Xor FL[n];

FL := FR; FR := FFunctionResult;

End;

For n:=1 to 64 Do Begin

b:=InvIP[n];

If b<=32 then FOutputValue[n]:=FR[b]

Else FOutputValue[n]:=FL[b-32];

End;

For n:=1 to 64 Do SetBit (FSmallBuffer,n,FOutputValue[n]);

end;

Procedure DecipherBLOCK;

var n, i, b, Round : Byte;

begin

For n:=1 to 64 Do FInputValue[n]:=GetBit (FSmallBuffer,n);

For n:=1 to 64 Do

If n<=32 then FL[n]:=FInputValue[IP[n]]

Else FR[n-32]:=FInputValue[IP[n]];

For Round:=1 to 16 Do Begin

F (FRoundKeys[17-Round]);

For n:=1 to 32 Do

FFunctionResult[n]:=FFunctionResult[n] Xor FL[n];

FL := FR;

FR := FFunctionResult;

End;

For n:=1 to 64 Do Begin

b:=InvIP[n];

If b<=32 then FOutputValue[n]:=FR[b]

Else FOutputValue[n]:=FL[b-32];

End;

For n:=1 to 64 Do SetBit (FSmallBuffer,n,FOutputValue[n]);

end;

function checksum(s1:string):longint;

var

cs,x:longint;

r:integer;

f:file;

begin

cs:=0;

assignfile(f,s1);

reset(f,4);

while not(eof(f))do

begin

blockread(f,x,1,r);

cs:=cs xor x;

end;

closefile(f);

checksum:=cs;

end;

procedure criptare(s1,s2,s3:string);

var

f1,f2:file;

i,si:byte;nr:integer;

pwd:string;

x,y:str8;

cs:longint;

begin

fkey:=cheie(form1.edit1.text);

setkeys;

cs:=checksum(s1);

assignfile(f1,s1);

reset(f1,1);

si:=filesize(f1);

i:=si mod 8;

if i=0 then i:=8;

assignfile(f2,s2);

rewrite(f2,1);

blockwrite(f2,i,1);

blockwrite(f2,cs,4);

while not(eof(f1))do

begin

blockread(f1,fsmallbuffer,8,nr);

encipherblock;

blockwrite(f2,fsmallbuffer,8);

end;

close(f1);

close(f2);

showmessage('Fisier criptat OK!');

end;

procedure decriptare(s1,s2,s3:string);

var

f1,f2:file;

i,si:byte;

pwd:string;

cs:longint;

x,y:str8;

begin

fkey:=cheie(form1.edit1.text);

setkeys;

assignfile(f1,s1);

reset(f1,1);

blockread(f1,si,1);

assignfile(f2,s2);

rewrite(f2,1);

blockread(f1,cs,4);

while not(eof(f1))do

begin

blockread(f1,fsmallbuffer,8);

decipherblock;

if not(eof(f1))then

begin

blockwrite(f2,fsmallbuffer,8);

end else

blockwrite(f2,fsmallbuffer,si)

end;

close(f1);

close(f2);

if cs=checksum(s2)

then showmessage('Fisier decriptat, suma de control OK')

else showmessage('Suma de control gresita ! '+

'Posibil+ cuvânt cheie eronat !');

end;

procedure TForm1.Button2Click(Sender: TObject);

var

fn1,fn2:string;

begin

if fileexists(edit2.Text) then

begin

fn1:=edit2.Text;

if copy(fn1,length(fn1)-3,4)<>'.des'

then

begin

fn2:=fn1+'.des';

if edit1.Text<>'' then criptare(fn1,fn2,edit1.Text)

else showmessage('Introduceti cuvântul cheie !');

end

else

begin

fn2:=copy(fn1,1,length(fn1)-4);

if edit1.Text<>'' then

decriptare(fn1,fn2,edit1.Text)

else

showmessage('Introduceti cuvântul cheie !');

end;

end else

showmessage('Apasati butonul "…" pentru' +

' a selecta fisierul !');;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

opendialog1.InitialDir:=extractfilepath(application.ExeName)+

'Fisiere\';

if opendialog1.Execute then

edit2.Text:=opendialog1.FileName;

end;

procedure TForm1.FormShow(Sender: TObject);

begin

top:=(screen.Height-Height)div 3;

left:=(screen.Width-Width)div 2;

end;

end.

BIBLIOGRAFIE

Bogdan Groza, Introducere în Criptografie, 2012. http://www.aut.upt.ro/~bgroza/Books/IntroCripto.pdf (vizitat 12.04.2014).

Oprea Dumitru, Protectia si securitatea informatiilor, București, 2007, 448 p.

Popa Sorin Eugen, Securitatea sistemelor Informatice, 2007, http://bogdanelb.files.wordpress.com/2009/12/curs_securit_sist_inf.pdf (vizitat 12.04.2014).

Răcuciu Ciprian, Criptogrfie și securitatea informației, Editura Universității „Titu Maiorescu”, București, 2010. 250p.

Salomaa A., Criptografie cu chei publice, București: Ed. Militară, 1994. 255 p.

Zgureanu A., Securitatea informațională și metode de criptare bazate pe mulțimi de relații multi-are. Autoref. tezei de dr. șt. fiz.-mat. Chișinău, 2011. 30 p. http://www.cnaa.md/files/theses/2011/20507/aureliu_zgureanu_abstract.pdf (vizitat 12.04.2014).

Biham E. and Shamir A., Differential Cryptanalysis of the Full 16-Round DES, Advances in Cryptology, Proceedings of CRYPTO '92, 1992, pp. 487–496.

Biham E., and Shamir A., Differential Cryptanalysis of the Data Encryption Standard, Springer Verlag, 1993. 186 p.

Daemen J., Rijmen V., The Design of Rijndael: AES – The Advanced Encryption Standard, Springer-Verlag, 2002. 255 p.

Devours C., Kahn D., Kruh L., Mellen G., Winkel B., Cryptology: Machines, history and Methods, Artech House, 1989, 520 p.

Diffie W. and Hellman M. E., New Directions in Cryptography. IEEE Transactions on Information Theory, vol. IT-22, Nov. 1976, pp. 644–654.

FIPS PUB 197, The official AES standard. http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf (vizitat 19.03.2014).

Forré R., Methods and instruments for designing S-boxes, Journal of Cryptology 1990, 2, pp. 115–130.

Hoffstein J., Pipher J., Silverman J. H., An Introduction to Mathematical Cryptography, Springer Science+Business Media, LLC, 2008. 524 p.

Kahn D., The Codebreakers – The Story of Secret Writing, abridget ed. New York, NY: Signet, 1973. 1164 p.

Katz J. & Lindell Y., Introduction to Modern Cryptography, Chapman & Hall/CRC, 2008. 552 p.

Konheim Alan G., Computer Security and Cryptography, John Wiley & Sons, Inc., 2007, 544 p.

Menezes A., van Oorschot P., Vanstone S., Handbook of Applied Cryptography, CRC Press, 1996. 816 p.

Mogollon M., Cryptography and Security Services: Mechanisms and Applications, New York, Cybertech Publishing, 2008, 489 p.

National Bureau of Standards, Data Encryption Standard, FIPS PUB 46 (Jan. 1977) http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf (vizitat 18.03.2014).

Rivest R. L., Shamir A., Adleman L., A method for obtaining digital signatures and public key cryptosystems, Comm ACM 21, 1978, pp. 120–126.

Schneier B., Applied Cryptography, Second Edition. John Wiley & Sons, 1996, http://f3.tiera.ru/ShiZ/math/other/Applied%20Cryptography%202nd%20ed.%20-%20%20B.%20Schneier.pdf (vizitat 18.03.2014).

Shannon C. E., Communication Theory of Secrecy Systems, Bell System Technical Journal. v. 28, n. 4, 1949, pp. 656-715.

Tuchman W. L. and Meyer C., Efficacy of the Data Encryption Standard in Data Processing, Proceedings of Compcon’78, 1978, pp. 340–347.

Aгpанoвcкий A. B., Xади P. A., Пpактичecкая кpиптoгpафия, алгopитмы и иx пpoгpаммиpoваниe, Mocква, 2009. 258 c.

Бeлoв E. Б. и дp., Ocнoвы инфopмациoннoй бeзoпаcнocти. M.: Гopячая линия – Teлeкoм, 2006. 544 c.

Гатчин Ю.A., Климoва E.B., Ocнoвы инфopмациoннoй бeзoпаcнocти, Cанкт-Пeтepбypг, 2009. 84 c.

Mаo B., Coвpeмeнная кpиптoгpафия (тeopия и пpактика), M.: Bильямc, 2005, 768 c.

Cычeв Ю.H, Ocнoвы инфopмациoннoй бeзoпаcнocти. Mocква, 2007. 301 c.

Щepбакoв A.Ю. Coвpeмeнная кoмпьютepная бeзoпаcнocть. Teopeтичecкиe ocнoвы. Пpактичecкиe аcпeкты. — M.: Книжный миp, 2009. 352 c.

ANEXĂ

Sursa fișierului des.dpr

program des;

uses

Forms,

des_u in 'des_u.pas' {Form1};

{$R *.RES}

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.Run;

end.

Sursa fișierului des_u.pas

unit des_u;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls,

Forms, Dialogs, StdCtrls, FileCtrl;

type

TForm1 = class(TForm)

Button2: TButton;

Edit1: TEdit;

Label1: TLabel;

Edit2: TEdit;

Button1: TButton;

OpenDialog1: TOpenDialog;

Label2: TLabel;

Label3: TLabel;

procedure Button3Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure FormShow(Sender: TObject);

private

public

end;

str8=string[8];

var

fsmallbuffer:array[1..8]of byte;

fkey:string;

FRoundKeys : Array [1..16,1..48] Of Byte;

FC: Array [1..28] Of Byte;

FD: Array [1..28] Of Byte;

FInputValue : Array [1..64] Of Byte;

FOutputValue : Array [1..64] Of Byte;

FL, FR, FFunctionResult : Array [1..32] Of Byte;

Const

IP : Array [1..64] Of Byte = (58,50,42,34,26,18,10,2,

60,52,44,36,28,20,12,4,

62,54,46,38,30,22,14,6,

64,56,48,40,32,24,16,8,

57,49,41,33,25,17, 9,1,

59,51,43,35,27,19,11,3,

61,53,45,37,29,21,13,5,

63,55,47,39,31,23,15,7);

InvIP : Array [1..64] Of Byte = (40, 8,48,16,56,24,64,32,

39, 7,47,15,55,23,63,31,

38, 6,46,14,54,22,62,30,

37, 5,45,13,53,21,61,29,

36, 4,44,12,52,20,60,28,

35, 3,43,11,51,19,59,27,

34, 2,42,10,50,18,58,26,

33, 1,41, 9,49,17,57,25);

E : Array [1..48] Of Byte = (32, 1, 2, 3, 4, 5,

4, 5, 6, 7, 8, 9,

8, 9,10,11,12,13,

12,13,14,15,16,17,

16,17,18,19,20,21,

20,21,22,23,24,25,

24,25,26,27,28,29,

28,29,30,31,32, 1);

P : Array [1..32] Of Byte = (16, 7,20,21,

29,12,28,17,

1,15,23,26,

5,18,31,10,

2, 8,24,14,

32,27, 3, 9,

19,13,30, 6,

22,11, 4,25);

SBoxes : Array [1..8,0..3,0..15] Of Byte =

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

PC_1 : Array [1..56] Of Byte = (57,49,41,33,25,17, 9,

1,58,50,42,34,26,18,

10, 2,59,51,43,35,27,

19,11, 3,60,52,44,36,

63,55,47,39,31,23,15,

7,62,54,46,38,30,22,

14, 6,61,53,45,37,29,

21,13, 5,28,20,12, 4);

PC_2 : Array [1..48] Of Byte = (14,17,11,24, 1, 5,

3,28,15, 6,21,10,

23,19,12, 4,26, 8,

16, 7,27,20,13, 2,

41,52,31,37,47,55,

30,40,51,45,33,48,

44,49,39,56,34,53,

46,42,50,36,29,32);

ShiftTable : Array [1..16] Of Byte =

(1,1,2,2,2,2,2,2,1,2,2,2,2,2,2,1);

DESKEYLENGTH = 8;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button3Click(Sender: TObject);

begin

form1.Close;

end;

procedure TForm1.FormActivate(Sender: TObject);

begin

Left:=(screen.Width-Width)div 2;

Top:=(screen.Height-Height)div 3;

end;

function cheie(s:string):string;

begin

repeat

s:=s+s;

until length(s)>=8;

cheie:=s;

end;

Function GetBit (Var Data; Index : Byte) : Byte;

Var

Bits : Array [0..7] Of Byte ABSOLUTE Data;

Begin

Dec (Index);

If Bits[Index DIV 8] And (128 SHR (Index MOD 8))>0 then

GetBit:=1 Else GetBit:=0;

End;{GetBit}

Procedure SetBit (Var Data; Index, Value : Byte);

Var

Bits : Array [0..7] Of Byte ABSOLUTE Data;

Bit : Byte;

Begin

Dec (Index);

Bit:=128 SHR (Index MOD 8);

Case Value Of

0 : Bits[Index DIV 8]:=Bits[Index DIV 8] And (Not Bit);

1 : Bits[Index DIV 8]:=Bits[Index DIV 8] Or Bit;

End;

End;{SetBit}

Procedure F (Var FK);

Var

K : Array [1..48] Of Byte ABSOLUTE FK;

Temp1 : Array [1..48] Of Byte;

Temp2 : Array [1..32] Of Byte;

n, h, i, j, Row, Column : Integer;

Begin

For n:=1 to 48 Do Temp1[n]:=FR[E[n]] Xor K[n];

For n:=1 to 8 Do Begin

i:=(n-1)*6; j:=(n-1)*4;

Row:=Temp1[i+1]*2+Temp1[i+6];

Column:=Temp1[i+2]*8 + Temp1[i+3]*4 +

Temp1[i+4]*2 + Temp1[i+5];

For h:=1 to 4 Do Begin

Case h Of

1 : Temp2[j+h]:=(SBoxes[n,Row,Column] And 8) DIV 8;

2 : Temp2[j+h]:=(SBoxes[n,Row,Column] And 4) DIV 4;

3 : Temp2[j+h]:=(SBoxes[n,Row,Column] And 2) DIV 2;

4 : Temp2[j+h]:=(SBoxes[n,Row,Column] And 1);

End;

End;

End;

For n:=1 to 32 Do FFunctionResult[n]:=Temp2[P[n]];

End;

Procedure Shift (Var SubKeyPart);

Var

SKP : Array [1..28] Of Byte ABSOLUTE SubKeyPart;

n, b : Byte;

Begin

b:=SKP[1];

For n:=1 to 27 Do SKP[n]:=SKP[n+1];

SKP[28]:=b;

End;

Procedure SubKey (Round : Byte; Var SubKey);

Var SK : Array [1..48] Of Byte ABSOLUTE SubKey; n, b : Byte;

Begin

For n:=1 to ShiftTable[Round] Do Begin

Shift (FC);

Shift (FD);

End;

For n:=1 to 48 Do Begin

b:=PC_2[n];

If b<=28 then SK[n]:=FC[b] Else SK[n]:= FD[b-28];

End;

End;

Procedure SetKeys;

var

n: BYTE;

Key: Array [0..7] of BYTE;

begin

move(FKey[1], Key, DESKEYLENGTH);

For n:=1 to 28 Do Begin

FC[n]:=GetBit(Key,PC_1[n]);

FD[n]:=GetBit(Key,PC_1[n+28]);

End;

For n:=1 to 16 Do SubKey(n,FRoundKeys[n]);

end;

Procedure EncipherBLOCK;

var n, i, b, Round : Byte;

begin

For n:=1 to 64 Do FInputValue[n]:=GetBit (FSmallBuffer,n);

For n:=1 to 64 Do If n<=32 then FL[n]:=FInputValue[IP[n]] Else FR[n-32]:=FInputValue[IP[n]];

For Round:=1 to 16 Do Begin

F (FRoundKeys[Round]);

For n:=1 to 32 Do

FFunctionResult[n]:=FFunctionResult[n] Xor FL[n];

FL := FR; FR := FFunctionResult;

End;

For n:=1 to 64 Do Begin

b:=InvIP[n];

If b<=32 then FOutputValue[n]:=FR[b]

Else FOutputValue[n]:=FL[b-32];

End;

For n:=1 to 64 Do SetBit (FSmallBuffer,n,FOutputValue[n]);

end;

Procedure DecipherBLOCK;

var n, i, b, Round : Byte;

begin

For n:=1 to 64 Do FInputValue[n]:=GetBit (FSmallBuffer,n);

For n:=1 to 64 Do

If n<=32 then FL[n]:=FInputValue[IP[n]]

Else FR[n-32]:=FInputValue[IP[n]];

For Round:=1 to 16 Do Begin

F (FRoundKeys[17-Round]);

For n:=1 to 32 Do

FFunctionResult[n]:=FFunctionResult[n] Xor FL[n];

FL := FR;

FR := FFunctionResult;

End;

For n:=1 to 64 Do Begin

b:=InvIP[n];

If b<=32 then FOutputValue[n]:=FR[b]

Else FOutputValue[n]:=FL[b-32];

End;

For n:=1 to 64 Do SetBit (FSmallBuffer,n,FOutputValue[n]);

end;

function checksum(s1:string):longint;

var

cs,x:longint;

r:integer;

f:file;

begin

cs:=0;

assignfile(f,s1);

reset(f,4);

while not(eof(f))do

begin

blockread(f,x,1,r);

cs:=cs xor x;

end;

closefile(f);

checksum:=cs;

end;

procedure criptare(s1,s2,s3:string);

var

f1,f2:file;

i,si:byte;nr:integer;

pwd:string;

x,y:str8;

cs:longint;

begin

fkey:=cheie(form1.edit1.text);

setkeys;

cs:=checksum(s1);

assignfile(f1,s1);

reset(f1,1);

si:=filesize(f1);

i:=si mod 8;

if i=0 then i:=8;

assignfile(f2,s2);

rewrite(f2,1);

blockwrite(f2,i,1);

blockwrite(f2,cs,4);

while not(eof(f1))do

begin

blockread(f1,fsmallbuffer,8,nr);

encipherblock;

blockwrite(f2,fsmallbuffer,8);

end;

close(f1);

close(f2);

showmessage('Fisier criptat OK!');

end;

procedure decriptare(s1,s2,s3:string);

var

f1,f2:file;

i,si:byte;

pwd:string;

cs:longint;

x,y:str8;

begin

fkey:=cheie(form1.edit1.text);

setkeys;

assignfile(f1,s1);

reset(f1,1);

blockread(f1,si,1);

assignfile(f2,s2);

rewrite(f2,1);

blockread(f1,cs,4);

while not(eof(f1))do

begin

blockread(f1,fsmallbuffer,8);

decipherblock;

if not(eof(f1))then

begin

blockwrite(f2,fsmallbuffer,8);

end else

blockwrite(f2,fsmallbuffer,si)

end;

close(f1);

close(f2);

if cs=checksum(s2)

then showmessage('Fisier decriptat, suma de control OK')

else showmessage('Suma de control gresita ! '+

'Posibil+ cuvânt cheie eronat !');

end;

procedure TForm1.Button2Click(Sender: TObject);

var

fn1,fn2:string;

begin

if fileexists(edit2.Text) then

begin

fn1:=edit2.Text;

if copy(fn1,length(fn1)-3,4)<>'.des'

then

begin

fn2:=fn1+'.des';

if edit1.Text<>'' then criptare(fn1,fn2,edit1.Text)

else showmessage('Introduceti cuvântul cheie !');

end

else

begin

fn2:=copy(fn1,1,length(fn1)-4);

if edit1.Text<>'' then

decriptare(fn1,fn2,edit1.Text)

else

showmessage('Introduceti cuvântul cheie !');

end;

end else

showmessage('Apasati butonul "…" pentru' +

' a selecta fisierul !');;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

opendialog1.InitialDir:=extractfilepath(application.ExeName)+

'Fisiere\';

if opendialog1.Execute then

edit2.Text:=opendialog1.FileName;

end;

procedure TForm1.FormShow(Sender: TObject);

begin

top:=(screen.Height-Height)div 3;

left:=(screen.Width-Width)div 2;

end;

end.

Similar Posts

  • Mоdalitati DE Sоlutiоnare A Соnfliсtelоr Interрersоnale In Оrganizatie

    MОDALITĂȚI DE SОLUȚIОNARE A СОNFLIСTELОR INTERРERSОNALE ÎN ОRGANIZAȚIE СUРRINS Lista tabelelоr Intrоduсere Aсtualitatea și imроrtanța luсrării. Соnfliсtul este о stare de faрt оmniрrezentă, nu există zоnă a realității sосiale сare să nu fie animată de о serie întreagă de соnfliсte, de magnitudini și tiрuri diferite. Restrângând sfera abоrdării, рutem afirma сă și оrganizațiile sunt рermanent…

  • Misiunea DE Audit Intern

    CAPITOLUL 2: Misiune de audit intern privind inventarierea patrimoniului la societatea SC METROREX S.A. Prezentarea și organizarea societății SC METROREX S.A. Scurt istoric al societății Organizarea societății Cota de piață a societății METROREX S.A. Organizarea auditului intern la SC METROREX S.A. Derularea misiunii de audit intern privind procesul de inventariere a elementelor de natura activelor,…

  • Rolul Rivierii Marii Negre In Circuitul Turistic European

    Introducere. Capitolul I.Turismul de litoral – fenomen al activitatii tuistice contemporane. 1.1.Particularitățile turismului de litoral. 1.2.Tendințe de dezvoltare ale turismului de litoral european. 1.3. Potențialul turistic in Europa. Capitolul II.Turismul în România cu principalele atracții de litoral. 2.1.Premisele dezvoltării turismului în România. 2.2.Potențialul turistic al litoralului românesc. 2.3.Principalele atracții turistice ale litoralului românesc. 2.4.Cererea și…

  • Bugetul Local

    CUPRINS CAPITOLUL I BUGETUL LOCAL 1.1. Notiunea de buget local……………………………………………………………… 1.1.1. Principii si reguli bugetare……………………………………………. 1.1.2. Reguli bugetare……………………………………………………………………. 1.2. Modalitati de dimensionare a indicatorilor bugetari………………………………….. 1.2.1. Metode de dimensionare a indicatorilor bugetari A – Metode clasice B – Metode moderne 1.3 Proceduri privind elaborarea proiectului de buget 1.3.1. Conditii tehnice 1.3.2. Elaborarea proiectului de buget…

  • Operatiunele de Leasing

    Cuprins Introducere Capitolul I Aspecte generale privind operațiunele de leasing. Istoricul operațiunilor de leasing Tipurile și clasificarea operatiunlor de leasing Avantajele și limitele operatiunilor de finanțare prin leasing Surse de finanțare a tranzacțiilor de leasing. Capitolul II Piața serviciilor de leasing și problemele de funcționare în Republica Moldova 2.1 Reglementarea activității companiilor de leasing în…

  • Conflicte In Cadrul Organizatiei

    Introducere Capitolul 1 – Conflictul. Considerații generale Conceptul de “conflict” Surse de conflict Tipologia conflictului Dinamica stărilor conflictuale Capitolul 2 – Conflicte în cadrul organizației 1.1. Scurtă prezentare a diverselor abordări ale conflictelor 2.2. Conflictul intern 2.3. Conflictele interpersonale 2.4. Conflict și cultură managerială 2.5. Crizele de imagine Capitolul 3 – Rezolvarea conflictelor 3.1. Prevenirea…