Čo je hašovanie?
Domov
Články
Čo je hašovanie?

Čo je hašovanie?

Rozšírené
Zverejnené Jul 29, 2019Aktualizované Jan 31, 2023
7m

Hašovanie označuje proces generovania výstupu s pevnou veľkosťou zo vstupu s premenlivou veľkosťou. Toto sa uskutočňuje použitím matematických vzorcov známych pod názvom hašovacie funkcie (implementované ako hašovacie algoritmy). 

Aj keď nie všetky hašovacie funkcie zahŕňajú použitie kryptografie, jadrom kryptomien sú takzvané kryptografické hašovacie funkcie. Vďaka nim sú blockchainy a iné distribuované systémy schopné dosiahnuť významnú úroveň integrity a bezpečnosti údajov.

Konvenčné aj kryptografické hašovacie funkcie sú deterministické. Determinickosť znamená, že pokiaľ sa vstup nezmení, hašovací algoritmus bude vždy produkovať rovnaký výstup (známy aj a-pod názvom digest alebo hash).

Hašovacie algoritmy kryptomien sú zvyčajne navrhnuté ako jednosmerné funkcie, čo znamená, že ich jednoduché vrátenie späť nie je možné bez použitia dlhého výpočtového času a zdrojov. Inak povedané, je celkom jednoduché vytvoriť výstup zo vstupu, ale pomerne náročné ísť opačným smerom (vygenerovať vstup len zo samotného výstupu). Všeobecne povedané, čím ťažšie je nájsť vstup, tým sa hašovací algoritmus považuje za bezpečnejší.


Ako funguje hašovacia funkcia?

Rôzne hašovacie funkcie vytvárajú výstupy s rôznou veľkosťou, ale možné veľkosti výstupu pre každý hašovací algoritmus sú vždy konštantné. Napríklad algoritmus SHA-256 môže produkovať iba 256-bitové výstupy, zatiaľ čo SHA-1 vždy vygeneruje 160-bitový výstup.

Pre názornú ukážku skúsme prebehnúť slová „Binance“ a „binance“ cez hašovací algoritmus SHA-256 (ten, ktorý používa Bitcoin).

SHA-256

Vstup

Výstup (256 bitov)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Všimnite si, že malá zmena (veľké a malé prvé písmeno) viedla k úplne inej hodnote hashu. Ale keďže používame algoritmus SHA-256, výstupy budú mať vždy pevnú veľkosť 256 bitov (alebo 64 znakov), bez ohľadu na veľkosť vstupu. Nezáleží ani na tom, koľkokrát prebehneme tieto dve slová cez algoritmus, dva výstupy zostanú konštantné.

Naopak, ak prebehneme rovnaké vstupy cez hašovací algoritmus SHA-1, dostaneme nasledujúce výsledky:

SHA-1

Vstup

Výstup (160 bitov)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


Skratka SHA znamená Secure Hash Algorithms (bezpečné hašovacie algoritmy). Označuje súbor kryptografických hašovacích funkcií, ktoré zahŕňajú algoritmy SHA-0 a SHA-1 spolu so skupinami SHA-2 a SHA-3. Algoritmus SHA-256 je spolu s SHA-512 a ďalšími variantmi súčasťou skupiny SHA-2. V súčasnosti sa za bezpečné považujú iba skupiny SHA-2 a SHA-3.


Prečo na tom záleží?

Štandardné hašovacie funkcie majú širokú škálu prípadov použitia, vrátane vyhľadávania v databáze, analýzy veľkých súborov a správy údajov. Kryptografické hašovacie funkcie sa zase vo veľkej miere používajú v aplikáciách na zabezpečenie informácií, ako je overovanie správ a digitálne odtlačky prstov. Čo sa týka siete Bitcoin, kryptografické hašovacie funkcie sú nevyhnutnou súčasťou procesu ťažby a zohrávajú úlohu aj pri generovaní nových adries a kľúčov.

Naozajstná sila hašovania sa prejavuje pri práci s obrovským množstvom informácií. Pomocou hašovacej funkcie je napríklad možné spustiť veľký súbor alebo súbor údajov a následne použiť jeho výstup na rýchle overenie presnosti a integrity údajov. Je to možné vďaka deterministickej povahe hašovacích funkcií: zo vstupu vždy vznikne zjednodušený, zhustený výstup (hash). Takáto technika odstraňuje potrebu ukladania a „pamätania“ veľkého množstva údajov.

