Mis on räsimine?
Avaleht
Artiklid
Mis on räsimine?

Mis on räsimine?

Edasijõudnud
Avaldatud Jul 29, 2019Värskendatud Jan 31, 2023
7m

Räsimine tähendab protsessi, kus muutuva suurusega sisendist genereeritakse fikseeritud suurusega väljund. Selleks kasutatakse räsifunktsioonidena tuntud matemaatilisi valemeid (ehk räsialgoritme). 

Kuigi mitte kõik räsifunktsioonid ei hõlma krüptograafia kasutamist, on nn krüptograafilised räsifunktsioonid krüptovaluutade tuumikuks. Tänu neile suudavad plokiahelad ja muud hajutatud süsteemid saavutada märkimisväärse andmete terviklikkuse ja turvalisuse taseme.

Nii tavapärased kui ka krüptograafilised räsifunktsioonid on deterministlikud. Deterministlik tähendab, et kuni sisend ei muutu, annab räsialgoritm alati sama väljundi (tuntud ka kui kokkuvõte või räsi).

Tavaliselt on krüptovaluutade räsialgoritmid välja töötatud ühesuunaliste funktsioonidena, mis tähendab, et neid ei saa hõlpsasti tagasi arvutada ilma suure aja- ja ressursikuluta. Ehk siis sisendist väljundit on üsna lihtne luua, vastupidises suunas (väljundist sisendit genereerida) aga suhteliselt keeruline. Üldiselt võib öelda, et mida keerulisem on sisendi leidmine, seda turvalisemaks räsialgoritmi peetakse.


Kuidas räsifunktsioon töötab?

Erinevad räsifunktsioonid annavad erineva suurusega väljundeid, kuid iga räsimisalgoritmi võimalikud väljundsuurused on alati konstantsed. Näiteks SHA‑256 algoritm suudab toota ainult 256‑bitise väljundi, samas kui SHA‑1 genereerib ainult 160‑bitise räsi.

Illustreerimiseks käivitame sõnad „Binance" ja „binance" läbi SHA‑256 räsimisalgoritmi (sama, mida kasutatakse bitcoini puhul).

SHA‑256

Sisend

Väljund (256 bitti)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Pane tähele, et väike muudatus (suur- või väiketäht) andis tulemuseks täiesti erineva räsiväärtuse. Kuna me kasutame SHA-256 algoritmi, on väljunditel alati fikseeritud suurus 256 bitti (või 64 tähemärki) – olenemata sisendi suurusest. Samuti pole vahet, mitu korda me kaks sõna läbi algoritmi käivitame, kaks väljundit jäävad konstantseks.

Kui käivitame samad sisendid SHA-1 räsimisalgoritmi kaudu, saame järgmised tulemused:

SHA‑1

Sisend

Väljund (160 bitti)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


Akronüüm SHA tähendab Secure Hash Algorithm ehk turvaline räsialgoritm. See viitab krüptograafiliste räsifunktsioonide komplektile, mis sisaldab SHA-0 ja SHA-1 algoritme koos rühmadega SHA-2 ja SHA-3. SHA-256 on osa SHA-2 rühmast koos SHA-512 ja teiste variantidega. Hetkel peetakse turvalisteks ainult rühmi SHA-2 ja SHA-3.


Miks räsifunktsioonid olulised on?

Tavalistel räsifunktsioonidel on lai valik kasutusvõimalusi, sealhulgas andmebaasiotsingud, suurte failide analüüsid ja andmehaldus. Teisest küljest kasutatakse krüptograafilisi räsifunktsioone laialdaselt teabeturbe rakendustes, nagu sõnumite autentimine ja digitaalsed sõrmejäljed. Bitcoini puhul on krüptograafilised räsifunktsioonid kaevandamise protsessi oluline osa ning need mängivad rolli ka uute aadresside ja võtmete loomisel.

