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 de autorizaţii (Khufu [11,12], [11,12], REDOC II [2,23,30], [2,23,30], şi IDEA [7,8,9]), unii sunt păstrati secreti secreti de guverne guverne (Skipjack (Skipjack şi Capstone Capstone protejate protejate de guvernul guvernul american) 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. criptografiei. Cea mai mare realizare a sa ramâne totuși algoritmul de criptare Blowfish, prezentat pentru pentru prima dată dată în 1994 la Cambridge, Cambridge, Anglia într-un într-un workshop workshop despre procedee de securizare. 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 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 program de 4 kiloocteți kiloocteți şi şi date ascunse 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 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ăril implementărilee soft. Administrarea Administrarea implementărilor implementărilor a DES-ului DES-ului în general 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 operațiile ar trebui trebui sa manipuleze manipuleze date în blocuri de 32 biți. 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 salturi condiționale. 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 0x243f6a88 P2 = 0x85a308d3 0x85a308d3 P3 = 0x13198a2e 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 cheie echivalentă echivalentă mai lungă, lungă, de exemplu exemplu daca A este este o cheie cheie de 64 biţi 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 subcheile mai mai degrabă decât decât să execute execute procesul procesul de derivare derivare de mai multe 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 arhitecturile Intel Intel şi Motorola. Motorola. Rețeaua Feistel care formeaza corpul Blowfish este modelat să fie atat de simplu pe cât posibil în timp ce reține reține proprietățile proprietățile criptografi criptografice ce dorite ale structurii. 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ă. dreaptă. în plus, daca daca se ține cont cont că fiecare bit al subcheii subcheii este afectat 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 intrare sunt egali egali sau când intrarea intrarea de 32 biţi biţi a funcției funcției F este o permutare permutare a altor 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 reprise s-a fixat fixat la 16 la inceput inceput din dorinta dorinta de a fi conservator 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 impartii entropia entropia uniform prin subchei. subchei. Este deasemeanea deasemeanea creat creat pentru a distribui distribui setul de subchei premise aleator prim domeniul subcheilor posibile. S-a ales numerele lui pi că şi tebelul tebelul subcheii subcheii initiale initiale din 2 motive: motive: pentru pentru că este o secventa secventa aleatoare 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 oricarei subchei depinde depinde de de orice bit bit a cheii. (De notat notat că fiecare fiecare bit a lui P15, 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 preveni urmatorul urmatorul potential potential atac: sa presupunem presupunem că că biții cheilor cheilor nu se repeta 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 masiva deci ar trebui trebui să fie generate generate de o masina de spargere spargere în forță forță brută precum se cere. cere. Un total de de 522 de iterații iterații al algoritmului algoritmului de de criptare este necesar 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