Sunteți pe pagina 1din 9

Algoritmul de criptare BLOWFISH

Cuvântul criptografie provine din grecescul “kryptos” care înseamnă “ascuns”, şi “graphein” care înseamnă “a scrie”). Criptografia este stiinţa care studiază codarea mesajelor şi descrie arta de a descifra mesajele criptate, facând mesajul lizibil. De asemenea are o latură matematică; aceasta combină criptografia şi criptoanaliza, rezultând criptologia. Un mesaj nesecurizat este privit că şi un text, pe când unul securizat este văzut că fiind un text criptat sau codat. Procesul de convertire a textelor nesecurizate în texte securizate, poartă numele de criptare. Procesul invers se numeşte decriptare. Datorită noii tehnologi, astăzi criptografia a evoluat într-un mod semnificativ, a devenit un proces foarte sigur şi des folosit, de aceea prezintă un interes pentru oamenii de afaceri, precum şi pentru programatori, care încearca zi de zi sa gasească noi algoritmi optimi şi eficienti de criptare şi decriptare.

În momentul în care comunitatea criptografica avea nevoie sa furnizeze lumii noi standarde de criptare, este propus Blowfish, un nou bloc de cifru de 64 biţi cu cheie de lungime variabilă. Deşi există diferite metode de criptare disponibile pentru a păstra un transfer de date sigur, mulţi dintre aceşti algoritmi nu sunt disponibili pentru public. Unii sunt protejaţi de autorizaţii (Khufu [11,12], REDOC II [2,23,30], şi IDEA [7,8,9]), unii sunt păstrati secreti de guverne (Skipjack şi Capstone protejate de guvernul american) ) sau unii sunt disponibili doar pe părţi(RC2,RC4 şi GOST). Totodată, algoritmul de criptare DES [16] din ultimii 15 ani se apropie de sfarsitul lui în utilizare. Cheia lui de de 56 biţi lungime este vulnerabilă la un atac de forţă brută[22] şi noile avansări în criptanaliza diferenţială[1] şi criptanaliza liniară[10] arată că DES este vulnerabil şi pentru alte atacuri.

De aceea în multe situaţii algoritmul Blowfish este soluţia ideală. El are licienţă gratuită, este disponibil pentru toate cazurile de utilizare şi deşi a fost spart pe bucăţi, întreaga versiune este inpenetrabilă.

ISTORIC

Blowfish a fost creat în 1993 de Bruce Schneier că o alternativă la algoritmii de criptare deja existenți. Presedinte al companiei Counterpane Systems, firmă de consultare specializata în criptograpfie şi securizarea calculatoarelor, a contribuit la scrierea multor documente criptografice, incluzând cartea “Applied Cryptography (John Wiley & Sons,1994&1996)” considerată o lucrare influiențabilă în domeniul criptografiei. Cea mai mare realizare a sa ramâne totuși algoritmul de criptare Blowfish, prezentat pentru prima dată în 1994 la Cambridge, Anglia într-un workshop despre procedee de securizare.

DOMENII DE APLICATIE

Un algoritm standard de criptare trebuie să fie compatibil cu diferite aplicații. El trebuie să fie eficient pentru:

- criptarea fișierelor de date sau al unui șir de date continuu

- producerea de biţi aleatori

- criptarea pachetelor de date dimensionate (un pachet ATM are campul de date de 48

octeți)

- convertirea sa într-o funcție de dispersie cu o singură orientare

- aplicațiile unde pachete successive pot fi criptate şi decriptate cu chei diferite

PLATFORME

Este implementat pe o varietate de platforme diferite, fiecare cu cerințele ei proprii. Ele includ:

- hard special. Este implementat eficient pe un hard VLSI obișnuit

- procesoare mari. în timp ce partea hard va fi folosită pentru aplicații rapide

implementarea soft este mai comună. Algoritmul este eficient pe microprocesoare de 32 biţi cu program de 4 kiloocteți şi date ascunse

- procesoare de mărime mijlocie. De genul 68HC11

