Funcția hash criptografică

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare

1leftarrow blue.svg Element principal: funcția Hash .

O funcție hash criptografică la locul de muncă ( SHA1 ). Chiar și modificările mici ale datelor de intrare determină o modificare vizibilă a ieșirii: acesta este așa-numitul efect de avalanșă.

O funcție hash criptografică , în informatică , este o clasă specială de funcții hash care are anumite proprietăți care o fac potrivită pentru utilizare în criptografie .

Este un algoritm matematic care mapează date de lungime arbitrară ( mesaj ) într-un șir binar de mărime fixă ​​numită valoare hash , dar este adesea denumit și termenul englezesc mesaj digest (sau pur și simplu digest ). Această funcție hash este concepută pentru a fi unidirecțională ( unidirecțională ), și anume o funcție dificil de inversat: singura modalitate de a recrea datele de intrare din ieșirea unei funcții hash ideale este să căutați forța brută a posibilelor intrări. să văd dacă există o potrivire. Alternativ, ar putea fi utilizată o masă curcubeu cu hashuri potrivite.

Funcția hash criptografică ideală trebuie să aibă câteva proprietăți fundamentale:

  • trebuie să identifice în mod unic mesajul, nu este posibil ca două mesaje diferite, chiar dacă sunt similare, să aibă aceeași valoare hash;
  • trebuie să fie determinist, astfel încât același mesaj să rezulte întotdeauna în același hash;
  • trebuie să fie rapid și ușor să calculați o valoare hash din orice tip de date;
  • trebuie să fie foarte dificil sau aproape imposibil să generezi un mesaj din valoarea sa hash, în afară de încercarea tuturor mesajelor posibile.

Aceste caracteristici permit ca funcțiile hash criptografice să fie utilizate pe scară largă în domeniile de securitate IT , cum ar fi semnăturile digitale , codurile de autentificare a mesajelor (MAC-uri) și alte forme de autentificare . Ele pot fi, de asemenea, utilizate ca funcții hash obișnuite, pentru indexarea datelor în tabele hash , pentru amprentarea digitală , pentru detectarea datelor duplicate sau identificarea fișierelor în mod unic și ca sumă de control pentru detectarea corupției accidentale a datelor. Într-adevăr, în contexte de securitate cibernetică, valorile hash criptografice sunt uneori numite „amprente digitale” sau „ sumă de control ”, deși toți acești termeni au funcții mai generale cu proprietăți și scopuri destul de diferite.

Proprietate

Cele mai multe funcții hash criptografice sunt concepute pentru a lua un șir de orice lungime ca intrare și ieșire o valoare hash cu lungime fixă. Aceste funcții trebuie să fie capabile să reziste tuturor atacurilor bazate pe criptanaliză : pentru a face acest lucru, nivelul de securitate al unei funcții hash criptografice este definit prin referirea la următoarele proprietăți:

  • Rezistența la preimagine

Având în vedere o valoare hash h, trebuie să fie dificil de trasat un mesaj m cu hash (m) = h. Această proprietate derivă din conceptul unei funcții unidirecționale. Funcțiile care nu au această proprietate sunt vulnerabile la atacuri preimagini .

  • A doua rezistență pre-imagine

Având în vedere un mesaj m1, trebuie să fie dificil să găsești un al doilea mesaj m2 astfel încât hash (m1) = hash (m2) . Funcțiile care nu au această proprietate sunt vulnerabile la al doilea atac preimagine .

Având în vedere două mesaje m1 și m2, trebuie să fie dificil ca cele două mesaje să aibă același hash, deci cu hash (m1) = hash (m2). O astfel de pereche se numește coliziune hash criptografică . Această proprietate este uneori denumită rezistență puternică la coliziune . Rezistența la coliziune implică rezistență la a doua preimagine, dar nu implică rezistență la preimagine: în comparație cu aceasta din urmă, necesită o valoare hash cel puțin de două ori mai lungă, altfel coliziile pot fi găsite printr-un atac de ziua de naștere .

