Hašování se týká procesu generování výstupu s pevnou velikostí ze vstupu s proměnnou velikostí. Takový proces se provádí pomocí matematických vzorců známých jako hashovací funkce (implementované jako hashovací algoritmy). 

Ačkoli ne všechny hašovací funkce konzistentně zahrnují použití kryptografie, kryptografické hašovací funkce jsou jádrem kryptoměn. Prostřednictvím těchto funkcí jsou blockchainy a další typy distribuovaných systémů schopny dosáhnout významné úrovně integrity a bezpečnosti dat.

Konvenční a kryptografické hašovací funkce jsou deterministické. To znamená, že dokud se vstup nezmění, bude hashovací algoritmus vždy produkovat stejný výstup (také známý jako hash nebo hash).

Algoritmy hašování kryptoměn jsou obvykle navrženy jako jednosměrné funkce, což znamená, že je nelze snadno zrušit bez velkého množství času a výpočetních zdrojů. Jinými slovy, je poměrně snadné vytvořit výstup ze vstupu, ale relativně obtížné jít opačným směrem (generovat vstup pouze ze samotného výstupu). Celkově platí, že čím obtížnější je najít položku, tím bezpečnější je algoritmus hašování považován.


Jak funguje hashovací funkce?

Různé hašovací funkce vytvoří výstupy různých velikostí, ale možné velikosti výstupu specifické pro každý hašovací algoritmus jsou vždy konstantní. Například algoritmus SHA-256 může produkovat pouze 256bitový výstup, zatímco SHA-1 vždy generuje 160bitový hash.

Pro ilustraci aplikujme hashovací funkci SHA-256 (používá se pro bitcoiny) na slova Binance a binance.

SHA-256

Vchod

Sortie (256 bitů)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec58339ddcae7f5e8b5da0c36624784b2


Všimněte si, jak malá změna (zde případ prvního písmene) vedla k úplně jiné hashové hodnotě. Protože používáme SHA-256, výstupy budou mít vždy pevnou velikost 256 bitů (nebo 64 znaků) – bez ohledu na velikost vstupu. Navíc, bez ohledu na to, kolikrát se tento algoritmus použije na tato konkrétní slova, oba výstupy budou vždy stejné.

Na druhou stranu, pokud použijeme stejné položky prostřednictvím hashovacího algoritmu SHA-1, získáme následující výsledky:

SHA-1

Vchod

Sortie (160 bitů)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


Zkratka SHA znamená Secure Hash Algorithms. To se týká sady kryptografických funkcí, které zahrnují algoritmy SHA-0 a SHA-1 a také skupiny SHA-2 a SHA-3. SHA-256 je součástí skupiny SHA-2 spolu s SHA-512 a dalšími variantami. V současné době jsou za bezpečné považovány pouze skupiny SHA-2 a SHA-3.


Proč jsou důležité?

Konvenční hašovací funkce mají širokou škálu případů použití, včetně prohledávání databází, analýz velkých souborů a správy dat. Na druhé straně jsou kryptografické hašovací funkce široce používány v aplikacích pro zabezpečení informací, jako je ověřování zpráv a tisk otisků prstů. Pokud jde o bitcoiny, kryptografické hašovací funkce jsou nezbytnou součástí procesu těžby a také hrají roli při generování nových adres a klíčů.

Skutečná síla hašování se ukáže, když dojde na zpracování obrovského množství informací. Například je možné spustit soubor nebo sadu dat pomocí hashovací funkce a poté použít její výstup k rychlému ověření přesnosti a integrity dat. To je možné díky deterministické povaze hašovacích funkcí: vstup bude vždy mít za následek zjednodušený, zhuštěný výstup (hash). Taková technika odstraňuje potřebu ukládat a pamatovat si velké množství dat.

Hašování je užitečné zejména v souvislosti s technologií blockchain. Bitcoinový blockchain má několik operací, které zahrnují hašování, z nichž většina se vyskytuje v procesu těžby. Ve skutečnosti téměř všechny kryptoměnové protokoly spoléhají na hašování k propojení a zhuštění skupin transakcí do bloků, stejně jako k vytvoření kryptografických vazeb mezi každým blokem, aby se nakonec vytvořil blockchain.


Kryptografické hašovací funkce

Hashovací funkce, která využívá kryptografické techniky, může být definována jako kryptografická hashovací funkce. Prolomení kryptografické hašovací funkce obvykle vyžaduje nesčetné množství pokusů o hrubou sílu. Aby jednotlivec zvrátil kryptografickou hashovací funkci, musel by uhodnout, jaký byl vstup prostřednictvím mnoha pokusů a selhání, dokud by nebyl vytvořen správný výstup. Existuje však také možnost, že různé vstupy produkují přesně stejný výstup, v takovém případě dochází k tajné dohodě.

Technicky musí mít kryptografická hašovací funkce tři vlastnosti, aby byla považována za efektivně bezpečnou. Můžeme to popsat jako: odolnost proti kolizi, odolnost proti předobrazu a odolnost proti druhému předobrazu.

Než probereme jednotlivé vlastnosti, shrňme si jejich logiku do tří krátkých vět.

  • Odolnost proti kolizi: Je nemožné najít dva odlišné vstupy, které produkují stejný hash jako výstup.

  • Síla předobrazu: Není možné obrátit hashovací funkci (najít vstup z daného výstupu).

  • Odpor druhého předobrazu: Není možné najít druhý vstup, který by kolidoval se zadaným vstupem.