- procesoare de mărime mică. Cerințele pentru procesoare mici sunt cele mai dificile.

Limitările RAM şi ROM sunt severe pentru aceste platforme. Totodată eficența este mai importanta pe aceste mașini mici. Stațiile de lucru iși dublează capacitațile aproape anual. Sistemele mici sunt aceleași an dupa an şi este nevoie de o capacitate mică de economisit. Daca este de ales, atunci estimarea suplimentară a sarcinii ar trebui să fie mai degrabă pe procesoare mari decat pe procesoare mici.

CERINȚE AUXILIARE

Aceste cerințe auxiliare sunt percepute de stadardele de criptare. Algoritmul este robust şi simplu de codat. Dupa experienta cu DES[19] programatorii fac des greseli de implementare din cauza că algoritmul este complicat. Spațiul cheilor îngăduie oricărui șir de biţi aleator de o lungime cerută să fie o posibilă cheie. Nu ar trebui să fie chei slabe.Algoritmul facilitează orice administrare a cheii pentru implementările soft. Administrarea implementărilor a DES-ului în general folosește chei de adiministrare a tehnicilor sarace. În particular parola pe care o tipărește utilizatorul devine cheia. Asta înseamnă că deşi DES are un spațiu al cheilor teoretic de 256, spațiul actual este limitat la chei formate din 95 de caractere al publicabilului ASCII. Algoritmul este usor de modificat pentru nivele de securitate diferite atat pentru cerințe minime cât şi pentru cerințe maxime. Toate operațiile manipulează date în blocuri cu dimensiune în octeți. Pe cât posibil operațiile ar trebui sa manipuleze date în blocuri de 32 biți.

DECIZII DE DESIGN

Potrivit parametrilor de mai sus s-au luat urmatoarele decizii de design. Algoritmul:

- manipuleaza date în blocuri mari, preferabil de mărime de 32 biţi

- are mărimea blocului fie de 64 biţi fie de 128 biți

- are o cheie cuprinsă într 32 de biţi și 256 biți

-operații simple care sunt eficiente pe microprocesoare: “sau exclusiv” (XOR), adunare, înmulțire modulară. Nu ar trebui sa folosească mutări de lungime variabilă, permutări de

biţi sau salturi condiționale.

- este implementabil pe un processor de 8biti cu RAM-ul de 24 octeți şi ROM-ul de 1

kilooctet

- constă într-un număr de iterații variabil. Pentru aplicații cu o mărime a cheii mică,

complexitatea atacului de forță brută sau a atacului diferențial face un număr mare de iterații de prisos. Se reduce numărul mare de iterații fara nici o pierdere a securității (dincolo de cea a cheii de lungime redusă)

- pe cât posibil sa nu aibă chei slabe. Daca nu e posibil, proporția cheilor slabe ar trebui să fie destul de mică pentru a face puțin probabil sa alegi una aleator. Totodată, orice

cheie slabă trebuie stiută în mod explicit pentru a putea fi înlaturată în timpul procesului de generare a cheilor

- nu are structuri liniare care reduc complexitatea cautării

- Folosește un design simplu de ințeles. Aceasta facilitează analiza şi mărește confidența algoritmului.

Majoritatea deciziilor nu sunt noi. Aproape toate blocurile de cifruri folosesc din aceste principii: FEAL [13,14,15] şi Khufu[11] folosește un număr variabil de iterații, Khufu[11] are un număr mare de subchei care sunt o funcție cu o singură orientare a cheii, RC2[18] are o lungime a cheii variabilă, GOST[6] folosește cuvinte de lungime de 32 biţi şi mărimea blocului de 64 biți, MMB[2] folosește cuvinte de lungime de 32 biţi şi mărimea blocului de 128 biți.

CONSTRUIREA BLOCURILOR (în mai mulţi algoritmi de criptare)

Există un număr mare de blocuri care s-a demonstrat că produc cifruri puternice. Multe dintre acestea pot fi implementate cu ușurință pe microprocesoare de 32 biți.