Aceste proprietăți înseamnă că un posibil atac nu vă va permite să înlocuiți sau să modificați un mesaj fără a afecta valoarea hash rezultată. Prin urmare, dacă două șiruri au același rezumat, puteți avea încredere că sunt identice. În special, rezistența la a doua imagine preliminară ar trebui să împiedice un adversar rău intenționat să proceseze un mesaj cu același hash ca un mesaj pe care adversarul nu îl poate controla. Rezistența la coliziune, pe de altă parte, împiedică atacatorul să creeze două mesaje distincte cu același hash.

În practică, o funcție hash este doar o rezistență la a doua pre-imagine; motiv pentru care este considerat nesigur și, prin urmare, nu este recomandat pentru aplicații din lumea reală. Pe de altă parte, rezistența la coliziune este insuficientă pentru multe utilizări practice: pe lângă aceasta, nu ar trebui să fie posibil ca un adversar să găsească două mesaje cu rezumate substanțial similare sau să poată deduce informații utile despre mesaj începând de la hash-ul său. valoare. Deci, o funcție hash criptografică trebuie să fie cât mai similară cu o funcție aleatorie (adesea numită oracol aleator ), fiind totuși deterministă și simplu de calculat. Aceasta exclude funcțiile SWIFFT, care s-au dovedit a fi riguros rezistente la coliziune, cu condiția ca anumite probleme de pe rețelele ideale să fie dificile din punct de vedere al calculului; dacă sunt înțelese ca funcții liniare, ele nu conduc la satisfacerea acestor proprietăți. Algoritmii de sumă de verificare, de exemplu, cum ar fi CRC și alte verificări de redundanță ciclică, deoarece sunt liniare, sunt proiectate pentru a îndeplini cerințe mult mai slabe, fiind prea ușor de inversat și, în general, nu sunt potrivite ca funcții de hash criptografice.

Cu toate acestea, este important să subliniem că, deși are o funcție capabilă să satisfacă toate aceste criterii, totuși se pot întâlni proprietăți nedorite. Funcțiile de hash criptografice utilizate în prezent sunt vulnerabile la atacuri de extensie de lungime: hash de date (m) și len (m) , dar nu m , alegând un m ' adecvat, un atacator poate calcula hash (m || m'), unde | | indică concatenare. Această proprietate poate fi utilizată pentru a sparge scheme de autentificare naive bazate pe funcții hash. Construcția HMAC lucrează la aceste tipuri de probleme.

Gradul de dificultate

În criptografie practică, termenul „dificil” înseamnă, în general, „aproape sigur că nu este la îndemâna oricărui adversar care trebuie împiedicat să spargă sistemul atâta timp cât securitatea sistemului este considerată importantă”. Prin urmare, semnificația termenului depinde ușor de aplicație, deoarece efortul pe care un agent rău intenționat îl poate depune în activitatea sa este de obicei proporțional cu câștigurile sale așteptate. Cu toate acestea, din moment ce eforturile atacatorului cresc rapid cu lungimea digestului, ar beneficia sistemul dacă i s-ar adăuga câteva zeci de biți, cu capacitatea de a neutraliza chiar și un avantaj de o mie de ori în puterea de procesare.

Pentru mesajele scurte, cum ar fi parolele , este posibil să puteți inversa un hash încercând toate mesajele posibile din set, dar, deoarece funcțiile de hash criptografice sunt concepute pentru a fi calculate rapid, au fost dezvoltate funcții de derivare a cheilor , care necesită mai multe resurse de calcul, îngreunând astfel atacurile de forță brută.

În unele analize teoretice , „dificil” capătă un sens matematic specific, precum „nerezolvabil în timp polinom asimptotic ”. Astfel de interpretări ale dificultății sunt importante în studiul funcțiilor hash criptografice care sunt susceptibile de a fi sigure, dar de obicei nu sunt potrivite în securitatea practică. De exemplu, se poate vedea că un algoritm de timp exponențial poate fi uneori suficient de rapid pentru a face un atac fezabil; pe de altă parte, un algoritm de timp polinomial , spre deosebire de cel exponențial, poate fi prea lent pentru orice utilizare practică.

Ilustrare

