Mi az a hashelés?
Kezdőlap
Cikkek
Mi az a hashelés?

Mi az a hashelés?

Haladó
Közzétéve Jul 29, 2019Frissítve Jan 31, 2023
7m

A hashelés azt a folyamatot jelenti, amelynek során egy változó méretű bemenetből egy fix méretű kimenetet állítunk elő. Ez a hash függvénynek nevezett matematikai függvények (hash-algoritmusok) használatával történik. 

Bár nem minden hash függvény használ kriptográfiát, az úgynevezett kriptográfiai hash függvények a kriptovaluták fő alkotóelemei. Nekik köszönhetően a blokkláncok és más elosztott rendszerek jelentős adatintegritási és biztonsági szintet képesek elérni.

Mind a hagyományos, mind a kriptográfiai hash függvények determinisztikusak. A determinisztikus jelleg azt jelenti, hogy amíg a bemenet nem változik, a hash algoritmus mindig ugyanazt a kimenetet (más néven kivonat vagy hash) fogja eredményezni.

A kriptovaluták hash-algoritmusait általában egyirányú függvényként tervezik, ami azt jelenti, hogy nagy mennyiségű számítási idő és erőforrás nélkül nem lehet őket könnyen visszafejteni. Más szóval, elég könnyű a kimenetet a bemenetből létrehozni, de fordítva ugyanez viszonylag nehéz lenne (a bemenetet csak a kimenetből létrehozni). Általánosságban elmondható, hogy minél nehezebb kitalálni a bemenetet, annál biztonságosabbnak tekinthető a hash algoritmus.


Hogyan működnek a hash függvények?

A különböző hash függvények különböző méretű kimeneteket eredményeznek, de az egyes hash-algoritmusok lehetséges kimeneti mérete mindig állandó. Az SHA-256 algoritmus például csak 256 bites kimenetet tud előállítani, míg az SHA-1 mindig 160 bites kivonatot generál.

Szemléltetésképpen futtassuk le a „Binance” és „binance” szavakat az SHA-256 hash-algoritmuson (a Bitcoin esetében használt algoritmuson).

SHA-256

Bemenet

Kimenet (256 bit)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Láthatjuk, hogy egy apró változtatás (az első nagybetű) teljesen más hash-értéket eredményezett. Mivel azonban SHA-256-ot használunk, a kimenetek mindig 256 bit (vagy 64 karakter) méretűek lesznek - függetlenül a bemeneti mérettől. Az sem számít, hogy hányszor futtatjuk le a két szót az algoritmuson, a két kimenet ugyanaz marad.

Ezzel szemben, ha ugyanazokat a bemeneteket lefuttatnánk az SHA-1 hash-algoritmuson, a következő eredményeket kapnánk:

SHA-1

Bemenet

Kimenet (160 bit)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


Az SHA a Secure Hash Algorithms (biztonságos hash-algoritmusok) rövidítése. Kriptográfiai hash függvények egy csoportjára utal, amely magában foglalja az SHA-0 és SHA-1 algoritmusokat, valamint az SHA-2 és SHA-3 csoportokat. Az SHA-256 az SHA-2 csoport része, az SHA-512-vel és más változatokkal együtt. Jelenleg csak az SHA-2 és SHA-3 csoportok tekinthetők biztonságosnak.


Miért fontosak?

A hagyományos hash függvények számos felhasználási területtel rendelkeznek, például adatbázisok keresése, nagyméretű fájlok elemzése és adatkezelés. Másrészt a kriptográfiai hash függvényeket széles körben használják az adatbiztonsági alkalmazásokban, például üzenethitelesítésre és digitális ujjlenyomatok készítésére. A Bitcoin esetében a kriptográfiai hash funkciók a bányászati folyamat alapvető részét képezik, és az új címek és kulcsok generálásában is szerepet játszanak.

A hashelés valódi ereje akkor mutatkozik meg, amikor hatalmas mennyiségű információt kezelünk. Például lefuttathatunk egy nagy fájlt vagy adathalmazt egy hash függvényen, majd a kimenetét felhasználva gyorsan ellenőrizhetjük az adatok pontosságát és integritását. Ez a hash függvények determinisztikus jellege miatt lehetséges: a bemenet mindig egy egyszerűsített, tömörített kimenetet (hash) eredményez. Egy ilyen technika kiküszöböli a nagy mennyiségű adat tárolásának és „megjegyzésének” szükségességét.