Räsimise tegelik väärtus ilmneb tohutute andmemassiivide töötlemisel. Näiteks saab räsifunktsiooni kaudu käivitada suure faili või andmekogumi ja seejärel kasutada väljundit andmete täpsuse ja terviklikkuse kiireks kontrollimiseks. See on võimalik tänu räsifunktsioonide deterministlikule olemusele: sisendi tulemuseks on alati lihtsustatud, tihendatud väljund (räsi). Sellise tehnika puhul pole vajadust salvestada ja "mäletada" suuri andmemahtusid.

Räsimine on eriti kasulik plokiahela tehnoloogia kontekstis. Bitcoini plokiahelal on mitu räsimist hõlmavat toimingut, enamikku neist kasutatakse kaevandamise käigus. Tegelikult põhinevad peaaegu kõik krüptovaluutaprotokollid räsimisel, mille abil seotakse ja koondatakse tehingute rühmad plokkidesse ning luuakse krüptoühendused iga ploki vahel.


Krüptograafilised räsifunktsioonid

Krüptograafiatehnikaid juurutavat räsifunktsiooni võib nimetada krüptograafiliseks räsifunktsiooniks. Üldiselt nõuab krüptograafilise räsifunktsiooni ründamine lugematul hulgal töömahukate arvutustega katsetamist. Selleks, et keegi saaks krüptograafilise räsifunktsiooni "tagasi arvutada", peab ta katse-eksituse meetodil ära arvama, mis sisend oli, kuni vastava väljundi saamiseni. Samas on ka võimalus, et erinevad sisendid toodavad täpselt sama väljundi ja tekib “kollisioon”.

Tehniliselt peab krüptograafiline räsifunktsioon järgima kolme omadust, et seda saaks pidada tõhusalt turvaliseks. Võime neid nimetada järgmiselt: kollisioonikindlus, pööramatus ja teise liigi kollisioonikindlus.

Enne iga omaduse käsitlemist võtame nende loogika kolme lühikese lausega kokku.

  • Kollisioonikindlus: pole võimalik leida kahte erinevat sisendit, mis toodavad väljunditena sarnase räsi.

  • Pööramatus: räsifunktsiooni "tagasi pööramine" (sisendi leidmine antud väljundist) on võimatu.

  • Teise liigi kollisioonikindlus: pole võimalik leida teist sisendit, millel oleks kollisioon mõne teadaoleva sisendiga.


Kollisioonikindlus

Nagu mainitud, tekib kollisioon siis, kui erinevad sisendid annavad täpselt sama räsi. Seega peetakse räsifunktsiooni kollisioonikindlaks hetkeni, mil keegi kollisiooni leiab. Pane tähele, et iga räsifunktsiooni puhul esineb alati kollisioone, kuna võimalikke sisendeid on lõpmatu arv, samas kui võimalikud väljundid on piiratud.

Räsifunktsioon on kollisioonikindel, kui kollisiooni leidmise võimalus on nii madal, et see nõuaks miljoneid aastaid arvutusi. Ehkki kollisioonivabasid räsifunktsioone pole, on mõned neist piisavalt tugevad, et neid pidada turvalisteks (nt SHA-256).

Erinevate SHA-algoritmide kõrval ei ole SHA-0 ja SHA-1 rühmad enam turvalised, kuna neil on leitud kollisioone. Hetkel peetakse SHA-2 ja SHA-3 rühmi kollisioonikindlateks.


Pööramatus

Pööramatus on seotud funktsioonide ühesuunalisuse mõistega. Räsifunktsiooni peetakse pööramatuks, kui on väga väike tõenäosus, et keegi leiab väljundist arvutamise teel sisendi.

Pane tähele, et see omadus erineb eelmisest, kuna ründaja üritab siin antud väljundi põhjal arvata, mis oli sisend. Kollisioon seevastu tekib siis, kui keegi leiab kaks erinevat sisendit, mis genereerivad sarnase väljundi, kuid pole vahet, milliseid sisendeid kasutati.