O ilustrare a utilizării potențiale a unui hash criptografic este următoarea:

  • Alice îi pune lui Bob o problemă matematică dificilă, susținând că a rezolvat-o;
  • Bob ar dori să rezolve și el aceeași problemă, dar ar dori să se asigure că Alice nu blufează;
  • Alice își scrie soluția, își calculează hashul și o raportează lui Bob (păstrând soluția secretă);
  • când Bob revine cu soluția câteva zile mai târziu, Alice poate dovedi că a avut soluția mai devreme, dezvăluind-o;
  • Odată dezvăluit, având hash-ul lui Bob, Alice poate verifica dacă acesta se potrivește cu valoarea hash calculată anterior de ea.

În practica reală, Alice și Bob sunt adesea programe de calculator și, desigur, secretul va consta în ceva nu ușor de înșelat: acest exemplu aduce înapoi ceea ce în engleză se numesc scheme de logodnă.

Aplicații

Verificați integritatea unui mesaj

Pictogramă lupă mgx2.svg Același subiect în detaliu: Semnătura digitală .

O aplicație importantă a funcțiilor hash criptografice constă în verificarea integrității unui mesaj . Prin intermediul acestor funcții este posibil să se determine, de exemplu, dacă s-au făcut modificări unui mesaj (sau unui fișier ) prin compararea hashului său înainte și după transmisie. O utilizare specială se face în majoritatea algoritmilor de semnătură digitală, care utilizează funcții hash pentru a produce o semnătură care garantează autenticitatea unui mesaj, împiedicând un posibil destinatar să modifice un document semnat de altcineva. Din acest motiv, valoarea hash este, de asemenea, denumită amprentă digitală a mesajului. Prin urmare, verificarea autenticității valorii hash a mesajului este considerată drept dovadă a autenticității mesajului în sine.

Verificați parolele

Pictogramă lupă mgx2.svg Același subiect în detaliu: derivarea unei chei criptografice .

În aplicațiile care necesită autentificare adecvată este prea riscant pentru a stoca parolele tuturor utilizatorilor în format clar, care nu se află într-un fișier criptat , mai ales dacă acestea din urmă sunt compromise. O modalitate de a evita o încălcare reală a securității este de a stoca numai valoarea hash a fiecărei parole: după ce utilizatorul s-a autentificat, se calculează hash-ul parolei introduse de el și rezultatul este comparat cu hash-ul stocat anterior. Adesea, parola este concatenată cu o valoare aleatorie, non-secretă, numită sare , înainte ca funcția hash să fie aplicată. Utilizate împreună, dar stocate separat, produc o ieșire care înlocuiește doar parolele, permițând astfel utilizatorilor să se autentifice. Având în vedere sarea și faptul că utilizatorii au în general mai multe, nu este posibil să stocați tabele de valori hash precomputate pentru parole comune. Cu toate acestea, așa cum s-a menționat anterior, cu parole cu mesaj scurt și funcții hash concepute pentru a fi calculate rapid pe de o parte, este posibil să fii supus atacurilor cu forță brută (consideră doar că GPU poate încerca miliarde de parole posibile pe secundă). Pe de altă parte, există funcții, numite funcții cheie de întindere] , cum ar fi PBKDF2 , Bcrypt sau Scrypt care „sporesc” parolele pentru a le face mai sigure în fața unui atac de forță brută.

Dovada muncii

Pictogramă lupă mgx2.svg Dovada muncii .

Sistemul Dovadă a muncii este o măsură rentabilă pentru a descuraja atacurile de refuz de serviciu și alte abuzuri de serviciu (cum ar fi spamul pe o rețea) care impune anumite lucrări de către solicitantul de servicii, înțeles de obicei ca timpul de procesare al unui computer. O caracteristică fundamentală a acestor sisteme este asimetria lor: munca trebuie să fie moderat complexă (dar fezabilă) din partea solicitantului, dar în același timp, pentru furnizorul de servicii este ușor de controlat. Un sistem celebru, utilizat în generația de bitcoin și în Hashcash , folosește inversiuni parțiale de hash pentru a verifica dacă s-a făcut munca, pentru a debloca o recompensă (numită recompensă Bitcoin ) în cazul Bitcoin sau ca semn de bunăvoință să fie trimis prin e-mail la Hashcash. În practică, expeditorul este obligat să găsească un mesaj a cărui valoare hash începe cu un număr de biți zero: munca medie pe care trebuie să o facă pentru a găsi un mesaj valid este exponențială în numărul de biți zero necesari în valoarea hash. Pe de altă parte, destinatarul poate verifica validitatea mesajului efectuând o singură funcție hash. De exemplu, în Hashcash, dacă unui expeditor i s-ar cere să genereze un antet a cărui valoare hash de 160 biți SHA-1 are primii 20 de biți de zerouri, ar trebui să încerce în medie de 219 de ori înainte de a găsi un antet valid.

