Što je kriptografska hash funkcija?

Kriptografska hash funkcija je algoritam koji se može pokrenuti na podacima kao što je pojedinac datoteka ili lozinku za proizvodnju vrijednosti koja se zove kontrolni zbroj.

Glavna upotreba kriptografske hash funkcije je provjera autentičnosti podatka. Za dvije se datoteke može pretpostaviti da su identične samo ako su kontrolni zbroji generirani iz svake datoteke, koristeći istu kriptografsku hash funkciju, identični.

Neke najčešće korištene kriptografske hash funkcije uključuju MD5 i SHA-1, iako postoje i mnoge druge.

Kriptografske hash funkcije se često nazivaju "hash funkcije", ali to nije tehnički točno. Hash funkcija je generički pojam koji obuhvaća kriptografske hash funkcije zajedno s drugim vrstama algoritama kao što su cikličke provjere redundancije.

Kriptografske hash funkcije: slučaj upotrebe

Recimo da ste preuzeli najnoviju verziju preglednika Firefox. Iz nekog razloga, morali ste ga preuzeti s web-lokacije koja nije Mozilla. Budući da se ne nalazi na web-lokaciji kojoj ste naučili vjerovati, željeli biste biti sigurni da je instalacijska datoteka koju ste upravo preuzeli potpuno ista kao ona koju nudi Mozilla.

Koristeći kalkulator kontrolnog zbroja, izračunavate kontrolni zbroj koristeći određenu kriptografsku hash funkciju, kao što je SHA-2, a zatim ga uspoređujete s onom objavljenom na Mozillinoj stranici. Ako su jednaki, možete biti razumno sigurni da je preuzimanje koje imate ono koje vam je Mozilla namijenila.

Fotografija formula i slika na ploči
Yagi Studio / Digital Vision / Getty Images

Mogu li se kriptografske hash funkcije obrnuti?

Kriptografske hash funkcije osmišljene su kako bi spriječile mogućnost vraćanja kontrolnih zbroja koje stvaraju natrag na izvorne tekstove. Međutim, iako ih je praktički nemoguće poništiti, nije 100 posto zajamčeno da će zaštititi podatke.

Hakeri mogu koristiti duginu tablicu kako bi otkrili običan tekst kontrolnog zbroja. Rainbow tablice su rječnici koji navode tisuće, milijune ili čak milijarde kontrolnih zbroja uz njihovu odgovarajuću vrijednost običnog teksta.

Iako ovo tehnički ne preokreće kriptografski hash algoritam, moglo bi i biti, s obzirom da je to tako jednostavno za napraviti. U stvarnosti, budući da nijedna tablica duginih boja ne može navesti svaki mogući kontrolni zbroj koji postoji, obično su od pomoći samo za jednostavne fraze kao što su slabe lozinke.

Evo pojednostavljene verzije dugine tablice koja pokazuje kako bi se radilo kada se koristi SHA-1 kriptografska hash funkcija:

Primjer Rainbow Table
Običan tekst SHA-1 kontrolni zbroj
12345 8cb2237d0679ca88db6464eac60da96345513964
lozinka 1 e38ad214943daad1d64c102faec29de4afe9da3d
volim svog psa a25fb3505406c9ac761c8428692fbf5d5ddf1316
Jenny400 7d5eb0173008fe55275d12e9629eef8bdb408c1f
dallas1984 c1ebe6d80f4c7c087ad29d2c0dc3e059fc919da2

Haker mora znati koji je kriptografski hash algoritam korišten za generiranje kontrolnih zbroja kako bi shvatio vrijednosti.

Za dodatnu zaštitu, neke web stranice koje pohranjuju korisničke lozinke izvršiti dodatne funkcije na kriptografskom hash algoritmu nakon što je vrijednost generirana, ali prije nego što je pohranjena. Ovaj proces proizvodi novu vrijednost koju samo web poslužitelj razumije i koja se ne podudara s izvornim kontrolnim zbrojem.

Na primjer, nakon što se unese lozinka i generira kontrolni zbroj, može se razdvojiti na nekoliko dijelova i preuređen prije nego što se pohrani u bazu podataka lozinki ili bi se određeni znakovi mogli zamijeniti drugi. Prilikom pokušaja provjere autentičnosti sljedeći put kada se korisnik prijavi, web poslužitelj to poništava dodatnu funkciju, a izvorni kontrolni zbroj se ponovno generira kako bi se provjerila je li korisnička lozinka vrijedi.

Poduzimanje ovih koraka ograničava korisnost haka u kojem se kradu svi kontrolni zbroji. Ideja je izvršiti funkciju koja je nepoznata, pa ako haker poznaje kriptografski hash algoritam, ali ne i prilagođeni, tada poznavanje kontrolnih zbroja lozinke nije od pomoći.