Cutii-S mari sunt mai rezistente la criptanaliza diferențiala. Un algoritm cu lungimea cuvantului de 32 biţi poate folosi cutii-S de 32 biți. Khufu şi REDOC III folosesc o intrare de 256 şi cutii-S [11,20] de 32 biți.

În timp ce cutiile-S fixe trebuie modelate pentru a fi rezistente la criptanaliza diferențială şi liniaraă, cutiile-S dependente de cheie sunt mai rezistente la aceste atacuri. Sunt folosite în algoritmul Khufu[11]. Cutii-S variabile care pot fi dependente de cheie sunt folosite un GOST[6]

Se combină operații din diferite grupuri algebrice. Cifrul IDEA a introdus conceptul de combinare a XOR(sau exclusiv) mod 2 16, adunare mod 2 16 şi înmulțire mod 2 16 +1. Cifrul MMB folosește cuvinte de 32 biţi şi combina XOR mod 232 cu înmulțire mod 2 32-1 [2]

Permutările fixate initiale şi finale ale DES-ului au fost multa vreme considerate nefolositoare.

BLOWFISH

Blowfish este un bloc de cifru cu cheie de lungime variabilă. Nu satisface toate cerințele pentru un nou standard criptografic discutate anterior: este potrivit doar pentru aplicații unde cheia nu se Schimbă des, ca şi un link de comunicatii sau un criptor de fișiere automat. Este clar mai rapid ca şi DES când este implementat pe un microprocesoare de 32 biţi cu multe date ascunse de exemplu Pentium şi PowerPC.

DESCRIEREA ALGORTMULUI

Blowfish este un bloc de cifru de 64 biţi cu cheie de lungime variabilă. Algoritmul constă în 2 parti: o parte de expansiune a cheii şi o parte de criptare a datelor. Expansiune cheii converteste o cheie de maxim 448 biţi în mai multe tablouri de subchei totalizând 4168 octeți. Criptarea datelor are loc prin o rețea Feistel de 16 reprize. Toate operațiile sunt XOR-uri şi adunări pe cuvinte de 32 biți. Singurele operații de adunare sunt 4 tablouri de căutare a datelor pe repriză.

Subchei :

Blowfish folosește un număr mare de subchei:

1. Tabloul P este format din 18 subchei de 32 biți: P1,P2,…,P18

2. Există 4 cutii-S de 32 biţi cu 256 intrări fiecare

S1,0, S1,1,…, S1,255; S2,0, S2,1,…, S2,255; S3,0, S3,1,…, S3,255; S4,0, S4,1,…, S4,255.

Criptarea:

Blowfish este o rețea Feistel care constă în 16 reprize (vezi figura 1). Intrarea este x,

un element dată de 64 biți, în timp ce sirul P este notat cu Pi (unde i este iteratia). Împarte x în doua jumătăți de 32 biți: xL, xR Pentru i = 1 la 16:

xL

= xL XOR Pi

xR

= F(xL) XOR xR

Schimbă xL şi xR

Schimbă xL şi xR (Desface ultima Schimbăre.)

xR

= xR XOR P17

xL

= xL XOR P18

Recombina xL şi xR

Functia f (vezi figura 2):

Împarte xL în 4 sferturi de 8 biţi : a, b, c şi d F(xL) = ((S1,a + S2,b mod 232) XOR S3,c) + S4,d mod 232

Decriptarea este identică cu criptarea cu excepția că P1,P2,…,P18 sunt folosite în ordine inversă. Implementarea Blowfish-ului care cere viteze maxime ar trebui să se asigure că toate subcheile sunt păstrate ascunse.

Subcheile sunt calculate folosind algoritmul Blowfish. Metoda exactă este următoarea:

1. Initializeaza intai tabloul P şi cele 4 cutii-S,in ordine, cu un șir fixat. Șirul constă în

cifre hexazecimare ale numărului pi(mai puțin primele 3). De exemplu:

P1

= 0x243f6a88

P2

= 0x85a308d3

P3

= 0x13198a2e

P4

= 0x03707344

2. XOR P1 cu primii 32 de biţi ai cheii, XOR P2 cu următorii 32 de biţi ai cheii şi

