Sari la conținut
Tehnologie

Funcția hash în blockchain: cum leagă ea blocurile

Cod și simboluri digitale care ilustrează funcția hash folosită în blockchain

Funcția hash este un algoritm matematic care transformă orice date, de la o singură literă la un fișier de câțiva gigaocteți, într-un șir de lungime fixă, numit amprentă sau hash. În blockchain, funcția hash leagă blocurile între ele și face practic imposibilă modificarea discretă a unei tranzacții vechi.

Ideea pare abstractă, dar o poți compara cu o ștampilă de securitate: dacă schimbi măcar o virgulă din document, ștampila arată complet diferit. Iar din ștampilă nu poți reconstrui documentul. Exact această combinație stă la baza încrederii într-un registru distribuit.

Ce proprietăți are o funcție hash criptografică?

Nu orice funcție care comprimă date merită numele de criptografică. Cele folosite în rețelele de criptomonede trebuie să respecte câteva reguli stricte:

  • Determinism: aceleași date de intrare dau mereu aceeași amprentă, pe orice calculator.
  • Lungime fixă: SHA-256, algoritmul folosit de Bitcoin, produce întotdeauna 256 de biți, adică 64 de caractere hexazecimale, indiferent cât de mare e intrarea.
  • Efectul de avalanșă: o schimbare minimă a intrării modifică aproape toată amprenta.
  • Rezistența la inversare: din amprentă nu poți deduce datele originale decât încercând la întâmplare, ceea ce cere o muncă de calcul uriașă.
  • Rezistența la coliziuni: este nerealist să găsești două intrări diferite cu aceeași amprentă.

Dacă una dintre aceste proprietăți se rupe, algoritmul este considerat compromis și comunitatea îl abandonează. Așa s-a întâmplat, de pildă, cu MD5 și cu SHA-1, folosite odinioară pe scară largă și acum evitate în aplicațiile serioase.

Cum leagă hash-ul blocurile unui blockchain?

Fiecare bloc conține un antet, iar în antet se află, printre altele, hash-ul antetului blocului precedent. Blocul numărul 100 poartă astfel amprenta blocului 99, iar blocul 101 poartă amprenta blocului 100. Rezultă un lanț în care fiecare verigă depinde de toate cele dinaintea ei.

Să presupunem că cineva vrea să schimbe o tranzacție din blocul 50. Conținutul blocului se modifică, deci se modifică și amprenta lui. Blocul 51 conține însă vechea amprentă, așa că nu mai se potrivește. Atacatorul ar trebui să refacă blocul 51, apoi 52 și tot așa până la vârful lanțului, mai repede decât construiește restul rețelei blocuri noi. În practică, cu cât un bloc e mai vechi, cu atât rescrierea lui devine mai costisitoare. De aceea istoricul unei rețele mari este considerat practic imuabil. Mai multe despre acest principiu găsești în explicația bazelor tehnologiei blockchain.

Rolul hash-ului în minerit

Funcția hash nu doar leagă blocurile, ci și face posibilă dovada de lucru. Mineritul înseamnă să cauți o valoare numită nonce, astfel încât hash-ul antetului să fie mai mic decât o țintă stabilită de rețea. Nu există scurtătură: singura metodă este încercarea repetată, de miliarde de ori pe secundă. Când cineva găsește o soluție, orice alt nod o poate verifica dintr-o singură operație.

Această asimetrie, greu de găsit și ușor de verificat, este esențială. Ținta se ajustează periodic ca blocurile să apară cu un ritm aproximativ constant, mecanism pe care îl detaliem în materialul despre ajustarea dificultății în minerit.

Unde mai apare hash-ul în afara blocurilor

Amprentele sunt peste tot într-un ecosistem crypto:

  1. Identificatorul unei tranzacții (TXID) este hash-ul datelor tranzacției.
  2. O adresă de portofel este derivată din cheia publică prin una sau mai multe operații de hash, ceea ce scurtează adresa și adaugă un strat de protecție.
  3. Arborele Merkle dintr-un bloc rezumă toate tranzacțiile într-o singură amprentă.
  4. Fișierele atașate unui contract inteligent pot fi verificate prin hash, fără a fi stocate integral în lanț.

Poți verifica singur principiul, chiar fără cunoștințe de programare: există calculatoare online și comenzi simple în sistemul de operare care afișează SHA-256 pentru un text. Scrie o propoziție, notează amprenta, apoi schimbă o literă și compară rezultatele. Diferența te va convinge mai bine decât orice explicație.

Ce nu face funcția hash

Există câteva neînțelegeri frecvente. Hash-ul nu criptează datele, pentru că nu poate fi desfăcut înapoi, deci nu e o metodă de a ascunde un mesaj pentru a-l citi mai târziu. Nu garantează nici că informația din bloc este adevărată: arată doar că ea nu a fost modificată după ce a fost înregistrată. Dacă o tranzacție falsă a fost introdusă de la început, amprenta o va păzi la fel de bine ca pe una reală.

De asemenea, hash-ul simplu al unei parole scurte poate fi spart prin încercarea tuturor variantelor probabile. De aceea sistemele care protejează parole folosesc algoritmi special concepți să fie lenți și adaugă o valoare aleatoare numită sare.

Întrebări frecvente

Pot fi două texte diferite cu același hash?

Teoretic da, pentru că numărul de amprente posibile este finit, iar numărul de texte posibile este infinit. Practic, pentru SHA-256 nu este cunoscută nicio coliziune și găsirea uneia ar cere resurse de calcul ireale.

De ce are hash-ul mereu aceeași lungime?

Pentru că algoritmul este construit să comprime orice intrare într-un număr fix de biți. Această uniformitate face amprentele ușor de stocat, comparat și inclus în structuri precum antetul unui bloc.

Hash-ul este același lucru cu o semnătură digitală?

Nu. Hash-ul dovedește integritatea datelor, iar semnătura digitală dovedește cine le-a aprobat. În practică ele lucrează împreună: se semnează de obicei amprenta tranzacției, nu tranzacția întreagă.