Hašovanie je obzvlášť užitočné v kontexte technológie blockchain. Na blockchaine Bitcoin je niekoľko operácií, ktorých súčasťou je hašovanie, väčšina z nich počas procesu ťažby. V skutočnosti sa takmer všetky kryptomenové protokoly spoliehajú na hašovanie na prepojenie a kondenzáciu skupín transakcií do blokov a tiež na vytváranie kryptografických prepojení medzi jednotlivými blokmi, čím sa v podstate vytvára blockchain.


Kryptografické hašovacie funkcie

Hašovaciu funkciu, ktorá využíva kryptografické techniky, je možné označiť ako kryptografickú hašovaciu funkciu. Vo všeobecnosti si prelomenie kryptografickej hašovacej funkcie vyžaduje nespočetné množstvo pokusov použitím hrubej sily. Aby ktokoľvek dokázal „vrátiť“ kryptografickú hašovaciu funkciu, musel by spôsobom „pokus a omyl“ uhádnuť, aký bol vstup, kým sa nevytvorí príslušný výstup. Existuje však aj možnosť, že rôzne vstupy produkujú presne ten istý výstup. V takom prípade dôjde ku „kolízii“.

Technicky, aby bolo aby bolo možné kryptografickú hašovaciu funkciu považovať za efektívnu, musí spĺňať tri vlastnosti. Môžeme ich opísať ako odolnosť proti kolízii, odolnosť proti nájdeniu vzoru a odolnosť proti nájdeniu druhého vzoru.

Pred podrobnejším popísaním každej funkcie si zhrňme ich logiku v troch krátkych vetách.

  • Odolnosť proti kolízii: nie je možné nájsť žiadne dva odlišné vstupy, ktoré produkujú rovnaký hash ako výstup.

  • Odolnosť proti nájdeniu vzoru: nie je možné „vrátiť“ hašovaciu funkciu (nájsť vstup z daného výstupu).

  • Odolnosť proti nájdeniu druhého vzoru: nie je možné nájsť žiadny druhý vstup, ktorý koliduje so špecifikovaným vstupom.


Odolnosť proti kolízii

Ako už bolo uvedené, kolízia nastane, keď rôzne vstupy produkujú presne rovnaký hash. Hašovacia funkcia sa teda považuje za odolnú proti kolízii až do okamihu, keď niekto nájde kolíziu. Je dôležité poznamenať, že pre každú hašovaciu funkciu budú vždy existovať kolízie, pretože počet možných vstupov je nekonečný, zatiaľ čo počet možných výstupov je konečný.

Inými slovami, hašovacia funkcia je odolná proti kolízii, keď je možnosť nájdenia kolízie taká nízka, že by si to vyžadovalo milióny rokov výpočtov. Takže aj keď neexistujú hašovacie funkcie, pri ktorých by nehrozila kolízia, niektoré sú dostatočne silné, aby sa dali považovať za odolné (napr. SHA-256).

Medzi rôznymi algoritmami SHA skupiny SHA-0 a SHA-1 už nie sú bezpečné, pretože sa našli kolízie. V súčasnosti sa skupiny SHA-2 a SHA-3 považujú za odolné proti kolíziám.


Odolnosť proti nájdeniu vzoru

Funkcia odolnosti proti nájdeniu vzoru súvisí s konceptom jednosmerných funkcií. Hašovacia funkcia sa považuje za odolnú proti nájdeniu vzoru vtedy, keď je veľmi nízka pravdepodobnosť, že niekto nájde vstup, ktorý vygeneroval konkrétny výstup.

Je potrebné poznamenať, že táto vlastnosť sa líši od predchádzajúcej, pretože útočník sa pokúša uhádnuť, aký bol vstup, pohľadom na daný výstup. Na druhej strane kolízia nastane, keď niekto nájde dva rôzne vstupy, ktoré generujú rovnaký výstup. Nezáleží však na tom, ktoré vstupy boli použité.