Lozinke i kriptografske hash funkcije

Baza podataka sprema korisničke lozinke na način sličan duginoj tablici. Kada se unese vaša lozinka, kontrolni zbroj se generira i uspoređuje s onom u evidenciji s vašim korisničkim imenom. Tada vam se dopušta pristup ako su ta dva identična.

S obzirom na to da kriptografska hash funkcija proizvodi nepovratni kontrolni zbroj, je li sigurno da svoju lozinku učinite jednostavnom kao 12345, umjesto 12@34$5, jednostavno zato što se sami kontrolni zbroji ne mogu razumjeti? Ne, a evo zašto.

Ove dvije lozinke je nemoguće dešifrirati samo gledajući samo kontrolne zbrojeve:

MD5 za 12345:827ccb0eea8a706c4c34a16891f84e7b

MD5 za 12@34$5:a4d3cc004f487b18b2ccd4853053818b

Na prvi pogled možete pomisliti da je u redu koristiti bilo koju od ovih lozinki. To je točno ako je napadač pokušao odgonetnuti vašu lozinku pogađanjem MD5 kontrolnog zbroja, što nitko ne čini, ali nije točno ako je izveden napad grubom silom ili rječnikom, što je uobičajena taktika.

Napad grube sile događa se kada se izvrši više nasumičnih uboda prilikom pogađanja lozinke. U ovom slučaju bilo bi lako pogoditi 12345, ali prilično je teško nasumično otkriti drugu. Napad rječnikom sličan je po tome što napadač može isprobati svaku riječ, broj ili frazu s popisa uobičajenih (i ne tako uobičajenih) lozinki, i 12345 jedna je od onih uobičajenih lozinki.

Iako kriptografske hash funkcije proizvode kontrolne zbroje koje je teško ili nemoguće pogoditi, ipak biste trebali koristiti složenu lozinku za sve vaše online i lokalne korisničke račune.

Više informacija o kriptografskim hash funkcijama

Može se činiti da su kriptografske hash funkcije povezane s enkripcijom, ali te dvije funkcioniraju na različite načine.

Šifriranje je dvosmjerni proces u kojem se nešto šifrira kako bi postalo nečitljivo, a zatim se kasnije dešifrira kako bi se ponovno koristilo normalno. Mogao bi šifriranje datoteka koje ste pohranili tako da svatko tko im pristupi ne može ih koristiti, ili ih možete koristiti enkripcija prijenosa datoteka za šifriranje datoteka koje se kreću mrežom, poput onih koje prenosite ili preuzimate na mreži.

Funkcije kriptografskog raspršivanja rade drugačije jer kontrolni zbrojevi nisu namijenjeni za poništavanje posebne lozinke za dehaširanje. Jedina svrha kriptografskih hash funkcija je usporedba dva dijela podataka, kao što je prilikom preuzimanja datoteka, pohranjivanja lozinki i izvlačenja podataka iz baze podataka.

Moguće je da kriptografska hash funkcija proizvede isti kontrolni zbroj za različite dijelove podataka. Kada se to dogodi, to se zove kolizija, što je veliki problem s obzirom na to da je cijela poanta kriptografske hash funkcije napraviti jedinstvene kontrolne zbrojeve za svaki unos podataka u nju.

Do kolizije može doći zato što svaka kriptografska hash funkcija proizvodi vrijednost fiksne duljine bez obzira na ulazne podatke. Na primjer, MD5 kriptografska hash funkcija generira 827ccb0eea8a706c4c34a16891f84e7b, 1f633b2909b9c1addf32302c7a497983 i e10adc3949ba59abbe56e057f20f883e za tri potpuno različita blokovi podataka.

Prvi kontrolni zbroj je od 12345. Drugi je generiran od preko 700 slova i brojeva, a treći je iz 123456. Sva tri unosa su različite duljine, ali rezultati uvijek imaju samo 32 znaka MD5 kontrolni zbroj je korišteno.

Ne postoji ograničenje za broj kontrolnih zbroja koji se mogu stvoriti jer bi svaka mala promjena u ulazu trebala proizvesti potpuno drugačiji kontrolni zbroj. Budući da postoji ograničenje broja kontrolnih zbroja koje jedna kriptografska hash funkcija može proizvesti, uvijek postoji mogućnost da ćete naići na koliziju.

Zbog toga su stvorene druge kriptografske hash funkcije. Dok MD5 generira vrijednost od 32 znaka, SHA-1 generira 40 znakova, a SHA-2 (512) generira 128 znakova. Što je veći broj znakova koji kontrolni zbroj ima, manja je vjerojatnost da će doći do kolizije.