Cum se configurează smartphone-uri și PC-uri. Portal informativ
  • Acasă
  • Erori
  • Ce este hash și pentru ce este? Hash - ce este? Definiție, sens, traducere.

Ce este hash și pentru ce este? Hash - ce este? Definiție, sens, traducere.

După cum cred, mulți oameni știu că din 2007, Institutul Național de Standarde și Tehnologie din SUA (NIST) a organizat o competiție pentru a dezvolta un algoritm hash care să înlocuiască SHA-1 și o familie de algoritmi SHA-2. Cu toate acestea, din anumite motive, acest subiect a fost neglijat pe site. Acesta este de fapt ceea ce m-a adus la tine. Vă aduc în atenție o serie de articole dedicate algoritmilor hash. În această serie, vom studia împreună elementele de bază ale funcțiilor hash, vom lua în considerare cei mai faimoși algoritmi de hash, vom plonja în atmosfera competiției SHA-3 și vom lua în considerare algoritmii care pretind că o câștigă și cu siguranță îi vom testa. De asemenea, dacă este posibil, vor fi luate în considerare standardele rusești de hashing.

Despre mine

Student la Catedra de Securitate Informațională.

Despre hashing

În zilele noastre, aproape nicio aplicație de criptografie nu este completă fără utilizarea hashingului.
Funcțiile hash sunt funcții concepute pentru a „comprima” un mesaj arbitrar sau un set de date, de obicei scrise în alfabet binar, într-un model de biți cu lungime fixă ​​numit convoluție. Funcțiile hash au o varietate de aplicații atunci când efectuează experimente statistice, testează dispozitive logice și construiesc algoritmi pentru căutări rapide și verificarea integrității înregistrărilor din bazele de date. Principala cerință pentru funcțiile hash este distribuția uniformă a valorilor lor atunci când valorile argumentului sunt selectate aleatoriu.
O funcție hash criptografică este orice funcție hash care este stabilă criptografic, adică satisface o serie de cerințe specifice aplicațiilor criptografice. În criptografie, funcțiile hash sunt utilizate pentru a rezolva următoarele probleme:
- construirea de sisteme de monitorizare a integrității datelor în timpul transmiterii sau stocării acestora;
- autentificarea sursei de date.

Orice funcție se numește funcție hash h:X -> Y, ușor de calculat și astfel încât pentru orice mesaj M sens h(M) = H (convoluție) are o lungime fixă ​​a biților. X- set de toate mesajele, Y- un set de vectori binari de lungime fixă.

De regulă, funcțiile hash sunt construite pe baza așa-numitelor funcții de compresie într-un singur pas y = f(x 1 , x 2) două variabile, unde x 1, x 2Și y- vectori binari de lungime m, nȘi nîn consecință, și n este lungimea circumvoluției și m- lungimea blocului de mesaje.
Pentru a obține valoarea h(M) mesajul este mai întâi împărțit în blocuri de lungime m(în același timp, dacă lungimea mesajului nu este multiplu m apoi ultimul bloc este suplimentat într-un mod special până când este complet), și apoi la blocurile rezultate M 1, M 2,..., M N aplicați următoarea procedură secvențială pentru calcularea convoluției:

H o = v,
H i = f(M i ,H i-1), i = 1,.., N,
h(M) = HN

Aici v- o constantă, numită adesea vector de inițializare. Ea iese
din diverse motive și poate fi o constantă secretă sau un set de date aleatorii (un eșantion de dată și oră, de exemplu).
Cu această abordare, proprietățile funcției hash sunt complet determinate de proprietățile funcției de compresie într-un singur pas.

Există două tipuri importante de funcții hash criptografice - cheie și fără cheie. Funcțiile hash cheie se numesc coduri de autentificare a mesajelor. Acestea fac posibilă, fără mijloace suplimentare, garantarea atât a corectitudinii sursei de date, cât și a integrității datelor în sisteme cu utilizatori care au încredere unii în alții.
Funcțiile hash fără cheie se numesc coduri de detectare a erorilor. Acestea fac posibilă garantarea integrității datelor folosind mijloace suplimentare (criptare, de exemplu). Aceste funcții hash pot fi utilizate în sistemele cu utilizatori atât de încredere, cât și de neîncredere.

Despre proprietăți și cerințe statistice

