Hashing se referă la procesul de generare a unei ieșiri de dimensiune fixă dintr-o intrare de dimensiune variabilă. Acest lucru se realizează prin utilizarea formulelor matematice cunoscute sub numele de funcții hash (implementate ca algoritmi de hashing).
Deși nu toate funcțiile hash implică utilizarea criptografiei, așa-numitele funcții hash criptografice se află în centrul criptomonedelor. Datorită acestora, blockchain-urile și alte sisteme distribuite sunt capabile să atingă niveluri semnificative de integritate și securitate a datelor.
Atât funcțiile hash convenționale, cât și cele criptografice sunt deterministe. A fi determinist înseamnă că atâta timp cât intrarea nu se modifică, algoritmul de hashing va produce întotdeauna aceeași ieșire (cunoscută și sub numele de digest sau hash).
De obicei, algoritmii de hashing ai criptomonedelor sunt concepuți ca funcții unidirecționale, ceea ce înseamnă că nu pot fi inversați cu ușurință fără cantități mari de timp și resurse de calcul. Cu alte cuvinte, este destul de ușor să creezi ieșirea din intrare, dar relativ dificil să mergi în direcția opusă (pentru a genera intrarea numai din ieșire). În general, cu cât este mai dificil de găsit intrarea, cu atât algoritmul de hashing este considerat a fi mai sigur.
Cum funcționează o funcție hash?
Funcții hash diferite vor produce ieșiri de dimensiuni diferite, dar dimensiunile posibile de ieșire pentru fiecare algoritm de hash sunt întotdeauna constante. De exemplu, algoritmul SHA-256 poate produce numai ieșiri de 256 de biți, în timp ce SHA-1 va genera întotdeauna un rezumat de 160 de biți.
Pentru a ilustra, să rulăm cuvintele „Binance” și „binance” prin algoritmul de hashing SHA-256 (cel folosit în Bitcoin).
Rețineți că o modificare minoră (majusculă a primei litere) a dus la o valoare hash total diferită. Dar, deoarece folosim SHA-256, ieșirile vor avea întotdeauna o dimensiune fixă de 256 de biți (sau 64 de caractere) - indiferent de dimensiunea de intrare. De asemenea, nu contează de câte ori rulăm cele două cuvinte prin algoritm, cele două ieșiri vor rămâne constante.
În schimb, dacă rulăm aceleași intrări prin algoritmul de hashing SHA-1, am avea următoarele rezultate:
În special, acronimul SHA înseamnă Secure Hash Algorithms. Se referă la un set de funcții hash criptografice care includ algoritmii SHA-0 și SHA-1 împreună cu grupurile SHA-2 și SHA-3. SHA-256 face parte din grupul SHA-2, împreună cu SHA-512 și alte variante. În prezent, doar grupurile SHA-2 și SHA-3 sunt considerate sigure.
De ce contează?
Funcțiile hash convenționale au o gamă largă de cazuri de utilizare, inclusiv căutări în baze de date, analize de fișiere mari și gestionarea datelor. Pe de altă parte, funcțiile hash criptografice sunt utilizate pe scară largă în aplicațiile de securitate a informațiilor, cum ar fi autentificarea mesajelor și amprentarea digitală. Când vine vorba de Bitcoin, funcțiile hash criptografice sunt o parte esențială a procesului de minerit și joacă, de asemenea, un rol în generarea de noi adrese și chei.
Adevărata putere a hashingului vine atunci când aveți de-a face cu cantități enorme de informații. De exemplu, se poate rula un fișier mare sau un set de date printr-o funcție hash și apoi se poate folosi rezultatul acestuia pentru a verifica rapid acuratețea și integritatea datelor. Acest lucru este posibil datorită naturii deterministe a funcțiilor hash: intrarea va avea întotdeauna ca rezultat o ieșire simplificată, condensată (hash). O astfel de tehnică elimină nevoia de a stoca și „reține” cantități mari de date.
Hashing-ul este deosebit de util în contextul tehnologiei blockchain. Blockchain-ul Bitcoin are mai multe operațiuni care implică hashing, majoritatea în cadrul procesului de minerit. De fapt, aproape toate protocoalele criptomonede se bazează pe hashing pentru a lega și a condensa grupuri de tranzacții în blocuri și, de asemenea, pentru a produce legături criptografice între fiecare bloc, creând efectiv un blockchain.
Funcții hash criptografice
Din nou, o funcție hash care implementează tehnici criptografice poate fi definită ca o funcție hash criptografică. În general, întreruperea unei funcții hash criptografice necesită o multitudine de încercări de forță brută. Pentru ca o persoană să „întoarcă” o funcție hash criptografică, ar trebui să ghicească care a fost intrarea prin încercare și eroare până când este produsă rezultatul corespunzător. Cu toate acestea, există și posibilitatea ca intrări diferite să producă exact aceeași ieșire, caz în care are loc o „coliziune”.
Din punct de vedere tehnic, o funcție hash criptografică trebuie să urmeze trei proprietăți pentru a fi considerată sigură în mod eficient. Le putem descrie ca rezistență la coliziune, rezistență preimagine și rezistență a doua preimagine.
Înainte de a discuta fiecare proprietate, să rezumam logica lor în trei propoziții scurte.
Rezistență la coliziune: imposibil să găsești două intrări distincte care produc același hash ca ieșire.
Rezistența preimagine: imposibil să „returnați” funcția hash (găsiți intrarea de la o ieșire dată).
Rezistența la a doua preimagine: imposibil să găsești orice a doua intrare care se ciocnește cu o intrare specificată.
Rezistenta la coliziune
După cum am menționat, o coliziune are loc atunci când intrări diferite produc exact același hash. Astfel, o funcție hash este considerată rezistentă la coliziune până în momentul în care cineva găsește o coliziune. Rețineți că coliziunile vor exista întotdeauna pentru orice funcție hash, deoarece intrările posibile sunt infinite, în timp ce ieșirile posibile sunt finite.
Cu alte cuvinte, o funcție hash este rezistentă la coliziuni atunci când posibilitatea de a găsi o coliziune este atât de mică încât ar necesita milioane de ani de calcule. Deci, în ciuda faptului că nu există funcții hash fără coliziuni, unele dintre ele sunt suficient de puternice pentru a fi considerate rezistente (de exemplu, SHA-256).
Printre diferiții algoritmi SHA, grupurile SHA-0 și SHA-1 nu mai sunt sigure deoarece au fost găsite coliziuni. În prezent, grupurile SHA-2 și SHA-3 sunt considerate rezistente la coliziuni.
Rezistenta preimagine
Proprietatea rezistenței preimagine este legată de conceptul de funcții unidirecționale. O funcție hash este considerată rezistentă la preimagine atunci când există o probabilitate foarte mică ca cineva să găsească intrarea care a generat o anumită ieșire.
Rețineți că această proprietate este diferită de cea anterioară, deoarece un atacator ar încerca să ghicească care a fost intrarea uitându-se la o anumită ieșire. O coliziune, pe de altă parte, are loc atunci când cineva găsește două intrări diferite care generează aceeași ieșire, dar nu contează ce intrări au fost utilizate.
Proprietatea de rezistență preimagine este valoroasă pentru protejarea datelor deoarece un simplu hash al unui mesaj poate dovedi autenticitatea acestuia, fără a fi nevoie să dezvăluie informațiile. În practică, mulți furnizori de servicii și aplicații web stochează și folosesc hashuri generate din parole, mai degrabă decât parolele în text simplu.
Rezistență la a doua preimagine
Pentru a simplifica, putem spune că rezistența la a doua preimagine se află undeva între celelalte două proprietăți. Un atac de a doua preimagine are loc atunci când cineva este capabil să găsească o anumită intrare care generează aceeași ieșire a unei alte intrări pe care o cunoaște deja.
Cu alte cuvinte, un atac de a doua preimagine implică găsirea unei coliziuni, dar în loc să caute două intrări aleatorii care generează același hash, ei caută o intrare care generează același hash care a fost generat de o altă intrare specifică.
Prin urmare, orice funcție hash care este rezistentă la coliziuni este, de asemenea, rezistentă la atacurile de a doua preimagine, deoarece acestea din urmă vor implica întotdeauna o coliziune. Cu toate acestea, se poate efectua un atac preimagine asupra unei funcții rezistente la coliziune, deoarece implică găsirea unei singure intrări de la o singură ieșire.
Minerit
Există mulți pași în mineritul Bitcoin care implică funcții hash, cum ar fi verificarea soldurilor, conectarea intrărilor și ieșirilor tranzacțiilor și hashing tranzacțiile într-un bloc pentru a forma un Merkle Tree. Dar unul dintre principalele motive pentru care Bitcoin blockchain este sigur este faptul că minerii trebuie să efectueze o multitudine de operațiuni de hashing pentru a găsi în cele din urmă o soluție validă pentru următorul bloc.
Mai exact, un miner trebuie să încerce mai multe intrări diferite atunci când creează o valoare hash pentru blocul său candidat. În esență, aceștia își vor putea valida blocul numai dacă generează un hash de ieșire care începe cu un anumit număr de zerouri. Numărul de zerouri este cel care determină dificultatea extragerii și variază în funcție de rata de hash dedicată rețelei.
În acest caz, rata hash reprezintă cât de multă putere computer este investită în minerit Bitcoin. Dacă rata de hash a rețelei crește, protocolul Bitcoin va ajusta automat dificultatea de extragere, astfel încât timpul mediu necesar pentru extragerea unui bloc să rămână aproape de 10 minute. În schimb, dacă mai mulți mineri decid să oprească mineritul, determinând o scădere semnificativă a ratei de hash, dificultatea de extragere va fi ajustată, ușurând extragerea (până când timpul mediu de blocare revine la 10 minute).
Rețineți că minerii nu trebuie să găsească coliziuni, deoarece există mai multe hashe-uri pe care le pot genera ca rezultat valid (începând cu un anumit număr de zerouri). Deci există mai multe soluții posibile pentru un anumit bloc, iar minerii trebuie să găsească doar una dintre ele - în funcție de pragul determinat de dificultatea de exploatare.
Deoarece mineritul Bitcoin este o sarcină costisitoare, minerii nu au niciun motiv să înșele sistemul, deoarece ar duce la pierderi financiare semnificative. Cu cât mai mulți mineri se alătură unui blockchain, cu atât acesta devine mai mare și mai puternic.
Gânduri de închidere
Nu există nicio îndoială că funcțiile hash sunt instrumente esențiale în informatică, mai ales atunci când se ocupă cu cantități uriașe de date. Atunci când sunt combinați cu criptografie, algoritmii de hashing pot fi destul de versatili, oferind securitate și autentificare în multe moduri diferite. Ca atare, funcțiile hash criptografice sunt vitale pentru aproape toate rețelele de criptomonede, așa că înțelegerea proprietăților și mecanismelor de lucru ale acestora este cu siguranță utilă pentru oricine este interesat de tehnologia blockchain.