Odolnosť proti nájdeniu vzoru má pri ochrane údajov veľký význam, pretože jednoduchý hash správy môže dokázať jej pravosť bez toho, aby bolo potrebné informácie zverejniť. V praxi mnohí poskytovatelia služieb a webové aplikácie ukladajú a používajú hashe generované z hesiel, nie z hesiel vo formáte obyčajného textu.


Odolnosť proti nájdeniu druhého vzoru

V jednoduchosti je možné povedať, že odolnosť proti nájdeniu druhého vzoru je niekde medzi ostatnými dvomi vlastnosťami. K útoku nájdením druhého vzoru dochádza, keď je niekto schopný nájsť konkrétny vstup, ktorý generuje rovnaký výstup iného vstupu, ktorý už príslušná osoba pozná.

Inými slovami, útok nájdením druhého vzoru znamená nájdenie kolízie, ale namiesto hľadania dvoch náhodných vstupov, ktoré generujú rovnaký hash, sa hľadá vstup, ktorý generuje rovnaký hash ako bol vygenerovaný iným špecifickým vstupom.

Preto každá hašovacia funkcia, ktorá je odolná proti kolíziám, je odolná aj proti útokom nájdením druhého vzoru, pretože ten vždy spôsobí kolíziu. Stále je však možné uskutočniť útok nájdením obrazu na funkciu odolnú proti kolíziám, pretože to znamená nájsť jeden vstup z jedného výstupu.


Ťažba

Pri ťažbe bitcoinov prebieha mnoho krokov, pri ktorých sa používajú hašovacie funkcie, ako napr. kontrola zostatkov, prepojenie vstupov a výstupov transakcií a hašovanie transakcií v rámci bloku na vytvorenie stromu Merkle. Jedným z hlavných dôvodov, prečo je blockchain Bitcoin bezpečný, je skutočnosť, že ťažiari musia vykonávať nespočetné množstvo hašovacích činností, aby nakoniec našli platné riešenie pre ďalší blok.

Konkrétne, pri vytváraní hodnoty hashu pre svoj kandidátsky blok musí ťažiar vyskúšať niekoľko rôznych vstupov. V podstate bude môcť overiť svoj blok iba v prípade, že vygeneruje výstupný hash, ktorý začína určitým počtom núl. Počet núl určuje náročnosť ťažby a mení sa v závislosti od hašovacej frekvencie pridelenej sieti.

V tomto prípade hash rate predstavuje údaj, koľko počítačového výkonu sa investuje do ťažby bitcoinov. Ak sa hash rate siete zvýši, protokol Bitcoinu automaticky upraví náročnosť ťažby tak, aby priemerný čas potrebný na vyťaženie bloku zostal okolo 10 minút. Naopak, ak sa niekoľko ťažiarov rozhodne ťažbu zastaviť, čo spôsobí výrazný pokles hash rate, obtiažnosť ťažby sa upraví, čím sa uľahčí ťažba (až kým sa priemerný čas bloku nevráti na hodnotu 10 minút).

Je dôležité poznamenať, že ťažiari nemusia nájsť kolízie, pretože existuje viacero hashov, ktoré môžu vygenerovať ako platný výstup (začínajúci určitým počtom núl). Pre určitý blok teda existuje viacero možných riešení a ťažiari musia nájsť len jedno z nich – podľa prahu určeného obtiažnosťou ťažby. 

Keďže ťažba bitcoinov je finančne náročná úloha, ťažiari nemajú dôvod podvádzať systém, pretože by to viedlo k významným finančným stratám. Čím viac ťažiarov sa pripojí k blockchainu, tým je blockchain väčší a silnejší.


Záverečné myšlienky

Niet pochýb o tom, že hašovacie funkcie sú základnými nástrojmi v informatike, najmä pri práci s obrovským množstvom údajov. V kombinácii s kryptografiou môžu byť hašovacie algoritmy celkom všestranné. Ponúkajú bezpečnosť a overovanie mnohými rôznymi spôsobmi. Ako také sú kryptografické hašovacie funkcie životne dôležité pre takmer všetky siete kryptomien, takže pochopenie ich vlastností a mechanizmov fungovania je určite užitočné pre každého, kto sa zaujíma o technológiu blockchain.