După cum am spus deja, principala cerință pentru funcțiile hash este distribuția uniformă a valorilor lor atunci când valorile argumentului sunt selectate aleatoriu. Pentru funcțiile hash criptografice, este de asemenea important ca, cu cea mai mică modificare a argumentului, valoarea funcției se schimbă foarte mult. Acesta se numește efect de avalanșă.

Funcțiile de hashing cheie au următoarele cerințe:
- imposibilitatea de fabricare,
- imposibilitatea modificării.

Prima cerință înseamnă că este foarte dificil să găsești un mesaj cu valoarea de colaps corectă. A doua este complexitatea ridicată a selectării, pentru un mesaj dat cu o valoare de convoluție cunoscută, a unui alt mesaj cu valoarea de convoluție corectă.

Cerințele pentru funcțiile fără cheie sunt:
- unidirecționalitate,
- rezistenta la coliziune,
- rezistenta la gasirea unei a doua preimagine.

Unidirecționalitatea se referă la dificultatea mare de a găsi un mesaj pe baza unei valori date de convoluție. Trebuie remarcat faptul că în acest moment nu există funcții hash în uz cu unidirecționalitate dovedită.
Rezistența la coliziune se referă la dificultatea de a găsi o pereche de mesaje cu aceleași valori de convoluție. De obicei, găsirea unei modalități de construire a coliziunilor de către criptoanalisti este primul semnal că algoritmul devine învechit și că trebuie înlocuit rapid.
Rezistența la găsirea unei a doua preimagine se referă la dificultatea de a găsi un al doilea mesaj cu aceeași valoare de convoluție pentru un mesaj dat cu o valoare de convoluție cunoscută.

Aceasta a fost partea teoretică, care ne va fi de folos în viitor...

Despre algoritmii hash populari

Algoritmi CRC16/32- sumă de control (nu conversie criptografică).

Algoritmi MD2/4/5/6. Sunt creația lui Ron Rivest, unul dintre autorii algoritmului RSA.
Algoritmul MD5 a fost cândva foarte popular, dar primele condiții preliminare pentru hacking au apărut la sfârșitul anilor 90, iar acum popularitatea sa este în scădere rapidă.
Algoritmul MD6 este un algoritm foarte interesant din punct de vedere al designului. A fost nominalizat la concursul SHA-3, dar, din păcate, autorii nu au avut timp să-l aducă la standard, iar acest algoritm nu se află pe lista candidaților care au trecut de turul doi.

Algoritmi de rigle SHA Algoritmi care sunt folosiți pe scară largă astăzi. Există o tranziție activă de la standardele versiunii SHA-1 la SHA-2. SHA-2 este numele colectiv pentru algoritmii SHA224, SHA256, SHA384 și SHA512. SHA224 și SHA384 sunt în esență analogi ai SHA256 și respectiv SHA512, numai după calcularea convoluției, o parte din informațiile din aceasta sunt aruncate. Acestea ar trebui folosite numai pentru a asigura compatibilitatea cu echipamentele modelelor mai vechi.

standard rusesc - GOST 34.11-94.

În articolul următor

Revizuirea algoritmilor MD (MD4, MD5, MD6).

Literatură

A. P. Alferov, Fundamentele criptografiei.

Bruce Schneier, Criptografie aplicată.

De exemplu, putem alimenta un roman Lev Tolstoi în hexazecimal sau numărul 1 ca intrare pentru o funcție hash de 128 de biți. Ca urmare, în ambele cazuri vom primi seturi diferite de cifre hexazecimale pseudoaleatoare de forma: „.”.

Când textul sursă se modifică chiar și cu un caracter, rezultatul funcției hash se schimbă complet.

Această proprietate a funcțiilor hash le permite să fie utilizate în următoarele cazuri:

  • la construirea de tablouri asociative;
  • atunci când se caută duplicate într-o serie de seturi de date;
  • la construirea de identificatori unici pentru seturile de date;
  • la calcularea sumelor de control din date (semnale) pentru detectarea ulterioară a erorilor din acestea (introduse accidental sau intenționat) care apar în timpul stocării și/sau transmiterii datelor;
  • la salvarea parolelor în sistemele de protecţie sub forma unui cod hash (pentru a recupera o parolă folosind un cod hash, este necesară o funcție care este inversa funcției hash utilizată);
  • atunci când se dezvoltă o semnătură electronică (în practică, adesea nu mesajul în sine este semnat, ci „imaginea lui hash”);
  • si etc.

Tipuri de funcții hash

