Č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.