continuă pentru toți biții cheii (posibil până la P14). Repetă ciclul prin biții cheii până

când la tot tabloul i s-a efectuat XOR cu biții cheii.(pentru orice cheie scurtă există cel puțin o cheie echivalentă mai lungă, de exemplu daca A este o cheie de 64 biţi atunci AA,AAA,etc sunt chei echivalente)

3. Criptează tot șirul zero cu algoritmul Blowfish folosind subcheile descrise în pașii (1)

şi (2)

4.

Inlocuiește P1 şi P2 cu ieșirea pasului (3)

5.

Cripteaza ieșirea pasului (3) folosind algoritmul blowfish pentru subcheile modificate

6.

Inlocuiește P3 şi P4 cu ieșirea pasului (5)

7.

Continua procesul înlocuind toate intrările tabloului P şi apoi toate 4 cutiile S în ordine

cu

iesirea algoritmului Blowfish continuu modificabil

În total sunt necesare 521 de iterații pentru a genera toate subcheile necesare. Aplicațiile pot stoca subcheile mai degrabă decât să execute procesul de derivare de mai multe ori.

MINI-BLOWFISH

Urmatoarele versiuni mini ale Blowfish-ului sunt definite numai pentru criptanaliza. Nu sunt sugerate pentru implementarea propriuzisa. Blowfish-32 are un bloc de mărime de 32 biţi şi tablourile subcheilor de intrări de 16 biţi (fiecare cutie S are 16 intrări). Blowfish-16 are un bloc de mărime de 16 biţi şi tablourile subcheilor de intrări de 8 biţi (fiecare cutie S are 4 intrări).

DECIZII CARE AU STAT LA BAZA CREARII ALGORITMULUI BLOWFISH

La baza filosofiei din spatele Blowfish-ului stă simplicitatea beneficiilor de design care este atât ușor de înțeles cât şi usor de implementat.Un bloc de mărime de 64 biţi realizează un cuvânt de mărime de 32 biţi şi menține compatibilitatea mărimii blocului cu algoritmii existenți. Criptanaliza variantelor de mini-Blowfish pot fi în mod semnificant mai ușoare decât criptanaliza întregii versiuni.Operațiile fundamentale au fost alese luându-se în considerare viteza. XOR,ADD şi MOV din o dată ascunsă sunt eficiente atât pe arhitecturile Intel şi Motorola.

Rețeaua Feistel care formeaza corpul Blowfish este modelat să fie atat de simplu pe cât posibil în timp ce reține proprietățile criptografice dorite ale structurii.

S-a considerat o funcție reversibila mai complicată, una cu înmulțiri modulare şi rotații. Aceste operații măresc mult timpul de execuție al agoritmului. Ținând cont că functia F este prima sursă a securității algoritmului s-a decis să se pastreze complicațiile de consumare a timpului pentru aceasta funcție.

Funcția ireversibilă F ii ofera Blowfish-ului cel mai bun efect de avalanșă pentru o rețea Feistel: fiecare bit text din jumatatea stângă a reprizei afectează fiecare bit text din jumatatea dreaptă. în plus, daca se ține cont că fiecare bit al subcheii este afectat de fiecare bit al cheii funcția are un efect de avalanșă perfect între cheie şi jumătatea dreaptă a textului după fiecare repriză.

Functia ireversibila este creata pentru puterem viteza şi simplicitate. în mod ideal s-a dorit o singură cutie-S cu 232 cuvinte de 32 biţi dar aceasta nu a fost o decizie practica. Decizia de a avea 256 cutii-S de intrare a fost un compromis intre cele 3 scopuri de Design. Numărul mic de biţi şi numărul mare de biţi a a fost o slabiciune pentru criptanaliza liniara dar aceasta slabiciune este ascunsa prin combinarea iesirii celor 4 cutii-S şi crearea lor independente de cheie.

