Funcția Hash

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Rezultatul primilor patru octeți ai funcției hash SHA-1 .

Funcția hash sau funcția hash produce o secvență de biți, numită digest, (sau un șir) care este strâns legată de datele primite. Cuvântul provine din termenul englezesc hash, de la verbul hash sau to chop, to mess, care desemnează inițial o chiftelă din resturi de carne și legume; prin extensie, indică un compus eterogen căruia i se dă o formă incertă: „ A face un hash de ceva ” înseamnă, de fapt, a crea confuzie sau a face ceva destul de rău.

În informatică

Într -un limbaj matematic și de calculator, hash este un non-inversabilă funcție care mapează un șir de lungime arbitrară într - un șir de lungime predefinită. Există numeroși algoritmi care implementează funcții hash cu proprietăți particulare care depind de aplicație.

În aplicațiile criptografice , de exemplu, funcția hash trebuie să aibă următoarele proprietăți:

  • rezistență la preimagine: căutarea unui șir de intrare care să dea un hash egal cu un hash dat este intratabil din punct de vedere computerizat;
  • rezistență la cea de-a doua pre-imagine: este calculabil intratabil să căutați un șir de intrare care să dea un hash egal cu cel al unui șir dat;
  • rezistență la coliziune: este calculat de neînțeles să căutăm o pereche de șiruri de intrare care să dea același hash.

În aplicațiile de baze de date funcția hash este utilizată pentru a crea o anumită structură de date numită tabel hash . În această aplicație, nu sunt necesare proprietăți criptografice și, în general, singura proprietate necesară este că nu există hashuri mai probabile decât altele.

Hash uniform uniform

Hash uniform uniform este definit ca tipul Hash în care extracția elementelor din U este aleatorie și funcția hash

h : U → {m}

scoate cheia cu probabilitate

În aceste condiții, căutarea cheii va avea o complexitate constantă O (1).

Algoritm Hash

Algoritmul hash procesează orice cantitate de biți (în informatică se spune că procesează date „brute”). Este o familie de algoritmi care îndeplinește aceste cerințe:

  1. Algoritmul returnează un șir de numere și litere din orice flux de biți de orice dimensiune (poate fi un fișier, dar și un șir). Ieșirea se numește digest .
  2. Algoritmul nu este inversabil, adică nu este posibilă reconstituirea documentului original pornind de la șirul returnat în ieșire sau este o funcție unidirecțională , această din urmă caracteristică nu este esențială dacă utilizați hashuri pentru a verifica erorile din date transferuri, unde orice funcții de criptare pot fi efectuate în alte zone ale protocolului.

Hash și coliziuni

Nu există o corespondență unu-la-unu între hash și text. Deoarece textele posibile, cu dimensiune finită mai mare decât hashul, sunt mai mult decât hashurile posibile, pentru că principiul sertarelor pentru cel puțin un hash va corespunde cât mai multor texte posibil. Când două texte produc același hash, se numește coliziune , iar calitatea unei funcții hash este măsurată direct de dificultatea identificării a două texte care generează o coliziune. Pentru a descuraja utilizarea algoritmilor de hashing considerați anterior siguri, a fost de fapt suficient ca un singur grup de cercetători să genereze o coliziune. Așa s-a întâmplat de exemplu pentru algoritmii SNEFRU , MD2 , MD4 , MD5 și SHA-1 .

Un hash securizat criptografic nu ar trebui să permită revenirea înapoi, într-un timp comparabil cu utilizarea hash-ului în sine, la un text care îl poate genera.

Aplicații

Hash și criptare

Pictogramă lupă mgx2.svg Același subiect în detaliu: Funcția Hash criptografică .

Lungimea valorilor hash variază în funcție de algoritmii utilizați. Cea mai frecvent adoptată valoare este de 128 biți , ceea ce oferă o bună fiabilitate într-un spațiu relativ mic. Cu toate acestea, ar trebui remarcată posibilitatea utilizării hashurilor de dimensiuni mai mari (SHA, de exemplu, poate oferi și șiruri de 224, 256, 384 și 512 biți) și hash-uri mai mici (care, totuși, sunt puternic descurajate).

Funcțiile Hash joacă un rol esențial în criptografie : sunt utile pentru verificarea integrității unui mesaj, deoarece executarea algoritmului chiar și pe textul modificat minim oferă un rezumat complet diferit de mesaj decât cel calculat pe textul original, dezvăluind modificarea încercată.

Funcțiile hash pot fi, de asemenea, utilizate pentru crearea semnăturilor digitale , deoarece permit crearea rapidă a semnăturii chiar și pentru fișiere mari, fără a necesita calcule lungi și complexe: este, de fapt, mai convenabil din punct de vedere computațional să hashează rapid textul care trebuie semnat , apoi autentificați exact acest lucru, evitând astfel executarea algoritmilor de criptare asimetrică complexă pe cantități foarte mari de date.

Semnătura digitală este definită ca rezumatul unui document care este apoi criptat cu o cheie privată (și nu cu una publică, așa cum se întâmplă de obicei). Semnătura digitală este singurul caz în care utilizarea cheilor este inversată: cheia publică este utilizată pentru a decripta semnătura și apoi pentru a găsi rezumatul inițial prin hash, în timp ce cheia privată este utilizată pentru a cripta un șir în loc să îl deschidă .

