Hašování se týká procesu generování výstupu s pevnou velikostí ze vstupu proměnné velikosti. 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, jádrem kryptoměn jsou takzvané kryptografické hašovací funkce. Díky nim jsou blockchainy a další distribuované systémy schopny dosáhnout významné úrovně integrity a bezpečnosti dat.
Jak konvenční, tak kryptografické hashovací funkce jsou deterministické. Být deterministický znamená, že dokud se vstup nezmění, bude hashovací algoritmus vždy produkovat stejný výstup (také známý jako digest nebo hash).
Hašovací algoritmy kryptoměn jsou obvykle navrženy jako jednosměrné funkce, což znamená, že je nelze snadno vrátit zpět bez velkého množství výpočetního času a zdrojů. Jinými slovy, je docela snadné vytvořit výstup ze vstupu, ale poměrně obtížné jít opačným směrem (generovat vstup pouze z výstupu). Obecně řečeno, čím obtížnější je najít vstup, tím bezpečnější je hašovací algoritmus považován za zabezpečený.
Jak funguje hashovací funkce?
Různé hašovací funkce vytvoří výstupy různých velikostí, ale možné velikosti výstupu pro každý hašovací algoritmus 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 proveďte slova „Binance“ a „binance“ pomocí hashovacího algoritmu SHA-256 (ten, který se používá v bitcoinech).
Všimněte si, že malá změna (velikost prvního písmene) měla za následek zcela jinou hodnotu hash. 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 projdeme tato dvě slova algoritmem, oba výstupy zůstanou konstantní.
Naopak, pokud spustíme stejné vstupy pomocí algoritmu hash SHA-1, měli bychom následující výsledky:
Zejména zkratka SHA znamená Secure Hash Algorithms. Odkazuje na sadu kryptografických hašovacích funkcí, které zahrnují algoritmy 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 variantami. V současnosti jsou za bezpečné považovány pouze skupiny SHA-2 a SHA-3.
Proč na nich záleží?
Konvenční hashovací funkce mají širokou škálu případů použití, včetně vyhledávání v databázi, 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 digitální otisky 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í přichází při práci s obrovským množstvím informací. Například lze spustit velký soubor nebo datovou sadu pomocí hašovací 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 zvláště užitečné v kontextu technologie blockchain. Bitcoinový blockchain má několik operací, které zahrnují hašování, většina z nich 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ů a také k vytvoření kryptografických vazeb mezi každým blokem, čímž se efektivně vytvoří blockchain.
Kryptografické hašovací funkce
Opět, hashovací funkce, která využívá kryptografické techniky, může být definována jako kryptografická hashovací funkce. Obecně platí, že prolomení kryptografické hašovací funkce vyžaduje nesčetné množství pokusů hrubou silou. Aby osoba „vrátila“ kryptografickou hašovací funkci, musela by uhodnout, jaký byl vstup metodou pokusů a omylů, dokud nebude vytvořen odpovídající výstup. Existuje však také možnost, že různé vstupy produkují přesně stejný výstup, v takovém případě dojde ke „kolizi“.
Technicky musí kryptografická hashovací funkce sledovat tři vlastnosti, aby byla považována za efektivně bezpečnou. Můžeme je popsat jako odolnost proti kolizi, odolnost před předobrazem a odolnost proti druhému předobrazu.
Než budeme diskutovat o každé vlastnosti, shrňme jejich logiku do tří krátkých vět.
Odolnost proti kolizi: Není možné najít jakékoli dva odlišné vstupy, které produkují stejný hash jako výstup.
Odolnost předobrazu: Nelze „vrátit“ hašovací funkci (najít vstup z daného výstupu).
Odpor druhého předobrazu: Není možné najít jakýkoli druhý vstup, který koliduje se zadaným vstupem.
Odolnost proti kolizi
Jak již bylo zmíněno, ke kolizi dojde, když různé vstupy vytvoří 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 možnost nalezení kolize tak nízká, že by to vyžadovalo miliony let výpočtů. Takže navzdory skutečnosti, že neexistují žádné hašovací funkce bez kolizí, některé z nich jsou dostatečně silné, aby byly považovány za odolné (např. SHA-256).
Mezi různými algoritmy SHA již nejsou skupiny SHA-0 a SHA-1 bezpečné, protože byly nalezeny kolize. V současné době jsou skupiny SHA-2 a SHA-3 považovány za odolné vůči kolizím.
Odolnost předobrazu
Vlastnost odporu předobrazu souvisí s konceptem jednosměrných funkcí. Hašovací funkce je považována za rezistentní vůči předobrazu, když je velmi nízká pravděpodobnost, že někdo najde vstup, který generoval konkrétní výstup.
Všimněte si, že tato vlastnost je odlišná od předchozí, protože útočník by se snažil uhodnout, jaký byl vstup tím, že by se podíval 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ží na tom, které vstupy byly použity.
Vlastnost odolnosti předobrazu je cenná pro ochranu dat, protože jednoduchý hash zprávy může prokázat její autenticitu, aniž by bylo nutné informace zveřejňovat. V praxi mnoho poskytovatelů služeb a webových aplikací ukládá a používá hash generované z hesel spíše než hesla v prostém textu.
Odolnost proti druhému předobrazu
Pro zjednodušení můžeme říci, že odpor druhého předobrazu je někde mezi ostatními dvěma vlastnostmi. K útoku druhého předobrazu dochází, když je někdo schopen najít konkrétní vstup, který generuje stejný výstup jiného vstupu, který již zná.
Jinými slovy, útok druhého předobrazu zahrnuje nalezení kolize, ale místo hledání dvou náhodných vstupů, které generují stejný hash, hledají vstup, který generuje stejný hash, který byl vygenerován jiným specifickým vstupem.
Proto každá hašovací funkce, která je odolná vůči kolizím, je odolná i vůči útokům druhého předobrazu, protože ty budou vždy znamenat kolizi. Stále však lze provést předobrazový útok na funkci odolnou proti kolizi, protože to znamená 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í vstupů a výstupů transakcí a hašování transakcí v rámci bloku za účelem vytvoření stromu Merkle. Ale jedním z hlavních důvodů, proč je bitcoinový blockchain bezpečný, je skutečnost, že těžaři potřebují provádět nesčetné množství hašovacích operací, aby nakonec našli platné řešení pro další blok.
Konkrétně musí těžař vyzkoušet několik různých vstupů při vytváření hodnoty hash pro svůj kandidátský blok. 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 podle hash rate věnované síti.
V tomto případě hash rate představuje, kolik výkonu počítače se investuje do těžby bitcoinů. 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. Naproti tomu, pokud se několik těžařů rozhodne těžbu zastavit, což způsobí výrazný pokles hash rate, obtížnost těžby se upraví, což usnadní těžbu (dokud se průměrná doba bloku nevrátí na 10 minut).
Všimněte si, že těžaři nemusí najít kolize, protože existuje více hashů, které mohou generovat jako platný výstup (počínaje určitým počtem nul). Existuje tedy několik možných řešení pro určitý blok a těžaři musí najít pouze jedno z nich - podle prahu určeného obtížností těžby.
Protože těžba bitcoinů je nákladný úkol, těžaři nemají důvod systém podvádět, protože by to vedlo k významným finančním ztrátám. Čím více těžařů se k blockchainu připojí, tím je větší a silnější.
Závěrečné myšlenky
Není pochyb o tom, že hashovací funkce jsou základními nástroji v informatice, 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 ověřování mnoha různými způsoby. Jako takové jsou kryptografické hašovací funkce životně důležité pro téměř všechny sítě kryptoměn, 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.

