比特币白皮书(翻译)

前言

前言部分—你正在看的这个部分,不是原文的内容。目录中正文版本的部分是原文Bitcoin: A Peer-to-Peer Electronic Cash System的内容。出于学习的目的翻译了白皮书,毕竟水平一般能力有限,若有错误恳请指正。

正文

比特币:对等电子现金系统
Satoshi Nakamoto
satoshin@gmx.com
www.bitcoin.org

摘要

完全地对等网络的电子货币,将允许在线支付直接从一方发送到另一方,不需要经过金融机构。数字签名提了供解决方案的一部分,但是主要的优势丢失了,如果仍然需要信任的第三方来预防双重支付。我们提出一个使用对等网络的方案来解决双重支付问题。将交易的网络时间戳,散列进基于散列的工作证明的扩展中的链,形成没有重做工作证明地无法更改的记录。 最长的链不仅可以证明所见到的证明的事件的顺序的证明,而且可以证明它来自最大的CPU算力池。只要大多数CPU算力由不协作攻击网络的节点控制,它们将生成最长的链并超过攻击者。 网络本身需要最小的结构。 消息以尽力为基础广播,节点可以随意离开并重新加入网络,接受最长的工作证明的链,作为离开后发生的事情的证明。

1.介绍

在互联网上的金融必须依赖金融机构的服务作为可信任的第三方来处理电子支付。当系统工作足够良好对于大多数交易, 它仍然受困于固以信任为基础的模型的弱点。完全不可逆的交易是不真实的可能,当金融机构不能避免调解纠纷。调解的花费怎加了交易的花费,限制了最小使用交易大小并且切断了小散交易的坑,并且有一个更广泛代价在丢失了能力去创建不可逆支付为不可逆服务。对于有可能的逆转,需求来自相信差异。商人必须机警的对他们的客户,向他们提供比他们需要的更多信息。一定比例的欺诈被认为是不可避免的。他们代价和支付无把握能被避免在一个人通过使用物理的货币,但没有机制存在付款转向一个通信信道的无可信。

为什么需要基于密码学证明而不是信任电子支付系统?允许任何两个有意愿的当事人去直接彼此交易不需要被信任的第三方机构。反向计算不可行的交易将保护卖方免受欺诈。常规托管机制能够轻易被实现来保护买方。在这个论文中,我们提供了一个解决方法针对两次支付问题通过使用点对点分发的时间戳服务来生成计算证明按时间交易前后排序的交易订单。系统是加密的一旦诚实的节点全体的控制更多的CPU 算力而不是任何共同协作组织只要诚实节点比任何协作节点都能控制更多的CPU功率,系统就很安全。

2.交易

数字签名,每位拥有者传输硬币给下一个通过哈希先前交易生成的数字签名 并且下一个拥有者添加公钥进硬币的尾部。一个收款人核实签名用来确认区块的拥有权。


这个过程的问题是收款人不能确定这笔款项的拥有者没有双重支付硬币。一个常见的解决方案是引进一个被信任的中心权威,或造币厂,这样用来检查每笔交易的双重支付。每次支付之后,硬币必须被返回到铸币厂来发行新币,只有硬币发行自铸币厂被信任不能被双重支付。这个解决方案存在的问题时整个的金钱系统依赖公司的运营铸币厂,有每一个交易必须经过她们,就像银行。

我们需要一种方法让收款人知道先前的拥有者没有签名任何早先的交易。为了我们目的,最早的交易被计数,因此我们不需要关心后面尝试双重支付。这唯一的方式去确认缺席的交易是知道所有的交易。铸造厂为基础的模型里,铸币厂了解所有的交易并且判断那一个第一个。为了达到这些没有信任的部分,交易必须被公开宣布,并且我们需要一个系统来给参与者去同意他们收到的是独一的订单历史,收款人需要证明每次交易的时间里,大量的节点同意它是第一个收到的。

3.时间戳服务

我们提出的方案开始于一个时间戳服务,一个时间戳服务运作起来通过哈一个区块内希多个可以被时间戳标记的项目并且广泛的发布哈希,就像在报纸或使用网络提交,时间戳教授数据必须及时的存在,明显的,为了进入哈希,每个时间戳包括先前时间戳的初始化哈希,形成链,对于每个附加的时间戳加强了在它之前的。

4. 工作量证明

