Blowfish

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Blowfish
Funcția Blowfish Feistel (en) .svg
Funcția F a Blowfish
General
Designeri Bruce Schneier
Prima publicație 1993
Succesori Twofish
Detalii
Dimensiunea cheii de la 32 la 448 biți (în pași de 8 biți); implicit: 128 biți
Dimensiunea vectorului de inițializare 64 de biți
Dimensiunea blocului 64 de biți
Structura Rețeaua Feistel
Numărul de pase 16
Criptanaliză mai bună
Patru pasaje ale Blowfish sunt sensibile la un atac diferențial de ordinul doi (Rijmen, 1997); pentru o clasă de chei slabe , 14 pasaje Blowfish se pot distinge printr-o permutare pseudo-aleatorie (Vaudenay, 1996)

În criptologie , este un algoritm blowfish la cheie simetrică în blocuri , proiectat în 1993 de Bruce Schneier și implementat în multe software-uri de criptare . Deși până în prezent nu este disponibilă nici o criptanaliză Blowfish, acest algoritm stârnește din nou interes atunci când este implementat cu o dimensiune mai mare a blocului , așa cum este cazul AES sau Twofish .

Schneier a proiectat blowfish pentru a fi un algoritm de uz general, util ca înlocuitor pentru Standardul de criptare a datelor (DES) decadent de atunci și fără probleme caracteristice altor algoritmi. La acea vreme, multe alte sisteme de criptare erau proprietare, brevetate sau acoperite de secrete guvernamentale. Schneier a declarat: „Blowfish nu conține brevete și va rămâne fără brevete în toate națiunile. Algoritmul se află în domeniul public și poate fi utilizat în mod liber de oricine » .

Două dintre caracteristicile deosebite ale blowfish sunt S-Box-uri dependente de cheie și o listă de taste extrem de complexă.

Algoritmul

Blowfish are o dimensiune a blocului pe 64 de biți și o lungime a cheii variabilă între 32 și 448 de biți. Are o structură de rețea Feistel cu 16 cicluri și folosește S-Box-uri mari, dependente de cheie. Are o structură similară cu sistemul CAST-128 , dar folosește S-Box-uri fixe.

Diagrama Blowfish

Diagrama din stânga arată cum funcționează blowfish. Fiecare linie reprezintă 32 de biți. Algoritmul gestionează două tipuri de liste de subchei: o listă de 18 elemente, matrice P definită și patru liste de 256 de elemente fiecare din S-Box (S0, S1, S2 și S3), pentru un total de 5 matrice de subchei. Fiecare S-Box are 8 biți de informații în intrare și produce 32 de biți în ieșire. Fiecare repetare a buclei folosește un element diferit al matricei P și , după ultima buclă, fiecare jumătate a blocului de date este XOR- înmulțită cu unul dintre cele două elemente neutilizate ale matricei P.

Diagrama subtitrării reprezintă funcția F a blowfish. Funcția împarte 32 de biți de intrare în patru 8 biți , care sunt la rândul lor folosiți ca intrări ale S-Box-urilor. Rezultatele sunt adăugate în modulul 2 32 și plasate în XOR, pentru a obține rezultatul final de 32 de biți criptați.

Deoarece blowfish este o rețea Feistel, acesta poate fi inversat pur și simplu prin elementele XORing 17 și 18 ale matricei P și apoi folosind elementele matricei P în ordine inversă.

Lista de chei blowfish este generată prin încărcarea valorilor inițiale ale matricei P și S-Box-urilor cu reprezentări hexazecimale ale cifrelor lui pi , care aparent nu au periodicitate sau modele repetitive. Cheia secretă este apoi XORată cu fiecare element al matricei P (repetând cheia după cum este necesar). Un bloc de 64 de biți cu valoare zero este criptat cu algoritmul însuși, iar rezultatul criptat înlocuiește elementele P-1 și P-2. Rezultatul criptat este apoi codificat din nou cu noile subchei, înlocuind elementele P-3 și P-4. Acest proces continuă până când toate elementele P-array și S-Box sunt înlocuite. În total, algoritmul de criptare a lui blowfish rulează de 521 de ori pentru a genera toate cheile secundare și prelucrează aproximativ 4Kb de date.

Criptanaliza peștilor

Nu există, sau cel puțin nu se cunoaște, criptanaliza blowfish, cel puțin până în 2004 , întrucât dimensiunea unui bloc de 64 de biți este considerată acum prea mică, iar codificarea a peste 2 32 de blocuri ar putea dezvălui unele fragmente din textul original, din cauza paradoxul zilei de naștere . În ciuda acestui fapt, păsările suflate până în prezent par destul de sigure. În timp ce dimensiunea blocului mic nu este o problemă pentru aplicațiile tradiționale, cum ar fi e-mailul, poate face Blowfish inutilizabil pentru criptarea textului mare, cum ar fi în cazul arhivelor.

În 1996, Serge Vaudenay a conceput un atac care a permis forțarea criptării unui text cunoscând textul clar 2 8 r +1 cu aceeași cheie, unde r identifică numărul de runde . De asemenea, a găsit o clasă de chei slabe care pot fi identificate și rupte, cu același atac, știind doar 2 4 r + 1 text clar. Acest atac nu poate fi folosit împotriva blowfish implementat în toate cele 16 runde. Vaudenay a folosit o variantă bazată pe mai puține cicluri de criptare. Vincent Rijmen, în teza sa de doctorat, a introdus un atac diferențial de gradul doi capabil să forțeze nu mai mult de 4 cicluri. Prin urmare, nu există o modalitate cunoscută de a forța un text codificat cu 16 cicluri, cu excepția, desigur, a forței brute .

În 2005 Dieter Schmidt a studiat lista de chei blowfish și a observat că subcheile ciclului al treilea și al patrulea sunt independente de primii 64 de biți ai cheii de utilizator [1] .

Blowfish în practică

Blowfish este unul dintre cei mai rapizi algoritmi de cifrare a blocurilor din jur, cu excepția cazului în care schimbați cheia. Fiecare cheie nouă necesită un timp de procesare echivalent cu codificarea a 4 kB de text, care este mult în comparație cu alte cifre de bloc. Acest lucru împiedică utilizarea acestuia în unele aplicații, dar nu este o problemă în altele. Într-un caz, este chiar un avantaj: metoda de hashing bazată pe parolă utilizată în OpenBSD folosește un algoritm derivat din blowfish care profită de procesarea cu cheie lentă; ideea este că timpul de calcul mai mare necesar îmbunătățește protecția împotriva unui atac bazat pe dicționar .

În unele implementări, blowfish folosește o zonă de memorie mult mai mare decât cea teoretică de 4 kB de RAM . Aceasta nu este o problemă nici măcar pentru computerele personale mai vechi, dar împiedică utilizarea acestuia în sisteme integrate mici, cum ar fi primele carduri inteligente .

Blowfish nu face obiectul niciunui brevet și, prin urmare, este utilizabil în mod liber de către oricine. Acest lucru a contribuit la popularitatea sa în software-ul criptografic.

Elemente conexe

Alte proiecte

linkuri externe