Hašování označuje proces vytváření specifického výstupu ze vstupních dat různých velikostí. To se provádí pomocí matematických vzorců, také známých jako hashovací funkce (implementované jako hashovací algoritmy).

Ne všechny hashovací funkce zahrnují použití kryptografie, ale pouze ty, které jsou speciálně navrženy pro tento účel, takzvané kryptografické hashovací funkce, které jsou základem kryptoměny. Díky své práci jsou blockchainy a další distribuované systémy schopny dosáhnout vysoké úrovně integrity a bezpečnosti dat.

Regulární i kryptografické hašovací funkce jsou deterministické. Být deterministický 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).

Hašovací algoritmy v kryptoměnách jsou navrženy tak, aby jejich funkce fungovala jednosměrně, což znamená, že data nelze vrátit v opačném pořadí, aniž by bylo vynaloženo velké množství času a zdrojů na provedení výpočtů. Jinými slovy, je docela snadné vytvořit výstup ze vstupu, ale poměrně obtížné proces zvrátit (vygenerovat výstup ze vstupu). Čím obtížnější je najít vstupní hodnotu, tím bezpečnější je hašovací algoritmus považován.


Jak funguje hashovací funkce?

Různé typy hashovacích funkcí vytvářejí různé výstupní velikosti, ale možná výstupní velikost pro každý hashovací algoritmus je vždy konstantní. Například algoritmus SHA-256 může produkovat výstup pouze ve 256bitovém formátu, zatímco SHA-1 vždy generuje 160bitový výtah.

Abychom to ilustrovali, proveďte slova „Binance“ a „binance“ pomocí hashovacího algoritmu SHA-256 (který se používá v bitcoinech).

SHA-256

Vstupní data

Výsledek (256 stran)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Všimněte si, že drobná změna (velikost prvního písmene) měla za následek úplně jinou hodnotu hash. Protože používáme SHA-256, výstupní data budou mít vždy pevnou velikost 256 bitů (nebo 64 znaků), bez ohledu na velikost vstupu. Kromě toho, bez ohledu na to, kolikrát tato dvě slova projdeme algoritmem, dva výstupy se nezmění, protože jsou konstantní.

Stejným způsobem, pokud spustíme stejná vstupní data pomocí hashovacího algoritmu SHA-1, získáme následující výsledky:

SHA-1

Vstupní data

Výsledek (160 stran)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


Stojí za zmínku, že zkratka SHA znamená Secure Hash Algorithms. Odkazuje na sadu kryptografických hašovacích funkcí, která zahrnuje algoritmy jako SHA-0 a SHA-1 spolu se skupinami SHA-2 a SHA-3. SHA-256 je součástí skupiny SHA-2 spolu s SHA-512 a dalšími analogy. V současnosti jsou za bezpečné považovány pouze skupiny SHA-2 a SHA-3.


Proč na tom záleží?

Konvenční hashovací funkce mají širokou škálu případů použití, včetně vyhledávání v databázi, 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 zabezpečení informací pro 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í také hlavní roli při generování nových klíčů a adres.

Hašování ukazuje svůj plný potenciál při práci s obrovským množstvím informací. Můžete například spustit velký soubor nebo sadu dat pomocí hašovací funkce a poté použít výstup k rychlé kontrole přesnosti a integrity dat. To je možné díky deterministické povaze hashovacích funkcí: vstup bude mít vždy za následek zjednodušený komprimovaný výstup (hash). Tato metoda eliminuje potřebu ukládat a pamatovat si velké množství dat.

Hašování je užitečné zejména s ohledem na technologii blockchain. Na bitcoinovém blockchainu se provádí několik operací, které zahrnují hašování, z nichž většina je těžba. Ve skutečnosti prakticky všechny kryptoměnové protokoly spoléhají na hašování k propojení a komprimaci skupin transakcí do bloků, stejně jako k vytvoření kryptografického vztahu a efektivní konstrukci řetězce bloků.


Kryptografické hašovací funkce

Znovu si všimněte, že hashovací funkce, která používá kryptografické techniky, může být definována jako kryptografická hashovací funkce. Abychom to rozlouskli, bude to vyžadovat nespočet pokusů o výběr čísel hrubou silou. Chcete-li zvrátit kryptografickou hašovací funkci, budete muset vybírat vstupní data metodou pokusu a omylu, dokud nezískáte příslušný výstup. Je však možné, že různé vstupy budou produkovat stejný výstup, v takovém případě dojde ke kolizi.