Fișier sau identificator de date

În acele aplicații în care trebuie gestionate cantități mari de fișiere, un rezumat de mesaje poate fi, de asemenea, util pentru a le identifica în mod fiabil. Mai multe sisteme de gestionare a codului sursă , inclusiv Git , Mercurial și Monotone, utilizează sha1sum (un algoritm care calculează și verifică hash-urile SHA-1) a diferitelor tipuri de conținut (conținut de fișiere, arbori de directoare, informații genealogice etc.) pentru a permite în mod unic identifică-i. Același obiectiv trebuie atins de rețelele de partajare a fișierelor peer-to-peer unde, de exemplu, într-un link ed2k , un hash MD4 este combinat cu dimensiunea fișierului, oferind suficiente informații pentru a identifica originile fișierului în sine. , descărcați-l și verificați conținutul acestuia. Legăturile magnetice sunt un alt exemplu. Având la dispoziție funcții hash de un anumit tip, una dintre principalele aplicații ale funcțiilor criptografice este de a permite căutarea rapidă a datelor într-un tabel hash . Cu toate acestea, în comparație cu funcțiile hash standard, funcțiile hash criptografice tind să fie mai costisitoare din punct de vedere al calculului. Din acest motiv, acestea sunt utilizate în contexte în care utilizatorii trebuie protejați de posibilitatea falsificării (crearea de date cu același rezumat) de către participanți potențial rău intenționați.

Generarea de numere pseudorandom și chei de derivare

Funcțiile Hash pot fi, de asemenea, utilizate pentru generarea de șiruri pseudorandom sau pentru derivarea cheilor și parolelor dintr-o singură cheie sau parolă securizată.

Funcții Hash bazate pe cifre bloc

Există mai multe metode de utilizare a cifrelor bloc pentru a crea o funcție hash criptografică sau, mai bine zis , o funcție de compresie unidirecțională . Metodele de aplicare seamănă cu modul în care funcționează cifrele bloc utilizate în mod obișnuit în criptografie. Multe funcții hash bine cunoscute, inclusiv MD4 , MD5 , SHA-1 și SHA-2 , sunt construite din componente de cifrare bloc adecvate, cu feedback pentru a se asigura că funcția rezultată nu este inversabilă. Finalistii SHA-3 au inclus funcții cu componente de cifrare bloc (de ex. Sklein sau BLAKE ), deși funcția Keccak a fost aleasă ulterior, construită pe o funcție de burete . Un cifru de bloc standard, cum ar fi AES, poate fi utilizat în locul cifrelor de blocuri personalizate, care ar putea fi util atunci când un sistem încorporat trebuie să implementeze atât criptare, cât și hash, cu dimensiuni minime de cod sau zonă hardware. Cu toate acestea, această abordare poate avea costuri în termeni de eficiență și siguranță.

Cifrele cu funcții hash sunt construite pentru hashing: utilizează taste și blocuri mari, pot modifica eficient tastele fiecărui bloc și au fost proiectate și testate pentru rezistență la atacurile de chei conexe . Cifrele cu scop general tind să aibă obiective de proiectare diferite; în special, AES are dimensiuni cheie și bloc care fac ca aceasta să nu fie banală pentru a genera valori hash lungi. Criptarea AES devine mai puțin eficientă pe măsură ce cheia schimbă fiecare bloc, iar atacurile legate de cheie îl pot face mai puțin sigur pentru utilizare într-o funcție hash decât în ​​criptare.

Proiectarea funcției Hash

Construcție Merkle-Damgård

Construirea unui hash cu Merkle - Damgård.

