Blowfish
Această intrare sau secțiune despre subiectul criptografiei nu citează sursele necesare sau cei prezenți sunt insuficienți . |
Blowfish | |
---|---|
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 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
- Wikimedia Commons conține imagini sau alte fișiere despre Blowfish
linkuri externe
- ( RO ) Site oficial , pe schneier.com .