Hashing se referă la procesul de generare a ieșirilor de dimensiune fixă din intrări de dimensiune variabilă. Acest lucru se face folosind formule 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 pot atinge niveluri semnificative de integritate și securitate a datelor.
Atât funcțiile hash normale, cât și cele criptografice sunt deterministe. Determinismul înseamnă că atâta timp cât datele de intrare nu se modifică, algoritmul de hashing va produce întotdeauna același rezultat (cunoscut și sub numele de digest sau hash).
Algoritmii de hashing pentru criptomonede sunt de obicei proiectați ca funcții unidirecționale, ceea ce înseamnă că nu pot fi inversați fără mult timp și resurse de calcul. Cu alte cuvinte, este destul de ușor să generați o ieșire dintr-o intrare, dar relativ dificil să mergeți în direcția inversă (generați o intrare doar dintr-o ieșire). În general, cu cât este mai dificil să găsești 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 ale fiecărui 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ă trecem cuvintele „Binance” și „binance” prin algoritmul de hashing SHA-256 (cel folosit în Bitcoin).
Rețineți că o ușoară modificare (cazul primei litere) a dus la o valoare complet diferită a funcției hash. 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 intrării. De asemenea, nu contează de câte ori rulăm cele două cuvinte prin algoritm, cele două ieșiri vor rămâne constante.
Și dacă trecem aceleași intrări prin algoritmul de hashing SHA-1, obținem următoarele rezultate:
Este interesant faptul că abrevierea SHA înseamnă Secure Hash Algorithms (algoritmi de criptare sigură). Este un set de funcții hash criptografice care includ algoritmi SHA-0 și SHA-1, precum și grupuri de SHA-2 și SHA-3. SHA-256 face parte din familia SHA-2, împreună cu SHA-512 și alte variante. În prezent, numai grupurile SHA-2 și SHA-3 sunt considerate sigure.
Care este importanța acestei tehnologii?
Funcțiile hash convenționale au o gamă largă de utilizări, inclusiv căutări în baze de date, analiza fișierelor 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 integrantă a procesului de minerit și joacă, de asemenea, un rol în generarea de noi adrese și chei.
Puterea reală a hashingului este dezvăluită atunci când lucrați cu cantități uriașe de informații. De exemplu, puteți rula un fișier mare sau un set de date printr-o funcție hash și apoi să utilizați ieșirile sale pentru a verifica rapid acuratețea și integritatea datelor. Acest lucru este posibil datorită naturii deterministe a funcțiilor hash: intrarea are întotdeauna ca rezultat o ieșire simplificată, comprimată (hash). Această metodă elimină nevoia de a stoca și „memora” volume mari de date.
Hashing-ul este deosebit de util în contextul tehnologiei blockchain. Blockchain-ul Bitcoin are mai multe operațiuni legate de hashing, dintre care majoritatea sunt efectuate în procesul de minerit. De fapt, aproape toate protocoalele criptomonede se bazează pe hashing pentru a lega și combina grupuri de tranzacții în blocuri și pentru a crea legături criptografice între fiecare bloc, creând astfel un blockchain.
Funcții hash criptografice
Din nou, o funcție hash care utilizează tehnici criptografice poate fi definită ca o funcție hash criptografică. În general, spargerea unei funcții hash criptografice necesită multe încercări de forță brută. Pentru a „desfășura” o funcție hash criptografică, trebuie să selectați intrările prin încercare și eroare până când se obține o ieșire adecvată. Cu toate acestea, există și posibilitatea ca intrări diferite să producă același rezultat, caz în care se va produce o „coliziune”.
Din punct de vedere tehnic, o funcție hash criptografică trebuie să îndeplinească trei proprietăți pentru a fi considerată bine securizată. Le putem descrie ca: rezistență la coliziune și rezistență la atac de găsire a primului și celui de-al doilea prototip.
Înainte de a descrie fiecare proprietate, să rezumam logica lor în trei propoziții scurte.
Rezistență la coliziune: imposibilitatea de a găsi două intrări diferite care produc același hash.
Robustețe în găsirea primei previzualizări: Neputând „inversa” funcția hash (găsirea intrării printr-o ieșire dată).
Rezistența la găsirea unui al doilea exemplu: incapacitatea de a găsi orice a doua intrare care are același hash ca primul.
Rezistenta la coliziune
După cum am menționat mai devreme, o coliziune are loc atunci când intrări diferite produc același hash. Funcția hash este apoi considerată rezistentă la coliziune până când cineva descoperă o astfel de coliziune. Rețineți că coliziunile vor exista întotdeauna pentru oricare dintre funcțiile hash datorită numărului infinit de intrări și numărului finit de ieșiri.
Astfel, o funcție hash este rezistentă la coliziuni atunci când probabilitatea de a detecta o coliziune este atât de mică încât ar dura milioane de ani de calcul. Din acest motiv, chiar dacă nu există funcții hash fără coliziuni, unele sunt atât de puternice încât pot fi considerate stabile (de exemplu, SHA-256).
Printre diferiții algoritmi SHA, grupurile SHA-0 și SHA-1 nu mai sunt sigure deoarece au fost detectate coliziuni. În prezent, doar grupurile SHA-2 și SHA-3 sunt considerate rezistente la coliziuni.
Rezistența la găsirea primului prototip
Această proprietate este strâns legată de conceptul de funcții unilaterale. O funcție hash este considerată robustă pentru găsirea primei previzualizări atâta timp cât există o probabilitate foarte mică ca cineva să găsească intrarea folosind rezultatul generat.
Rețineți că această proprietate este diferită de cea anterioară, deoarece atacatorul trebuie să ghicească intrarea pe baza unei anumite ieșiri. Acest tip de coliziune are loc atunci când cineva găsește două intrări diferite care produc aceeași ieșire, indiferent de intrările utilizate.
Proprietatea proof-of-first-look este valoroasă pentru protecția datelor, deoarece un simplu hash al unui mesaj poate dovedi autenticitatea acestuia fără a fi nevoie de a divulga informații suplimentare. În practică, mulți furnizori de servicii și aplicații web stochează și folosesc hashuri generate din parole în loc să le folosească în format text.
Rezistența la găsirea unui al doilea prototip
Acest tip de stabilitate este undeva între cele două proprietăți anterioare. Atacul găsirii celui de-al doilea prototip constă în găsirea unei intrări specifice cu ajutorul căreia este posibil să se genereze o astfel de ieșire care a fost deja generată folosind o altă intrare care era cunoscută anterior.
Cu alte cuvinte, un atac lookahead implică detectarea coliziunilor, dar în loc să găsească două intrări aleatorii care generează același hash, atacul urmărește să găsească o intrare care să poată reproduce un hash care a fost deja generat de o altă intrare.
Prin urmare, orice funcție hash care este rezistentă la ciocniri este, de asemenea, rezistentă la atacul de găsire a celui de-al doilea prim, deoarece acesta din urmă are întotdeauna nevoie de o coliziune. Cu toate acestea, este încă posibil să se efectueze un prim atac de căutare într-o funcție tolerantă la coliziune, deoarece aceasta implică găsirea unei intrări folosind o ieșire.
Minerit
Există mulți pași în mineritul Bitcoin care se fac folosind funcții hash. Aceasta este verificarea soldului, conectarea intrărilor și ieșirilor tranzacțiilor și hashing toate tranzacțiile dintr-un bloc pentru a forma un arbore Merkle. Dar unul dintre principalele motive pentru care blockchain-ul Bitcoin este sigur este că minerii trebuie să efectueze cât mai multe operațiuni de hashing pentru a găsi în cele din urmă soluția corectă pentru următorul bloc.
Un miner trebuie să folosească mai multe intrări diferite atunci când generează un hash pentru blocul său candidat. Se va putea verifica blocul numai dacă ieșirea generată corect sub formă de hash începe cu un anumit număr de zerouri. Numărul de zerouri determină dificultatea extragerii și variază în funcție de hashrate-ul rețelei.
În acest caz, hashrate este o măsură a puterii computerului dvs. pe care o investiți în minerit Bitcoin. Dacă hashrate-ul începe să crească, protocolul Bitcoin va ajusta automat dificultatea de extragere, astfel încât timpul mediu necesar pentru extragerea unui bloc să fie de aproximativ 10 minute. Dacă mai mulți mineri decid să oprească mineritul, ceea ce duce la o scădere semnificativă a hashrate-ului, dificultatea extragerii va fi ajustată pentru a ușura temporar calculul (până când timpul mediu de formare a blocului revine la 10 minute).
Rețineți că minerii nu trebuie să caute coliziuni, deoarece există mai multe hashe-uri pe care le pot genera ca rezultat valid (începând cu un anumit număr de zerouri). Astfel, există mai multe soluții posibile pentru un anumit bloc, iar minerii trebuie să găsească doar una dintre ele - conform unui prag determinat de dificultatea exploatării miniere.
Deoarece mineritul Bitcoin este o sarcină costisitoare, minerii nu au nicio motivație să înșele sistemul, deoarece ar duce la pierderi financiare semnificative. În consecință, cu cât mai mulți mineri se alătură blockchain-ului, cu atât acesta devine mai mare și mai puternic.
Rezultate
Nu există nicio îndoială că funcțiile hash sunt unul dintre principalele instrumente ale informaticii, mai ales atunci când se lucrează cu cantități uriașe de date. Atunci când sunt combinați cu criptografie, algoritmii de hashing pot fi foarte utili, oferind securitate și autentificare într-o varietate de moduri. Prin urmare, funcțiile hash criptografice sunt vitale pentru aproape toate rețelele de criptomonede, iar înțelegerea proprietăților și mecanismelor de lucru ale acestora este cu siguranță utilă pentru oricine este interesat de tehnologia blockchain.

