Data publicării: 19.01.2018
Autor articol: Mircea Vaida

1. Aplicatia Cipher – Integrarea cifrurilor într-o aplicaţie dedicata

1.1 Aplicatia Cipher

Aplicaţia Cypher a fost dezvoltată folosind limbajul Java si API-ul BioJava. Ea implementează algoritmii prezentaţi cu scopul de a face o comparaţie între timpii de criptare respectiv decriptare ai acestor algoritmi.

In faza precedenta a fost implemenatat aplicaţia SmartCypher în laboratorul Helios [24], pentru a valida algoritmul de criptare alternativ bazat pe ADN propus a fi integrat in DNAProvider, comparativ cu metodele clasice. Testul algoritmului alternativ bazat pe ADN a fost posibil sub S.O. Linux Ubuntu, Oracle/Sun impunand restrictii dezvoltatorilor din afara USA care doresc sa implementeze provideri de securitate integrabili in JCA sub alte SO.

Pentru aplicaţia Cypher a fost dezvoltată o interfaţă grafică asemănătoare pentru a păstra compatibilitatea cu aplicaţia SmartCypher, implementarea făcându-se utilizând si API-ul BioJava.

Interfaţa a fost creată folosind plug-in-ul pentru Eclipse Java IDE Jigloo GUI Builder, dezvoltat de către Cloud Garden. În cazul de faţă s-a utilizat varianta pentru uz necomercial care este gratuită.

Interfaţa conţine un TextArea în care utilizatorul poate introduce textul pe care doreşte să-l cripteze.

Următorul pas este selecţia cifrului.

Disponibile sunt 5 cifruri:

  • Des
  • TripleDes
  • Blowfish
  • AES
  • Bio

dintre care se poate alege unul folosind butonul radio corespunzător.

În urma apăsării butonului “Cripteaza” se vor afişa în celelalte două chenare textul criptat, respectiv textul după decriptare, precum şi duratele necesare criptării şi decriptării.

In cazul criptării Bio se foloseşte un TextArea suplimentar în care se afişeaza textul codat în cod ADN.

Figura 1.1: Interfaţa Aplicaţiei Cypher
Figura 1.2: Criptarea şi Decriptarea folosind cifrul DES

Pentru implementarea cifrului DES s-a construit clasa  Criptare_DES în care s-au integrat funcţiile de criptare şi decriptare. Aceste funcţii folosesc API-urile oferite de JCE (Java Cryptography Extension) pentru a apela o instanţă a cifurlui DES.

Key key = KeyGenerator.getInstance(“DES”).generateKey();

Cipher cifru = Cipher.getInstance(“DES”);

In functia de criptare :

cifru.init(Cipher.ENCRYPT_MODE, key);

biti_criptare = cifru.doFinal(datain.getBytes());

In functia de decriptare:

cifru.init(Cipher.DECRYPT_MODE, key);

byte[] date = cifru.doFinal(biti_criptare);

S-a instanţiat un obiect din clasa Cypher şi un obiect din clasa KeyGenerator, ambele primind ca parametru stringul „DES” reprezentând numele algoritmului care se doreşte instanţiat. In fiecare funcţie obiectul din clasa Cipher se iniţializează pentru modul de lucru dorit criptare sau decriptare şi criptarea propriuzisă se face cu metoda „doFinal”.

Figura 1.3: Criptare şi decripare folosind cifrul AES

Pentru implementarea cifrului s-a construit clasa Criptare_AES în care s-au integrat funcţiile de criptare şi decriptare. Aceste funcţii folosesc API-urile oferite de JCE (Java Cryptography Extension) pentru a apela o instanţă a cifurlui AES în mod asemănător implementării cifrului DES.

Figura 1.4: Criptarea şi decriptarea folosind cifrul Blowfish

Pentru implementarea cifrului s-a construit clasa Criptare_Blowfish în care s-au integrat funcţiile de criptare şi decriptare. Aceste funcţii folosesc API-urile oferite de JCE (Java Cryptography Extension) pentru a apela o instanţă a cifurlui Blowfish în mod asemănător implementării cifrului DES.

