Fundamentele criptomonedelor: elemente de bază și istorie

A History of Hashing

O funcție hash generică este un tip special de funcție de programare care este utilizată pentru maparea datelor de dimensiuni arbitrare cu datele de o dimensiune fixă. Funcțiile Hash provin dintr-o nevoie de comprima pentru a reduce cantitatea de memorie necesară pentru stocarea fișierelor mari. Cel mai popular caz de utilizare pentru o funcție hash este pentru o altă structură de date specifică numită a masa de hash, care este utilizat pe scară largă pentru căutarea rapidă a datelor. Funcțiile Hash vă ajută să accelerați căutarea unui tabel sau a unei baze de date, prin detectarea oricăror două hași identice.

De asemenea, ajută la reducerea etichetelor pentru fișiere enorme, cum ar fi fișiere mp3, PDF-uri sau imagini, pentru a face mai ușor de lucrat cu aceste tipuri de fișiere destul de mari. Pentru identificarea rapidă, o cerință cheie a funcțiilor hash este ca acestea scoate un șir de lungime fixă ​​de caractere alfanumerice.

În timp ce motivul principal al declanșării unei funcții hash a venit din necesitatea comprimării conținutului, un beneficiu secundar a devenit în scurt timp un element esențial al hashing-ului: identificatori singular-unici. În mod ideal, atunci când hashează mai multe mesaje, niciun mesaj diferit nu ar trebui să returneze același hash. Două mesaje hash diferite care rezultă în același hash de ieșire se numește a coliziune.

Din perspectiva gestionării bazei de date, acest lucru ar însemna că două obiecte diferite ajung să fie stocate în aceeași celulă – nu este bine dacă cineva caută să definească identificatori unici. Dacă luăm în considerare o funcție hash cu intrări infinite (adică putem hash orice șir), putem deduce exact de ce sunt de fapt coliziunile inevitabil.

Principiul porumbelului

În cadrul matematicii criptografice există un concept numit principiul porumbarului care afirmă că dacă încadrăm (n) elemente în (m) spații unde n > m, atunci, prin principiu, există cel puțin un spațiu (m) ocupat de mai mult de două elemente (n).

De exemplu, cinci persoane își verifică hainele într-unul din cele trei cămăși disponibile. Conform principiului porumbelului, deoarece numărul de paltoane depozitate (n) este mai mare decât căsuțele disponibile (m), este garantat că cel puțin un coș deține mai mult decât un singur strat.

De obicei, inginerii software sunt interesați de funcțiile hash cu un domeniu infinit (adică iau ca șiruri de intrare de toate lungimile posibile) și a gama finită. Din nou, urmând principiul porumbelului, deoarece intervalul nostru (n) este mai mic decât domeniul nostru (m), rezultă că la trebuie să existe cel puțin o coliziune. Prin urmare, o funcție de hash eficientă urmărește doar să minimizeze numărul de coliziuni – de ce acest lucru va deveni mai clar într-un moment, dar, deocamdată, să revenim la istoria hashurilor.

În timp ce funcțiile hash provin strict din întreținerea bazei de date & nevoile de management, care au favorizat viteza mai presus de toate, utilitatea lor a evoluat rapid. O ramură specială a funcțiilor hash care au favorizat confidențialitatea, securitatea, & transparența a intrat în curând pe teren; o ramură a funcțiilor de hash care va rămâne în centrul acestui articol: funcții de hash criptografice.

Hashing criptografic

Funcțiile de hash criptografice, așa cum sugerează corect numele, favorizează păstrarea mesajelor absolut neîntrerupte. În timp ce minimizarea coliziunilor este o bună practică pentru alte funcții hash, pentru funcții specific criptografice, minimizarea coliziunilor este o cerinţă. În loc de a maximiza utilitatea pentru o bază de date rapidă sau un scenariu de căutare a tabelelor, funcțiile de hash criptografice sunt construite având în vedere un scenariu contradictoriu: unul în care un întrerupător de cod (cryptoanalyst) încearcă activ să provoace o coliziune. Vom defini acum notațiile funcției hash standard & stabiliți principiile funcției hash în perspectiva criptografiei.

Notare funcție Hash

O funcție hash criptografică generică are două intrări: mesajul pe care urmează să îl comprime sau hash (x) & o cheie publică care reprezintă ieșirea cu lungime fixă ​​a hash-ului nostru în caractere alfanumerice. Rezultatul nostru hash se numește rezumat mesaj sau pur și simplu rezumat (x *). Acesta arată după cum urmează:

H (s, x) = x *

Să trecem peste această notație mergând printr-un exemplu din viața reală hashing un șir folosind o funcție de hașare standard-numită anterior MD5. Să presupunem că vrem să folosim MD5 pentru a hash un „Hello World!” şir. Știm, de asemenea, că în mod implicit MD5 produce întotdeauna un șir de 128 de biți (0’s) & 1). Această notație ar arăta după cum urmează:

H (128, x) = ed076287532e86365e841e92bfc50d8c

De fapt, dacă mergeți mai departe & încercați să oferiți funcția hash MD5 „Hello World!” ar trebui să vedeți exact același hash rezultat. Minunat. Acum să trecem la setarea notației pentru o coliziune; pe lângă variabilele anterioare H, s, x, & x * introducem acum un al doilea mesaj (x ’). Numeric, o coliziune are loc atunci când se hashing două mesaje distincte (x & x ’) are ca rezultat exact același rezumat al mesajului (x *):

Dacă H (128, x) = H (128, x ’), se spune că funcția noastră de hash (H) are o coliziune la x & X’.

Acum am setat notația pentru standardul curent distinctiv al criptografiei funcției hash; dacă un adversar poate provoca în mod fezabil (vorbitor de calcul) o coliziune, o funcție hash nu mai este considerată practic sigură.

Închiderea gândurilor până data viitoare

Ultima definiție matematică este locul în care trăiește fascinantul catch-22 pentru funcționalitatea hash funcțională. Funcțiile Hash provin dintr-o nevoie de comprimare & scoate date uniforme standardizate pentru comoditate de stocare, ceea ce înseamnă că scuipă șiruri pseudorandom ale unui lungime fixă. Cu toate acestea, pentru a crea un complet rezistent la coliziune funcție hash, fiecare mesaj (x) ar trebui să aibă o ieșire hash a aceeași lungime ca și intrarea. Fără hashuri cu o lungime fixă, ne pierdem capacitatea de a le utiliza ca o structură convenabilă de date, totuși, prin atribuirea unei lungimi fixe, ne redăm funcția hash nu complet fără coliziuni.

PS – Sunt sigur că unii dintre voi cookie-urile inteligente au observat că în exemplul nostru MD5 am notat o funcție hash care returnează un șir de lungime 128, totuși „Hello World!” hash a returnat un 32 șir de caractere alfanumerice. Revino data viitoare & vom aprofunda funcțiile hash pentru a explica de unde a apărut această diferență.

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me
Like this post? Please share to your friends:
map