Bitcoin: Peer-to-Peer elektronický hotovostní systém

Satoshi Nakamoto

satoshin@gmx.com

www.bitcoin.org


Abstraktní . Čistě peer-to-peer verze elektronické hotovosti by umožnila online platby posílat přímo z jedné strany na druhou, aniž by procházely finanční institucí. Digitální podpisy představují část řešení, ale hlavní výhody jsou ztraceny, pokud je stále vyžadována důvěryhodná třetí strana, aby se zabránilo dvojímu utrácení. Navrhujeme řešení problému dvojího utrácení pomocí sítě peer-to-peer. Síť označí transakce časovým razítkem tím, že je hašuje do nepřetržitého řetězce proof-of-work založených na hash, čímž se vytvoří záznam, který nelze změnit bez opětovného proof-of-work. Nejdelší řetězec slouží nejen jako důkaz sledu událostí, kterých jsme byli svědky, ale také jako důkaz, že pochází z největšího zdroje výkonu CPU. Dokud je většina výkonu CPU řízena uzly, které nespolupracují při útoku na síť, budou generovat nejdelší řetězec a předběhnou útočníky. Samotná síť vyžaduje minimální strukturu. Zprávy jsou vysílány na základě maximálního úsilí a uzly mohou opustit a znovu se připojit k síti podle libosti, přičemž akceptují nejdelší proof-of-work řetězec jako důkaz toho, co se stalo, když byly pryč.

 

1. Úvod

Obchod na internetu se při zpracování elektronických plateb téměř výhradně spoléhá na finanční instituce, které slouží jako důvěryhodné třetí strany. I když systém funguje dostatečně dobře pro většinu transakcí, stále trpí inherentními slabinami modelu založeného na důvěře. Zcela nevratné transakce nejsou ve skutečnosti možné, protože finanční instituce se nemohou vyhnout zprostředkování sporů. Náklady na zprostředkování zvyšují transakční náklady, omezují minimální praktickou velikost transakce a omezují možnost malých náhodných transakcí a jsou zde širší náklady spojené se ztrátou schopnosti provádět nevratné platby za nevratné služby. S možností zvratu se šíří potřeba důvěry. Obchodníci si musí dávat pozor na své zákazníky a obtěžovat je, aby získali více informací, než by jinak potřebovali. Určité procento podvodů je považováno za nevyhnutelné. Těmto nákladům a nejistotám plateb se lze vyhnout osobně pomocí fyzické měny, ale neexistuje žádný mechanismus pro provádění plateb prostřednictvím komunikačního kanálu bez důvěryhodné strany.

Potřebujeme elektronický platební systém založený na kryptografickém důkazu namísto důvěry, který umožní dvěma ochotným stranám provádět transakce přímo mezi sebou, aniž by potřebovaly důvěryhodnou třetí stranu. Transakce, které je z výpočetního hlediska nepraktické zvrátit, by chránily prodejce před podvody a na ochranu kupujících by bylo možné snadno implementovat rutinní mechanismy úschovy u třetí osoby. V tomto článku navrhujeme řešení problému dvojího utrácení pomocí serveru distribuovaných časových razítek peer-to-peer pro generování výpočtového důkazu chronologického pořadí transakcí. Systém je bezpečný, pokud poctivé uzly společně ovládají více výkonu CPU než jakákoli spolupracující skupina uzlů útočníků.

2. Transakce

Elektronickou minci definujeme jako řetězec digitálních podpisů. Každý vlastník převede minci na dalšího tak, že digitálně podepíše hash předchozí transakce a veřejný klíč dalšího vlastníka a přidá je na konec mince. Příjemce platby může ověřit podpisy a ověřit tak řetězec vlastnictví.

Problém je samozřejmě v tom, že příjemce nemůže ověřit, že jeden z vlastníků minci neutratil dvakrát. Běžným řešením je zavedení důvěryhodného ústředního orgánu neboli mincovny, která kontroluje každou transakci, zda nedochází k dvojnásobné útratě. Po každé transakci musí být mince vrácena do mincovny k vydání nové mince a pouze u mincí vydaných přímo z mincovny se věří, že nebudou utraceny dvakrát. Problém tohoto řešení spočívá v tom, že osud celého peněžního systému závisí na společnosti provozující mincovnu, přičemž každá transakce musí projít přes ně, stejně jako banka.

