•två år
Bitcoin: Ett peer-to-peer-elektroniskt kontantsystem
Satoshi Nakamoto 31 oktober 2008 Abstrakt En renodlad peer-to-peer-version av elektronisk kontant skulle möjliggöra onlinebetalningar som skickas direkt från en part till en annan utan att passera genom en finansiell institution. Digitala signaturer tillhandahåller en del av lösningen, men de huvudsakliga fördelarna förloras om en betrodd tredje part fortfarande krävs för att förhindra dubbelutgifter. Vi föreslår en lösning på problemet med dubbelutgifter med hjälp av ett peer-to-peer-nätverk. Nätverket tidstämplar transaktioner genom att hasha dem till en pågående kedja av hashbaserade bevis på arbete, vilket bildar en inspelning som inte kan ändras utan att göra om beviset på arbetet. Den längsta kedjan fungerar inte bara som ett bevis på den följd av händelser som bevittnades, utan som bevis på att den kom från den största poolen av CPU-kraft. Så länge en majoritet av CPU-kraften kontrolleras av noder som inte samarbetar för att attackera nätverket, kommer de att generera den längsta kedjan och överträffa angripare. Nätverket självt kräver minimal struktur. Meddelanden sänds på "best effort"-basis, och noder kan lämna och återansluta till nätverket vid behov, med den längsta bevis på arbete-kedjan som bevis på vad som hände medan de var borta. 1. Introduktion Handel på internet har kommit att förlita sig nästan uteslutande på finansiella institutioner som betrodda tredje parter för att behandla elektroniska betalningar. Medan systemet fungerar tillräckligt bra för de flesta transaktioner lider det fortfarande av de inneboende svagheterna i det förtroendebaserade modellen. Helt irreversibla transaktioner är inte riktigt möjliga, eftersom finansiella institutioner inte kan undvika att medla i tvister. Kostnaden för mediering ökar transaktionskostnaderna, vilket begränsar den minsta praktiska transaktionsstorleken och stänger av möjligheten till små avslappnade transaktioner, och det finns en bredare kostnad i förlusten av förmågan att göra icke-omkastliga betalningar för icke-omkastliga tjänster. Med möjligheten till omvändning sprider sig behovet av förtroende. Köpmännen måste vara försiktiga med sina kunder och krångla dem för mer information än de annars skulle behöva. En viss procent av bedrägerier accepteras som oundvikliga. Dessa kostnader och betalningsovissheter kan undvikas personligen genom att använda fysisk valuta, men ingen mekanism finns för att göra betalningar över en kommunikationskanal utan en betrodd part. Vad som behövs är ett elektroniskt betalningssystem baserat på kryptografisk bevis istället för förtroende, vilket gör att två villiga parter kan transagera direkt med varandra utan behov av en betrodd tredje part. Transaktioner som är beräkningsmässigt omöjliga att omvända skulle skydda säljare från bedrägerier, och rutinmässiga escrow-mekanismer kan enkelt implementeras för att skydda köpare. I den här artikeln föreslår vi en lösning på problemet med dubbelutgifter med hjälp av en peer-to-peer-distribuerad tidstämpelserv till generering av beräkningsmässigt bevis på transaktionernas kronologiska ordning. Systemet är säkert så länge som ärliga noder kollektivt kontrollerar mer CPU-kraft än någon samarbetande grupp av attackerande noder. 2. Transaktioner Vi definierar en elektronisk mynt som en kedja av digitala signaturer. Varje ägare överför myntet till nästa genom att digitalt signera en hash av den föregående transaktionen och den offentliga nyckeln till nästa ägare och lägger till dessa i slutet av myntet. Mottagaren kan verifiera signaturerna för att verifiera ägandekedjan. Problemet är naturligtvis att mottagaren inte kan verifiera att en av ägarna inte dubbelutgav myntet. En vanlig lösning är att introducera en betrodd central myndighet, eller mynt, som kontrollerar varje transaktion för dubbelutgifter. Efter varje transaktion måste myntet returneras till myntet för att utfärda ett nytt mynt, och endast mynt som utfärdats direkt från myntet litar man på att inte dubbelutgift. Problemet med denna lösning är att hela pengasystemets öde beror på företaget som driver myntet, med varje transaktion som måste gå genom dem, precis som en bank. Vi behöver ett sätt för mottagaren att veta att de tidigare ägarna inte har undertecknat tidigare transaktioner. För våra ändamål räknas den tidigaste transaktionen som den som gäller, så vi bryr oss inte om senare försök till dubbelutgifter. Det enda sättet att bekräfta frånvaron av en transaktion är att känna till alla transaktioner. I det myntbaserade modellen var myntet medvetet om alla transaktioner och beslutade vilka som kom först. För att åstadkomma detta utan en betrodd part måste transaktionerna offentligt tillkännages[1], och vi behöver ett system för att deltagarna ska komma överens om en enskild historik över ordningen i vilken de mottogs. Mottagaren behöver bevis på att majoriteten av noderna vid varje transaktionstidpunkt ansåg att den var den första som mottogs. 3. Tidstämpelserv Lösningen vi föreslår börjar med en tidstämpelserv. En tidstämpelserv fungerar genom att ta en hash av en block av objekt som ska tidstämplas och publicera hashen brett, till exempel i en tidning eller Usenet-post[2-5]. Tidstämpeln bevisar att datan måste ha funnits vid den tiden, självklart, för att komma in i hashen. Varje tidstämpel inkluderar den föregående tidstämpeln i sin hash, vilket bildar en kedja, där varje ytterligare tidstämpel förstärker de tidigare. 4. Bevis på arbete För att implementera en distribuerad tidstämpelserv på en peer-to-peer-basis kommer vi att behöva använda ett bevis på arbetssystem liknande Adam Back's Hashcash[6], istället för tidningsartiklar eller Usenet-poster. Beviset på arbete innebär att skanna efter ett värde som när det hashas, exempelvis med SHA-256, börjar med ett antal nollbitar. Det genomsnittliga arbetet som krävs är exponentiellt i antalet nollbitar som krävs och kan verifieras genom att utföra en enda hashning. För vårt tidsstämpelnätverk implementerar vi beviset på arbete genom att inkrementera en nonce i blocket tills ett värde hittas som ger blockets hash de nödvändiga nollbitarna. När CPU-ansträngningen har gjorts för att få det att uppfylla beviset på arbete kan blocket inte ändras utan att göra om arbetet. När senare block är kedjade efter det skulle arbetet för att ändra blocket innebära att göra om alla block efter det. Beviset på arbete löser också problemet att bestämma representation i majoritetsbeslutsfattande. Om majoriteten byggde på en-IP-adress-en-röst skulle det kunna vara subverterat av någon som kan allokera många IP:er. Beviset på arbete är i grunden en-CPU-en-röst. Majoritetsbeslutet representeras av den längsta kedjan, som har den största ansträngningen av bevis på arbete investerad i den. Om majoriteten av CPU-kraften kontrolleras av ärliga noder, kommer den ärliga kedjan att växa snabbast och överträffa eventuella konkurrerande kedjor. För att modifiera ett tidigare block skulle en angripare behöva göra om beviset på arbetet i blocket och alla block efter det och sedan hinna ifatt och överträffa det arbete som utförts av de ärliga noderna. Vi kommer senare att visa att sannolikheten för att en långsammare angripare hinner ikapp minskar exponentiellt när ytterligare block läggs till. För att kompensera för ökad hårdvaruhastighet och varierande intresse för att köra noder över tid bestäms beviset på arbetssvårigheten av ett rörligt medel som siktar på ett genomsnittligt antal block per timme. Om de genereras för snabbt ökar svårigheten. 5. Nätverk Stegen för att köra nätverket är följande: Nya transaktioner skickas till alla noder. Varje nod samlar nya transaktioner i ett block. Varje nod arbetar med att hitta ett svårt bevis på arbete för sitt block. När en nod hittar ett bevis på arbete sänder den blocket till alla noder. Noder accepterar blocket endast om alla transaktioner i det är giltiga och inte redan spenderade. Noder uttrycker sitt godkännande av blocket genom att arbeta på att skapa nästa block i kedjan, med hjälp av hashen från det accepterade blocket som den föregående hashen. Noder betraktar alltid den längsta kedjan som korrekt och kommer att fortsätta att arbeta på att förlänga den. Om två noder sänder olika versioner av nästa block samtidigt kan vissa noder få ena eller den andra först. I så fall kommer de att arbeta på den första de fick, men spara den andra grenen ifall den blir längre. Oavgjordheten kommer att lösas när nästa bevis på arbete hittas och en gren blir längre; noderna som arbetade på den andra grenen kommer då att växla till den längre grenen. Det är inte nödvändigt att nya transaktionsutsändningar når alla noder. Så länge de når många noder kommer de att hamna i ett block förr eller senare. Blockutsändningar är också toleranta mot borttappade meddelanden. Om en nod inte tar emot ett block kommer den att begära det när den tar emot nästa block och inser att den missat ett. 6. Incitament Vid konventionen är den första transaktionen i ett block en specialtransaktion som skapar ett nytt mynt ägt av skaparen av blocket. Detta ger ett incitament för noder att stödja nätverket och ger ett sätt att initialt distribuera mynt i cirkulationen, eftersom det inte finns någon central myndighet som ska utfärda dem. Den ständiga tillökningen av en konstant mängd nya mynt liknar guldsökarnas resurser som läggs ut för att lägga till guld i cirkulationen. I vårt fall är det CPU-tid och elektricitet som spenderas. Incitamentet kan också finansieras med transaktionsavgifter. Om värdeutgången av en transaktion är lägre än dess värdeinmatning, läggs differensen till som en transaktionsavgift till incentivets värde för blocket som innehåller transaktionen. När ett förutbestämt antal mynt har kommit i cirkulation kan incitamentet övergå helt till transaktionsavgifter och bli helt inflationfritt. Incitamentet kan också hjälpa till att uppmuntra noder att förbli ärliga. Om en girig attackerare kan sätta samman mer CPU-kraft än alla ärliga noder måste han välja mellan att använda den för att lura folk genom att stjäla tillbaka sina betalningar, eller använda den för att generera nya mynt. Han bör finna det mer lönsamt att spela enligt reglerna, sådana regler som gynnar honom med fler nya mynt än alla andra kombinerade, än att underminera systemet och validiteten av sin egen rikedom. 7. Återvinning av diskutrymme När den senaste transaktionen i ett mynt ligger under tillräckligt många block kan de spenderade transaktionerna före den kastas bort för att spara diskutrymme. För att underlätta detta utan att bryta blockets hash har transaktioner hashas i ett Merkle Tree [7][2][5], där endast roten inkluderas i blockets hash. Gamla block kan sedan komprimeras genom att stubba av grenar på trädet. De inre hasharna behöver inte lagras. En blockheader utan transaktioner skulle vara cirka 80 bytes. Om vi antar att block genereras var 10:e minut, 80 bytes * 6 * 24 * 365 = 4,2MB per år. Med datorsystem som vanligtvis säljs med 2GB RAM från och med 2008 och Moores lag som förutspår en nuvarande tillväxt på 1,2GB per år, bör lagring inte vara ett problem även om blockheaders måste hållas i minnet. 8. Förenklad betalningsverifiering Det är möjligt att verifiera betalningar utan att köra en fullständig nod i nätverket. En användare behöver bara hålla en kopia av blockheaders från den längsta beviset på arbete-kedjan, vilket han kan få genom att fråga nätverksnoder tills han är övertygad om att han har den längsta kedjan, och erhålla Merkle-grenen som länkar transaktionen till blocket den tidstämplades i. Han kan inte kontrollera transaktionen själv, men genom att koppla den till en plats i kedjan kan han se att en nät
Satoshi Nakamoto 31 oktober 2008 Abstrakt En renodlad peer-to-peer-version av elektronisk kontant skulle möjliggöra onlinebetalningar som skickas direkt från en part till en annan utan att passera genom en finansiell institution. Digitala signaturer tillhandahåller en del av lösningen, men de huvudsakliga fördelarna förloras om en betrodd tredje part fortfarande krävs för att förhindra dubbelutgifter. Vi föreslår en lösning på problemet med dubbelutgifter med hjälp av ett peer-to-peer-nätverk. Nätverket tidstämplar transaktioner genom att hasha dem till en pågående kedja av hashbaserade bevis på arbete, vilket bildar en inspelning som inte kan ändras utan att göra om beviset på arbetet. Den längsta kedjan fungerar inte bara som ett bevis på den följd av händelser som bevittnades, utan som bevis på att den kom från den största poolen av CPU-kraft. Så länge en majoritet av CPU-kraften kontrolleras av noder som inte samarbetar för att attackera nätverket, kommer de att generera den längsta kedjan och överträffa angripare. Nätverket självt kräver minimal struktur. Meddelanden sänds på "best effort"-basis, och noder kan lämna och återansluta till nätverket vid behov, med den längsta bevis på arbete-kedjan som bevis på vad som hände medan de var borta. 1. Introduktion Handel på internet har kommit att förlita sig nästan uteslutande på finansiella institutioner som betrodda tredje parter för att behandla elektroniska betalningar. Medan systemet fungerar tillräckligt bra för de flesta transaktioner lider det fortfarande av de inneboende svagheterna i det förtroendebaserade modellen. Helt irreversibla transaktioner är inte riktigt möjliga, eftersom finansiella institutioner inte kan undvika att medla i tvister. Kostnaden för mediering ökar transaktionskostnaderna, vilket begränsar den minsta praktiska transaktionsstorleken och stänger av möjligheten till små avslappnade transaktioner, och det finns en bredare kostnad i förlusten av förmågan att göra icke-omkastliga betalningar för icke-omkastliga tjänster. Med möjligheten till omvändning sprider sig behovet av förtroende. Köpmännen måste vara försiktiga med sina kunder och krångla dem för mer information än de annars skulle behöva. En viss procent av bedrägerier accepteras som oundvikliga. Dessa kostnader och betalningsovissheter kan undvikas personligen genom att använda fysisk valuta, men ingen mekanism finns för att göra betalningar över en kommunikationskanal utan en betrodd part. Vad som behövs är ett elektroniskt betalningssystem baserat på kryptografisk bevis istället för förtroende, vilket gör att två villiga parter kan transagera direkt med varandra utan behov av en betrodd tredje part. Transaktioner som är beräkningsmässigt omöjliga att omvända skulle skydda säljare från bedrägerier, och rutinmässiga escrow-mekanismer kan enkelt implementeras för att skydda köpare. I den här artikeln föreslår vi en lösning på problemet med dubbelutgifter med hjälp av en peer-to-peer-distribuerad tidstämpelserv till generering av beräkningsmässigt bevis på transaktionernas kronologiska ordning. Systemet är säkert så länge som ärliga noder kollektivt kontrollerar mer CPU-kraft än någon samarbetande grupp av attackerande noder. 2. Transaktioner Vi definierar en elektronisk mynt som en kedja av digitala signaturer. Varje ägare överför myntet till nästa genom att digitalt signera en hash av den föregående transaktionen och den offentliga nyckeln till nästa ägare och lägger till dessa i slutet av myntet. Mottagaren kan verifiera signaturerna för att verifiera ägandekedjan. Problemet är naturligtvis att mottagaren inte kan verifiera att en av ägarna inte dubbelutgav myntet. En vanlig lösning är att introducera en betrodd central myndighet, eller mynt, som kontrollerar varje transaktion för dubbelutgifter. Efter varje transaktion måste myntet returneras till myntet för att utfärda ett nytt mynt, och endast mynt som utfärdats direkt från myntet litar man på att inte dubbelutgift. Problemet med denna lösning är att hela pengasystemets öde beror på företaget som driver myntet, med varje transaktion som måste gå genom dem, precis som en bank. Vi behöver ett sätt för mottagaren att veta att de tidigare ägarna inte har undertecknat tidigare transaktioner. För våra ändamål räknas den tidigaste transaktionen som den som gäller, så vi bryr oss inte om senare försök till dubbelutgifter. Det enda sättet att bekräfta frånvaron av en transaktion är att känna till alla transaktioner. I det myntbaserade modellen var myntet medvetet om alla transaktioner och beslutade vilka som kom först. För att åstadkomma detta utan en betrodd part måste transaktionerna offentligt tillkännages[1], och vi behöver ett system för att deltagarna ska komma överens om en enskild historik över ordningen i vilken de mottogs. Mottagaren behöver bevis på att majoriteten av noderna vid varje transaktionstidpunkt ansåg att den var den första som mottogs. 3. Tidstämpelserv Lösningen vi föreslår börjar med en tidstämpelserv. En tidstämpelserv fungerar genom att ta en hash av en block av objekt som ska tidstämplas och publicera hashen brett, till exempel i en tidning eller Usenet-post[2-5]. Tidstämpeln bevisar att datan måste ha funnits vid den tiden, självklart, för att komma in i hashen. Varje tidstämpel inkluderar den föregående tidstämpeln i sin hash, vilket bildar en kedja, där varje ytterligare tidstämpel förstärker de tidigare. 4. Bevis på arbete För att implementera en distribuerad tidstämpelserv på en peer-to-peer-basis kommer vi att behöva använda ett bevis på arbetssystem liknande Adam Back's Hashcash[6], istället för tidningsartiklar eller Usenet-poster. Beviset på arbete innebär att skanna efter ett värde som när det hashas, exempelvis med SHA-256, börjar med ett antal nollbitar. Det genomsnittliga arbetet som krävs är exponentiellt i antalet nollbitar som krävs och kan verifieras genom att utföra en enda hashning. För vårt tidsstämpelnätverk implementerar vi beviset på arbete genom att inkrementera en nonce i blocket tills ett värde hittas som ger blockets hash de nödvändiga nollbitarna. När CPU-ansträngningen har gjorts för att få det att uppfylla beviset på arbete kan blocket inte ändras utan att göra om arbetet. När senare block är kedjade efter det skulle arbetet för att ändra blocket innebära att göra om alla block efter det. Beviset på arbete löser också problemet att bestämma representation i majoritetsbeslutsfattande. Om majoriteten byggde på en-IP-adress-en-röst skulle det kunna vara subverterat av någon som kan allokera många IP:er. Beviset på arbete är i grunden en-CPU-en-röst. Majoritetsbeslutet representeras av den längsta kedjan, som har den största ansträngningen av bevis på arbete investerad i den. Om majoriteten av CPU-kraften kontrolleras av ärliga noder, kommer den ärliga kedjan att växa snabbast och överträffa eventuella konkurrerande kedjor. För att modifiera ett tidigare block skulle en angripare behöva göra om beviset på arbetet i blocket och alla block efter det och sedan hinna ifatt och överträffa det arbete som utförts av de ärliga noderna. Vi kommer senare att visa att sannolikheten för att en långsammare angripare hinner ikapp minskar exponentiellt när ytterligare block läggs till. För att kompensera för ökad hårdvaruhastighet och varierande intresse för att köra noder över tid bestäms beviset på arbetssvårigheten av ett rörligt medel som siktar på ett genomsnittligt antal block per timme. Om de genereras för snabbt ökar svårigheten. 5. Nätverk Stegen för att köra nätverket är följande: Nya transaktioner skickas till alla noder. Varje nod samlar nya transaktioner i ett block. Varje nod arbetar med att hitta ett svårt bevis på arbete för sitt block. När en nod hittar ett bevis på arbete sänder den blocket till alla noder. Noder accepterar blocket endast om alla transaktioner i det är giltiga och inte redan spenderade. Noder uttrycker sitt godkännande av blocket genom att arbeta på att skapa nästa block i kedjan, med hjälp av hashen från det accepterade blocket som den föregående hashen. Noder betraktar alltid den längsta kedjan som korrekt och kommer att fortsätta att arbeta på att förlänga den. Om två noder sänder olika versioner av nästa block samtidigt kan vissa noder få ena eller den andra först. I så fall kommer de att arbeta på den första de fick, men spara den andra grenen ifall den blir längre. Oavgjordheten kommer att lösas när nästa bevis på arbete hittas och en gren blir längre; noderna som arbetade på den andra grenen kommer då att växla till den längre grenen. Det är inte nödvändigt att nya transaktionsutsändningar når alla noder. Så länge de når många noder kommer de att hamna i ett block förr eller senare. Blockutsändningar är också toleranta mot borttappade meddelanden. Om en nod inte tar emot ett block kommer den att begära det när den tar emot nästa block och inser att den missat ett. 6. Incitament Vid konventionen är den första transaktionen i ett block en specialtransaktion som skapar ett nytt mynt ägt av skaparen av blocket. Detta ger ett incitament för noder att stödja nätverket och ger ett sätt att initialt distribuera mynt i cirkulationen, eftersom det inte finns någon central myndighet som ska utfärda dem. Den ständiga tillökningen av en konstant mängd nya mynt liknar guldsökarnas resurser som läggs ut för att lägga till guld i cirkulationen. I vårt fall är det CPU-tid och elektricitet som spenderas. Incitamentet kan också finansieras med transaktionsavgifter. Om värdeutgången av en transaktion är lägre än dess värdeinmatning, läggs differensen till som en transaktionsavgift till incentivets värde för blocket som innehåller transaktionen. När ett förutbestämt antal mynt har kommit i cirkulation kan incitamentet övergå helt till transaktionsavgifter och bli helt inflationfritt. Incitamentet kan också hjälpa till att uppmuntra noder att förbli ärliga. Om en girig attackerare kan sätta samman mer CPU-kraft än alla ärliga noder måste han välja mellan att använda den för att lura folk genom att stjäla tillbaka sina betalningar, eller använda den för att generera nya mynt. Han bör finna det mer lönsamt att spela enligt reglerna, sådana regler som gynnar honom med fler nya mynt än alla andra kombinerade, än att underminera systemet och validiteten av sin egen rikedom. 7. Återvinning av diskutrymme När den senaste transaktionen i ett mynt ligger under tillräckligt många block kan de spenderade transaktionerna före den kastas bort för att spara diskutrymme. För att underlätta detta utan att bryta blockets hash har transaktioner hashas i ett Merkle Tree [7][2][5], där endast roten inkluderas i blockets hash. Gamla block kan sedan komprimeras genom att stubba av grenar på trädet. De inre hasharna behöver inte lagras. En blockheader utan transaktioner skulle vara cirka 80 bytes. Om vi antar att block genereras var 10:e minut, 80 bytes * 6 * 24 * 365 = 4,2MB per år. Med datorsystem som vanligtvis säljs med 2GB RAM från och med 2008 och Moores lag som förutspår en nuvarande tillväxt på 1,2GB per år, bör lagring inte vara ett problem även om blockheaders måste hållas i minnet. 8. Förenklad betalningsverifiering Det är möjligt att verifiera betalningar utan att köra en fullständig nod i nätverket. En användare behöver bara hålla en kopia av blockheaders från den längsta beviset på arbete-kedjan, vilket han kan få genom att fråga nätverksnoder tills han är övertygad om att han har den längsta kedjan, och erhålla Merkle-grenen som länkar transaktionen till blocket den tidstämplades i. Han kan inte kontrollera transaktionen själv, men genom att koppla den till en plats i kedjan kan han se att en nät
Show original content
2 users upvote it!
0 answers