Hašování se týká procesu generování výstupů s pevnou velikostí ze vstupů s proměnnou velikostí. To 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 zahrnují použití kryptografie, takzvané kryptografické hašovací funkce jsou jádrem kryptoměn. Díky nim mohou blockchainy a další distribuované systémy dosáhnout významné úrovně integrity a bezpečnosti dat.

Normální i kryptografické hašovací funkce jsou deterministické. Determinismus znamená, že dokud se vstupní data nezmění, bude hashovací algoritmus vždy produkovat stejný výsledek (také známý jako výtah nebo hash).

Algoritmy hašování kryptoměn jsou obvykle navrženy jako jednosměrné funkce, což znamená, že je nelze vrátit zpět bez velkého výpočetního času a zdrojů. Jinými slovy, je poměrně snadné generovat výstup ze vstupu, ale relativně obtížné jít naopak (generovat vstup pouze z výstupu). Obecně platí, že čím obtížnější je najít vstup, tím bezpečnější je hashovací algoritmus považován za.


Jak funguje hashovací funkce?

Různé hashovací funkce vytvoří výstupy různých velikostí, ale možné výstupní velikosti každého hashovacího algoritmu jsou vždy konstantní. Například algoritmus SHA-256 může produkovat pouze 256bitové výstupy, zatímco SHA-1 vždy generuje 160bitový výtah.

Pro ilustraci předejme slova „Binance“ a „binance“ hashovacím algoritmem SHA-256 (ten používaný v bitcoinu).

SHA-256

Výstup

Výstup (256 bit)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Všimněte si, že malá změna (případ prvního písmene) vedla ke zcela jiné hodnotě hashovací funkce. Ale 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. Nezáleží také na tom, kolikrát algoritmem projdeme dvě slova, oba výstupy zůstanou konstantní.

A pokud předáme stejné vstupy přes hashovací algoritmus SHA-1, dostaneme následující výsledky:

SHA-1

Výstup

Výstup (160 bitů)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


Je zajímavé, že zkratka SHA znamená Secure Hash Algorithms (secure encryption algorithms). Jedná se o sadu kryptografických hashovacích funkcí, které zahrnují algoritmy SHA-0 a SHA-1 a také skupiny SHA-2 a SHA-3. SHA-256 je součástí rodiny SHA-2 spolu s SHA-512 a dalšími variantami. V současnosti jsou za bezpečné považovány pouze skupiny SHA-2 a SHA-3.


Jaký je význam této technologie?

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

Skutečná síla hashování se ukáže při práci s obrovským množstvím informací. Můžete například spustit velký soubor nebo datovou sadu pomocí hašovací funkce a pak použít její výstupy k rychlé kontrole přesnosti a integrity dat. To je možné díky deterministické povaze hashovacích funkcí: vstup má vždy za následek zjednodušený, komprimovaný výstup (tzv. hash). Tato metoda eliminuje potřebu ukládat a „pamatovat si“ velké objemy dat.

Hašování je užitečné zejména v souvislosti s technologií blockchain. Bitcoinový blockchain má několik operací souvisejících s hashováním, z nichž většina se provádí v procesu těžby. Ve skutečnosti téměř všechny kryptoměnové protokoly spoléhají na hašování, které spojuje a kombinuje skupiny transakcí do bloků a vytváří kryptografické vazby mezi každým blokem, čímž vytváří blockchain.


Kryptografické hašovací funkce

Opět, hashovací funkce využívající kryptografické techniky může být definována jako kryptografická hashovací funkce. Obecně platí, že prolomení kryptografické hashovací funkce vyžaduje mnoho pokusů o hrubou sílu. Chcete-li „rozvinout“ kryptografickou hashovací funkci, musíte vybrat vstupy metodou pokusu a omylu, dokud nezískáte vhodný výstup. Existuje však také možnost, že různé vstupy povedou ke stejnému výsledku a v takovém případě dojde ke „kolizi“.

Technicky musí kryptografická hašovací funkce splňovat tři vlastnosti, aby byla považována za dobře zabezpečenou. Můžeme je popsat jako: odolnost proti srážce a odolnost proti útoku při nalezení prvního a druhého prototypu.

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

  • Odolnost proti kolizi: nemožnost najít dva různé vstupy, které produkují stejný hash.

  • Robustnost k nalezení prvního náhledu: Neschopnost "obrátit" hashovací funkci (vyhledání vstupu přes daný výstup).

  • Odolnost proti nalezení druhého prototypu: Neschopnost najít jakýkoli druhý vstup, který má stejný hash jako první.