为了实现基于点对点服务的分布式时间戳服务器,我们将需要使用类似于Adam Back的Hashcash的工作证明,而不是时报纸或使用网站。工作证明涉及扫描散列时的值,例如使用SHA-256,散列以零位开始。所需的平均工作量是所需零位数的指数,可以通过执行单个散列来验证。

对于我们的时间戳网络,我们实现工作量证明通过在区块中增长直到区块哈西出需要的0比特数值被找到。一旦CPU的努力已经扩展到让它满足工作量证明,已形成的区块不能被改变没有重做证明的情况下。当后来在后面链上他,用来改变区块的工作量就包括重做它后面链的工作证明。

我们通过增加增加块中的随机数来实现工作证明,直到找到给出块的散列为必须的零位的值。一旦CPU的努力已经耗尽,使其满足工作证明,该块不能改变而不重做工作。因为后面的区块链接着他,用来改变区块的工作将包括重做其后面所有的区块。
随稍后的块连接后,更改块的工作将包括重新生成块后的所有快。工作量证明也解决了在多数决策中的代表性问题。如果大多数是基于一IP地址一票,那么可能会被任何能够分配许多IP的人颠覆。工作证明本质上是一个CPU一票。大多数的决定由最长的链为代表的,它具有投入最大的工作证明。如果多数的CPU算力由诚实的节点控制,诚实的链将增长最快,超过任何竞争链。为了修改过去的一个块,攻击者必须重做块的工作证明和它之后所有的的块,然后赶上并超越诚实节点的工作。稍后我们将会显示,随着后续的块被添加,慢速攻击者追赶的概率呈指数减小。

以补偿越来越多的硬件速度和随时间推移运行节点的兴趣,工作难易程度取决于平均每小时块数的移动平均值,如果生成速度太快,难度就会增加。

5.网络

运行网络的步骤如下:

  • 新的交易广播到所有节点
  • 每个节点将新交易采集到块中。
  • 每个节点致力于为自己块找到一个困难的工作证明。
  • 当节点找到工作证明,会将该块向所有节点广播。
  • 节点只有当其中的所有交易都有效并且尚未花费时才接受该块。
  • 节点通过在链中创建下一个块,来表示它们对块的接受,使用已接受块的哈希值作为以前的哈希值。

节点总是认为最长的链是正确的,并将继续努力扩展它。如果两个节点同时广播下一个块的不同版本,则某些节点可以首先接收一个或另一个节点。在这种情况下,他们工作在他们收到的第一个,但保存另一个分支,以防万一它变得更长。当找到下一个工作证明,一个分支变得更长时,关系将被打破;在另一个分支上工作的节点将切换到较长的节点。

新的交易广播不一定需要到达所有节点。只要他们到达很多节点,他们就会很快进入一个块。广播也容忍丢弃的消息。如果一个节点没有接收到一个块,它将在接收到下一个块并请求它接收到一个块时请求它。

6.动机

按照惯例,一个块中的第一个交易是一个特殊的交易,它启动块的创建者所拥有的新硬币。这增加了节点支持网络的动机,并提供了一种初始分配硬币流通的方式,因为没有中央颁发这些权限。新增硬币数量不断增加,类似于黄金矿工投入资金,以增加黄金流通。在我们这种情况下,是花费时间和电力的CPU。

激励也可是用交易费资助。如果交易的输出值少于输入值,差别是交易费被加入到激励块拥有的交易。一旦预定数量的硬币进入循环状态,激励措施就可以完全转换成交易费用,并且完全无通货膨胀。

激励可能有助于鼓励节点保持诚实。如果一个贪婪的攻击者能够组装比所有诚实的节点更多的CPU电力,他将不得不选择使用它来欺骗人们窃取他的付款,或者用它来产生新的硬币。他应该通过规则来发挥更有利可图,这样的规则比其他人合并更多的新硬币,而不是破坏自己财富的制度和有效性。

7.回收磁盘空间

一旦硬币中的最新交易被埋在足够的块之下,可以丢弃它之前的已用事务以节省磁盘空间。
为了便于此而不破坏块的哈希,交易在Merkle Tree 中进行哈希,只有根包含在块的哈希中。然后可以通过存储树的分支来压缩现有的块。内部的哈希不需要被保存

没有交易的块的头大约有80字节。如果我们假设块每10分钟生成一次,每个80字节624*365=4.2MB。截止2008年,通常使用2GBRAM的计算机系统,摩尔定律预测目前每年增长1.2GB,即使块头必须保存在内存中,存储也不应该是一个问题。

8.简便的付款验证

