A kriptográfiai hash függvények a kivonatoló függvények külön osztálya , amelyek bizonyos tulajdonságokkal rendelkeznek, amelyek alkalmassá teszik őket a kriptográfiában való használatra .
Általános esetben a hash függvény felépítése egy iteratív szekvenciális sémán alapul. Az algoritmus magja egy tömörítési függvény , amely k bemenetet n kimeneti bitre konvertál , ahol n a hash függvény hossza, k pedig tetszőleges n -nél nagyobb szám . Ebben az esetben a tömörítési függvénynek meg kell felelnie a kriptográfiai erősség minden feltételének .
A bemeneti adatfolyam ( k − n ) bites blokkokra van felosztva . Az algoritmus egy n bites ideiglenes változót használ, melynek kezdeti értéke valamilyen jól ismert szám. Minden következő adatblokk kombinálva van a zsugorító függvény kimeneti értékével az előző iterációnál. A hash függvény értéke az utolsó iteráció kimeneti n bitje. A hash függvény kimeneti értékének minden bitje a teljes bemeneti adatfolyamtól és a kezdeti értéktől függ. Így lavinahatás érhető el .
Ha egy iteratív séma alapján hash függvényeket tervezünk, akkor a bemeneti adatfolyam méretével van probléma. A bemeneti adatfolyam méretének ( k-n ) többszörösének kell lennie . Általános szabály, hogy az algoritmus elindítása előtt az adatokat valamilyen előre ismert módon bővítik.
Az egymenetes algoritmusok mellett léteznek többmenetes algoritmusok, amelyekben a lavinahatás tovább fokozódik. Ebben az esetben az adatokat először megismétlik, majd a kívánt méretre bővítik.
A szimmetrikus blokk titkosítási algoritmus használható tömörítési függvényként . A nagyobb biztonság érdekében kulcsként használhatja a kivonatolásra szánt adatblokkot ebben az iterációban, és bemenetként az előző tömörítési függvény eredményét. Ekkor az utolsó iteráció eredménye lesz az algoritmus kimenete. Ilyen esetben a hash függvény biztonsága az alkalmazott algoritmus biztonságán alapul.
Általában egy hash függvény felépítésénél egy bonyolultabb rendszert használnak. A szimmetrikus blokk-titkosítási algoritmus általánosított sémája az ábrán látható. 2.
Így 64 opciót kapunk a kontrakciós függvény felépítésére. A legtöbbjük vagy triviális, vagy nem biztonságos. Az alábbiakban felsoroljuk a négy legbiztonságosabb sémát minden típusú támadáshoz.
A blokk algoritmusok alapján tervezett hash függvények fő hátránya az alacsony sebesség. A szükséges kriptográfiai erősség a bemeneti adatokon végzett kisebb számú művelettel is elérhető. Vannak gyorsabb kivonatolási algoritmusok, amelyeket saját maga tervezett, a semmiből, a kriptográfiai erősség követelményei alapján. Ezek közül a leggyakoribb az MD5 , SHA-1 , SHA-2 .
A kriptográfiai hash függvények követelményei a következők:
1. Első előkép keresési ellenállása : Adott egy hash , nehéz lehet olyan üzenetet találni , amely . Ez a tulajdonság az egyirányú függvény fogalmához kapcsolódik . Azok a funkciók, amelyek nem rendelkeznek ezzel a tulajdonsággal, sebezhetőek az első preimage támadásokkal szemben .
2. Ellenállás a második előkép keresésével szemben : adott üzenet esetén nehéznek kell lennie egy másik üzenetet találni (nem egyenlő a -val ), hogy . Ezt a tulajdonságot néha gyenge ütközésállóságnak is nevezik. Azok a funkciók, amelyek nem rendelkeznek ezzel a tulajdonsággal, ki vannak téve a második előkép-keresési támadásoknak.
3. Ütközésekkel szembeni ellenállás
A hash függvény ütközése egy értékpár és ′, ′, amelyre . Mivel a lehetséges nyílt szövegek száma nagyobb, mint a konvolúció lehetséges értékeinek száma, akkor néhány konvolúcióhoz sok előkép létezik, és ezért a hash függvények ütközései szükségszerűen léteznek. Legyen például a hash előkép hossza 6 bit, a konvolúció hossza pedig 4 bit. Ekkor a különböző hajtások száma , a hash előképek száma pedig , azaz 4-szer több, ami azt jelenti, hogy az összes hajtásból legalább egy 4 előképnek felel meg.
A hash függvény ütközésekkel szembeni ellenállása azt jelenti, hogy nincs hatékony polinomiális algoritmus az ütközések megtalálására.
Ezek a tulajdonságok nem függetlenek:
A kriptográfia számára fontos, hogy a hash értékek sokat változzanak az argumentum legkisebb változásával ( lavinahatás ). A hash érték nem szivároghat ki információt még az argumentum egyes bitjeiről sem.
A modern orosz GOST R 34.11-2012 (Stribog) szabvány kidolgozásakor a következő követelményeket fogalmazták meg a kriptográfiai hash függvényekre:
4. Álvéletlenség : Nehéz lehet megkülönböztetni a hash-alapú pszeudo-véletlenszám-generátort a véletlenszám-generátortól, például átmegy a szokásos véletlenszerűségi teszteken .
A hash függvény biztonságát valamilyen matematikai probléma összetettsége biztosíthatja, feltéve, hogy bizonyíték van arra, hogy a követelmények megsértését célzó támadások éppoly nehézkesek, mint e probléma megoldása. [egy]
Egy kriptográfiai hash függvény bizonyíthatóan ütközésbiztos, ha az ütközések megtalálásának problémája polinomiális időben közvetíthető egy polinomidőben megoldhatatlannak tekintett feladatból . Más szóval, ha az algoritmus lehetővé tenné a polinomiális időben történő ütközések megtalálásának problémáját, ha létezik olyan redukáló algoritmus , amely polinomiális időben is működik, akkor az utóbbi lehetővé tenné, hogy az algoritmus polinomiális időben oldja meg a problémát , ami ellentmond annak összetettségének. , ami azt jelenti, hogy az ütközések megtalálásának problémája nem egyszerűbb, mint a feladat .
Az első és második előkép keresésével szembeni bizonyítható biztonságot hasonlóképpen határozzuk meg.
A második előkép keresésével szembeni ellenállás az ütközésekkel szembeni bizonyított ellenállásból következik, ezért a gyakorlatban néha csak az első előkép megtalálásával szembeni ellenállás és az ütközésekkel szembeni ellenállás igazolódik elméletileg. [2]
Néhány olyan probléma, amelyek polinomiális időben megoldhatatlanok, és amelyek felhasználhatók ilyen függvények létrehozására:
A komplexitás elméleti garanciái mellett a bizonyítékokon alapuló megközelítésnek jelentős hátrányai is vannak:
A SWIFFT egy példa egy hash függvényre, amely valamelyest megkerüli a leírt biztonsági problémát. Kimutatható, hogy minden olyan algoritmushoz, amely időben valószínőséggel megtöri a SWIFFT-et, létezik olyan algoritmus, amely a legrosszabb esetben is idıben megold egy bizonyos matematikai problémát a és függvényében . [négy]
Az ideális kriptográfiai hash függvény egy kriptográfiai hash függvény, amelynek öt alapvető tulajdonsága van:
Így egy ideális kriptográfiai hash függvénynek, amelynek hossza n (vagyis a kimenet n bit), legalább műveletekre van szükség az előkép kiszámításához.
A támadó a következő módon keres egy előképet egy ideális hash függvényhez: van egy h száma, és meg kell találnia m-t úgy, hogy H(m) = h. Ha ez egy ideális hash függvény, akkor a támadó csak végig tudja menni az összes lehetséges M-en, és ellenőrizni tudja, hogy ebből az üzenetből mennyivel egyenlő a hash függvény. A számítás eredménye, ha m-t teljesen iteráljuk, valójában egy véletlen szám. Ha a h szám 0-tól ig terjedő tartományban van , akkor átlagosan a támadó iterációkat fog tölteni a kívánt h keresésével. Így az előkép kiszámítása feleannyi iterációt vesz igénybe, mint ideális esetben.
Marad a második előkép számítása . Az ütközések keresése során a pontszám , és ez nem teljesen pontos eredmény. Ez az értékelés az úgynevezett " Születésnapi Paradoxon " értékeléséből származik.
Ha egy támadó programot akar írni az ütközések megtalálására, akkor az lenne az optimális, ha először beszerezne magának egy szótárt az ütközésekről. Ennek megfelelően a következő üzenetből kiszámítja a hash függvényt, és ellenőrzi, hogy ez a hash függvény a következő üzenethez tartozik-e vagy sem. Ha igen, akkor a rendszer megtalálja az ütközést, majd az eredeti üzenet a megadott hash kóddal megtalálható a szótárban. Ha nem, akkor feltölti a szótárt. A gyakorlatban ez a módszer nem valósul meg, mert nem lenne elég memória egy ilyen szótárhoz.
A születésnapi támadás a kriptoanalízisben a születésnapi paradoxonon alapuló hash függvény ütközésészlelési módszerének elnevezése. A paradoxon lényege, hogy egy 23 fős vagy több fős csoportban a születésnapok (nap és hónap) egybeesésének valószínűsége legalább két fő esetében meghaladja az 50%-ot. Például, ha egy osztályban 23 vagy több diák van, akkor valószínűbb, hogy valamelyik osztálytárs születésnapja ugyanarra a napra esik, mint hogy mindenkinek meglegyen a maga egyedi születésnapja.
Tekintsük ezt a hatást és szerepét a blokklánc-kivonatolási folyamat példáján. Ez a tulajdonság azt jelenti, hogy ha kis változtatásokat végzünk a bemeneti karakterláncon, akkor a hash-ek (vagyis a kriptográfiai függvény kimenete) drasztikusan különböznek egymástól. Vizsgáljuk meg ezt a tulajdonságot egy egyszerű példán. Vegyük például az MD családból származó hash függvény eredményét - MD5. A bevitelnél olyan értékeket adunk meg, amelyek csak az első karakterek esetében különböznek egymástól - a karakterláncok szinte azonosak. A hash-eik (a hash függvény eredménye) azonban eltérőek.
Példa az MD5 titkosítási algoritmus működésére | |
Bemenet | Kimenet |
bitcoin | 0xCD5B1E4947E304476C788CD474FB579A |
bitcoin | 0xD023EC040F79F1A9B2AC960B43785089 |
A jó hash függvények "Magas entrópia " tulajdonsággal rendelkeznek. Ez azt jelenti, hogy az adattömbök hash-ei a kivonatolási folyamat során a rendszerben maximálisan eloszlanak, azaz információ értelemben nagy entrópiával rendelkezzenek. Mint tudják, az entrópia az információ értelmében egy bizonyos rendszer bizonytalanságának mértéke, különösen egy szimbólum megjelenésének kiszámíthatatlansága.
Tehát vegyük például az egyenletet , ahol egy karakterlánc és egy karakterlánc összefűzése , és egy kriptográfiai hash függvény. Ha az érték magas entrópiaindexszel rendelkezik, akkor szinte lehetetlen olyan értéket találni, amely kielégíti az egyenletet.
A "nagy entrópia" kifejezés a hash függvényekkel összefüggésben azt az állapotot jelenti, amelyben a lehetséges opciók olyan széles skálájából választanak ki egy értéket, hogy a véletlenszerű kiválasztással történő kitalálásnak nincs esélye a sikerre. Például egy 1 és 10 közötti számnak alacsony az entrópiája, míg az 1 és 1 közötti számoknak, fordítva, magas az entrópiája.
A mai napig a hash-függvények alkalmazásainak túlnyomó többségét az MD5 , SHA-1 , SHA-256 algoritmusok „átvették” , Oroszországban pedig a GOST R 34.11-2012 (Stribog) . Természetesen sok más, kevésbé ismert vagy csak szűk közösségekben elterjedt algoritmus létezik (például RIPEMD , TIGER , Panama stb.), azonban ezek az algoritmusok nem annyira elterjedtek. Az alábbiakban az MD4 hash függvényeinek elemzése látható , amely az MD5 elődje volt, valamint az SHA hash függvényt.
Típusú | Leírás |
---|---|
MD4 | A leggyorsabb, 32 bites gépekre optimalizálva az MD funkciók családjából.
A Massachusettsi Egyetem professzora, Ronald Rivest által 1990-ben kifejlesztett hash függvény, amelyet először az RFC 1186-ban írtak le. Három, egyenként 16 lépésből álló hurkot tartalmaz. 1993-ban leírták az MD4 feltörő algoritmust, így ma már nem ajánlott valós alkalmazásokhoz használni ezt a funkciót. |
MD5 | Az MD-funkciók családjából a leggyakoribb. Hasonló az MD4-hez, de a biztonsági fejlesztések révén 33%-kal lassabb, mint az MD4. Négy, egyenként 16 lépésből álló ciklust tartalmaz. Adatintegritás-ellenőrzést biztosít.
Az első sikeres kísérletek ennek a hash-függvénynek a feltörésére 1993-ig nyúlnak vissza: Bert den Boer és Anton Bossilaris kutatók kimutatták, hogy az algoritmusban lehetségesek pszeudoütközések. 1996-ban Hans Dobbertin megmutatta az ütközések lehetőségét, és elméletileg leírta a hackelési algoritmust. 2004. augusztus 24-én négy független kutató - Wang Xiaoyun, Feng Dengguo, Lai Xuejia és Yu Hongbo - olyan algoritmus-sebezhetőséget fedezett fel, amely lehetővé teszi az ütközések megtalálását analitikai módszerrel, többé-kevésbé elfogadható időn belül. 2005-ben Vlastimil Klima kiadott egy algoritmust az ütközések néhány órán belüli észlelésére. 2006. március 18-án egy kutató közzétett egy algoritmust, amely egy perc alatt találja meg az ütközéseket, amit később "alagútnak" neveztek. A mai napig az MD5 nem ajánlott valós alkalmazásokhoz. |
SHA-1
(Biztonságos Hash 1. algoritmus) |
1993-ban az NSA a NIST - szel együttműködve kifejlesztette a Secure Hash Algorithm (jelenleg SHA-0 néven ismert) (a FIPS PUB 180-ban megjelent) biztonságos kivonatolási szabványt. Az NSA azonban hamarosan visszavonta ezt a verziót egy felfedezett hibára hivatkozva, amelyet soha nem hoztak nyilvánosságra. És lecserélték egy átdolgozott változatra, amelyet 1995-ben tettek közzé a FIPS PUB 180-1-ben. Ez a verzió az úgynevezett SHA-1 .
Később, az 1998-as CRYPTO konferencián két francia kutató bemutatta az SHA-0 algoritmus elleni támadást, amely nem működött az SHA-1 algoritmuson. Ez egy hiba lehetett, amelyet az NSA fedezett fel. Az SHA-1 160 bites értéket hoz létre, amelyet üzenetkivonatnak is neveznek. Négy szakaszt tartalmaz. Mind az MD5, mind az SHA-1 az MD4 továbbfejlesztett kiterjesztései. Különbségek:
|
SHA-2 | Titkosító algoritmusok családja – hash függvények, beleértve az SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/256 és SHA-512/224 algoritmusokat.
2003-ban Gilbert és Handschuh tanulmányt végzett az SHA-2-vel kapcsolatban , de nem találtak sebezhetőséget. 2008 márciusában azonban Somitra Kumar Sanadiya és Palash Sarkar indiai kutatók közzétették az SHA-256 és SHA-512 22 iterációja során talált ütközéseket. Ugyanezen év szeptemberében bemutattak egy módszert ütközések létrehozására az SHA-2 csonka változataihoz (21 iteráció). Tanulmányok kimutatták [8] , hogy az SHA-2 algoritmusok 2-3-szor lassabban működnek, mint az MD5 , SHA-1 hash algoritmusok . |
SHA-256 | Külön kiemelkedik az SHA-256 algoritmus, amelyet bitcoin és más kriptovaluták hash-algoritmusaiban használnak. Ahogy a kriptográfiai hash függvény neve is sugallja, a kimeneti hash 256 bit hosszú, a megfelelő entrópia 1-től 2-ig terjedő értékek halmazaként definiálható 256 hatványáig - hatalmas számú érték, ami feltörést okoz. és a visszafejtés egy rendkívül időigényes folyamat, amely szekvenciális felsoroláson alapul. |
SHA-3 ( Keccak) | Az SHA-3 hash függvény (más néven Keccak) egy változó bitfüggvény, amelyet Joan Dymen vezette szerzőcsoport fejlesztett ki . 2012. október 2-án Keccak lett az US National Institute of Standards and Technology által rendezett kriptográfiai algoritmusok versenyének győztese [9] . 2015. augusztus 5-én a függvényalgoritmust jóváhagyták és FIPS 202 [10] [11] szabványként tették közzé . Az SHA-3 függvényalgoritmus a kriptográfiai szivacs elvén épül fel . |
Annak érdekében, hogy megbizonyosodjon arról, hogy az üzenetet egy adott feladó küldte, az üzenettel együtt egy úgynevezett elektronikus aláírást is továbbítanak. A címzett ellenőrzi, hogy az elektronikus aláírás valóban az adott üzenethez tartozik-e.
Tekintettel arra, hogy a titkosítás nyilvános kulccsal történő alkalmazása (aláírás, aláírások ellenőrzése stb.) nagyon lassú folyamat, sőt, ha a teljes üzenetet aláírja, akkor ennek az aláírásnak a mérete összemérhető lesz az üzenet méretével. üzenetet, ne írja alá az üzenetet, és egy hash funkciót az üzenetből. Ezután a címzett az aláírás visszafejtésekor egy hash függvényt kap. Ezután összehasonlítja a kapott üzenetből származó hash függvényt és a visszafejtés eredményeként kapott hash függvényt. Tekintettel arra, hogy a hash függvény fix hosszúságú, kisebb, mint maga az üzenet. Ez lehetővé teszi a digitális aláírás gyors kiszámítását. Ennek az aláírásnak a mérete kicsi lesz az üzenet méretéhez képest.
A legtöbb esetben a jelmondatok nem tárolódnak a célpontokon, csak a hash értékeik kerülnek tárolásra. Nem tanácsos jelmondatokat tárolni, mert ha egy frázisokat tartalmazó fájlhoz illetéktelen hozzáfér a támadó, akkor az összes jelmondatot ismeri és azonnal fel tudja használni, a hash értékek tárolásakor pedig csak a hash értékeket tanulja meg amelyek nem visszafordíthatók az eredeti adatokra, ebben az esetben - jelmondattá. A hitelesítési eljárás során a rendszer kiszámítja a beírt jelszó hash értékét, és összehasonlítja a tárolt jelmondattal.
Ebben az esetben például a GNU/Linux és a Microsoft Windows XP . Csak a felhasználói fiókokból származó jelmondatok hash értékeit tárolják .
Ez a rendszer magában foglalja az üzenet továbbítását egy biztonságos csatornán keresztül, vagyis egy olyan csatornán, amelyről a kriptoanalitikus nem tudja elfogni az üzeneteket vagy elküldeni a sajátját. Ellenkező esetben elfoghatja a jelszót, és további illegális hitelesítésre használhatja fel. Megvédheti magát az ilyen támadásoktól a kihívás-válasz módszerrel .
Hagyja, hogy egy név nevű kliens hitelesítsen egy jelmondattal, átadja a kiszolgálónak. A szerver tárolja a H hash értéket ( pass , R 2 ) , ahol R 2 egy pszeudovéletlen, előre kiválasztott szám. A kliens kérést küld ( név , R 1 ), ahol R 1 egy álvéletlen, minden alkalommal új számot. Válaszul a szerver elküldi az R 2 értéket . A kliens kiszámítja a H hash értéket ( R 1 , H ( pass , R 2 )) és elküldi a szervernek. A szerver kiszámolja a H értéket is ( R 1 , H ( pass , R 2 )) és összeveti a kapott értékkel. Ha az értékek egyeznek, a hitelesítés helyes.
Ilyen helyzetben a jelszót nem tárolják nyíltan a szerveren, és a kriptoanalizátor a kliens és a szerver közötti összes üzenet elfogása után sem tudja visszaállítani a jelszót, és a továbbított hash értéke minden alkalommal más.
A bitcoin fizetési rendszer tranzakciói , amelyek egy bizonyos adattömbként jelennek meg, blokkokba vannak egyesítve (a továbbiakban az összes blokk összességét blokkláncnak nevezzük ), és egy hash algoritmuson mennek keresztül, azaz a mező adatait a bemenetre táplálják. egy kriptográfiai hash függvény. Minden tranzakció jelzi, hogy az összegeket honnan terhelik, és hová kerülnek. A címzett megadásához a nyilvános kulcsát (egy egyedi azonosítót a bitcoin hálózatban) használják. Ahhoz, hogy a címzett a kapott pénzt a bitcoin protokollon belül felhasználhassa (saját pénztárcája - Wallet értékesítését kizárjuk), új tranzakciót kell létrehoznia, amely átveszi a devizát az előzőből, és átirányítja egy másik címre a nyilvános kulcs. Ennek megfelelően az új tranzakció a bitcoin hálózat többi felhasználójának tranzakcióival együtt egy új blokkba kerül. Így nő a blokkok száma a blokkláncban. Azonban minden tranzakciót jóvá kell hagyni – a rendszernek konszenzusra kell jutnia. Ennek többféle módja is van, de a Bitcoin a Proof-of-Work (PoW) elvét használja. A tranzakció elfogadása után valódinak minősül, és a kriptovaluta egyik pénztárcából a másikba kerül.
A Bitcoin rendszer egy decentralizált rendszer, dedikált blokkgeneráló központok nélkül. Minden résztvevő átveheti a naplózásra váró tranzakciók halmazát, és új blokkot alkothat. Sőt, az olyan rendszerekben, mint a BitCoin, egy ilyen résztvevő (bányász) bónuszt is kap bizonyos összeg vagy jutalék formájában a blokkba elfogadott tranzakciók után.
De a decentralizált rendszerekben nem lehet egyszerűen egy blokkot felvenni és alkotni. A rendszernek konszenzusra kell jutnia, azaz jóváhagyást kell kapnia. Ennek többféle módja is van, de a Bitcoin a Proof-of-Work (PoW) elvét használja. Az ilyen rendszerek megbízhatósága éppen azon alapszik, hogy egy új blokkot nem lehet gyorsabban (átlagosan) kialakítani, mint egy adott idő alatt. Például 10 perc alatt (BitCoin).
terület | Leírás | méret |
---|---|---|
Varázslat sz | érték mindig 0xD9B4BEF9 | 4 bájt |
blokk mérete | a blokk végéig következő bájtok száma | 4 bájt |
blokkfejléc | 6 elemből áll | 80 bájt |
tranzakciószámláló | pozitív egész szám | 1-4 bájt |
tranzakciók | a <nem üres> tranzakciók listája | <Tranzakciószámláló> - sok tranzakció |
terület | Célja | Frissítés, amikor… | méret |
---|---|---|---|
változat | blokk verziószám | Frissítette a szoftvert, és az új verziót adott meg | négy |
hashPrevBlock | Az előző blokkfejléc 256 bites hash-je | Új blokk érkezik | 32 |
hashMerkelRoot | 256 bites hash a blokkban lévő összes tranzakció alapján | A tranzakciót elfogadják | 32 |
Idő | aktuális időbélyeg másodpercben 1970-01-01 T00:00 UTC óta | Néhány másodpercenként | négy |
bitek | jelenlegi cél kompakt formátumban | A nehézség be van állítva | négy |
semmi | 32 bites szám (0-val kezdődik) | A hash elfáradt (növekmény) | négy |
A nehézség a nulla bitek száma, amelyek a célszám elején lesznek .
A cél az a szám, amelynél a blokk kivonatának kisebbnek kell lennie ahhoz, hogy a blokk érvényesnek minősüljön. A cél vagy pontosabban a nehézség a hálózat aktuális teljesítményétől függ, és a nehézséget n (BitCoin hálózatban - 2016) blokkonként meg kell változtatni, hogy 10 percenként egy blokk keletkezzen. Tegyük fel, hogy 2016-os blokkok jönnek létre a hálózatban, és minden kliens ellenőrzi, hogy mennyi ideig hozták létre az egyes blokkokat. Ha ez az idő hosszabb a számítottnál, azaz több mint 10 perc, akkor a bonyolultság csökken.
A nonce egy véletlen szám, amelyet a bányászoknak fel kell venniük ahhoz, hogy blokkot készítsenek.
Amint fentebb említettük, a Bitcoin-tranzakciók egy csoportja az adatblokk összekapcsolt blokkjaként jelenik meg - blokklánc . Maga a blokklánc eszközstruktúrája linkelt listaként jelenik meg mutatókkal.
Minden blokkhoz tartozik egy mutató, amely az előző adatblokkra mutató hivatkozást tartalmaz. Így ahhoz, hogy n + 1 blokkra menjünk, követni kell az előző n blokk mutatóit. Ennek megfelelően a mutatók csak azután adják hozzá egy új blokk címét, miután az eredeti adatblokk átment a bitcoin hash algoritmuson – ez lehetővé teszi, hogy a kapcsolat megbízható és biztonságos legyen.
Egy ilyen rendszert kisebb valószínűséggel támadnak meg behatolók, akik megpróbálhatják megváltoztatni a blokklánc adatait, például, hogy saját tranzakciójukat hajtsák végre a kiválasztott címen. Mint már említettük, a blokklánc egyes blokkjainak hash-je nem csak a saját, hanem az előző blokk tartalmától is függ. Így az eredeti blokkban lévő adatok bármilyen változása a többi blokk adatainak változását vonja maga után. Ez garantálja a blokklánc megváltoztathatatlanságát és a rendszer biztonságát, hiszen rendkívül nehéz „hamisítani” a blokkláncot. Azonban meg kell jegyezni, hogy minden blokk hash-jének egyedinek kell lennie, különben a támadási kísérletek nyomon követése lehetetlenné válik.
Merkle faMinden tranzakció hexadecimális formátumú karakterláncként jelenik meg, amelyek kivonatolásra kerülnek a tranzakcióazonosítók megszerzéséhez. Ezek alapján épül fel egy blokk hash, amelyet a következő blokk figyelembe vesz, biztosítva a változhatatlanságot és a koherenciát. Egyetlen blokk hash értéket gyűjt a Merkle fa segítségével .
A Merkle-fa egy teljes bináris fa , amelynek levélcsúcsai a tranzakciókból származó hash -eket , a belső csúcsok pedig a gyermekcsúcsokban hozzáadott értékekből származó hash-eket, a fa gyökércsomópontja (Top Hash) pedig a teljes adathalmaz.
A Merkle-fa felépítése a bitcoin blokklánchoz a következő:
- a tranzakcióból származó hash függvény eredménye
Ugyanakkor például az L1 tranzakció elköltésekor a blokkból eltávolítható az arra vonatkozó adat, és csak a hash marad meg a blokk ellenőrzésére. Amikor az L1 és L2 tranzakciót elköltjük, akkor a blokkellenőrzés céljából törölhetjük a hash-eiket (Hash 0-0 és Hash 0-1), így csak a Hash 0 marad meg. Abban a pillanatban, amikor az összes tranzakciót felhasználják, akkor az összes hash törölhető, kivéve a Top Hash-t, mivel ezekre a tranzakciókra vonatkozó információkra már nincs szükség.
Így ahhoz, hogy egy új láncblokkhoz hash-t kapjunk, minden korábbi tranzakciós hash-t figyelembe kell venni. Az előző blokkok legalább egyikének kivonatának megváltoztatása a következő blokk hash-ének megváltozásához vezet, illetve az ilyen tranzakció azonnal érvénytelennek minősíthető.
A bányászat a munkabizonyítás elvével kapcsolatos konszenzus megtalálásának folyamata – jóváhagyás beszerzése egy új blokk létrehozásához. Valójában a BitCoin hálózatban ez a blokkból származó hash megszámlálására és a célszámmal való összehasonlítására vonatkozik : ha a hash kisebb, mint a cél , akkor új blokkot generál, ellenkező esetben nem.
A bányászok biztosítják a blokklánc folyamatos növekedését. Ehhez hatalmas számítási teljesítményt használnak - minden bányász hozzájárul a teljes bitcoin hashrate (számítási teljesítmény) növeléséhez. Az egyes bányászok bitcoin-kivonatolási műveleteinek részesedése a teljes hashrate-mutatótól függ – minél magasabb a hálózat teljes hashrate-je, annál több számítási munkát kell elvégeznie a bányásznak rövidebb idő alatt, hogy fenntartsa bányászati jutalma átlagos nagyságát.
A nonce karakterláncba való behelyettesítésének folyamata addig folytatódik, amíg meg nem találjuk a helyes megoldást. Néha a próbálkozások száma elérheti a milliókat is. Az a bányász, aki először találja meg a megfelelő megoldást, hozzáadja a blokkot a blokklánchoz, és ezért jutalmat kap.
A nonce kiválasztási folyamat a brute force módszeren alapul . Ezért a bányászati berendezés folyamatosan véletlenszerű karakterláncokat generál, amíg meg nem találja a kívánt nonce értéket .
Példák az SHA-256 hash funkciót használó kriptovalutákra a titkosításhozAz SHA-256 a kriptovaluták klasszikus algoritmusa: erre épül a fő kriptovaluta, a Bitcoin. Ennek megfelelően ezt az algoritmust használják a Bitcoin fork-okban is: Bitcoin Cash-ben, Bitcoin SV-ben. Ugyanakkor a Bitcoin Goldban a bányászok egy kriptofunkciót használnak - az Equihash-t
Rajtuk kívül az SHA-256-ot a következőkben is használják:
Ezenkívül az SHA-256 algoritmust szubrutinként használják a Litecoin kriptovalutában, és a bányászat fő algoritmusa a Scrypt.
Hash függvények | |
---|---|
Általános rendeltetésű | |
Kriptográfia | |
Kulcsgenerálási funkciók | |
Csekkszám ( összehasonlítás ) | |
Hashes |
|