Potřebujeme způsob, jak se příjemce platby dozví, že předchozí vlastníci nepodepsali žádné dřívější transakce. Pro naše účely platí, že nejčasnější transakce je ta, která se počítá, takže nás nezajímají pozdější pokusy o dvojnásobnou útratu. Jediným způsobem, jak potvrdit absenci transakce, je vědět o všech transakcích. V modelu založeném na mincovně si mincovna byla vědoma všech transakcí a rozhodovala, která z nich dorazí jako první. Abychom toho dosáhli bez důvěryhodné strany, musí být transakce veřejně oznámeny [1] a potřebujeme systém, aby se účastníci dohodli na jediné historii pořadí, v jakém byly přijaty. Příjemce potřebuje důkaz, že v době každé transakce většina uzlů souhlasila s tím, že byla přijata jako první.

3. Server časového razítka

Řešení, které navrhujeme, začíná serverem s časovým razítkem. Server časových razítek funguje tak, že vezme hash bloku položek, které mají být označeny časovým razítkem, a široce publikuje hash, například v novinách nebo příspěvku na Usenetu [2-5]. Časové razítko dokazuje, že data musela v daném okamžiku existovat, aby se mohla dostat do hash. Každé časové razítko obsahuje předchozí časové razítko ve svém hash, čímž tvoří řetězec, přičemž každé další časové razítko posiluje ty předcházející.

4. Proof-of-Work

K implementaci distribuovaného serveru časových razítek na bázi peer-to-peer budeme muset použít systém proof-of-work podobný Hashcash Adama Backa [6], spíše než příspěvky v novinách nebo Usenetu. Důkaz práce zahrnuje skenování hodnoty, která při hašování, jako je tomu u SHA-256, začíná hash počtem nulových bitů. Požadovaná průměrná práce je exponenciální v počtu požadovaných nulových bitů a lze ji ověřit provedením jediného hashe.

Pro naši síť s časovými razítky implementujeme proof-of-work inkrementací nonce v bloku, dokud není nalezena hodnota, která dává hash bloku požadované nulové bity. Jakmile bylo vynaloženo úsilí CPU, aby vyhovovalo proof-of-work, nelze blok změnit bez opětovného provedení práce. Vzhledem k tomu, že za ním jsou zřetězeny pozdější bloky, práce na změně bloku by zahrnovala předělání všech bloků za ním.

Korektura také řeší problém určení zastoupení ve většinovém rozhodování. Pokud by většina byla založena na jedné-IP-adrese-jeden-hlas, mohl by ji rozvrátit kdokoli, kdo je schopen přidělit mnoho IP adres. Proof-of-work je v podstatě jeden CPU-jeden hlas. Většinové rozhodnutí představuje nejdelší řetězec, do kterého je investováno největší důkazní úsilí. Pokud je většina výkonu CPU řízena poctivými uzly, poctivý řetězec poroste nejrychleji a překoná všechny konkurenční řetězce. Aby mohl útočník upravit minulý blok, musel by znovu provést proof-of-work bloku a všech bloků po něm a pak dohnat a překonat práci poctivých uzlů. Později si ukážeme, že pravděpodobnost, že pomalejší útočník dohoní, klesá exponenciálně s přibývajícími bloky.

Aby se kompenzovala zvyšující se rychlost hardwaru a měnící se zájem o spouštění uzlů v průběhu času, je obtížnost proof-of-work určována klouzavým průměrem zaměřeným na průměrný počet bloků za hodinu. Pokud jsou generovány příliš rychle, obtížnost se zvyšuje.

5. Síť

Kroky ke spuštění sítě jsou následující:

1)   Nové transakce jsou vysílány do všech uzlů.

2)    Každý uzel shromažďuje nové transakce do bloku.

3)    Každý uzel pracuje na hledání obtížného důkazu práce pro svůj blok.

4)    Když uzel najde proof-of-work, rozešle blok všem uzlům.