Pööramatus on funktsiooni väärtuslik omadus andmete kaitsmisel, kuna sõnumist genereeritud lihtne räsi võib tõestada tema autentsust, ilma et oleks vaja sõnumit avaldada. Praktikas salvestavad ja kasutavad paljud teenusepakkujad ja veebirakendused paroolidest genereeritud räsi, mitte paroole.


Teise liigi kollisioonikindlus

Lihtsustamiseks võime öelda, et see omadus on kusagil kahe eelmise omaduse vahepeal. Teise liigi kollisiooni rünnak toimub siis, kui keegi suudab leida konkreetse sisendi, mis genereerib sarnase väljundi juba mõne teadaoleva sisendiga.

Teisisõnu, teise liigi kollisiooni rünnak on kollisiooni leidmine, kuid kahe juhusliku ja sarnase räsi genereeriva sisendi otsimise asemel otsitakse sisendit, mis genereerib räsi, mille on juba genereerinud mõni muu konkreetne sisend.

Seetõttu on kõik kollisioonikindlad räsifunktsioonid vastupidavad ka teise liigi kollisiooni rünnakutele, kuna viimane tähendab alati kollisiooni tekkimist. Siiski saab sooritada teise liigi kollisiooni rünnaku kollisioonikindla funktsiooni vastu, kuna see eeldab ühe sisendi leidmist ühest väljundist.


Kaevandus

Bitcoini kaevandamisel on palju samme, mis hõlmavad räsifunktsioone, nagu saldode kontrollimine, tehingute sisendite ja väljundite sidumine ning tehingute räsimine plokis, et moodustada Merkle'i puu. Kuid üks peamisi põhjusi, miks Bitcoini plokiahel on turvaline, on asjaolu, et kaevandajad peavad järgmise ploki jaoks sobiva lahenduse leidmiseks läbi viima hulgaliselt räsitoiminguid.

Täpsemalt peab kaevandaja proovima oma kandidaatploki jaoks mitut erinevat sisendit, et luua räsi. Sisuliselt saavad nad oma plokki valideerida ainult siis, kui nad genereerivad väljundräsi, mis algab teatud arvu nullidega. Nullide arv määrab kaevandamise raskuse ja see varieerub vastavalt võrgule antud räsimäärale.

Sel juhul näitab räsimäär, kui palju arvutivõimsust bitcoini kaevandamisesse investeeritakse. Kui võrgu räsimäär suureneb, kohandab bitcoini protokoll automaatselt kaevandamise raskust nii, et keskmine ploki kaevandamiseks kuluv aeg jääks 10 minuti lähedale. Seevastu kui mitu kaevandajat otsustab kaevandamise lõpetada, mille tõttu räsimäär langeb märkimisväärselt, muudetakse kaevandamise raskusastet lihtsamaks (kuni keskmise ploki arvutusaeg jõuab tagasi 10 minutini).

Pane tähele, et kaevandajad ei pea leidma kollisioone; nad peavad genereerima nõuetele vastava räsi (teatud arv nulle räsi alguses). Seega on konkreetse ploki jaoks mitu võimalikku lahendust ja kaevandajad peavad neist leidma vaid ühe – vastavalt kaevandamise raskusastmele. 

Kuna bitcoini kaevandamine on kulumahukas ülesanne, pole kaevandajatel põhjust süsteemi petta, kuna see tooks kaasa märkimisväärse rahalise kahju. Mida rohkem kaevandajaid plokiahelaga liitub, seda suuremaks ja tugevamaks see muutub.


Lõppmärkused

Pole kahtlust, et räsifunktsioonid on arvutiteaduses olulised tööriistad, eriti kui tegemist on tohutute andmemahtudega. Krüptograafiaga kombineeritult võivad räsialgoritmid olla üsna mitmekülgsed, pakkudes turvalisust ja autentimist mitmel erineval viisil. Krüptograafilised räsifunktsioonid on peaaegu kõigi krüptovaluutavõrkude jaoks üliolulised, seega on nende omaduste ja töömehhanismide mõistmine kindlasti kasulik kõigile, kes on huvitatud plokiahela tehnoloogiast.