S-au folosit 4 cutii-S diferite în locul uneia singure pentru a evita simetriile când diferiti biţi de intrare sunt egali sau când intrarea de 32 biţi a funcției F este o permutare a altor 32 de biţi de intrare. S-ar fi putut folosi o singură cutie-S şi sa se creeze pentru fiecare iesire diferita o permutare netriviala a unei singure iesiri dar modelarea celor 4 cutii S este mai rapida, mai usor de programat şi pare mai sigura.

Functia care combina cele 4 iesiri al cutiilor-S este pe cât se poate de rapida. O funcție mai simpla ar fi fost sa se execute un XOR a celor 4 valori dar amestecarea adunarii mod 232 şi a XOR imbina 2 grupuri algebrice diferite fara instructii suplimentare. Alternarea adunarii cu XOR se termina cu o operatie de adunare pentru că XOR combina rezultatul final cu xR.

Daca se iau valori alese din aceeasi cutie-S o mai complicata funcție de combinare este necesara pentru eliminarea simetriilor.S-a luat în considerarea acestei functii complexe în Blowfish (folosind inmultiri modulare, rotiri, etc) dar sa ales sa nu fie folosită pentru că aceasta complicare parea nenecesara.

Cutiile-S dependente de cheie protejeaza impotriva criptanalizei liniara şi diferențiala. Tinand cond că structura cutiilor-S este complet ascunsa de criptanalist acestor atacuri le este mai greu sa exploateze structura. în timp ce ar fi posibil sa se inlocuiasca aceste cutii-S variabile cu 4 cutii cutii S fixe care au fost crearea să fie rezistente la aceste atacuri, cutiile-S cu de cheie dependente sunt mai usor de implementat şi mai puțin sensibile la argumente de proprietati ascunse, în plus, aceste cutii-S pot fi create la cerere reducand necesitatea unei structuri de date mare păstrata cu algoritmul.

Fiecare bit a xL este folosit doar că intrarea unei cutii-S. în DES mulţi biţi sunt folositi că intrări pentru 2 cutii-S care slabeste în mod considerabil algoritmul impotriva atacurilor diferențiale. Aceasta complicatie adaugata nu este necesara cu cutiile-S dependente de cheie. în plus, cutii-S mai mari ar lua mult mai mult spațiu de memorie.

Functia F nu depinde de iteratie. S-a adugat independenta dar nu s-a considerat că are vreun merit criptografic. Substituirea tablouluiP poate fi considerate că facand parte din aceasta funcție, şi aceasta este deja dependenta de iterații.

Numărul de reprise s-a fixat la 16 la inceput din dorinta de a fi conservator. Oricum, acest număr afecteaza mărimea tabloului P şi de aici procesul de generarea a subcheilor. 16 iterații permit chei de lungime până la 448 biți. S-a asteptat sa poata fi posibila reducerea acestui număr şi grabirea mare a algoritmului în proces în momentul în care se acumuleaza mai multa dată de criptanaliza.

In modelarea algoritmului sunt 2 metode de baza care asigura că cheia este destul de lunga pentru a asigura un nivel de sercuritate particular. Unul este de a modela cu atentie algoritmul astfel incat intreaga entropie a cheii este păstrata astfel incat sa nu fie nici o alta metoda mai buna de criptanaliza decat forță brută. Cealalta este de a modela algoritmul cu atat de mulţi biţi ai chei astfel incat atacurile care reduc lungimea efectiva a chei cu mai mulţi biţi să fie irelevante. Din moment ce Blowfish este creat pentru microprocesoare mari cu un total de momorie mare s-a ales mai tarziu.

Procesul de generare a subcheilor este creat pentru a conserva intreaga entropie a cheii şi pentru a impartii entropia uniform prin subchei. Este deasemeanea creat pentru a distribui setul de subchei premise aleator prim domeniul subcheilor posibile. S-a ales numerele lui pi că şi tebelul subcheii initiale din 2 motive: pentru că este o secventa aleatoare