5)    Uzly přijímají blok pouze v případě, že jsou všechny transakce v něm platné a ještě nebyly utraceny.

6)    Uzly vyjadřují své přijetí bloku tím, že pracují na vytvoření dalšího bloku v řetězci, přičemž používají hash přijatého bloku jako předchozí hash.

Uzly vždy považují nejdelší řetězec za správný a budou dále pracovat na jeho prodlužování. Pokud dva uzly vysílají různé verze dalšího bloku současně, některé uzly mohou přijímat jednu nebo druhou jako první. V takovém případě pracují na první, kterou obdrželi, ale druhou větev si uloží pro případ, že se prodlouží. Vazba se přetrhne, když bude nalezen další nátisk a jedna větev se prodlouží; uzly, které pracovaly na druhé větvi, se pak přepnou na delší.

Nové transakční vysílání nemusí nutně dosáhnout všech uzlů. Dokud dosáhnou mnoha uzlů, brzy se dostanou do bloku. Blokové vysílání je také tolerantní k vynechaným zprávám. Pokud uzel neobdrží blok, požádá o něj, když obdrží další blok a zjistí, že jeden zmeškal.

6. Pobídka

Podle konvence je první transakce v bloku speciální transakce, která spustí novou minci vlastněnou tvůrcem bloku. To dodává uzlům pobídku k podpoře sítě a poskytuje způsob, jak zpočátku distribuovat mince do oběhu, protože neexistuje žádný ústřední orgán, který by je vydal. Stálé přidávání konstanty množství nových mincí je analogické s tím, jak těžaři zlata utrácejí zdroje, aby přidali zlato do oběhu. V našem případě je to vynaložený čas CPU a elektřina.

Pobídka může být také financována transakčními poplatky. Pokud je výstupní hodnota transakce nižší než její vstupní hodnota, rozdíl je transakční poplatek, který se připočítává k motivační hodnotě bloku obsahujícího transakci. Jakmile se předem stanovený počet mincí dostane do oběhu, pobídka může zcela přejít na transakční poplatky a být zcela bez inflace.

Pobídka může pomoci povzbudit uzly, aby zůstaly upřímné. Pokud je chamtivý útočník schopen shromáždit více výkonu CPU než všechny poctivé uzly, musel by si vybrat mezi tím, zda jej použije k podvedení lidí zpětným krádeží jeho plateb, nebo jej použije ke generování nových coinů. Mělo by pro něj být výhodnější hrát podle pravidel, takových pravidel, která mu upřednostňují více nových mincí než všem ostatním dohromady, než podkopávat systém a platnost svého vlastního bohatství.

7. Uvolnění místa na disku

Jakmile je poslední transakce v minci pohřbena pod dostatečným počtem bloků, mohou být utracené transakce před tím vyřazeny, aby se ušetřilo místo na disku. Aby se to usnadnilo bez porušení hashe bloku, jsou transakce hashovány v Merkle Tree [7][2][5], přičemž v hashe bloku je obsažen pouze kořen. Staré bloky lze poté zhutnit otlačením větví stromu. Vnitřní hashe není nutné ukládat.

Hlavička bloku bez transakcí by měla asi 80 bajtů. Pokud předpokládáme, že se bloky generují každých 10 minut, 80 bajtů * 6 * 24 * 365 = 4,2 MB za rok. Počítačové systémy se od roku 2008 obvykle prodávají s 2 GB RAM a Mooreův zákon předpovídá současný růst

1,2GB za rok, úložiště by neměl být problém ani v případě, že hlavičky bloků je nutné uchovávat v paměti.

8. Zjednodušené ověření platby

Platby je možné ověřovat bez spuštění úplného síťového uzlu. Uživatel si potřebuje ponechat pouze kopii hlaviček bloků nejdelšího řetězce důkazů o práci, kterou může získat dotazováním síťových uzlů, dokud není přesvědčen, že má nejdelší řetězec, a získat větev Merkle spojující transakci s blokem. je označena časovým razítkem. Nemůže si transakci zkontrolovat sám, ale když ji propojí s místem v řetězci, může vidět, že ji síťový uzel přijal, a bloky přidané poté, co dále potvrdí, že ji síť přijala.

