Mi az a hash függvény?

A Bitcoin működését segítő matematikai függvény.

A hash függvények (hasítófüggvények) olyan matematikai függvények, amelyeket a kriptográfia, az információbiztonság és a pénzügyek területén használnak. Egyedülálló tulajdonságaiknak és megbízhatóságuknak köszönhetően használatosak a Bitcoin biztonsági és adatvédelmi funkcióiban, valamint a Bitcoin bányászati műveletekben.

A hash függvény egy bemeneti adatból egy kimenetet (úgynevezett „hash”-t vagy „hasító értéket”) állít elő. A bemeneti adat tetszőleges hosszúságú lehet, míg a kimeneti adat mindig adott hosszúságú, jellemzően számok és betűk sorozata.

Olyan, mint egy gép, amelynél a nyersanyag a bemenet, és egy szabványos méretű késztermék a kimenet.

A sajátos módok, ahogyan a hash függvények a bemenetekből hasheket állítanak elő, valamint a bemenetek és a hashek közötti egyedi kapcsolatok széleskörű használatukhoz vezettek számos iparágban. Íme a hash függvények fontos jellemzőinek áttekintése:

  1. Változó bemenet, fix kimenet: Függetlenül a bemenet hosszától – legyen az egyetlen karakter vagy egy egész könyv – a keletkező hash mindig ugyanolyan hosszúságú lesz. A kimeneteknek ez az egységessége kulcsfontosságú a tárolás és a feldolgozás kiszámíthatósága szempontjából.
  2. Determinisztikus: Egy adott bemenet esetén a hash függvény mindig pontosan ugyanazt a hasht fogja előállítani, függetlenül attól, hogy hányszor ismétli meg a műveletet. Ez az ismételhetőség hasznos ellenőrzési célokra, mivel a bemenet bármilyen megváltoztatása, például egyetlen betű megváltoztatása egy könyvben, más hash értéket fog eredményezni.
  3. Egyirányú: A hash függvényeket egyirányúnak tervezték, ami azt jelenti, hogy egy bemenetből hasht lehet előállítani, de a hashből nem lehet kideríteni, hogy mi volt a bemenet. Míg a hash előállítása a bemenetből gyors és egyszerű, addig a fordított folyamat, azaz a bemenet előállítása a hashből, minden körülmények között lehetetlen.
  4. A hash megjósolhatatlansága: Lehetetlen megjósolni egy adott bemenet hash értékét anélkül, hogy azt ténylegesen feldolgoznánk a hash függvényen keresztül. Ez a kiszámíthatatlanság egy biztonsági jellemző, mivel megakadályozza, hogy potenciális támadók pusztán a hash alapján következtessenek a bemenetre.
  5. Ütközésmentes: Két különböző bemenet nem eredményezheti ugyanazt a hasht, ami „ütközés” néven ismert.
  6. Létrehozás vs. ellenőrzés aszimmetria: Mivel a hash megjósolhatatlan, egy speciális jellemzőkkel rendelkező hash létrehozása (például egy olyan hash, amely 5 nullával kezdődik: „00000”) számításigényes és időigényes. Ennek egyetlen ismert módja a próbálgatás, vagyis a hash függvény újra és újra történő futtatása új bemenetekkel. Viszont ha már találtunk egy olyan bemenetet, amely a kívánt hasht eredményezi, gyorsan és egyszerűen ellenőrizhető, hogy a bemenet megfelel-e a kimenetnek. Ez az aszimmetria egy adott hash előállítása és érvényességének ellenőrzése között kifejezetten fontos az olyan rendszerekben, amelyek a proof-of-work-ön alapulnak (Bitcoin bányászat).

Gondolhatsz erre úgy, mint egy városi könyvtárra, amely minden egyes könyvére olyan egyedi bélyegzőt nyom, amely maradéktalanul lefedi az adott könyv összes információját. Bár egyes könyvek rövid történetek (kis bemeneti adatok), mások pedig hosszú regények (nagy bemeneti adatok), a bélyegző (azaz a hash) mindig pontosan ugyanolyan méretű. Egy könyv azonos példányai mindig azonos bélyegzőkkel rendelkeznek, de ha egy könyvben akár egyetlen betűt is megváltoztatunk, a bélyegző teljesen megváltozik. Ráadásul szuper egyszerű ellenőrizni, hogy egy könyv és egy bélyegző egyezik-e, de ha csupán egy bélyegző áll rendelkezésünkre, semmilyen módon nem tudjuk megállapítani, hogy az melyik könyvhöz tartozik.

Hogy alkalmazza a Bitcoin a hash függvényeket?

A Bitcoin hash függvényeket használ műveletei során, többek között a Bitcoin bányászathoz, az információ integritásához és Bitcoin címek generálásához.

A Bitcoinban leginkább használt hash függvény az úgynevezett „SHA-256” (más néven Secure Hash Algorithm 256-bit). Ez a hash függvény egy iparági szabványfüggvény, amelyet széles körben használnak a banki, információbiztonsági és kommunikációs hálózatokban. Minden valószínűség szerint, ha a böngésző 🔒 ikonjára kattintasz egy weboldal URL címe mellett, és megnézed a weboldal biztonsági tanúsítványát, azt fogod látni, hogy SHA-256-ot használ a kapcsolat biztosításához.

Az alábbiakban a hash függvények Bitcoin általi alkalmazásának különböző módjait ismertetjük.

Bitcoin bányászat

