Hash je výsledek výpočtu nad daty, například nad souborem nebo bitcoinovou transakcí. Stejná data a stejný postup vytvoří stejný otisk. U kryptografického hashe má být obtížné najít jiná data se stejným výsledkem nebo z výsledku dohledat vhodný vstup. Hash není zašifrovaná kopie původních dat.
Stáhnete si instalační soubor. Vydavatel k němu zveřejnil kontrolní otisk a vy stejným algoritmem vypočítáte otisk stažené kopie. Pokud se liší, neporovnáváte stejná data: soubor mohl být poškozen, zaměněn nebo upraven. Shoda s důvěryhodným otiskem naopak dává silné ujištění, že máte správnou kopii. Nemusíte ručně porovnávat celý soubor. Například SHA-256 vytváří 256bitový výsledek, obvykle zapsaný 64 hexadecimálními znaky, ať počítá otisk krátké zprávy, nebo velkého souboru. [1] [3]
Háček je v tom, odkud kontrolní otisk pochází. Pokud útočník na webu vymění soubor i zveřejněný hash, oba spolu budou souhlasit. Hash nevyžaduje tajný klíč a z veřejných dat jej umí spočítat kdokoli. Proto není totéž co digitální podpis, kterým držitel klíče potvrzuje data. U Bitcoin Core se kromě shody souboru kontrolují také podpisy seznamu otisků a důvěryhodnost podpisových klíčů. Samotný hash neprokazuje autora, bezpečnost programu ani pravdivost dokumentu. [3]
Hashování nemá opačný krok „dešifrovat“. Do výsledku pevné délky se nepřenáší celý obsah souboru, takže nejde o způsob zálohování. To ale neznamená, že hash bezpečně schová cokoli. Když někdo zahashuje krátké běžné heslo, útočník může zkoušet pravděpodobná hesla a porovnávat jejich otisky. Nemusí nic obracet; stačí uhodnout vstup. Samotný rychlý hash proto nenahrazuje silné heslo ani postup určený k bezpečnému ukládání hesel. [1] [5]
Při hledání preimage máte daný otisk a snažíte se najít data, která ho vytvoří. Při hledání kolize stačí objevit libovolná dvě různá data se stejným otiskem. Kolize matematicky existují, protože možných vstupů je více než výsledků pevné délky. Bezpečnost kryptografické funkce spočívá v tom, že takové případy neumíme prakticky najít, ne v tom, že jsou nemožné. Slovo „hash“ přitom neoznačuje jediný algoritmus; ne každá hashovací funkce je určena pro kryptografickou bezpečnost. [1]
Bitcoin používá hashe k označování transakcí, propojení bloků i ověřování těžební práce. Přesná receptura se ale liší. Hash hlavičky bloku používá SHA-256 dvakrát; HASH160 kombinuje SHA-256 s RIPEMD-160. Tagged hash navíc odděluje různé účely výpočtu pomocí značky. Když výsledek kontrolujete sami, potřebujete správný algoritmus i přesnou podobu vstupních bajtů, tedy základních jednotek dat. Text „61“ tvoří jiné bajty než jediný bajt s hexadecimální hodnotou 61, který odpovídá písmenu a v ASCII. Zahashovat zobrazený zápis místo dat proto znamená jiný výpočet. [2] [4]
Pro nejúplnější obraz čtěte toto heslo společně s SHA-256, Proof of Work, Block Header, Transakce, Merkle Tree, Bitcoin. Opačným směrem na něj odkazují také SHA-256, Nonce, HTLC, Hashcash.