Odolnost proti kolizi

Jak již bylo zmíněno dříve, ke kolizi dochází, když různé vstupy vytvářejí stejný hash. Hašovací funkce je pak považována za odolnou proti kolizi, dokud někdo takovou kolizi neodhalí. Všimněte si, že kolize budou vždy existovat pro kteroukoli z hašovacích funkcí kvůli nekonečnému počtu vstupů a konečnému počtu výstupů.

Hašovací funkce je tedy odolná proti kolizi, když je pravděpodobnost detekce kolize tak malá, že by výpočet zabral miliony let. Z tohoto důvodu, i když neexistují žádné hašovací funkce bez kolizí, jsou některé tak silné, že je lze považovat za stabilní (např. SHA-256).

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


Odolnost k nalezení prvního prototypu

Tato vlastnost úzce souvisí s konceptem jednostranných funkcí. Hašovací funkce je považována za robustní pro nalezení prvního náhledu, pokud je velmi nízká pravděpodobnost, že někdo najde vstup pomocí vygenerovaného výstupu.

Všimněte si, že tato vlastnost se liší od předchozí, protože útočník potřebuje uhodnout vstup na základě konkrétního výstupu. K tomuto druhu kolize dochází, když někdo najde dva různé vstupy, které produkují stejný výstup, bez ohledu na to, které vstupy byly použity.

Vlastnost proof-of-first-look je cenná pro zabezpečení dat, protože jednoduchý hash zprávy může prokázat její pravost, aniž by bylo nutné prozradit další informace. V praxi mnoho poskytovatelů služeb a webových aplikací ukládá a používá hashe generované z hesel místo toho, aby je používali v textovém formátu.


Odolnost k nalezení druhého prototypu

Tento typ stability je někde mezi dvěma předchozími vlastnostmi. Útok na nalezení druhého prototypu spočívá v nalezení konkrétního vstupu, pomocí kterého je možné vygenerovat takový výstup, který již byl vygenerován pomocí jiného vstupu, který byl dříve znám.

Jinými slovy, předběžný útok zahrnuje detekci kolize, ale místo hledání dvou náhodných vstupů, které generují stejný hash, je cílem útoku najít vstup, který dokáže reprodukovat hash, který již byl vygenerován jiným vstupem.

Proto každá hašovací funkce, která je odolná vůči kolizím, je odolná i vůči útoku na nalezení druhého prvočísla, protože ten vždy potřebuje kolizi. Stále je však možné provést první vyhledávací útok ve funkci tolerantní ke kolizi, protože to zahrnuje nalezení jednoho vstupu pomocí jednoho výstupu.


Hornictví

Existuje mnoho kroků v těžbě bitcoinů, které se provádějí pomocí hashovacích funkcí. Jedná se o kontrolu rovnováhy, propojení transakčních vstupů a výstupů a hashování všech transakcí v bloku do Merkleho stromu. Ale jedním z hlavních důvodů, proč je bitcoinový blockchain bezpečný, je to, že těžaři musí provést co nejvíce hashovacích operací, aby nakonec našli správné řešení pro další blok.

Miner musí při generování hashe pro svůj kandidátský blok použít několik různých vstupů. Blok bude možné ověřit pouze v případě, že správně vygenerovaný výstup v podobě hashe začíná určitým počtem nul. Počet nul určuje obtížnost těžby a liší se v závislosti na hashratu sítě.

V tomto případě je hashrate měřítkem výkonu vašeho počítače, který investujete do těžby bitcoinů. Pokud se hashrate začne zvyšovat, bitcoinový protokol automaticky upraví obtížnost těžby tak, aby průměrná doba potřebná k vytěžení bloku byla kolem 10 minut. Pokud se několik těžařů rozhodne těžbu zastavit, což povede k výraznému poklesu hashratu, obtížnost těžby bude upravena tak, aby se dočasně ulehčil výpočet (dokud se průměrná doba tvorby bloku nevrátí na 10 minut).

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

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


Výsledek

Není pochyb o tom, že hashovací funkce jsou jedním z hlavních nástrojů informatiky, zejména při práci s obrovským množstvím dat. V kombinaci s kryptografií mohou být hashovací algoritmy velmi užitečné a poskytují zabezpečení a ověřování různými způsoby. Proto jsou kryptografické hashovací funkce životně důležité pro téměř všechny kryptoměnové sítě a pochopení jejich vlastností a pracovních mechanismů je jistě užitečné pro každého, kdo se o technologii blockchain zajímá.