Figura 1.5: Criptarea şi decriptarea folosind cifrul TripleDES

Pentru implementarea cifrului s-a construit clasa Criptare_TripleDES în care s-au integrat funcţiile de criptare şi decriptare. Aceste funcţii folosesc API-urile oferite de JCE (Java Cryptography Extension) pentru a apela o instanţă a cifurlui TripleDES în mod asemănător implementării cifrului DES.

Figura 1.6: Criptarea şi decriptarea folosind criptarea cu cifru ADN

1.2 Testare pentru analiza comparativă a criptarilor

Scopul urmarit in acest caz  este de a testa diverşi algoritmi clasici de criptare simetrică şi de a calcula timpii necesari criptării şi decriptării.  În scopul criptării s-a ales un text aleator de 360 caractere în format String, unic în cazul tuturor testelor. Secvenţa de testare este:

“k39pc3xygfv(!x|jl+qo|9~7k9why(ktr6pkiaw|gwnn&aw+be|r|*4u+rz$wm)(v_e&$dz|hc7^+p6%54vp*g*)kzlx!%4n4bvb#%vex~7c^qe_d745h40i$_2j*6t0h$8o!c~9x 4^2srn81x*wn9&k%*oo_co(*~!bfur7tl4udm!m4t+a|tb%zho6xmv$6k+#1$&axghrh*_3_zz @0!05u*|an$)5)k+8qf0fozxxw)_upryjj7_|+nd_&x+_jeflua^^peb_+%@03+36w)$~j715*r )x(*bumozo#s^ju)6jji@xa3y35^$+#mbyizt*mdst&h|hbf6o*)r2qrwm10ur+mbezz(1p7$f.”

Pentru a putea calcula intervalul de timp necesar criptării, respectiv decriptării, s-a folosit metoda public static long nanoTime() din clasa System care returnează ora de la momentul respectiv, în nanosecunde.

Pentru a afla timpul necesar criptării, s-au realizat 2 apeluri ale metodei nanoTime() în următorul mod:

long start1=System.nanoTime();

Cipher cifru = Cipher.getInstance(“DES”);

cifru.init(Cipher.ENCRYPT_MODE, key);

biti_criptare = cifru.doFinal(datain.getBytes());

long end1=System.nanoTime();

Primul apel s-a făcut înaintea instanţierii obiectului Cypher iar cel de-al doilea după realizarea criptării. În cazul decriptării s-a procedat similar. Pentru a afla durata necesară celor două operaţii s-a calculat, în ambele cazuri, diferenţa dintre cele două variabile care conţineau informaţii despre momentul în care s-a realizat apelul. Pentru a evita valori foarte mari rezultatul s-a transformat în milisecunde.

Timpii de criptare şi decriptare variază în funcţie de sistemul de operare folosit, de nivelul de încărcare a memoriei în momentul execuţiei testelor şi de modul de gestiune a firelor de execuţie de către diferitele sisteme de operare. De aceea s-a efectuat o analiză a variaţiei timpilor de execuţie a fiecărui algoritm, rulând criptarea de câte 10 ori  pe 3 sisteme diferite:

  • Sistem1:  OS-Windows1 32 biti
  • Sistem2:  OS-Wiondows2 64 biti
  • Sistem3:  OS- Ubuntu

S-a efectuat diagrama de comparaţie dintre timpul minim, mediu, maxim şi olimpic a fiecărui algoritm pe cele 3 sistme. Timpul denumit olimpic reprezintă o medie a timpilor de criptare a unui algoritm eliminând minimul şi maximul.

Pentru Sistemul1 cu OS-Windows1-32biti  s-au obţinut rezultatele din tabelul şi diagramele de mai jos:

Tabel 1.1.  Rezultatele testelor efectuate pe Sistemul 1 cu OS-Windows1

Rezultatele analizei pentru OS-Windows1
DESCriptare50261.030.810.84280.951.29280.84
Decriptare1.630.350.330.320.34270.300.370.300.36
AESCriptare80260.920.950.88280.910.6270.54
Decriptare272.090.3022.2600.350.362.092.090.14
BlowfishCriptare6510.9125240.151.661.44252.1111.45
Decriptare31.871.72291.091.371.13301.321
3DESCriptare82242.41252.122.46291.451.651.42
Decriptare1.561.42261.231.411.620.620.570.660.66
BIOCriptare4091487148754969488049214964496748814932
Decriptare6.294.194.194.194.1925312.092.094.19
Figura 1.7: Timpi de criptare/decriptare algoritm DES OS-Windows1
Figura 1.8: Timpi de criptare/decriptare algoritm AES OS-Windows1
Figura 1.9: Timpi de criptare/decriptare algoritm Blowfish OS-Windows1
Figura 1.10: Timpi de criptare/decriptare algoritm TripleDes OS-Windows1
Figura 1.11: Timpi de criptare algoritm Bio OS-Windows1
Figura 1.12: Timpi de decriptare algoritm Bio OS-Windows1

Rezultatele experimentale ale testelor efectuate pe Sistemul2 cu OS-Windows2- 64 biti sunt prezentate în tabelul şi diagramele următoare:

Tabel 1.2.  Rezultatele testelor efectuate pe Sistemul 2 cu OS-Windows2

Rezultatele analizei pentru OS-Windows 7
DESCriptare341.431.091.21.7311.112.81.221.19
Decriptare0.750.370.440.420.380.440.440.540.380.37
AESCriptare281.31.160.071.772.42.530.790.770.82
Decriptare0.120.142.090.92.090.60.80.40.20.16
BlowfishCriptare2228.46.241.61.821.982.592.352.83
Decriptare2.242.211.81.81.81.871.723.012.431.71
3DESCriptare416.592.782.622.693.62.192.41.962.12
Decriptare1.121.781.241.741.481.61.091.040.941
BIOCriptare3970388438873901390039053866390240463910
Decriptare4.194.194.192.094.194.194.194.192.092.09
Figura 1.13: Timpi de criptare/decriptare algoritm DES OS-Windows2
Figura 1.14: Timpi de criptare/decriptare algoritm AES OS-Windows2
Figura 1.15: Timpi de criptare/decriptare algoritm Blowfish OS-Windows2
Figura 1.16: Timpi de criptare/decriptare algoritm TripleDes OS-Windows2
Figura 1.17: Timpi de criptare algoritm Bio OS-Windows2
Figura 1.18: Timpi de decriptare algoritm Bio OS-Windows2

Rezultatele experimentale ale testelor efectuate pe Sistemul3 cu OS-Ubuntu sunt prezentate în tabelul şi diagramele următoare:

Tabel 1.3. Rezultatele testelor efectuate pe Sistemul 3 cu OS-Ubuntu

Rezultatele analizei pentru OS-Ubuntu 10.04
DESCriptare12.640.90.610.590.611.20.610.620.540.56
Decriptare1.240.450.440.450.430.550.430.430.420.41
AESCriptare0.660.60.630.630.620.590.630.540.70.63
Decriptare0.660.710.640.640.190.190.190.130.190.19
BlowfishCriptare37.07321913151118261114
Decriptare0.810.770.810.580.740.742.840.700.700.59
3DESCriptare141117.710.2110.1110.110.451010.0813
Decriptare0.770.790.780.60.60.630.710.620.610.6
BIOCriptare1896184818571846185018521846185018421850
Decriptare2.6213.11.831.311.571.311.571.572.622.62
Figura 1.19: Timpi de criptare/decriptare algoritm DES OS-Ubuntu
Figura 1.20: Timpi de criptare/decriptare algoritm AES OS-Ubuntu
Figura 1.21: Timpi de criptare/decriptare algoritm Blowfish OS-Ubuntu
Figura 1.22: Timpi de criptare/decriptare algoritm TripleDes OS-Ubuntu
Figura 1.23: Timpi de criptare algoritm Bio OS-Ubuntu
Figura 1.24: Timpi de decriptare algoritm Bio OS-Ubuntu

Se poate observa faptul că pe sistemele 1 şi 2 cu OS- Windows au loc variaţii mai mari ale timpilor de criptare şi decriptare. Sistemul 3 cu OS-Ubuntu pe platforma Linux prezintă o stabilitate mai mare deoarece variaţia timpilor este mai mică.  

Algoritmul nou propus, bazat pe folosirea cromozomilor de ADN ca şi chei simetrice, necesită un timp de criptare mai ridicat decât algoritmii clasici.

2. Concluzii

Siguranţa în transmiterea datelor electronice constituie o cerinţă bine cunoscută care induce necesitatea de tehnologii noi şi moderne pentru securitatea aplicaţiilor software.

După cum criptografia este o tehnologie cheie pentru furnizarea securităţii informaţiei, scopul acestei analize a fost folosirea ştiinţei numita Bioinformatică in domeniul criptografiei pentru a implementa un algoritm de criptare, rezistent la atacuri cu resurse computaţionale foarte mari şi aproape infinite.

Încadrând acest algoritm în categoria algoritmilor simetrici, s-au putut face comparaţii a timpului necesar criptării, respectiv decriptării, cu alţi algoritmi simetrici precum DES, TripleDES, BlowFish şi AES.

Pentru implementarea şi exemplificarea algoritmului un cromozom a fost descărcat din NCBI GenBank. Cromozomii se folosesc ca şi cheie de sesiune de tip One-Time-Pad. Ei sunt alcătuiţi din molecule lungi de ADN şi conţin sute de baze (A, T, C, G). Au dimensiune mică si o capacitate mare de stocare. La implementare a fost utilizată secvenţa completă din Homo sapiens FOSMID clone ABC14-50190700J6, cromozomul x, în formatul FASTA.

In rezumat paşii criptarii sunt:

  1. Mesajul text este transformat în coduri ASCII
  2. Codurile ASCII sunt transformate în cod binar, fiecare cod ASCII reprezentat pe 8 biţi
  3. Se face transformarea din cod binar în cod ADN rezultând câte 4 baze ADN pentru fiecare caracter din textul original
  4. Caracterele astfel codate sunt căutate în cromozomul care reprezintă cheia de sesiune. Fiecare  grup de 4 baze care reprezintă un caracter când e găsit în cromozom indecsul acelui loc e memorat intr-un vector de indecşi. Astfel pentru fiecare caracter vom avea un vector de indecşi.
  5. Criptotextul va fi alcatuit dintr-un şir de indecşi, câte un index pentru fiecare caracter ales în mod aleator din vectorii de indecşi.

La decriptare se foloseşte aceiaşi cheie, cromozom ca şi pentru criptarea mesajului. Fiecare index primit este folosit ca şi pointer spre codul caracterului în cromozomul cheie. Secvenţe de 4 baze din locaţiile precizate de indecşi se transformă din baze în numere care într-o serie de paşi inversă criptării devin caracterele mesajului decriptat.

Algoritmul propus prezintă urmatoarele avantaje:

  • Sistemele de criptare care folosesc chei de criptare de tip OTP  sunt cunoscute ca fiind perfect sigure. Algoritmul implementat foloseşte ca şi cheie de sesiune un cromozom uman dar orice secvenţă ADN a oricărei fiinţe vii poate fi folosită ca şi cheie de criptare. Astfel se poate exploata capacitatea de stocare a ADN-ului şi varieatatea secvenţelor pentru  implementarea de chei OTP.
  • Algoritmul tratează problema vulnerabilităţii la atacuri de frecvenţă. Pentru un caracter din textul în clar s-a obţinut un vector de indecşi care sunt folosiţi ca valori în criptotext în mod aleator. Acest lucru rezolvă problema frecvenţei de distribuţie a caracterelor într-un criptotext.

Acest algoritm împreună cu alţi algoritmi de cripatare simetrică au fost integraţi în aplicaţia Cypher cu scopul de a face o comparaţie între timpii de criptare şi decriptare a acestor algoritmi.

Algoritmii au fost testati pe 3 sisteme diferite cu scopul de a analiza variaţia timpilor de criptare pe sisteme cu OS-Windows1-32 biti, Windows2-64biti şi Ubuntu Linux. S-a observat că sistemul care foloseste SO  Linux prezintă o stabilitate mai mare şi de aceea variaţia timpilor de criptare şi decriptare este mai mică.

S-a observat faptul că algoritmul nou propus necesită un timp mult mai ridicat de criptare decât algoritmii simetrici clasici DES, TripleDES, Blowfish şi AES.

Evoluţia domeniului IT şi necesitatea tot mai crescută a unor aplicaţii sigure conduc la apariţia tot mai multor tehnici de garantare a securităţii. În prezent sunt folosite diverse modele clasice bazate preponderent pe algoritmi matematici complecşi.

Biotehnologiile, implicit metodele bazate pe informaţia ADN, reprezintă modele care pot constitui importante direcţii în cercetare.

Algoritmul poate fi îmbunătăţit având în vedere următoarele:

  • îmbunatăţirea algoritmului în vederea scăderii timpilor de criptare şi decriptare prin eficientizarea procesului de căutare a indecşilor în cromozomul folosit ca şi cheie
  • implementarea algoritmului folosind framework-ul oferit de JCE (Java Cryptography  Extension) şi JCA (Java Cryptography Arhitecture) în vederea dezvoltării unui nou Provider de servicii criptografice

3. Bibliografie

  1. Andreas Prlic; Andrew Yates; Spencer E. Bliven; Peter W. Rose; Julius Jacobsen; Peter V. Troshin; Mark Chapman; Jianjiong Gao; Chuan Hock Koh; Sylvain Foisy; Richard Holland; Gediminas Rimsa; Michael L. Heuer; H. Brandstatter-Muller; Philip E. Bourne; Scooter Willis , BioJava: an open-source framework for bioinformatics in 2012, Bioinformatics (2012) 28 (20): 2693-2695.
  2. T. Băjenescu, M. Borda. Securitatea în informatică și telecomunicații. Cluj-Napoca : Dacia, 2001.
  3. DotNetSlackers. An inside look at Symmetric Encryption. DotNetSlackers. [Interactiv] [Citat: 27 March 2009.] http://dotnetslackers.com/articles/security/AnInsideLookAtSymmetricEncryption.aspx.
  4. Lucks, Stefan. Attacking Triple Encryption. London: Springer-Verlag, 1998, Lecture Notes In Computer Science, Vol. 1372. ISBN:3-540-64265-X .
  5. NIST. Specification for the Advanced Encryption Standart. Computer Security Resource Center. [Interactiv] 26 November 2001. [Citat: 30 April 2009.] http://www.csrc.nist.gov/publications/fips/fips197/fips-197.pdf.
  6. Description of a New Variable-Length Key, 64-Bit Block Cipher (Blowfish). Schneier, Bruce. s.l. : Springer-Verlag, 1994, Fast Software Encryption, Cambridge Security Workshop Proceedings (December 1993).
  7. Savard, John. IDEA (International Data Encryption Algorithm). [Interactiv] [Citat: 4 May 2009.] http://www.quadibloc.com/crypto/co040302.htm.
  8. Genetics Home Reference. [Interactiv] U.S. National Library of Medicine. [Citat: 8 May 2009.] http://ghr.nlm.nih.gov/handbook/basics/dna.
  9. Tatiana Hodorogea, Mircea-Florin Vaida, BLOOD ANALYSIS AS BIOMETRIC SELECTION OF PUBLIC KEYS, 7 th International Carpathian Control Conference ICCC’2006, Ostrava – Beskydy, Czech Republic, May 29-31, 2006, pp. 675-678, ISBN 80-248-1066-2
  10. How to Implement a Provider for the JavaTM Cryptography Extension. Sun Microsystems. [Interactiv] [Citat: 7 March 2009.] http://java.sun.com/j2se/1.4.2/docs/guide/security/jce/HowToImplAJCEProvider.html.
  11. Microsystems, Sun. Developer Resources for Java Technology. Certification Form for CSPs. [Interactiv] [Citat: 7 March 2009.] http://java.sun.com/j2se/1.4.2/docs/guide/security/jce/CertForm.txt.
  12. A Brief History of Cryptography. Cypher Research Laboratories Pty. Ltd. [Interactiv] [Citat: 14 April 2009.] http://www.cypher.com.au/crypto_history.htm.
  13. Java Cryptography Architecture. [Interactiv] Sun Microsystems. [Citat: 22 March 2009.] http://java.sun.com/j2se/1.4.2/docs/guide/security/CryptoSpec.html.
  14. Andreica, Alina. Internet Teorie. Facultatea de Studii Europene, Universitatea Babes-Bolyai Cluj-Napoca. [Interactiv] [Citat: 30 March 2009.] http://www.euro.ubbcluj.ro/~alina/cursuri/internet-teorie/.
  15. Ashish Gehani, Thomas LaBean, John Reif. DNA-Based Cryptography.  s.l. : DIMACS Series in Discrete Mathematics and Theoretical Computer Science, 1999, Vol. 54. ISBN 0-8218-2053-2.
  16. DNA Alphabet. VSNS BioComputing Division. [Interactiv] [Citat: 12 April 2009.] http://www.techfak.uni-bielefeld.de/bcd/Curric/PrwAli/node7.html#SECTION00071000000000000000.
  17. Hook, David. Beginning Cryptography with Java. s.l. : Wrox Press, 2005. ISBN: 0764596330.
  18. Knudsen, Jonathan B. Java Cryptography. s.l. : O’Reilly, 1998. ISBN: 1-56592-402-9.
  19. Wagner, Neal R. The Laws of Cryptography with Java Code. [PDF] 2003.
  20. Web Architecture. [Interactiv] School of Information, UC Berkeley. [Citat: 27 May 2009.] http://dret.net/lectures/web-fall08/.
  21. Cloud Garden – Jigloo GUI Builder. Cloud Garden (Java Resources) . [Interactiv] Cloud Garden. [Citat: 20 March 2009.] http://www.cloudgarden.com/jigloo/.
  22. Konheim, Alan G.Computer Security and Cryptography. New Jersey: John Wiley & Sons, Inc., 2007. ISBN-10: 0-471-94783-0.
  23. Hodorogea Tatiana, Vaida Mircea-Florin, COMPLEXITY OF DNA ENCRYPTION SYSTEM AS A SUBSET OF JAVA CRYPTOGRAPHY EXTENSION, IASTED International Conference on Biomedical Engineering (BioMed 2008), 13-15 Feb., Innsbruck, Austria, paper  601-167, pp. 19-24
  24. Mircea-F. Vaida, Alexandra Vanea, Radu Terec, Raport tehnic privind Securitatea alternativa folosind mediul Java, RTH 09005, septembrie 2009, Laborator Helios, Director Mircea-Florin Vaida, Univ. Tehnica din Cluj-Napoca, ISSN: 1453-875X, pp. 82, ISSN 1454-0665
  25. Mircea-Florin Vaida, Radu Terec, Lenuta Alboaie, Alternative DNA Security using BioJava, Conference SDIWC – DICTAP2011, Univ. de Bourgogne, Dijon, France, 21-23 Juin, 2011,  pp.455-469
  26. BIOJAVA: COOKBOOK: CORE: OVERVIEW. – opensource development, http://biojava.org/wiki/BioJava:CookBook:Core:Overview