Hashcash je systém výpočetních známek založený na Proof of Work, tedy důkazu vykonané práce. Známka ukazuje, že se podařilo najít výsledek splňující zadanou podmínku. Sama není bitcoinem ani převoditelným zůstatkem na účtu.
Anna chce poslat Pavlovi e-mail. Běžně ji odeslání další kopie téměř nic nestojí; stejnou výhodu má ale i rozesílatel milionů reklam. Hashcash přidává drobnou překážku: počítač odesílatele nejprve vytvoří výpočetní známku. Náklad tvoří čas a energie, nikoli platba poště. Adam Back oznámil svou implementaci 28. března 1997 a v roce 2002 vydal odborný popis. Už v roce 1992 přitom Cynthia Dwork a Moni Naor zkoumali podobnou myšlenku výpočetního poštovného. Hashcash patří do této historie pokusů o omezení zneužívání sítě. [1] [12]
Hash je otisk pevné délky vypočítaný z dat. Annin program mění zkušební hodnotu ve známce a znovu počítá její otisk, dokud výsledek nemá požadovaný počet počátečních nulových bitů. Bit je jedna dvojková číslice, nula nebo jednička. Při požadavku b takových nul má jednotlivý pokus přibližně pravděpodobnost 2^-b a průměrná práce odpovídá 2^b pokusům. Pro b = 20 je to průměrně 1048576 výpočtů, nikoli povinný přesný počet. Jednou má program štěstí dříve, jindy čeká déle. Pavel hotovou známku přepočítá jediným hashem; vedle toho musí ověřit také její údaje a pravidla použití. [10] [11]
Kdyby Anna mohla jednu známku přiložit k milionu zpráv, překážka by ztratila smysl. Proto známka uvádí konkrétního příjemce nebo službu a datum. Příjemce kontroluje platnost a vede evidenci přijatých známek, aby odmítl opakované použití, označované jako replay. Samotné datum ani vazba na obsah zprávy opakování téže zprávy nezastaví. Hashcash nemá společný globální registr utracení: potřebnou kontrolu zajišťuje přijímající služba. Správný hash tedy ještě neznamená, že lze známku znovu přijmout. [11] [12]
Požadovanou obtížnost určuje přijímající služba. Jedna další nulová bitová pozice přibližně zdvojnásobí průměrnou práci. Příliš slabý požadavek spammera nezdrží, příliš silný zatíží i běžného člověka. Číslo 20 je proto příklad, nikoli věčný bezpečnostní standard. Stejný počet pokusů navíc trvá různě dlouho na starém telefonu a rychlém počítači. Služba musí zvažovat výkon zařízení, dobu platnosti i vlastní kapacitu; neexistuje univerzální počet sekund, který Hashcash každému vynutí. [10] [11]
Výpočetní práce nepozná slušného člověka od útočníka. Spammer s mnoha počítači nebo botnetem, tedy sítí napadených zařízení, může náklad rozložit a část účtu přenést na jiné lidi. Běžnému uživateli mezitím ubývá baterie. Hashcash má měnit ekonomiku útoku, nikoli zaručit odstranění spamu. Známka také nešifruje zprávu, nepotvrzuje občanskou totožnost a nezaručuje doručení. Je jednou podmínkou přijetí, kterou služba může kombinovat s další ochranou. [10]
Formát verze 1 lze zapsat jako 1:bits:date:resource:ext:rand:counter. Pole označují verzi, deklarovanou obtížnost, datum, příjemce či službu, rozšíření, náhodnou hodnotu a měněný čítač. Pole bits udává, kolika nulovými bity otisk podle tvrzení odesílatele začíná. Neříká, kolik pokusů jeho počítač skutečně provedl. Názvy polí jsou součástí technického zápisu a nepřekládají se. Klasická implementace počítá SHA-1 nad celým řetězcem; vyhovět musí skutečný otisk, nikoli jen číslo napsané v bits. Tento popis vysvětluje historický formát, není doporučením volit SHA-1 pro nové bezpečnostní návrhy. Bitcoin používá jiný formát dat i jinou hashovací funkci. [11] [13]
V tomto případě hledáme vstup, jehož otisk má předem určený začátek. Takovému vstupu se říká partial preimage: jeho otisk má požadovaný začátek, zatímco zbytek může být libovolný. Kolize naopak znamená dva různé vstupy se stejným otiskem. Některé historické texty používají volnější výraz partial collision, ale pro pochopení práce je tento rozdíl podstatný. Útok, který umí najít kolizi SHA-1, tím automaticky neřeší hledání požadovaného začátku. Neznamená to však, že je SHA-1 vhodnou dnešní obecnou bezpečnostní volbou. [10] [11] [13]
Hal Finney v roce 2004 představil RPOW, Reusable Proofs of Work. Uživatel mohl odevzdat důkaz práce a získat nový token; při dalším převodu se starý token zneplatnil a nahradil novým. Opakované použití tedy neznamenalo neomezené kopírování stejné známky. Systém spoléhal na server se zabezpečeným modulem IBM 4758 a na vzdálené ověření běžícího programu. To omezovalo důvěru v obsluhu, ale neodstraňovalo předpoklady o hardwaru a jeho výrobci. RPOW byl experimentální předchůdce, nikoli decentralizovaný konsensus Bitcoinu. [7] [15]
Bitcoin Whitepaper výslovně cituje Backův Hashcash. Satoshi využil stejnou základní nerovnost: najít vhodný výsledek stojí opakované zkoušení, ostatní jej snadno ověří. V Bitcoinu těžaři tímto způsobem hledají platnou hlavičku bloku, která shrnuje blok transakcí a odkazuje na předchozí blok. Používají double SHA-256, tedy dvě navazující aplikace SHA-256, a porovnání s číselným limitem zvaným target. Nejde o e-mailovou známku SHA-1 vloženou do peněženky. Společný je princip, nikoli celý systém. [8] [14]
Poštovné řeší cenu jednotlivého požadavku. Peníze potřebují také odpověď na otázku, který ze dvou konfliktních převodů platí. Bitcoin proto propojuje bloky a jeho uzly mezi platnými větvemi vybírají řetězec s největší kumulovanou prací. Uzly, tedy počítače ověřující pravidla, přitom kontrolují i transakce a povolenou emisi. Ani obrovská práce neudělá z neplatné transakce platnou. Hashcash dodal důležitý stavební kámen; teprve jeho spojení s dalšími pravidly umožnilo společnou peněžní historii bez centrálního správce. [8] [9]
Pro nejúplnější obraz čtěte toto heslo společně s Proof of Work, Cypherpunkeři, Adam Back, Bitcoin Whitepaper, Bitcoin, Hash. Opačným směrem na něj odkazují také Cypherpunkeři, b-money, Bit Gold, Reusable Proofs of Work.