Technicky řečeno, kryptografická hashovací funkce musí splňovat tři vlastnosti, aby byla považována za bezpečnou. Můžeme je popsat jako: odolnost proti kolizi a odolnost proti prohledávání prvního a druhého předobrazu.

Než se začneme věnovat jednotlivým vlastnostem, shrňme si jejich logiku do tří krátkých vět.

  • Odolnost proti kolizi: Je nemožné najít dva různé vstupy, které produkují hash podobný výstupu.

  • Odolnost proti hledání prvního předobrazu: absence metody nebo algoritmu pro zpětnou obnovu hašovací funkce (vyhledání vstupu z daného výstupu).

  • Odolnost proti hledání druhého předobrazu: není možné najít žádný druhý vstup, který by se protínal s prvním.


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 tedy považována za odolnou proti kolizi, dokud někdo kolizi nezjistí. 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 omezenému počtu výstupů.

Hašovací funkce je tedy odolná proti kolizi, když je pravděpodobnost její detekce tak nízká, že by to vyžadovalo miliony let výpočtu. Z tohoto důvodu, přestože neexistují žádné hašovací funkce bez kolizí, jsou některé z nich tak silné, že je lze považovat za robustní (například SHA-256).

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


Odolnost proti prvnímu vyhledávání předobrazu

Tato vlastnost úzce souvisí s konceptem jednosměrných funkcí. Hashovací funkce je považována za odolnou pro vyhledávání prvního předobrazu, pokud existuje velmi nízká pravděpodobnost, že někdo bude schopen najít vstup, který může generovat konkrétní výstup.

Všimněte si, že tato vlastnost se liší od předchozí, protože útočník by musel uhodnout vstup na základě konkrétního výstupu. Tento typ kolize nastane, když někdo najde dva různé vstupy, které produkují stejný výstupní kód, aniž by vstupním datům, která byla použita k jeho vytvoření, přikládal jakýkoli význam.

Robustnost prvního předobrazu je cenná pro zabezpečení dat, protože jednoduchý hash zprávy může prokázat její autenticitu, aniž by bylo nutné zveřejňovat 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 ve formátu prostého textu.


Odolnost proti druhému vyhledávání předobrazu

Pro zjednodušení můžeme říci, že tento typ stability je někde mezi ostatními dvěma vlastnostmi. Druhý útok s předobrazem spočívá v nalezení specifického vstupu, který lze použít ke generování výstupu, který byl původně generován jinými známými vstupy.

Jinými slovy, druhý útok předobrazem zahrnuje detekci kolize, ale místo hledání dvou náhodných vstupů, které generují stejný hash, je cílem útoku najít vstupy, které lze použít k opětovnému vytvoření hashe, který byl původně vygenerován jiným vstupem.

Proto každá hašovací funkce, která je odolná vůči kolizím, je odolná i vůči takovým útokům, protože ty vždy implikují kolizi. Stále je však možné provést útok prvního předobrazu na funkci odolnou proti kolizi, protože zahrnuje hledání jediného vstupu přes jediný výstup.


Hornictví

Existuje mnoho kroků v těžbě, které se provádějí pomocí hašovacích funkcí, mezi ně patří kontrola zůstatků, propojení transakčních vstupů a výstupů a hašování všech transakcí v bloku za účelem vytvoření 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.

Při vytváření hashe pro svůj kandidátský blok se musí těžař pokusit přijít s několika různými vstupy. Blok bude možné zkontrolovat pouze v případě, že je výstup ve formě hashe správně vygenerován a 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ě hashrate představuje množství 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 nebyla delší než 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čilo výpočetní úsilí (dokud se průměrná doba generování bloku nevrátí na 10 minut).

Všimněte si, že těžaři nemusí hledat kolize, kvůli omezenému počtu hashů, které mohou generovat jako platný výstup (počínaje určitým počtem nul). Pro daný 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 tak nákladný úkol, není důvod, aby těžaři systém podváděli, protože to bude mít za následek značné finanční ztráty. V souladu s tím, čím více těžařů se k blockchainu připojí, tím větší a silnější se stane.


Závěr

Není pochyb o tom, že hashovací funkce jsou jedním ze základní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 poměrně univerzální a nabízejí zabezpečení a různé metody ověřování. 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 jistě užitečné pro každého, kdo se zajímá o technologii blockchain.