A hashelés különösen hasznos a blokklánc technológia kontextusában. A Bitcoin blokklánc számos hashelési műveletet foglal magában, ezek többsége a bányászat folyamatán belül történik. Valójában szinte minden kriptovaluta-protokoll a hashelésre támaszkodik a tranzakciók blokkokba foglalásához és összekapcsolásához, valamint az egyes blokkok közötti kriptográfiai kapcsolatok létrehozásához, ami gyakorlatilag egy blokkláncot hoz létre.


Kriptográfiai hash függvények

A kriptográfiai technikát alkalmazó hash függvényt szintén kriptográfiai hash függvényként lehet definiálni. Általánosságban elmondható, hogy egy kriptográfiai hash függvény feltöréséhez végtelen számú találgatásra van szükség. Ahhoz, hogy valaki „visszafejtsen” egy kriptográfiai hash-függvényt, ki kell találnia, hogy mi volt a bemenet, azáltal, hogy addig találgat, amíg meg nem kapja a megfelelő kimenetet. Azonban az is előfordulhat, hogy a különböző bemenetek pontosan ugyanazt a kimenetet eredményezik, ebben az esetben „ütközés” következik be.

Technikailag egy kriptográfiai hash függvénynek három tulajdonsággal kell rendelkeznie ahhoz, hogy ténylegesen biztonságosnak lehessen tekinteni. Ezeket ütközési ellenállásnak, egyirányúságnak és gyenge ütközésállóságnak nevezhetjük.

Mielőtt megvitatnánk az egyes tulajdonságokat, foglaljuk össze a logikájukat három rövid mondatban.

  • Ütközési ellenállás: lehetetlen két olyan különböző bemenetet találni, amelyek ugyanazt a hash-t eredményezik kimenetként.

  • Egyirányúság: lehetetlen a hash függvény „visszafejtése” (megtalálni az adott kimenet bemenetét).

  • Gyenge ütközésállóság: nem lehetséges olyan második bemenetet találni, amely ütközik egy megadott bemenettel.


Ütközési ellenállás (collision resistance)

Mint említettük, ütközés akkor történik, ha különböző bemenetek pontosan ugyanazt a hash-t eredményezik. Így egy hash függvény mindaddig ütközésállónak tekinthető, amíg valaki nem talál ütközést. Fontos tudni, hogy a hash függvények esetében mindig lesznek ütközések, mivel végtelen számú lehetséges bemenet van, azonban a lehetséges kimenetek száma véges.

Más szóval egy hash függvény akkor ütközésbiztos, ha az ütközés megtalálásának lehetősége olyan alacsony, hogy az több millió évnyi számítást igényelne. Így bár nincsenek ütközésbiztos hash függvények, néhány elég erős ahhoz, hogy ellenállónak lehessen tekinteni (pl. SHA-256).

A különböző SHA-algoritmusok közül az SHA-0 és SHA-1 csoportok már nem biztonságosak, mivel ütközéseket találtak bennük. Jelenleg az SHA-2 és az SHA-3 csoportok tekinthetők ütközésállónak.


Egyirányúság (preimage resistance)

Az egyirányúság tulajdonsága az egyirányú függvények fogalmához kapcsolódik. Egy hash függvény akkor tekinthető egyirányúnak, ha nagyon kicsi a valószínűsége annak, hogy valaki megtalálja azt a bemenetet, amely egy adott kimenetet generált.

Fontos tudni, hogy ez a tulajdonság különbözik az előzőtől, mivel itt a támadó megpróbálja kitalálni, hogy mi volt a bemenet egy adott kimenet alapján. Ütközésről viszont akkor beszélünk, ha valaki két különböző bemenetet talál, amelyek ugyanazt a kimenetet adják, de nem számít, hogy melyik bemenetet használták.

Az egyirányúság tulajdonság azért fontos az adatvédelem szempontjából, mert egy üzenet egyszerű hashelésével bizonyítani lehet annak hitelességét anélkül, hogy az információt nyilvánosságra kellene hozni. A gyakorlatban sok szolgáltató és webes alkalmazás a jelszavakból generált hasheket tárolja és használja ahelyett, hogy a jelszavakat egyszerű szövegként tárolná.