O funcție hash „bună” trebuie să satisfacă două proprietăți:

  • calcul rapid;
  • numărul minim de „coliziuni”.

Să introducem următoarea notație:

∀ k ∈ (0 ; K) : h (k)< M {\displaystyle \forall k\in (0;\,K):h(k).

Un exemplu de funcție hash „proastă” este o funcție cu M = 1000 (\displaystyle M=1000), care este un număr natural de zece cifre K (\displaystyle K) compară Trei cifre alese din mijlocul unui pătrat de douăzeci de cifre al unui număr K (\displaystyle K). S-ar părea că valorile „cod hash” ar trebui uniform repartizat intre " 000 " Și " 999 ", dar pentru " real"date acestea sunt adevărate numai dacă" chei„ nu au un număr „mare” de zerouri în stânga sau în dreapta.

Să ne uităm la câteva implementări simple și fiabile ale funcțiilor hash.

„Funcții hash” bazate pe divizare

1. „Cod hash” ca restul împărțirii la numărul tuturor „hash-urilor” posibile

O funcție hash poate calcula „hash” ca restul împărțirii datelor de intrare la M (\displaystyle M):

h (k) = k mod M (\displaystyle h(k)=k\mod M),

Unde M (\displaystyle M)- numărul tuturor „hash-urilor” posibile (date de ieșire).

Mai mult, este evident că pentru chiar M (\displaystyle M) valoarea funcției va fi chiar atunci când pare k (\displaystyle k)și impar - când impar k (\displaystyle k). De asemenea, nu trebuie folosit ca M (\displaystyle M) radixul sistemului de numere al computerului, deoarece „codul hash” va depinde numai de mai multe cifre numere k (\displaystyle k), situată în dreapta, ceea ce va duce la un număr mare de ciocniri. În practică, de obicei aleg un simplu M (\displaystyle M); în majoritatea cazurilor această alegere este destul de satisfăcătoare.

2. „Cod hash” ca un set de coeficienți ai polinomului rezultat

O funcție hash poate efectua o împărțire modulo doi a datelor de intrare printr-un polinom. În această metodă M (\displaystyle M) trebuie să fie o putere a doi și chei binare ( K = k n − 1 k n − 2 . . . k 0 (\displaystyle K=k_(n-1)k_(n-2)...k_(0))) sunt reprezentate sub forma polinomiale, valorile coeficienților sunt luate ca „cod hash” polinom, obținut ca restul împărțirii datelor de intrare K (\displaystyle K) la un polinom preselectat P (\displaystyle P) grade m (\displaystyle m):

K (x) mod P (x) = h m - 1 x m - 1 + ⋯ + h 1 x + h 0 (\displaystyle K(x)\mod P(x)=h_(m-1)x^(m- 1)+\dots +h_(1)x+h_(0)) h (x) = h m − 1 . . . h 1 h 0 (\displaystyle h(x)=h_(m-1)...h_(1)h_(0))

Cu alegerea corectă P (x) (\displaystyle P(x)) este garantată absenţa ciocnirilor între chei aproape identice.

„Funcții hash” bazate pe înmulțire

Să notăm prin simbol w (\displaystyle w) numărul de numere care pot fi reprezentate printr-un cuvânt mașină. De exemplu, pentru computerele compatibile IBM PC pe 32 de biți, w = 2 32 (\displaystyle w=2^(32)).

Să alegem o constantă A (\displaystyle A) astfel încât A (\displaystyle A) a fost coprime cu w (\displaystyle w). Atunci o funcție hash care utilizează înmulțirea ar putea arăta astfel:

h (K) = [ M ⌊ A w ∗ K ⌋ ] (\displaystyle h(K)=\left)

În acest caz, pe un computer cu un sistem de numere binar M (\displaystyle M) este o putere a doi și h (K) (\displaystyle h(K)) va consta din cei mai semnificativi biți din jumătatea dreaptă a produsului A ∗ K (\displaystyle A*K).

Printre avantajele funcțiilor hash bazate pe împărțire și înmulțire, este de remarcat utilizarea benefică a non-aleatoriei cheilor reale. De exemplu, dacă cheile sunt o progresie aritmetică (de exemplu, succesiunea de nume „Nume 1”, „Nume 2”, „Nume 3”), o funcție hash care utilizează înmulțirea va mapa progresia aritmetică într-o progresie aproximativ aritmetică de diferitele valori hash, care vor reduce numărul de coliziuni în comparație cu o situație aleatorie.

O funcție hash care folosește înmulțirea este funcția hash care utilizează hashing Fibonacci. Hashingul Fibonacci se bazează pe proprietățile raportului de aur. Ca o constantă A (\displaystyle A) aici numărul întreg cel mai apropiat de φ − 1 ∗ w (\displaystyle \varphi ^(-1)*w) si coprime cu w (\displaystyle w), Unde φ (\displaystyle \varphi )- acesta este raportul de aur.

Hashing șiruri de lungime variabilă

Metodele de mai sus sunt aplicabile și dacă este necesar să se ia în considerare chei formate din mai multe cuvinte sau chei de lungime variabilă.

De exemplu, puteți combina cuvinte într-unul singur folosind adăugarea modulo w (\displaystyle w) sau operațiuni „exclusive sau”. Unul dintre algoritmii care funcționează pe acest principiu este funcția hash Pearson.

Hashing universal

Metode de tratare a coliziunilor

O coliziune (uneori un conflict sau o coliziune) este cazul în care o funcție hash pentru diferite blocuri de intrare returnează aceleași coduri hash.

Metode de tratare a coliziunilor în tabelele hash

Majoritatea lucrărilor timpurii care descriu hashingul a fost dedicată metodelor de tratare a coliziunilor în tabelele hash. Pe atunci, funcțiile hash erau folosite pentru a căuta text în fișiere mari. Există două metode principale pentru a trata coliziunile în tabelele hash:

  1. metoda lanțului (metoda legăturii directe);
  2. metoda de adresare deschisă.

Când utilizați metoda de înlănțuire, tabelul hash stochează perechi de „listă de chei conectate” și „cod hash”. Pentru fiecare tastă, funcția hash calculează un cod hash; dacă codul hash a fost obținut anterior (pentru o altă cheie), cheia este adăugată la lista existentă de chei asociate cu codul hash; în caz contrar, o nouă pereche „listă de chei” - „cod hash” este creată, iar cheia este adăugată la lista creată. În general, dacă există N (\displaystyle N) chei și M (\displaystyle M) liste, dimensiunea medie a tabelului hash va fi N M (\displaystyle (\frac (N)(M))). În acest caz, la căutarea printr-un tabel, comparativ cu cazul în care căutarea se efectuează secvenţial, cantitatea medie de muncă va scădea cu aproximativ M (\displaystyle M) o singura data.

Când se utilizează metoda de adresare deschisă, tabelul hash stochează perechi de cod cheie-hash. Pentru fiecare tastă, funcția hash calculează un cod hash; Perechea „cheie” - „cod hash” este stocată în tabel. În acest caz, la căutarea în tabel, în comparație cu cazul în care sunt utilizate listele legate, nu se folosesc legăturile, se efectuează o căutare secvențială pentru perechile „cheie” - „cod hash”, căutarea se oprește după ce este găsită cheia necesară . Secvența în care celulele de tabel sunt scanate se numește secvență de sondă.

Sarea criptografică

Utilizarea funcțiilor hash

Funcțiile hash sunt utilizate pe scară largă în criptografie.

Hash-ul este folosit ca o cheie în multe structuri de date - tabele hash, filtre Bloom și arbori cartezieni.

Funcții hash criptografice

Printre numeroasele funcții hash existente, se obișnuiește să se distingă funcțiile hash puternice din punct de vedere criptografic utilizate în criptografie, deoarece le sunt impuse cerințe suplimentare. Pentru funcția hash H (\displaystyle H) considerat puternic criptografic, trebuie să îndeplinească trei cerințe de bază pe care se bazează majoritatea utilizărilor funcțiilor hash în criptografie:

Aceste cerințe nu sunt independente.

Adesea, atunci când descărcați torrente sau fișierele în sine, descrierea spune ceva de genul „ad33e486d0578a892b8vbd8b19e28754” (de exemplu, în ex.ua), adesea cu prefixul „md5”. Acesta este codul hash - rezultatul pe care funcția hash îl produce după procesarea datelor primite. Tradus din engleză, hash înseamnă confuzie, marijuana, iarbă sau un fel de mâncare din carne și legume tocate mărunt. foarte, foarte greu, s-ar putea spune aproape imposibil. Apoi apare întrebarea: „De ce este nevoie de toate astea, ei dau un ghicitor de neînțeles, care, de asemenea, nu este descifrabil?” Acest lucru va fi discutat în acest articol.

Ce este o funcție hash și cum funcționează?

Această funcție este concepută pentru a converti datele primite de dimensiuni arbitrar de mari într-un rezultat cu lungime fixă. Procesul unei astfel de conversii se numește hashing, iar rezultatul este un cod hash sau hash. Uneori sunt folosite și cuvintele „amprentă” sau „rezumat mesaj”, dar în practică sunt mult mai puțin frecvente. Există o mulțime de algoritmi diferiți pentru cum puteți transforma orice matrice de date într-o anumită secvență de caractere de o anumită lungime. Cel mai utilizat algoritm se numește md5, care a fost dezvoltat încă din 1991. În ciuda faptului că astăzi md5 este oarecum depășit și nu este recomandat pentru utilizare, este încă în uz și adesea în loc de cuvântul „cod hash”, site-urile pur și simplu scriu md5 și indică codul în sine.

De ce este necesară o funcție hash?

Cunoscând rezultatul, este aproape imposibil să se determine datele de intrare, dar aceleași date de intrare dau același rezultat. Prin urmare, funcția hash (numită și funcție de convoluție) este adesea folosită pentru a stoca informații foarte importante, cum ar fi parola, autentificarea, numărul de identificare și alte informații personale. În loc să compare informațiile pe care utilizatorul le introduce cu ceea ce este stocat în baza de date, hashurile lor sunt comparate. Acest lucru asigură că, în cazul unei scurgeri accidentale de informații, nimeni nu va putea folosi datele importante în propriile scopuri. Prin compararea codului hash este, de asemenea, convenabil să verificați dacă fișierele sunt descărcate corect de pe Internet, mai ales dacă au existat întreruperi de conexiune în timpul descărcării.

Funcții hash: ce sunt acestea? T

În funcție de scopul său, o funcție hash poate fi unul din trei tipuri:

1. Funcția de verificare a integrității informațiilor

Când se întâmplă prin rețea, se calculează un hash al pachetului, iar acest rezultat este transmis, de asemenea, împreună cu fișierul. La recepție, codul hash este din nou calculat și comparat cu valoarea primită în rețea. Dacă codul nu se potrivește, atunci aceasta indică erori, iar pachetul deteriorat va fi transmis din nou. Această funcție are o viteză rapidă de calcul, dar un număr mic de valori hash și o stabilitate slabă. Un exemplu de acest tip: CRC32, care are doar 232 de valori diferite.

2. Funcția criptografică

Folosit pentru protecție împotriva (ND). Acestea vă permit să verificați dacă a avut loc coruperea datelor ca urmare a unui accident în timpul transferului de fișiere prin rețea. În acest caz, hash-ul adevărat este disponibil public, iar hash-ul fișierului rezultat poate fi calculat folosind multe programe diferite. Astfel de funcții au o durată de viață lungă și stabilă, iar căutarea coliziunilor (posibile coincidențe ale rezultatelor din diferite date surse) este foarte dificilă. Acestea sunt funcțiile care sunt folosite pentru a stoca parolele (SH1, SH2, MD5) și alte informații valoroase în baza de date.

3. O funcție concepută pentru a crea o structură de date eficientă

Scopul său este o organizare compactă și destul de ordonată a informațiilor într-o structură specială numită tabel hash. Un astfel de tabel vă permite să adăugați informații noi, să ștergeți informații și să căutați datele necesare la viteză foarte mare.

Și așa mai departe.). Alegerea uneia sau alteia funcții hash este determinată de specificul problemei care se rezolvă. Cele mai simple exemple de funcții hash sunt suma de control sau CRC.