Ověření jako takové je spolehlivé, pokud síť ovládají poctivé uzly, ale je zranitelnější, pokud je síť přemožena útočníkem. Zatímco síťové uzly mohou ověřovat transakce samy za sebe, zjednodušená metoda může být oklamána vymyšlenými transakcemi útočníka, dokud útočník může pokračovat v přemožení sítě. Jednou ze strategií, jak se proti tomu bránit, by bylo přijímat výstrahy od síťových uzlů, když detekují neplatný blok, což vyzve software uživatele ke stažení celého bloku a upozorní transakce, aby potvrdil nekonzistenci. Podniky, které dostávají časté platby, budou pravděpodobně stále chtít provozovat své vlastní uzly pro nezávislejší zabezpečení a rychlejší ověřování.

9. Kombinování a dělení hodnoty

Ačkoli by bylo možné manipulovat s mincemi jednotlivě, bylo by nepraktické provádět samostatnou transakci za každý cent v převodu. Aby bylo možné hodnotu dělit a kombinovat, transakce obsahují více vstupů a výstupů. Normálně bude existovat buď jeden vstup z větší předchozí transakce, nebo více vstupů kombinující menší částky a nejvýše dva výstupy: jeden pro platbu a jeden pro vrácení změny, pokud existuje, zpět odesílateli.

Je třeba poznamenat, že fan-out, kdy transakce závisí na několika transakcích a tyto transakce závisí na mnoha dalších, zde není problém. Nikdy není potřeba extrahovat úplnou samostatnou kopii historie transakce.

10. Soukromí

Tradiční bankovní model dosahuje úrovně soukromí tím, že omezuje přístup k informacím na zúčastněné strany a důvěryhodnou třetí stranu. Nutnost oznamovat všechny transakce veřejně tuto metodu vylučuje, ale soukromí lze stále zachovat přerušením toku informací na jiném místě: zachováním anonymity veřejných klíčů. Veřejnost může vidět, že někdo posílá částku někomu jinému, ale bez informací spojujících transakci s kýmkoli. Je to podobná úroveň informací zveřejňovaných burzami, kde se zveřejňuje čas a velikost jednotlivých obchodů, „páska“, ale bez sdělování, kdo byly strany.

Jako další firewall by měl být pro každou transakci použit nový pár klíčů, aby nebyly spojeny se společným vlastníkem. Určité propojení je stále nevyhnutelné u transakcí s více vstupy, které nutně odhalují, že jejich vstupy byly ve vlastnictví stejného vlastníka. Riziko spočívá v tom, že pokud je odhalen vlastník klíče, propojení by mohlo odhalit další transakce, které patřily stejnému vlastníkovi.

11. Výpočty

Zvažujeme scénář útočníka, který se snaží vygenerovat alternativní řetězec rychleji než poctivý řetězec. I když se to podaří, nevystaví systém svévolným změnám, jako je vytváření hodnoty ze vzduchu nebo vybírání peněz, které nikdy nepatřily útočníkovi. Uzly nepřijmou neplatnou transakci jako platbu a poctivé uzly nikdy nepřijmou blok, který je obsahuje. Útočník se může pouze pokusit změnit jednu ze svých vlastních transakcí, aby si vzal zpět peníze, které nedávno utratil.

Závod mezi poctivým řetězem a řetězem útočníků lze charakterizovat jako binomickou náhodnou procházku. Událostí úspěchu je prodloužení poctivého řetězce o jeden blok, čímž se jeho náskok zvýší o +1, a událostí selhání je prodloužení řetězce útočníka o jeden blok, čímž se zmenší mezera o -1.

Pravděpodobnost, že útočník dožene daný deficit, je analogická problému Gambler's Ruin. Předpokládejme, že hazardní hráč s neomezeným kreditem začíná s deficitem a hraje potenciálně nekonečný počet pokusů, aby se pokusil dosáhnout bodu zlomu.

Vzhledem k našemu předpokladu, že p > q, pravděpodobnost klesá exponenciálně s tím, jak se zvyšuje počet bloků, které musí útočník dohnat. Když je šance proti němu, pokud neudělá šťastný výpad vpřed brzy, jeho šance se zmenšují, jak bude dále zaostávat.