O altă utilizare a funcțiilor hash apare în derivarea cheilor din parole sau fraze de trecere : pornind de la o valoare de intrare arbitrară (un șir sau o matrice mare) se derivă într-un mod sigur criptografic (adică nu este posibil să se scurteze calculul cu unele comandă rapidă) o dimensiune a cheii potrivită pentru criptare. Cu toate acestea, nu este necesar să spunem că, cu excepția cazului în care se iau măsuri adecvate de contracarare (cum ar fi utilizarea unei sări criptografice ), utilitatea acestei proceduri este exclusiv practică: de fapt, securitatea cheii derivate este echivalentă cu cea a intrării în scopul unui atac de dicționar . Pe de altă parte, este cu siguranță mai confortabil pentru o ființă umană să-și amintească un șir mai degrabă decât o secvență numerică lungă.

Securitatea funcțiilor hash

În contextul funcțiilor hash, ne referim la mai multe concepte de securitate:

  • Securitate slabă : având în vedere un mesaj M, din punct de vedere al calculului este "dificil" să găsești un al doilea mesaj M 'astfel încât h (M) = h (M').
  • Securitate puternică : este calculat „dificil” să găsești o pereche de mesaje M, M 'astfel încât h (M) = h (M').

Aceste două concepte de securitate se disting, de asemenea, datorită efectelor pe care le pot produce dacă sunt lipsite de ele: de exemplu, în ceea ce privește posibilitatea de a face o semnătură digitală, un algoritm care nu garantează o securitate puternică, dar slabă, ar fi totuși util deoarece mesajul M nu poate fi „verificat” și, prin urmare, ar trebui găsit un al doilea mesaj M 'cu aceeași funcție hash, ceea ce ar fi dificil de calcul.

Hash și baze de date

Puteți utiliza funcții hash pentru a crea un tabel hash , care este o structură de date foarte eficientă pentru operațiunile de căutare. Tabelul hash conține date asociate cu o cheie de căutare și este adesea utilizat în baze de date pentru indexarea articolelor care vor fi căutate. Această tehnică (numită hashing) vă permite să creați funcții de căutare care să poată localiza elementul dorit într-un timp constant, independent (cel puțin teoretic) de numărul de elemente prezente în index.

Protecție împotriva erorilor

Utilizarea funcțiilor hash pentru a găsi erori în transmisii este foarte frecventă. Funcția hash este calculată de către expeditor din date și valoarea acesteia este trimisă împreună cu datele. Receptorul calculează din nou funcția hash și, dacă valorile hash nu se potrivesc, a apărut o eroare în timpul transmisiei. Această metodă permite o verificare mai bună a integrității datelor decât suma de control mai tradițională.

Informatică criminalistică

Algoritmii Hash, în special SHA1 și MD5 , sunt folosiți pe scară largă în calculul criminalistic pentru validarea și cumva „semnarea” digitală a datelor dobândite, de obicei copiile criminalistice . De fapt, legislația recentă impune un lanț de custodie care permite păstrarea descoperirilor IT de la orice modificări ulterioare aduse achiziției: prin codurile hash este posibil în orice moment să se verifice dacă ceea ce a fost găsit a rămas neschimbat în timp. Dacă codurile hash se potrivesc, ambele părți într-o procedură judiciară au certitudinea rezonabilă că lucrează la aceeași versiune a constatărilor, asigurând astfel uniformitatea analizei și, în general, a rezultatelor. Rezultatele codului Hash sunt acum calculate în mod implicit de majoritatea software-ului de captură criminalistică și atașate copiilor criminalistice salvate.

Lista hashurilor și a documentelor conexe

Notă

  1. ^ RFC1319 - Algoritmul MD2 Message-Digest
  2. ^ RFC1320 - Algoritmul MD4 Message-Digest
  3. ^ RFC1321 - Algoritmul MD5 Message-Digest
  4. ^ RFC1810 - Raport privind performanța MD5
  5. ^ RFC1828 - Autentificare IP folosind Keyed MD5
  6. ^ MDC-2 - Cod de detecție a modificării
  7. ^ FIPS PUB 180-1 - SECURE HASH STANDARD
  8. ^ RFC3174 - US Secure Hash Algorithm 1 (SHA1)
  9. ^ RFC1852 - Autentificare IP folosind Keyed
  10. ^ DFIPS PUB 180-2 - SECURE HASH STANDARD
  11. ^ Pagina de pornire RIPEMD-160
  12. ^ Fast Stream Encryption and Hashing with PANAMA, de J.Daemen, C.Clapp Arhivat la 6 iulie 2001 în Internet Archive .
  13. ^ Tiger: O nouă funcție rapidă Hash Pagina de pornire Tiger
  14. ^ RFC1950 - Specificația formatului de date comprimate ZLIB versiunea 3.3
  15. ^ (Atenție: HMAC nu este într-adevăr o funcție hash, deoarece nu este necesar doar text simplu pentru a-l executa, ci și o cheie. Algoritmii Hash necesită un singur parametru de intrare)
  16. ^ FIPS PUB 198 - Codul de autentificare a mesajului Keyed-Hash (HMAC)
  17. ^ RFC2104 - HMAC: Keyed-Hashing pentru autentificarea mesajelor
  18. ^ RFC2202 - Cazuri de testare pentru HMAC-MD5 și HMAC-SHA-1
  19. ^ RFC2286 - Cazuri de testare pentru HMAC-RIPEMD160 și HMAC-RIPEMD128
  20. ^ RFC2085 - Autentificare IP HMAC-MD5 cu prevenire redare
  21. ^ RFC2403 - Utilizarea HMAC-MD5-96 în ESP și AH
  22. ^ RFC2404 Arhivat 9 februarie 2005 la Internet Archive . - Utilizarea HMAC-SHA-1-96 în ESP și AH
  23. ^ RFC2857 - Utilizarea HMAC-RIPEMD-160-96 în ESP și AH

Elemente conexe

linkuri externe