Odolnost proti kolizi

Jak bylo zmíněno, ke kolizi dochází, když různé vstupy produkují přesně stejný hash. Hašovací funkce je tedy považována za odolnou proti kolizi, dokud někdo kolizi nenajde. Všimněte si, že kolize budou vždy existovat pro jakoukoli hašovací funkci, protože možné vstupy jsou nekonečné, zatímco možné výstupy jsou konečné.

Jinými slovy, hashovací funkce je odolná proti kolizi, když je pravděpodobnost nalezení kolize tak nízká, že by to vyžadovalo miliony let výpočtu. I když tedy neexistují žádné hašovací funkce bez kolizí, některé z nich jsou dostatečně silné, aby byly považovány za robustní (např. SHA-256).

Mezi různými algoritmy SHA již nejsou skupiny SHA-0 a SHA-1 považovány za bezpečné, protože byly nalezeny kolize. V současné době jsou SHA-2 a SHA-3 považovány za odolné proti kolizi.


Odolnost předobrazu

Vlastnost odporu předobrazu souvisí s konceptem jednosměrných funkcí. Hashovací funkce je považována za odolnou vůči obrazu, když je velmi nízká pravděpodobnost nalezení vstupu, který generoval konkrétní výstup.

Všimněte si, že tato vlastnost je odlišná od té předchozí, protože zde by se hypotetický útočník pokusil uhodnout vstup pohledem na daný výstup. Na druhou stranu ke kolizi dochází, když někdo najde dva různé vstupy, které generují stejný výstup, ale nezáleží konkrétně na tom, který vstup byl použit.

Vlastnost odolnosti předobrazu je cenná pro ochranu dat, protože pouhé hashování zprávy může prokázat její pravost, aniž by bylo nutné zveřejnit její obsah. V praxi mnoho poskytovatelů služeb a webových aplikací ukládá a používá hash generované z hesel spíše než hesla ve formátu prostého textu.


Odolnost vůči druhému předobrazu

Pro zjednodušení můžeme říci, že odpor druhého předobrazu leží někde mezi dalšími dvěma vlastnostmi. K druhému útoku předobrazu dochází, když je někdo schopen najít konkrétní vstup, který generuje stejný výstup jako jiný vstup, který již zná.

Jinými slovy, druhý útok předobrazem zahrnuje nalezení kolize, ale místo hledání dvou náhodných vstupů, které generují stejný hash, hledáme vstup, který generuje stejný hash jako jiný specifický vstup.

Proto je jakákoli hašovací funkce odolná proti kolizi také odolná vůči útokům druhého předobrazu, protože ty budou vždy zahrnovat kolizi. Stále však lze provést předobrazový útok na funkci odolnou proti kolizi, protože zahrnuje nalezení jediného vstupu z jediného výstupu.


Hornictví

V těžbě bitcoinů existuje mnoho kroků, které zahrnují hašovací funkce, jako je kontrola zůstatků, propojení vstupu/výstupu transakcí a hašování transakcí do bloku za účelem vytvoření Merkle Tree. Ale jedním z hlavních důvodů, proč je bitcoinový blockchain bezpečný, je to, že těžaři musí provádět nesčetné množství hašovacích operací, aby našli platné řešení pro vytvoření a přidání bloku.

Při vytváření hodnoty hash pro blok, o který žádá, musí těžař konkrétně vyzkoušet několik různých vstupů. V podstatě budou moci ověřit svůj blok pouze tehdy, pokud vygenerují výstupní hash, který začíná určitým počtem nul. Počet nul určuje obtížnost těžby a liší se v závislosti na hashovací rychlosti věnované síti.

V tomto případě hash rate představuje množství výpočetní energie investované do těžby bitcoinu. Pokud se hash rate sítě zvýší, bitcoinový protokol automaticky upraví obtížnost těžby tak, aby průměrná doba potřebná k vytěžení bloku zůstala blízko 10 minutám. Na druhou stranu, pokud se několik těžařů rozhodne těžbu zastavit, což má za následek výrazný pokles hash rate, obtížnost těžby se upraví, což těžbu usnadní (dokud se průměrná doba bloku nezkrátí na 10 minut).

Všimněte si, že těžaři nemusí hledat možné kolize, protože existuje více hashů, které mohou generovat jako platný výstup (počínaje konkrétním počtem nul). Existuje tedy několik možných řešení pro určitý blok a těžaři musí jedno najít – podle prahu určeného obtížností těžby.

Vzhledem k tomu, že těžba bitcoinů je nákladný úkol, těžaři nemají důvod podvádět v systému, protože by to vedlo k významným finančním ztrátám. Čím více těžařů je v blockchainu, a proto čím je větší, tím je silnější.


Na závěr

Není pochyb o tom, že hashovací funkce jsou základními nástroji ve výpočetní technice, zejména při práci s velkým množstvím dat. V kombinaci s kryptografií mohou být hashovací algoritmy poměrně univerzální, zejména pro zabezpečení a autentizaci, několika způsoby. Kryptografické hashovací funkce jsou tedy životně důležité pro téměř všechny kryptoměnové sítě, takže pochopení jejich vlastností a pracovních mechanismů je rozhodně užitečné pro každého, kdo se zajímá o technologii blockchain.