O funcție hash trebuie să poată procesa un mesaj de lungime arbitrară într-o ieșire cu lungime fixă: acest lucru poate fi realizat prin divizarea intrării într-o serie de blocuri de dimensiuni egale și operând pe ele secvențial folosind o funcție de compresie într-un singur sens . Funcția de compresie poate fi proiectată special pentru hash sau pentru a fi construită dintr-un cifru bloc. O funcție hash construită cu construcția Merkle-Damgård este rezistentă la coliziuni și la funcția sa de compresie; orice coliziune pentru funcția hash completă poate fi urmărită înapoi la o coliziune în funcția de compresie.

În construcția Merkle-Damgård, ultimul bloc procesat trebuie să fie „căptușit” fără echivoc până la o lungime de căptușeală: acest pas este esențial pentru siguranța acestei construcții.

Cele mai frecvente forme clasice de hash, inclusiv SHA-1 și MD5 iau această formă.

Diferența dintre hashul îngust al conductei și hashul larg al conductei

O aplicație directă a construcției Merkle-Damgård, unde dimensiunea de ieșire hash este egală cu dimensiunea stării interne (între fiecare etapă de compresie), se traduce printr- un design hash de țeavă îngust (țeavă îngustă). Acest design provoacă numeroase defecte, inclusiv extensii de lungime , multicoliziune, [1] atacuri de mesaje lungi, [2] generează și lipesc atacuri și nu poate fi paralelizat. Ca rezultat, construcțiile moderne implică hash -uri cu țevi largi care au o dimensiune de stare internă mai mare, variind de la modificările de construcție Merkle-Damgård [1] la construcții noi, cum ar fi construcția de burete și construcția HAIFA . [3] Niciunul dintre concurenții de funcții hash NIST nu folosește o construcție clasică Merkle-Damgård. [4]

Între timp, trunchierea ieșirii unui hash mai lung, așa cum se face în SHA-512/256, învinge, de asemenea, multe dintre aceste atacuri. [5]

Se utilizează pentru construirea altor primitive criptografice

Funcțiile Hash pot fi utilizate pentru a construi alte primitive criptografice: pentru a vă asigura că sunt protejate criptografic, trebuie să aveți grijă să le construiți corect.

Codurile de autentificare a mesajelor (MAC), numite și funcții hash cheiate , sunt adesea construite folosind funcții hash. HMAC se comportă ca un MAC.

La fel cum cifrele bloc pot fi utilizate pentru a genera funcții hash, inversul este adevărat, adică pot fi folosite și pentru a construi cifre bloc. Construcțiile Luby-Rackoff , care utilizează funcții hash, pot fi sigure numai dacă funcția hash subiacentă este la fel de sigură. În plus, multe funcții hash (inclusiv SHA-1 și SHA-2 ) sunt construite folosind un cifru de bloc special din Davies-Meyer sau o altă construcție. Acest cifru poate fi folosit și pentru a funcționa în mod convențional, fără aceleași garanții de securitate (vezi SHACAL , BEAR și LION ).

Generatoarele de numere pseudorandom (PRNG) pot fi, de asemenea, construite folosind funcții hash; pentru a face acest lucru, o sămânță aleatorie (secretă) este combinată cu un contor, apoi hash.

Unele funcții hash, cum ar fi Sklein , Keccak și RadioGatún generează un flux arbitrar lung și pot fi utilizate ca cifrare a fluxului . Cifrele de flux pot consta, de asemenea, în rezolvarea pe lungime fixă ​​a funcțiilor hash: acest lucru se realizează prin construirea mai întâi a unui generator de numere pseudorandom securizate criptografic , apoi folosind fluxul său de octeți aleatori ca flux cheie . În acest sens, SEAL este un cifru de flux care folosește SHA-1 pentru a genera tabele interne, care sunt apoi utilizate într-un generator de flux de chei mai mult sau mai puțin legat de algoritmul hash. Cu toate acestea, SEAL nu este garantat să fie la fel de puternic (sau slab) ca SHA-1.

În mod similar, extinderea cheie a cifrelor de flux HC-128 și HC-256 face o utilizare extinsă a funcției hash SHA256 .

Concatenarea mai multor funcții hash

Pictogramă lupă mgx2.svg Același subiect în detaliu: lanțul Hash .