Nyní zvážíme, jak dlouho musí příjemce nové transakce čekat, než si bude dostatečně jistý, že odesílatel nemůže transakci změnit. Předpokládáme, že odesílatel je útočník, který chce přimět příjemce, aby se na chvíli domníval, že mu zaplatil, a poté jej přepne, aby po uplynutí určité doby zaplatil sám sobě. Příjemce bude upozorněn, když k tomu dojde, ale odesílatel doufá, že už bude pozdě.

Příjemce vygeneruje nový pár klíčů a předá veřejný klíč odesílateli krátce před podpisem. To zabraňuje odesílateli připravit řetězec bloků předem tím, že na něm bude nepřetržitě pracovat, dokud nebude mít to štěstí, že se dostane dostatečně dopředu, a pak v tu chvíli transakci provede. Jakmile je transakce odeslána, nepoctivý odesílatel začne tajně pracovat na paralelním řetězci obsahujícím alternativní verzi jeho transakce.

Příjemce čeká, dokud nebude transakce přidána do bloku a až za ní bude spojeno z bloků. Nezná přesné množství pokroku, kterého útočník dosáhl, ale za předpokladu, že poctivé bloky zabraly průměrný očekávaný čas na blok, potenciální pokrok útočníka bude Poissonovo rozdělení.

12. Závěr

Navrhli jsme systém pro elektronické transakce bez spoléhání se na důvěru. Začali jsme s obvyklým rámcem mincí vyrobených z digitálních podpisů, který poskytuje silnou kontrolu vlastnictví, ale je neúplný bez způsobu, jak zabránit dvojímu utrácení. Abychom to vyřešili, navrhli jsme síť peer-to-peer využívající proof-of-work k zaznamenávání veřejné historie transakcí, která se pro útočníka rychle stane výpočetně nepraktickou měnit, pokud poctivé uzly ovládají většinu výkonu CPU. Síť je robustní ve své nestrukturované jednoduchosti. Uzly pracují všechny najednou s malou koordinací. Není třeba je identifikovat, protože zprávy nejsou směrovány na žádné konkrétní místo a je třeba je doručit pouze s maximálním úsilím. Uzly mohou libovolně opustit síť a znovu se k ní připojit a přijmout řetězec proof-of-work jako důkaz toho, co se stalo, když byly pryč. Hlasují svým výkonem CPU, vyjadřují svůj souhlas s platnými bloky tím, že pracují na jejich rozšíření, a odmítají neplatné bloky tím, že na nich odmítají pracovat. Veškerá potřebná pravidla a pobídky lze prosadit pomocí tohoto mechanismu konsenzu.

 

Reference[1]           W. Dai, "b-money," http://www.weidai.com/bmoney.txt, 1998.[2]H. Massias , XS Avila a J.-J. Quisquater , „Návrh služby bezpečného časového razítka s minimálními požadavky na důvěryhodnost“, na 20. sympoziu o teorii informací v Beneluxu, květen 1999.[3]       S. Haber, WS Stornetta , "How to time-stamp a digital document," In Journal of Cryptology, sv. 3, č. 2, strany 99-111, 1991.[4]           D. Bayer, S. Haber, WS Stornetta , "Zlepšení účinnosti a spolehlivosti digitálního časového razítka", In Sequences II: Methods in Communication, Security and Computer Science, strany 329-334, 1993.[5]           S. Haber, WS Stornetta , "Secure names for bit-strings," In Proceedings of the 4th ACM Conference on Computer and Communications Security, pages 28-35, April 1997.[6]               A. Back, „ Hashcash – protiopatření odmítnutí služby“, http://www.hashcash.org/papers/hashcash.pdf, 2002.[7]              RC Merkle, "Protokoly pro kryptosystémy s veřejným klíčem", In Proc. 1980 Symposium on Security and Privacy, IEEE Computer Society, strany 122-133, duben 1980.[8]W. Feller, „Úvod do teorie pravděpodobnosti a jejích aplikací“, 1957.

Nákup bitcoinů

Bitcoin můžete koupit zde .