可以在不运行完整网络节点的情况下验证付款。用户只需要保留最长的工作证明链接块的副本,他可以通过查询网络节点来获得,直到他确信他拥有最长的链接,并获得将事务链接到块的Merkle分支 它有时间戳。他不能自己检查交易,而是通过链接到链中的一个地方,他可以看到一个网络节点已经接受了,并且在进一步确认网络已经接受之后继续添加。

如上所说,只要诚实的节点控制着网络,确认就是可靠的,但是如果网络被攻击者超载,则更容易受到攻击。当网络中的节点可以自己确认交易, 简便的方法可以是愚蠢 持续到攻击者可以持续超载网络。防止这种情况的一个策略是在网络节点检测到无效块时接受警报,提示用户的软件下载完整的块并提醒事务以确认不一致。
收到频繁付款的企业可能仍然希望运行自己的节点以获得更多的独立安全性和更快的验证。

9.组合和分割价值

虽然可以单独处理硬币,但是在转账中每一分钱都是无法实现的。允许数值被分割和合并,交易包括多个输入和输出。
通常情况下,来自较大的先前交易的单一输入或多个较小的数量输入的组合,最多两个输出:一个用于支付,一个返回发送者(如果有的话。

应该注意的是,扇出,交易取决于几个交易,而这些交易依赖于更多,这不是一个问题。 从来没有必要提取交易历史的完整独立副本。

10.隐私

传统银行模式通过限制对相关各方和受信任的第三方的信息访问来实现隐私级别。宣布所有交易的必要性公开排除了这种方法,但是仍然可以通过在另一个地方破坏信息流来保持隐私:通过保持匿名的公钥。公众可以看到有人正在向别人发送金额,但没有将交易链接到任何人的信息。这与股票交易所发布的信息水平类似,个别行业的时间和规模,“磁带”都被公开,但没有告知当事人。


附加的防火墙, 新的键值对应该被用来保持远离链接到一个常见的拥有者。一些链仍然不可避免有多输入交易,这必然表明他们的投入由同一所有者拥有。风险在于,如果密钥的所有者被显示,链接可能会显示属于同一所有者的其他交易。

11.算法

我想到一个攻击者试图生成代替链的速度快于诚实节点。即使这个达成了,他不会对任意更改开放,就像凭空创造价值或创造不属于攻击者的钱。节点作为付款接受一个非法的交易,并且诚实节点将不再接受包含他们的块。攻击者只能尝试概念交易来拿回他刚花费的钱。

我们考虑一个攻击者试图生成替代链的场景,比一般的链条更快。
即使这样做,它也不会把系统开放到任意的变化中,比如凭空赚取价值,或是拿走从不属于攻击者的钱。节点不会接受无效的交易作为付款,诚实的节点永远不会接受包含它们的块。攻击者只能尝试改变自己的交易,以收回他最近花费的钱。

诚实链和攻击者链之间的比赛可以表征为二项式随机游走。成功事件是诚实链延伸一个块,增加+1的领先,失败事件是攻击者的链条延伸一个块,将差距缩小-1。攻击者从给定的赤字追赶的概率类似于赌徒的废墟问题。

假设有一个无限信贷的赌徒开始赤字,并且可能会尝试无限次尝试达到盈亏平衡。 我们可以计算出他所追求的盈亏平衡的概率,或者攻击者追求诚实链的概率如下

p =诚实节点找到下一个块的概率
q =攻击者发现下一个块的概率
qz =攻击者将从z块后面赶上的概率

给出我们的假设p>q,随攻击者必须追赶上块增长数量,概率呈指数下降。对于他来说,如果他早日不幸运,那么他的机会就会越来越小,因为他进一步落后。

我们现在考虑新交易的接受需要等待多长时间,才能确定发件人无法改变交易。我们认为发件人是一个攻击者,希望让收件人相信他付了他一段时间,然后在一段时间过后,把它交还给自己。接收方会在发生这种情况时收到通知,但是发件人希望这样做太晚了。

接收器生成一个新的秘钥对,并在签名钱不久向发送者发送公钥。这样可以防止发件人提前准备一连串的块,直到他足够幸运地前进,然后在那时执行交易。 一旦交易发送,不诚实的发件人开始在一个并行链上秘密工作,其中包含交易的备用版本。

接受者一直等到知道交易被添加进块中并且z 块已经被链在后面。他不知道攻击者的确切进度,但假设诚实的块占用了每个块的平均预期时间,
攻击者的潜在进展将是具有预期值的泊松分布:

为了获得攻击者现在仍然可以赶上的可能性,我们可以通过从这一点赶上的概率将泊松密度乘以他所能做的进步量:


重新排列以避免将分布的无限尾部相加...


转换为C代码...

#include <math.h>
 double AttackerSuccessProbability(double q, int z)
   {
       double p = 1.0 - q;
       double lambda = z * (q / p);
       double sum = 1.0;
       int i, k;
       for (k = 0; k <= z; k++)
       {
           double poisson = exp(-lambda);
           for (i = 1; i <= k; i++)
               poisson *= lambda / i;
           sum -= poisson * (1 - pow(q / p, z - k));
}

return sum;}

运行一些结果,我们可以看到概率随z指数下降。

   q=0.1
   z=0    P=1.0000000
   z=1    P=0.2045873
   z=2    P=0.0509779
   z=3    P=0.0131722
   z=4    P=0.0034552
   z=5    P=0.0009137
   z=6    P=0.0002428
   z=7    P=0.0000647
   z=8    P=0.0000173
   z=9    P=0.0000046
   z=10   P=0.0000012
   q=0.3
   z=0    P=1.0000000
   z=5    P=0.1773523
   z=10   P=0.0416605
   z=15   P=0.0101008
   z=20   P=0.0024804
   z=25   P=0.0006132
   z=30   P=0.0001522
   z=35   P=0.0000379
   z=40   P=0.0000095
   z=45   P=0.0000024
   z=50   P=0.0000006
Solving for P less than 0.1%...

   P < 0.001
   q=0.10   z=5
   q=0.15   z=8
   q=0.20   z=11
   q=0.25   z=15
   q=0.30   z=24
   q=0.35   z=41
   q=0.40   z=89
   q=0.45   z=340

12.结论

我们已经提出一个不依赖信任的电子交易系统。我们从通常的数据签名硬币框架开始,提供了强有力的控制权,但不完整,没有办法防止双重支出。为了解决这个问题,我们提出了一个使用工作证明的对等网络来记录交易的公共历史,如果诚实的节点控制大部分的CPU算力,对于想要更改的攻击者来说,这很快变成在计算上是不切实际的。

该网络在非结构化的简单性方面是强大的。节点很少协调工作。他们不需要被标识,因为消息不被路由到任何特定的地方,并且只需要尽力地传送。节点可以随意离开或重新加入网络,接受工作证明链,作为他们经历过的事情的证明。他们以CPU能力,通过致力于扩展块,来表达接受块,拒绝在块上工作,来拒绝不合法的块。任何需要规则和激励 任何所需的规则和激励措施都可以通过这种共识机制来实施。

引用

[1]   W. Dai, "b-money," [http://www.weidai.com/bmoney.txt](http://www.weidai.com/bmoney.txt), 1998.
[2]   H. Massias, X.S. Avila, and J.-J. Quisquater, "Design of a secure timestamping service with minimaltrust requirements," In 20th Symposium on Information Theory in the Benelux, May 1999.
[3]   S. Haber, W.S. Stornetta, "How to time-stamp a digital document," In Journal of Cryptology, vol 3, no2, pages 99-111, 1991.
[4]   D. Bayer, S. Haber, W.S. Stornetta, "Improving the efficiency and reliability of digital time-stamping,"In Sequences II: Methods in Communication, Security and Computer Science, pages 329-334, 1993.
[5]   S. Haber, W.S. Stornetta, "Secure names for bit-strings," In Proceedings of the 4th ACM Conferenceon Computer and Communications Security, pages 28-35, April 1997.
[6]   A. Back, "Hashcash - a denial of service counter-measure,"[http://www.hashcash.org/papers/hashcash.pdf](http://www.hashcash.org/papers/hashcash.pdf), 2002.
[7]   R.C. Merkle, "Protocols for public key cryptosystems," In Proc. 1980 Symposium on Security andPrivacy, IEEE Computer Society, pages 122-133, April 1980.
[8]   W. Feller, "An introduction to probability theory and its applications," 1957.

版本

2017年06月30日11:19:30 :添加了图片,用代码块显示代码,散落的段落组合在一起。
2017年07月20日23:24:13:更新了摘要,网络第一段。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,670评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,928评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,926评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,238评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,112评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,138评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,545评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,232评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,496评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,596评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,369评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,226评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,600评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,906评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,185评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,516评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,721评论 2 335

推荐阅读更多精彩内容