Pentru a gestiona coliziunile, una dintre cele mai populare metode este cea a hashului cu concatenare ( înlănțuire ). Înainte de Antoine Joux [6] , un cunoscut criptograf francez, s-a susținut că ieșirea de concatenare a două funcții hash oferea o rezistență la coliziune comparabilă cu algoritmi de hash mai robusti, mai mare decât cea pe care funcțiile individuale ar putea să o ofere hash. De exemplu, versiunile anterioare ale Transport Layer Security (TLS) și Secure Sockets Layer (SSL) utilizează MD5 și SHA-1 ca o concatenare. [7] [8] Dintr-un raționament similar, este ușor de crezut că acest lucru ar fi condus la dorința de a exploata funcțiile hash slabe și apoi a proceda la realizarea unui algoritm de fapt mai robust; cu toate acestea, pentru construcția Merkle-Damgård , rezultatul înlănțuit nu este neapărat mai rezistent la coliziune decât componentele sale mai puternice. Mai general, dacă un atac poate produce o coliziune într-o stare internă a funcției hash, echivalentul unui atac îndreptat împotriva construcției înlănțuite corespunde unui atac de ziua de naștere împotriva altor funcții: [9] prin urmare, acest lucru nu face ca conceptul să fie adevărat exprimat mai sus despre concatenare.

Joux însuși a observat că un număr egal cu 2 coliziuni declanșează n coliziuni: dacă, pentru un atacator, este posibil să poată găsi două mesaje cu același hash MD5, atunci el poate găsi toate mesajele pe care le dorește cu hash-uri MD5 identice fără mai mulți întâmpină dificultăți. [9] Munca suplimentară necesară pentru a găsi o coliziune SHA-1 (dincolo de căutarea exponențială a zilei de naștere) durează doar timp polinomial . [10]

Algoritmi hash criptografici

Există multe funcții hash criptografice în zilele noastre, deși unele dintre ele s-au dovedit a fi vulnerabile și, prin urmare, ar fi mai bine dacă nu ar fi utilizate. Chiar dacă o funcție nu a fost niciodată compromisă, un atac criptografic de succes asupra uneia dintre variantele sale poate compromite încrederea experților, ducând la o abandonare ulterioară a funcției în sine. De exemplu, în august 2004, s-au găsit unele puncte slabe în mai multe funcții hash despre care se credea că erau populare la vremea respectivă, inclusiv SHA-0 , RIPEMD și MD5 . În special, pe 12 august, Joux , Carribault, Lemuet și Jalby au anunțat o coliziune pentru algoritmul SHA-0 complet: au putut realiza ce s-a întâmplat folosind o generalizare a atacului Chabaud și Joux. S-a constatat că coliziunea are o complexitate de 2 51 și a durat aproximativ 80.000 de ore CPU pe un supercomputer cu 256 de procesoare Itanium 2 (echivalentul a 13 zile de utilizare cu normă întreagă a supercomputerului). Ulterior, în februarie 2005, a fost raportat un atac asupra SHA-1 care ar fi găsit o coliziune în aproximativ 2 69 de operații de hash, mai degrabă decât cele 2 80 așteptate pentru o funcție de hash de 160 de biți. În luna august a aceluiași an, a fost raportat un alt atac asupra SHA-1 care ar fi găsit coliziuni în 2 63 de operațiuni.

Aceste puncte slabe au pus sub semnul întrebării siguranța algoritmilor mai robusti care rezultă din funcții hash slabe: în special, SHA-1 (o versiune întărită a SHA-0), RIPEMD-128 și RIPEMD-160 (ambele sunt versiuni întărite ale RIPEMD) . Datorită existenței versiunilor întărite, algoritmii SHA-0 și RIPEMD au fost înlocuiți și, în consecință, sunt acum subutilizați.

Cercetătorii în materie de securitate sugerează că noile aplicații pot evita aceste probleme prin utilizarea unor versiuni mai noi ale familiei SHA (cum ar fi SHA-2 ) sau prin utilizarea unor tehnici precum hash randomizat [11] [12] care nu necesită rezistență la coliziune. Cu toate acestea, pentru a asigura robustețea pe termen lung a aplicațiilor care utilizează funcții hash, a existat concurență pentru a proiecta un înlocuitor pentru algoritmul SHA-2. Pe 2 octombrie 2012, Keccak a fost selectat ca câștigător al concursului de funcții hash NIST - o versiune a acestui algoritm a devenit un standard FIPS la 5 august 2015, cunoscut sub numele de SHA-3 . [13]