Gyenge ütközésállóság (second-preimage resistance)

Az egyszerűség kedvéért mondhatjuk, hogy a gyenge ütközésállóság valahol a másik két tulajdonság között helyezkedik el. Second-preimage támadásról akkor beszélünk, amikor valaki képes megtalálni egy adott bemenetet, amely ugyanazt a kimenetet generálja, mint egy másik bemenet, amelyet már ismer.

Más szóval, a second-preimage támadás az ütközés megtalálását jelenti, de ahelyett, hogy két olyan véletlenszerű bemenetet keresnének, amelyek ugyanazt a hash-t generálják, olyan bemenetet keresnek, amely ugyanazt a hash-t generálja, amelyet egy másik konkrét bemenet generált.

Ezért minden olyan hash függvény, amely ellenáll az ütközéseknek, ellenáll a second-preimage támadásoknak is, mivel ez utóbbiak mindig ütközést jelentenek. Egy ütközésálló függvényt ellen is végre lehet hajtani second preimage támadásokat, mivel ez azt jelenti, hogy egyetlen kimenetből egyetlen bemenetet kell találni.


Bányászat

A Bitcoin bányászat számos olyan lépésből áll, amelyek hash függvényeket használnak, mint például az egyenlegek ellenőrzése, a tranzakciók bemeneteinek és kimeneteinek összekapcsolása, valamint a blokkon belüli tranzakciók hashelése egy Merkle-fa kialakításához. A Bitcoin blokklánc biztonsága részben annak köszönhető, hogy a bányászoknak számtalan hashing műveletet kell végrehajtaniuk ahhoz, hogy végül érvényes megoldást találjanak a következő blokkhoz.

Pontosabban, a bányásznak több különböző bemenetet kell kipróbálnia, amikor hash értéket hoz létre a kijelölt blokkhoz. Lényegében csak akkor tudják validálni a blokkjukat, ha olyan kimeneti hash-t generálnak, amely egy megadott számú nullával kezdődik. A nullák száma határozza meg a bányászati nehézséget, és ez a hálózatra fordított hashráta függvényében változik.

Ebben az esetben a hashráta azt jelzi, hogy mennyi számítógépes teljesítményt fektetnek be a Bitcoin bányászatba. Ha a hálózat hashrátája növekszik, a Bitcoin protokoll automatikusan úgy módosítja a bányászati nehézséget, hogy a blokkok bányászatához szükséges átlagos idő közel 10 perc maradjon. Ezzel szemben, ha több bányász is úgy dönt, hogy abbahagyja a bányászatot, aminek következtében a hashráta jelentősen csökken, a bányászati nehézséget módosítják, megkönnyítve ezzel a bányászatot (amíg az átlagos blokkidő vissza nem áll 10 percre).

A bányászoknak nem kell ütközéseket keresniük, mivel többféle hash-t is létrehozhatnak érvényes kimenetként (bizonyos számú nullával kezdve). Tehát egy adott blokkhoz több lehetséges megoldás is létezik, és a bányászoknak csak egyet kell megtalálniuk közülük - a bányászati nehézség által meghatározott küszöbértéknek megfelelően. 

Mivel a Bitcoin bányászat költséges feladat, a bányászoknak nincs okuk arra, hogy kijátsszák a rendszert, mivel ez jelentős pénzügyi veszteséggel járna. Minél több bányász csatlakozik egy blokklánchoz, az annál nagyobb és erősebb lesz.


Záró gondolatok

Kétségtelen, hogy a hash függvények nélkülözhetetlen eszközök az informatikában, különösen, ha nagy mennyiségű adat kezeléséről van szó. Kriptográfiával kombinálva a hash-algoritmusok igen sokoldalúak lehetnek, és sokféle módon kínálnak biztonságot és hitelesítést. A kriptográfiai hash függvények szinte minden kriptovaluta-hálózat számára létfontosságúak, így tulajdonságaik és működési mechanizmusaik megértése mindenképpen hasznos a blokklánc technológia iránt érdeklődők számára.