În general, nu există o corespondență unu-la-unu între datele sursă și codul hash. Prin urmare, există multe seturi de date care dau aceleași coduri hash - așa-numitele coliziuni. Probabilitatea de coliziuni joacă un rol important în evaluarea „calității” funcțiilor hash.

Sume de control

Necomplicat, extrem de rapid și ușor de implementat în algoritmii hardware utilizați pentru a proteja împotriva distorsiunilor neintenționate, inclusiv a erorilor hardware.

Viteza de calcul este de zeci și sute de ori mai rapidă decât funcțiile hash criptografice și mult mai simplă în implementarea hardware.

Prețul pentru o viteză atât de mare este lipsa puterii criptografice - o oportunitate ușoară de a ajusta mesajul la o sumă precunoscută. De asemenea, sumele de control (tipic: 32 de biți) sunt de obicei mai mici în lățime decât hashurile criptografice (tipic: 128, 160 și 256 de biți), ceea ce înseamnă că pot apărea coliziuni neintenționate.

Cel mai simplu caz al unui astfel de algoritm este împărțirea unui mesaj în cuvinte de 32 sau 16 biți și însumarea acestora, care este folosit, de exemplu, în TCP/IP.

De regulă, un astfel de algoritm este necesar pentru a urmări erorile hardware tipice, cum ar fi câțiva biți eronați consecutivi la o lungime dată. Așa-numita familie de algoritmi „cod de redundanță ciclică” îndeplinește aceste cerințe. Acestea includ, de exemplu, CRC32, utilizat în echipamentele ZIP.

