83 / 736HC

Hashcash

Výpočetní poštovné, na které navázal Bitcoin

Hashcash měl zdražit rozesílání spamu: před odesláním zprávy by počítač vykonal malou práci. Najít správný výsledek je náročnější než ho zkontrolovat. Právě tento rozdíl se později stal jedním ze stavebních kamenů Bitcoinu.

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.

DOC · 001Cynthia Dwork and Moni Naor — Pricing via Processing or Combatting Junk MailPrimární zdroj DOC · 002Adam Back — Hashcash original implementation and announcementPrimární zdroj DOC · 003Adam Back — Hashcash: A Denial of Service Counter-MeasurePrimární zdroj DOC · 004Hashcash — Version 1 stamp format and command documentationDokumentace DOC · 005Hashcash — FAQ and operational limitsDokumentace DOC · 006Markus Jakobsson and Ari Juels — Proofs of Work and Bread Pudding ProtocolsPrimární zdroj DOC · 007Hal Finney — RPOW: Reusable Proofs of WorkPrimární zdroj DOC · 008Satoshi Nakamoto — Bitcoin: A Peer-to-Peer Electronic Cash SystemPrimární zdroj DOC · 009Bitcoin Core — Proof-of-work target and difficulty validationDokumentace DOC · 010Adam Back — Hashcash paper, archival copyPrimární zdroj DOC · 011Adam Back — Hashcash manual, Debian distributionPrimární zdroj DOC · 012Adam Back — Hashcash implementation announcement, 28 March 1997Primární zdroj DOC · 013NIST — Policy on Hash FunctionsPrimární zdroj DOC · 014Bitcoin Core v29.0 — Block header hashingPrimární zdroj DOC · 015Hal Finney — RPOW NewsPrimární zdroj
Revidováno: Primární zdroje · Nejde o investiční doporučení