Hash funkcije – varuhi kripovalut

S povečano prepoznavnostjo nekdaj nepoznanega sveta kriptovalut, se je dvignila tudi debata na temo varnosti te nove, prej nepoznane tehnologije. Po medijih krožijo informacije o »slabi« varnosti tehnologije veriženja blokov in o njenih številnih pomanjkljivostih, ki so plod napačnega razumevanja določenih delov zgodbe. Rop kriptomenjalnice nima na primer prav nič za opraviti z varnostjo same tehnologije. Da pa bi lahko razumeli mehanizme varnosti Bitcoina in ostalih kriptovalut, pa si moramo naprej pogledati nekaj o tako imenovanih hash funkcijah.

Hash funkcije ali manj znano zgoščevalne funkcije so po definiciji matematični algoritmi, ki lahko poljuben dolg niz spremenijo v enoličen niz fiksne dolžine. Zasnovane so kot enosmerne nepovratne funkcije, kar pomeni, da ni bližnjice preko katere bi lahko iz izhoda ugotovili vhod funkcije. Edina možnost, da ugotovimo zvezo med vhodom in izhodom je tako, da enostavno ugibamo – vstavimo niz znakov v vhod funkcije in preverimo, če dobimo željeni izhod. To ponavljamo, dokler ne najdemo prave rešitve. Takemu načinu iskanja rešitve pravimo napad z grobo silo (angl. »Brute-force attack«).

Shema delovanja hash algoritma
Vir slike