Funcții hash criptografice

Printre multele funcții hash existente, este obișnuit să se distingă funcțiile hash puternice din punct de vedere criptografic utilizate în criptografie. O funcție hash rezistentă la cripto trebuie să aibă în primul rând rezistent la coliziune doua tipuri:

Folosind hashing

Funcțiile hash sunt, de asemenea, folosite în unele structuri de date - tabele hash și arbori cartezieni. Cerințele pentru funcția hash în acest caz sunt diferite:

  • mixabilitate bună a datelor
  • algoritm de calcul rapid

Reconcilierea datelor

În general, această aplicație poate fi descrisă ca verificarea faptului că unele informații sunt identice cu originalul, fără a utiliza originalul. Pentru reconciliere, se folosește valoarea hash a informațiilor care sunt verificate. Există două domenii principale ale acestei aplicații:

Verificarea erorilor

De exemplu, suma de control poate fi transmisă prin canalul de comunicare împreună cu textul principal. La capătul de recepție, suma de control poate fi recalculată și comparată cu valoarea transmisă. Dacă este detectată o discrepanță, aceasta înseamnă că a apărut o distorsiune în timpul transmisiei și poate fi solicitată o repetare.

Un analog de uz casnic al hashingului în acest caz poate fi tehnica atunci când, la mutare, numărul de bagaje este păstrat în memorie. Apoi, pentru a verifica, nu trebuie să vă amintiți despre fiecare valiză, ci doar să le numărați. Un meci va însemna că nicio valiză nu este pierdută. Adică, numărul de bagaje este codul său hash.