Un alt finalist al competiției, BLAKE , a fost optimizat pentru a produce BLAKE2, despre care se știe că este mai rapid decât SHA-3, SHA-1 sau MD5. Din acest motiv, utilizarea semnificativă a acestui algoritm poate fi găsită în numeroase aplicații și biblioteci.

Pe 23 februarie 2017, o echipă de cercetători Google a anunțat că a făcut cu succes prima coliziune pentru SHA-1 ca parte a proiectului SHAttered , după ce a creat cu succes două fișiere PDF diferite cu același hash.

Algoritm e

variantă

Dimensiunea de ieșire (biți) Dimensiunea stării interne (biți) Dimensiunea blocului (biți) Dimensiunea maximă a mesajului (biți) Dimensiunea cuvântului (biți) Pași Operațiuni Ciocniri găsite
SHA-0 160 160 512 2 64 - 1 32 80 +, și, sau, xor, rotl Da
SHA-1 160 160 512 2 64 - 1 32 80 +, și, sau, xor, rotl Atac

2 63 [14]

SHA-2 SHA-256/224 256/224 256 512 2 64 - 1 32 64 +, și, sau, xor, shr, rotr Nici unul
SHA-512/384 512/384 512 1024 2 128 - 1 64 80 +, și, sau, xor, shr, rotr Nici unul

Notă

  1. ^ a b Stefan Lucks, Principiile de proiectare pentru funcțiile de hash iterate , n. 253, 2004. Adus pe 24 noiembrie 2017 .
  2. ^ John Kelsey și Bruce Schneier, al doilea preimaj pe funcțiile Hash n-bit pentru mult mai puțin de 2 ^ n lucru , n. 304, 2004. Adus pe 24 noiembrie 2017 .
  3. ^ Eli Biham și Orr Dunkelman, A Framework for Iterative Hash Functions - HAIFA , n. 278, 2007. Adus la 24 noiembrie 2017 .
  4. ^ Mridul Nandi și Souradyuti Paul, Speeding Up The Widepipe: Secure and Fast Hashing , n. 193, 2010. Adus la 24 noiembrie 2017 .
  5. ^ Dobraunig Christoph, Eichlseder Maria și Mendel Florian, Evaluarea securității SHA-224, SHA-512/224 și SHA-512/256 ( PDF ), februarie 2015.
  6. ^ Bulletin de la société informatique de France - numéro 1, septembrie 2013 ( PDF ), pe 1024.labri.fr .
  7. ^ (EN) Mitsuri Matsui, Advances in Cryptology - Asiacrypt 2009: 15th International Conference on theory and Application of Cryptology and Information Security, Tokyo, Japonia, 6-10 decembrie 2009, Proceedings , Springer, 1 decembrie 2009, ISBN 978- 3-642-10366-7 . Adus la 28 noiembrie 2017 .
  8. ^ ( EN ) Ronald Cramer, Advances in Cryptology - EUROCRYPT 2005: 24th Annual International Conference on the Theory and Applications of Cryptographic Techniques, Aarhus, Denmark, May 22-26, 2005, Proceedings , Springer Science & Business Media, 9 maggio 2005, ISBN 978-3-540-25910-7 . URL consultato il 28 novembre 2017 .
  9. ^ a b Antoine Joux, Multicollisions in Iterated Hash Functions. Application to Cascaded Constructions. ( PDF ) [ collegamento interrotto ] .
  10. ^ Hoch, Jonathan J.; Shamir, Adi, On the Strength of the Concatenated Hash Combiner when All the Hash Functions Are Weak. ( PDF ), su eprint.iacr.org , 2008.
  11. ^ Shai Halevi, Hugo Krawczyk, Update on Randomized Hashing
  12. ^ Shai Halevi and Hugo Krawczyk, Randomized Hashing and Digital Signatures
  13. ^ SHA-3 Standardization - Hash Functions | CSRC , su csrc.nist.gov . URL consultato il 30 novembre 2017 .
  14. ^ Weblog for dkg - HOWTO prep for migration off of SHA-1 in OpenPGP

Voci correlate

Collegamenti esterni