Idealna kriptografska hash funkcija ima pet glavnih lastnosti:

  • Je deterministična – isto sporočilo zmeraj proizvede isti rezultat
  •  Je hitra – hitro se da izračunati hash vrednost kateregakoli vhoda (problem hitrosti se pojavi pri obratni smeri)
  • Je nepovratna – neizvidljivo je zgenerirati vhod iz izhoda (hash vrednosti)
  • Je občutljiva – že majhna sprememba v vhodu spremeni hash vrednost izhoda do te mere, da sta dva izhoda popolnoma različna oz. da med njima ni nikakršnih podobnosti ali koleracij
  • Zgleda injektivna – zelo težko je najti dva vhoda z isto hash vrednostjo (v resnici hash funkcije niso injektivne, ampak se le zdijo injektivne – podrobnosti so razložene v nadaljevanju članka.

Občutljivost

Ena izmed pomembnejših značilnosti hash funkcij je ta, da se ob majhni spremembi vhoda, popolnoma spremeni izhod te funkcije. To pomeni, da četudi sta si dva vhoda izjemno podobna, se na primer razlikujeta samo v enem bitu, sta njuna vhoda popolnoma različna. Tako računalnik, ki računa vrednosti hash funkcije, niti ne more vedeti če se približuje iskani vrednosti. Ena izmed pozitivnih lastnosti tega je, da v samem računanju ni bližnjic. Zaradi tega se hash funkcije uporabljajo pri računanju kriptovalutskih PoW (sln. dokaz dela). Nekatere kriptovalute namreč preverjajo legitimnost blokov in transakcij preko dokaza dela, kar pomeni, da zaupajo blokom in verigam v katere je vloženo največ dela in so posledično v skladju z največ ljudmi. Če bi namreč v funkcijah obstajali razpoznavni vzorci in bi se dalo z raznimi postopki skrajšati potek dela, bi bila varnost in legitimnost kriptovalut zmanjšana, saj bi lahko napadalec izkoristil te pomanjkljivost in začel poneverjati transakcije, bloke in nenazadnje celo prepisal celotno verigo blokov. Zaradi narave hash funkcij pa to ni mogoče in so zato popolnoma primerne za kriptovalutski varnostni mehanizem.

Injektivnost in nepovratnost

Standardne kriptografske funkcije kot so (SHA-1, SHA-2 in SHA-3) lahko iz več različnih vhodov zgenerirajo isto izhodno vrednost. Množica izhodov oz. hash vrednosti je namreč tipično manjša od množice vhodov. V tem je razlika med zgoščevanjem in enkriptiranjem, saj je pri enkripciji možna dekripcija, medtem ko pri zgoščevanju obratna operacija ne obstaja. Tako ne moremo vedeti katerega izmed mnogih možnih vhodov smo uporabili za določen izhod. Razlog tiči v različni rabi na področju varnosti. Kriptiranje se uporablja za varen prenos sporočil, medtem ko se zgoščevalne funkcije uporabljajo za digitalne podpise in dokaze dela (angl. Proof Of Work), ki so aplicirani pri kriptovalutah.

Lahko se vprašamo, zakaj potem sploh omenjamo delno injektivnost kot lastnost hash funkcij?

Odgovor leži v velikih številih. Za kriptografske hash funkcije je težko najti že en vhod, ki bi ustvaril želen izhod. Po rojstnodnevnem paradoksu hash funkcije prenehajo obstajati injektivne šele v primeru, ko je število možnih vhodov precej večje od kvadratnega korena števila možnih izhodov.

Če za primer vzamemo 128 bitno hash vrednost (16-bitna hash vrednost z 2128 možnimi izhodi), potem bo pri številu vhodov, mnogo večjem od √2128= 264, postalo zelo verjetno da bo prišlo do trkov oz. do ponovljenih vrednostih. Pri mnogo manjšem številu vhodu, pa postane zelo malo verjetno, da bo prišlo do ponovljenih vrednosti in takrat postane hash funkcija približno injektivna.

Mavrične tabele

Mavrične tabele so eden izmed pristopov, ki se želijo izogniti vsakokratnemu napadu hash funkcij z grobo silo. Če poenostavimo, so mavrične tabele neke baze podatkov, ki vsebujejo gesla in njihove preračunane hash vrednosti. Najbolj pogosto se uporabljajo pri kraji gesel. Ko na računalniku shranimo geslo, v resnici ne shranimo gesla, ampak njegov »prstni odtis«, ki je hash vrednost gesla. Ta varnostni mehanizem zagotavlja, da četudi napadalec pride do datoteke z gesli, bi potreboval res ogromno časa, da bi razvozlal ostala gesla zgolj iz hash vrednosti. Računalnik namreč shranjuje samo hash vrednosti gesel in ko uporabnik znova vnese geslo, se izračuna hash vrednost vnesenega gesla nakar računalnik preveri, če se rezultata ujemata. Napadalec seveda ne more vnesti ukradene hash vrednosti, saj bi se znova preračunal in nastal bi novi hash, ki se ne bi ujemal s prvotnim. Napadalcu tako ne preostane drugega, kot da v hash funkcijo vstavlja vrednosti in preverja, če se ujemajo z ukradenim hashom.

Mavrične tabele mu to nekoliko olajšajo, saj vsebujejo že vnaprej preračunane vrednosti in napadalec tako samo poišče hash vrednost v tabeli. Če ima srečo in ta vrednost v tabeli že obstaja, prebere vhodni podatek, ki se je preračunal v to vrednost. Mavrične tabele bi lahko videli kot nekakšen velikanski slovar. Samo tehnikalije zadaj so še nekoliko bolj zapletene, saj mavrične tabele uporabljajo tako imenovano redukcijsko funkcijo, ki zmanjša vsa možna gesla, jih stisne v verigo in tako omogoči hitrejše iskanje. Podrobnejšo razlago mavričnih tabel pa bom razložil v prihajajočem članku o varnosti gesel.

Človek si hitro zastavi vprašanje če to morda na ogrozi varnosti kriptovalut?

Odgovor je ne. Vhodni podatki so pri transakcijah in blokih tako dolgi in možnih rezultatov je tako veliko, da to enostavno ni mogoče.

Primer:
Kriptovaluta Bitcoin uporablja hash funkcijo SHA-256, ki omogoča 2256. različnih izhodov. Sliši se veliko, a kako veliko število je to v resnici?
2256 je približno 1,15*1077. Za boljšo vizualizacijo, to je toliko kot če bi 4 milijarde osemkrat množili same seboj. Odločimo se, da bomo to število brute-forcali oziroma poiskali rešitev z grobo silo:

  • 4 milijarde – predpostavimo, da imamo računalnik, ki zmore doseči hitrost računanja okoli 4 milijard hashov na sekundo (to pomeni, da lahko v eni sekundi štiri milijardo-krat vstavi vrednost v hash funkcijo in preveri, če je to prava vrednost.)
  • 4 milijarde – zdaj predpostavimo da imamo 4 milijarde takih računalnikov: Google naj bi imel nekaj milijonov serverjev, od tega jih je velika večina manj zmogljivih kot naš imaginarni računalnik. Privzamimo, da so dovolj zmogljivi in da jih imajo okoli 4 milijone. Za 4 milijarde računalnikov potrebujemo torej 1000 Googlov, torej en KiloGoogle.
  • 4 milijarde – na Zemlji živi okoli 7.5 milijard ljudi. Recimo da vsakemu drugemu človeku damo 1000 Googlov oz. en KiloGoogle. Tako bi cela Zemlja imela 4 milijarde * 4 milijarde * 4 milijarde hashov na sekundo.
  • 4 milijarde – v naši Galaksiji je okoli 300 milijard zvezd. Predpostavimo, da ima vsaka taka zvezda v svoji orbiti planet. Vzamemo 1% teh planetov, torej 4 milijarde takih planetov kot so Zemlja, od katerih bi vsak imel toliko hash moči kot naša Zemlja.
  • 4 milijarde – predstavljajmo si zdaj 4 milijarde kopij naše galaksije, od katerih bi vsaka galaksija imela toliko hash moči kot naša.
  • 4 milijarde – 4 milijard sekund je okoli 126 let
  • 4 milijarde – 4 milijarde krat 126 let je okoli 507 milijard let, kar je okoli 37 krat vrednost starosti našega vesolja.

Torej, četudi bi imeli vse zgoraj naštete pogoje, ki so že tako zelo zelo zelo neverjetni, bi imeli zgolj 1 : 4 milijarde možnosti, da bi uganili pravo rešitev.

Zgled opreme za rudarjenje kriptovalut
Vir slike

To je seveda zgolj posplošitev in prezentacija velikosti števil, v resnici SHA-256 ni tako varen algoritem, saj se za reševanje ne uporablja napad z grobo silo, ampak drugačni bolj domiselni pristopi. To so namreč zgolj teoretični izračuni, ki so namenjeni zgolj predstavitvi, kako veliko možnosti omogoča 256-bitni zapis. Bitcoin rudarji na primer ne iščejo točno določenega hasha, ampak iščejo kateregakoli, ki se začne z določenim številom ničel. Če bi iskali točno določen hash, ga najbrž nikoli ne bi našli. Je pa dejstvo, da taki postopki omogočajo izredno varnost, saj zahtevajo ogromno računalniške moči in dela, prav to delo pa ovrednoti legitimnost transakcije in bloka. Če pa bi kdaj v prihodnosti algoritem SHA-256 postal prešibek, bi se Bitcoin skupnost enostavno soglasno odločila za posodobitev protokola in vsi bi začeli rudariti s še močnejšim in odpornejšim algoritmom.

Iz zgoraj naštetih podrobnosti in razlag, lahko kaj hitro ugotovimo, da je bilo pri kriptovalutah zelo dobro poskrbljeno za varnost. Sama tehnologija blockchain pa je izjemno prilagodljiva in ob kakšni varnostni grožnji, bi se lahko njena skupnost enostavno odločila za posodobitev protokola in pravil. V naslednjem članku na temo varnosti, pa vam bom zato predstavil še druge varnostne mehanizme kriptovalut, saj ljudje v kriptosvetu ničesar ne prepustitijo naključju.

Komentarji
Žan Magerl

Žan Magerl

Poleg tega, da je splošno izjemno razgledan, je tudi človek, ki vsaki stvari želi priti do dna, ugotoviti kako kaj deluje, zakaj je takšno kot je in ali bi to lahko izboljšali. To pomeni, da se bo čisto spustil v stvar, ki mu je trenutno padla v oči, in ne bo nehal, dokler ne ugotovi vsega, kar je za ugotoviti o določeni temi.
Verjetno bi ga lahko z eno besedo povzeli kot radovednega.
Žan Magerl

Latest posts by Žan Magerl (see all)

Žan Magerl

Poleg tega, da je splošno izjemno razgledan, je tudi človek, ki vsaki stvari želi priti do dna, ugotoviti kako kaj deluje, zakaj je takšno kot je in ali bi to lahko izboljšali. To pomeni, da se bo čisto spustil v stvar, ki mu je trenutno padla v oči, in ne bo nehal, dokler ne ugotovi vsega, kar je za ugotoviti o določeni temi. Verjetno bi ga lahko z eno besedo povzeli kot radovednega.