A Bitcoin bányászat egy olyan folyamat, amely kettős célt szolgál: a tranzakciók feldolgozását és új bitcoin kibocsátását. A bányászat során a számítógépek (ún. bányászok) számítási teljesítményüket hashek előállítására használják fel, hogy versenyezzenek a következő tranzakcióblokk Bitcoin blokkláncához való hozzáadásáért, és ezért új bitcoint kapjanak jutalomként. Ez egy olyan rendszer, amely demokratizálja a Bitcoin tranzakciók nyilvántartásának frissítését, anélkül, hogy központi hatóságra támaszkodna.

Hogyan működik?

A bányászok a Bitcoin szoftver által megadott bemeneti adatok alapján megpróbálnak egy meghatározott tulajdonságokkal rendelkező hasht létrehozni (bizonyos számú nullával az elején). A bemenet fix és változó információkat is tartalmaz:

  1. Fix információ: A Bitcoin szoftver verziója, az előző blokk hashe, a legutóbbi blokk tranzakcióinak hashe (ún. „Merkle-gyökér”), egy időbélyeg, és a Bitcoin szoftver által beállított szükséges nehézségi szint.
  2. Változó információ: Egy „nonce”-nak nevezett szám.

Mivel a hashek megjósolhatatlanok, a kívánt hash csak próbálgatással, a hash függvény újbóli, új nonce változóval történő futtatásával állítható elő. Az első bányász, aki érvényes hasht állít elő, közzéteszi a találatát, és elnyeri a jogot, hogy a következő blokkot a blokklánchoz adja. Bár nehéz a kívánt hasht előállítani, triviálisan könnyű ellenőrizni, hogy a hash érvényes-e, tehát az igazolás egyszerű folyamat.

A Bitcoin szoftver automatikusan beállítja ennek a hashelési folyamatnak a nehézségét azáltal, hogy megváltoztatja a cél hash-hez szükséges kezdő nullák számát, annak érdekében, hogy átlagosan 10 percenként új blokk kerüljön hozzáadásra.

A blokklánc integritásának biztosítása

A hash függvények biztosítják az egyes blokkokon belüli adatok integritását. A blokklánc minden egyes blokkja tartalmazza az előző blokk hashét, amely szintén tartalmazza az előző blokk hashét, és így tovább, blokkok töretlen „láncát” (vagyis blokkláncot) alkotva egészen a Bitcoin kezdetéig visszamenőleg.

Bármely korábbi blokkban lévő információ megváltoztatása gyökeresen megváltoztatná annak hashét, és ennek következtében minden következő blokk hashét is, mivel ezek mind egymás utáni hasheken keresztül kapcsolódnak egymáshoz.

Ez lényegében lehetetlenné teszi a blokkok adatainak meghamisítását, mivel bármilyen változtatás könnyen észlelhető lenne, és a hálózat összes résztvevője azonnal elutasítaná.

A tranzakciók integritásának biztosítása

A hash függvények az egyes blokkokon belüli tranzakciós adatok integritását is hivatottak szolgálni. Ehhez egy „Merkle-fa” nevű adatszerkezetet használnak, amely a hashek strukturálására és szervezésére szolgál.

Íme a tranzakciók Merkle-fákba való beillesztésének alapjai:

  1. Tranzakció hashelés: Egy adott Bitcoin blokkban minden egyes tranzakció hashelésre kerül.
  2. Hash párosítás: Az egyes tranzakciós hasheket ezután párokba rendezik, és egybe hashelik.
  3. Ismételt párosítás: A párosítás és a hashelés folyamata újra és újra megismétlődik, az előző lépésből származó hashek felhasználásával.
  4. Merkle-gyökér létrehozása: Az iteratív folyamat addig folytatódik, amíg egyetlen végső hash marad, az úgynevezett „Merkle-gyökér”, amely a blokk fejlécében tárolódik.

A „Merkle-gyökér” a blokk összes tranzakciós adatának teljes összegzését testesíti meg. Ez egy gyors és helytakarékos módja az adatok összegzésének, és segítségével ellenőrizhető, hogy egy adott tranzakció szerepel-e egy blokkban, anélkül, hogy szükség lenne a blokk összes adatára. Megakadályozhatja a hamisítást is, mivel a tranzakció adatainak bármilyen apró módosítása teljesen megváltoztatja az adott tranzakció hashét és az azt követő összes hasht, beleértve a Merkle-gyökeret is.

A privát és a nyilvános kulcsok kezelése

A privát kulcs egy titkos, véletlenszerűen generált numerikus kód, mely tranzakciók aláírására szolgál, biztosítva az adott Bitcoin címhez tartozó bitcoin tulajdonjogának igazolását és a bitcoin feletti kontrollt. Ez a privát kulcs a nyilvános kulcs előállítása érdekében egy sor kriptográfiai átalakításon megy keresztül, beleértve a hashelést is. Ez a folyamat biztosítja, hogy míg a nyilvános kulcs szabadon megosztható, a bitcoinhoz való hozzáféréshez és a bitcoin átutalásához elengedhetetlenül szükséges privát kulcs egyrészt titokban marad, másrészt a nyilvános információból nem lehet származtatni.

Bitcoin címek létrehozása

A Bitcoin az SHA-256 és a RIPEMD-160 nevű hash függvények kombinációját használja a Bitcoin címek létrehozásához. A felhasználó nyilvános kulcsát – amely a privát kulcsából származik – először SHA-256-tal, majd RIPEMD-160-nal hashelik. Ez a kétlépcsős folyamat – gyakran hibaellenőrzésre szolgáló ellenőrző összeggel kiegészítve – állítja elő a bitcoin küldésére használatos Bitcoin címeket.

Támogasd a fordítást, küldj Lightningon satokat, hogy egyre több Bitcoin anyag elérhető legyen magyarul!