neasociata cu algoritmul şi pentru că poate sau să fie păstrat sau că parte a algoritmului sau derivat daca este necesar. Nu este nimic solemn la pi, orice șir de biţi – numere aleatori ai lui e, tabele RAND, iesirea unui generator de numere aleatoare sunt suficiente. Oricum daca sirul initial nu este aleator în orice fel(de exemplu un text ASCII cu bitul inalt al fiecarui octet egal cu 0), problema că este nealeator se va raspandi în intreg algoritmul.

In procesul de generare al cheilor subcheile se Schimbă puțin cu fiecare pereche de subchei generata. Aceasta este în primul rand pentru a proteja impotriva oricarui atac asupra procesului de generare a subcheii care exploateaza subcheile fixate şi cunoscute. Deasemea reduce cerințele de depozitare. Limita de 448 a marimii cheii asigura că orice

bit a oricarei subchei depinde de orice bit a cheii. (De notat că fiecare bit a lui P15, P16, P17 şi P18 nu afecteaza fiecare bit a ciphertextului şi că oricare intrare a unei cutii-S are

o probabilitate de .06 sa afecteze orice bloc ciphertext)

Pentru biții cheilor se efectueaza în mod repetat XoR cu numerele lui pi în tabloulP initial pentru a preveni urmatorul potential atac: sa presupunem că biții cheilor nu se repeta dar în schimb se umplu cu zeroruri pentru a se extinde catre lungimea tabloului P. Un atacator ar putea sa gaseasca doua chei care difera doar în valoarea de 64 de biţi la care li s-au aplicat un XOR cu P1 şi P2 şi care, folosind subcheile cunoscute initial produce aceasi valoare criptata. Acesta este un atac tentant pentru un generator de chei malitios.

Pentru a preveni acelasi tip de atac , s-a fixat valoarea plaintextului initial în procesul de generarea a subcheilor. Nu este absolut nimic special la sirul cu zerouri dar este important că aceasta valoare să fie fixata.

Algoritmul de generare a subcheilor nu presupune că biţi cheii sunt aleatori. până şi biții cheii puternic corelati, că şi un string alfanumeric ASCII cu bitul fiecarui octet setat la 0 va produce suchei aleatoare. Oricum pentru a produce subchei cu aceeasi entopie o cheie alfanumerica mai lunga este ceruta.

Timpul consumat în procesul de generare a subcheilor adauga o complexitate considerabila pentru un atac de forță brută. Subcheile sunt prea lungi pentru a fi stocate pe o banda masiva deci ar trebui să fie generate de o masina de spargere în forță brută precum se cere. Un total de 522 de iterații al algoritmului de criptare este necesar pentru a testa o singură cheie , adaugand efectiv 29 de pasi la orice atac de forță brută.

PRODUSE CARE FOLOSESC BLOWFISH

In momentul de fata există peste 150 de produse care folosesc Blowfish. Unele dintre acestea sunt:

- 96Crypt de fever.link. Un program de criptare/decriptare de fișiere şi directoare - Acess Manager de Citi-Software Ltd. Un manager de parole pentru Windows.

- Blowfish.NET de Markus Hahn. Aduce algoritmul Blowfish pe platforma Microsoft.NET

- Coolfish. Un editor de texte criptat pentru Windows

- Cryptix. Un set criptografic de extensii pentru Java gratuit, incluzand atat Blowfish cât şi TwoFish.

CONCLUZII

Blowfish este un algoritm de criptare creat cu scopul de a oferi lumii un nou standard criptografic. Este un bloc de cifru de 64 biţi cu 18 subchei derivate dîntr-o singură cheie initiala, simetric (folosește aceeasi cheie secreta atat pentru criptare cât şi pentru decriptare), rapid, compact, simplu, variabil sigur şi până în momentul actual impentrabil. Poate fi folosit că un inlocuitor pentru algoritmii DES sau IDEA.

BIBILOGRAFIE

http://www.finecrypt.net/blowfish.html

http://www.ee.ualberta.ca/~elliott/ee552/studentAppNotes/1998f/blowfish_encryption/

http://kremlinencrypt.com/concepts.htm

http://www.schneier.com/paper-blowfish-oneyear.html

http://www.us.Design-reuse.com/articles/article5922.html