Verificarea frazei de acces

În cele mai multe cazuri, frazele de acces nu sunt stocate pe ținte, sunt stocate doar valorile hash ale acestora. Nu este recomandabil să stocați fraze de acces, deoarece în cazul accesului neautorizat la un fișier cu fraze, atacatorul va afla toate frazele de acces și le va putea folosi imediat, iar la stocarea valorilor hash, va învăța doar valorile hash. care nu sunt reversibile în datele originale, în acest caz, expresie de acces. În timpul procedurii de autentificare, valoarea hash a frazei de acces introduse este calculată și comparată cu cea salvată.

Un exemplu în acest caz ar fi GNU/Linux și Microsoft Windows XP. Ele stochează doar valori hash ale frazelor de acces din conturile de utilizator.

Accelerează recuperarea datelor

De exemplu, atunci când câmpurile de text sunt scrise într-o bază de date, codul hash al acestora poate fi calculat și datele pot fi plasate într-o secțiune corespunzătoare acelui cod hash. Apoi, atunci când căutați date, va trebui mai întâi să calculați codul hash al textului și veți ști imediat în ce secțiune trebuie să îl căutați, adică va trebui să căutați nu în întreaga bază de date, ci numai într-o secțiune a acesteia (acest lucru accelerează foarte mult căutarea).

Un analog comun al hashingului în acest caz poate fi plasarea cuvintelor într-un dicționar în ordine alfabetică. Prima literă a unui cuvânt este codul său hash, iar atunci când căutăm, nu ne uităm prin întregul dicționar, ci doar litera dorită.

Lista de algoritmi

  • SHA-2 (SHA-224, SHA-256, SHA-384, SHA-512)
  • RIPEMD-160
  • RIPEMD-320
  • Snefru
  • Tigru (Vârtej
  • Sumă de verificare IP Internet (RFC 1071)

Legături

Fundația Wikimedia. 2010.

Vedeți ce este „Cod hash” în alte dicționare:

    Cod hash- rezultatul unei combinații aritmetice cu toți octeții codului programului sau setului de date. Rezultatul algoritmului de hashing include doar câțiva octeți, iar algoritmul este proiectat în așa fel încât orice modificare a codului programului sau a datelor cu... ... Terminologie oficială

    Cod hash- rezultatul unei combinații aritmetice cu toți octeții codului programului sau setului de date. Rezultatul algoritmului de hashing include doar câțiva octeți, iar algoritmul este proiectat în așa fel încât orice modificare a codului programului sau a datelor cu... ...

    codul de autentificare a mesajului folosind o funcție hash- (ITU T N.235.3, ITU T N.235.1). Subiecte: telecomunicații, concepte de bază RO cod de autentificare a mesajelor hashedHMAC... Ghidul tehnic al traducătorului

    În programare, un tabel hash este o structură de date care implementează interfața matrice asociativă, și anume, vă permite să stocați perechi (cheie, valoare) și să efectuați trei operații: operația de adăugare a unei noi perechi, operația de căutare și operația de ștergere. ... Wikipedia

    MAC (codul de autentificare a mesajelor) este un mijloc de a oferi protecție împotriva imitației în protocoalele de autentificare a mesajelor cu participanți de încredere reciprocă, un set special de caractere care este adăugat la ... ... Wikipedia

    Hashing (uneori hashing, hashing în engleză) este conversia unei matrice de date de intrare de lungime arbitrară într-un șir de biți de ieșire de lungime fixă. Astfel de transformări sunt numite și funcții hash sau funcții de convoluție, iar rezultatele lor... ... Wikipedia

    Acest articol este despre cod. Pentru metoda brainstorming, consultați cardul CRC. Verificarea redundanței ciclice (CRC) este un algoritm pentru calcularea unei sume de control conceput pentru a verifica integritatea... ... Wikipedia

    - (Prescurtare pentru codul de autentificare a mesajelor bazat pe hash, codul hash de autentificare a mesajelor). A avea o modalitate de a verifica integritatea informațiilor transmise sau stocate într-un mediu care nu are încredere este o parte integrantă și necesară a lumii... ... Wikipedia

    MI 2891-2004: Recomandare. GSOEI. Cerințe generale pentru software-ul instrumentelor de măsură- Terminologie MI 2891 2004: Recomandare. GSOEI. Cerințe generale pentru software-ul instrumentelor de măsurare: Informații de măsurare a datelor prezentate într-o formă adecvată pentru transmitere, interpretare sau prelucrare. Definițiile termenului din... ... Dicționar-carte de referință de termeni ai documentației normative și tehnice

Pentru a rezolva problema găsirii elementului necesar printre datele mari, a fost propus un algoritm hashing (hashing- mixing), în care sunt create chei care definesc datele matricei și, pe baza acestora, datele sunt scrise într-un tabel numit masa hash . Tastele de înregistrare sunt determinate cu ajutorul funcției i = h(cheie) , numit funcția hash . Algoritmul hash determină poziția elementului căutat în tabelul hash pe baza valorii cheii sale obținute de funcția hash.

Concept hashing- Aceasta este împărțirea unui set comun (de bază) de chei unice ale elementelor de date în seturi disjunse cu o anumită proprietate.

Să luăm, de exemplu, un dicționar sau o enciclopedie. În acest caz, literele alfabetului pot fi luate ca taste de căutare, adică. Elementul principal al algoritmului de hashing este cheie (cheie). În majoritatea aplicațiilor, cheia oferă o referință indirectă la date.

De fapt, hashingul este o metodă specială de adresare a datelor pentru a găsi rapid informațiile necesare prin chei .

Dacă setul de bază conține N elemente, apoi poate fi împărțit în 2 N diverse subseturi.

Tabel hash și funcții hash

O funcție care mapează cheile elementelor de date la un set de numere întregi (indici într-un tabel - masa hash ), numit funcția de hashing , sau funcția hash :

i = h(cheie);

Unde cheie- cheie decapotabilă, i– indicele tabelului rezultat, i.e. cheia este mapată la un set de numere întregi ( adrese hash ), care sunt ulterior utilizate pentru accesarea datelor.

Cu toate acestea, o funcție hash pentru mai multe valori cheie poate produce aceeași valoare de poziție i in masa. Este apelată situația în care două sau mai multe chei partajează același index (adresă hash). coliziune la hashing.

O funcție hash bună este o funcție care minimizează coliziunile și distribuie datele uniform în tabel, iar o funcție hash perfectă este o funcție care nu generează coliziuni:

Există două metode pentru a rezolva coliziunile de hashing:

– metoda de adresare deschisă cu testare liniară;

– metoda lanțului.

Tabel de hash

Un tabel hash este o matrice obișnuită cu o adresare neobișnuită specificată de o funcție hash.

Structura hash este considerată o generalizare a unui tablou care oferă acces rapid și direct la date prin index.

Există multe scheme de hashing, care diferă în alegerea unei funcții de succes h(cheie), și un algoritm de rezolvare a conflictelor. Eficacitatea rezolvării unei probleme practice reale va depinde în mod semnificativ de strategia aleasă.

Exemple de funcții hash

Funcția hash pe care o alegeți ar trebui să fie ușor de calculat și să creeze cât mai puține coliziuni posibil, de exemplu. ar trebui să distribuie cheile uniform pe indecșii existenți din tabel. Desigur, este imposibil să se determine dacă o anumită funcție hash va distribui corect cheile decât dacă acele chei sunt cunoscute dinainte. Cu toate acestea, deși cheile în sine sunt rareori cunoscute înainte de a alege o funcție hash, unele proprietăți ale acelor chei care afectează distribuția lor sunt de obicei cunoscute. Să ne uităm la cele mai comune metode de specificare a unei funcții hash.

Metoda diviziunii. Datele inițiale sunt o cheie întreagă cheieși dimensiunea mesei m. Rezultatul acestei funcții este restul când această cheie este împărțită la dimensiunea tabelului. Vedere generală a funcției:

int h(cheie int, int m) (

tasta return % m; // Valori

Pentru m= 10 funcția hash returnează cea mai puțin semnificativă cifră a tastei.

Pentru m= 100 funcția hash returnează cele mai puțin semnificative două cifre ale cheii.

Metoda aditivă, în care cheia este un șir de caractere. Într-o funcție hash, un șir este convertit într-un număr întreg prin însumarea tuturor caracterelor și returnând restul după împărțirea la m(de obicei dimensiunea mesei m= 256).

int h(char *key, int m) (

Coliziunile apar în șiruri formate din același set de caractere, de exemplu, abcȘi taxi.

Această metodă poate fi ușor modificată, obținându-se rezultatul prin însumarea doar a primului și ultimului caracter din șirul cheii.

int h(char *key, int m) (

int len ​​​​= strlen(cheie), s = 0;

dacă(len< 2) // Если длина ключа равна 0 или 1,

s = cheie; // cheie return

s = cheie + cheie;

În acest caz, coliziunile vor avea loc numai în linii, de exemplu, abcȘi amc.

Metoda mijlocului pătratului, în care cheia este pătrată (înmulțită cu ea însăși) și mai multe cifre din mijloc ale valorii rezultate sunt folosite ca index.

De exemplu, cheia este un număr întreg de 32 de biți, iar funcția hash returnează media de 10 biți ai pătratului său:

int h (tasta int) (

cheie >>= 11; // Aruncă 11 biți cei mai puțin semnificativi

tasta return % 1024; // Returnează 10 biți cei mai puțin semnificativi

Metoda SAU exclusivă pentru cheile de rând (de obicei dimensiunea tabelului m=256). Această metodă este similară cu metoda aditivă, dar distinge cuvinte similare. Metoda este că operația „SAU exclusivă” este aplicată secvenţial elementelor șirului.

ÎN metoda multiplicativă în plus, se folosește un număr real aleatoriu r din intervalul . Dacă acest produs este înmulțit cu dimensiunea tabelului m, atunci partea întreagă a produsului rezultat va da o valoare în intervalul de la 0 la m–1.

int h(cheie int, int m) (

dublu r = cheie * rnd();

r = r – (int)r; // Selectați partea fracțională

În general, pentru valori mari m indicii generați de funcția hash au o răspândire largă. Mai mult decât atât, teoria matematică afirmă că distribuția este mai uniformă dacă m este un număr prim.

În exemplele luate în considerare, funcția hash i = h(cheie) determină doar poziția din care să caute (sau să plaseze inițial în tabel) o înregistrare cu o cheie cheie. Prin urmare, schema de hashing trebuie să includă algoritm de rezolvare a conflictelor , care determină ordinea acțiunilor dacă poziția i = h(cheie) se dovedește a fi deja ocupată de o înregistrare cu o cheie diferită.

Cele mai bune articole pe această temă