区块链技术源头论文:比特币-点对点数字货币系统

作者:中本聪satoshin@gmx.com

煤油灯科技2022-02-28 17:25

摘要

点对点版本的电子货币将允许在线支付直接从一方发送到另一方,而无需通过中间的金融机构。数字签名提供了解决方案的一部分,但如果仍然需要可信的第三方来防止双重支付(双花),那么这些主要的好处就失去了意义。我们提出了一种使用对等网络解决双重支付(双花)问题的方法。网络通过将带有时间戳的事务形成一条记录,添加到基于哈希的工作量证明(PoW)的持续链中,在不重新进行工作量证明计算的情况下无法更改该记录。最长的链不仅可以证明所见证的事件记录序列,还可以证明它来自最大的CPU资源池的认可。只要网络中大部分CPU算力不会参与网络攻击,不会恶意破坏这个持续链的生长,它们就会产生最长的链并盖过可能存在的攻击者,从而能够持续保证链条上记录的可信和可靠。网络规模本身不需要很大的网络结构,消息是在网络节点之间尽最大努力广播,节点可以随意离开和重新加入网络,接受最长的工作链证明作为它们离开时发生的事情的依据。

1. 介绍

互联网上的商业几乎完全依赖金融机构作为可信的第三方来处理电子支付。虽然该系统对于大多数交易都能很好地工作,但它基于信任的模型仍然存在固有的弱点。完全不可撤回的交易实际上是不可能的,因为金融机构无法避免调解纠纷。调解成本增加了交易成本,设置了最低实际交易规模门槛,切断了小规模松散交易的可能性,而失去对不可逆服务进行不可撤回支付的能力也带来了更大的成本。由于可能出现中间撤回支付,对信任的需求变得非常重要。商家必须提防他们的客户撤回支付,向他们讨价还价,要求他们提供更多的信息。一定比例的欺诈被认为是不可避免的。这些成本和支付不确定性可以通过使用实物货币亲自避免,但缺乏在没有可信方的情况下通过网络通信渠道进行支付的机制。

我们需要的是一个基于密码证明而不是信任的电子支付系统,允许任何两个愿意的当事方直接相互交易,而不需要可信的第三方。在计算上无法撤回的交易将保护卖方免受欺诈,而常规的托管机制可以很容易地实施以保护买方。在本文中,我们提出了一种解决双重花销问题的方法,使用对等分布式时间戳服务器来生成事务时间顺序的计算证明。只要诚实的节点集体控制的CPU算力比任何联合攻击者节点组都多,系统就安全可靠的。

2. 交易

我们将电子硬币(coin)定义为一系列数字签名。每一位拥有者通过对前一笔交易的哈希数据和下一位拥有者的公钥进行数字签名并将其添加到硬币的末尾,将硬币转移到下一位拥有者。收款人可以验证签名以验证所有权链。

当然,问题是收款人无法证实其中一位拥有者没有双倍使用硬币。一个常见的解决方案是引入一个受信任的中央机构或造币厂(mint),检查每笔交易是否有双重支出。每次交易后,硬币必须归还造币厂以发行新硬币,并且只有直接从造币厂发行的硬币才不会被重复使用。这种解决方案的问题在于,整个货币系统的命运取决于运营铸币厂的公司,每一笔交易都必须通过铸币厂,就像银行一样。

我们需要一种方式让收款人知道以前的所有者没有签署任何早期交易。就我们的目的而言,最早的交易才是最重要的交易,所以我们不关心以后是否有加倍花费的企图。确认没有交易的唯一方法是了解所有交易。在基于造币厂的模型中,造币厂知道所有的交易,并决定哪一笔先到。为了在没有可信方的情况下实现这一点,交易必须公开宣布[1],我们需要一个系统,让参与者就交易接收顺序的单一历史达成一致。收款人需要证明,在每次交易时,大多数节点都同意它是第一次收到这个支付的,而不是双花的结果。

3. 时间戳服务器

我们建议的解决方案从时间戳服务器开始。时间戳服务器的工作原理是对要加时间戳的数据块Block进行哈希,并广泛发布哈希,例如在报纸或Usenet post中[2-5]。显然,为了进入哈希,时间戳证明数据必须在当时存在。每个时间戳在其哈希中包括前一个时间戳,形成一个链,每个新加入的时间戳加强它之前的时间戳。

4. 工作量证明

为了在对等基础上实现分布式时间戳服务器,我们需要使用类似于Adam Back的Hashcash[6]的PoW(Proof of work)工作量证明系统,而不是报纸或Usenet帖子。工作量证明PoW包括扫描一个值,计算该值的哈希(例如使用SHA-256),这个哈希以一系列的前导零位开始。PoW目标就是要通过枚举找到符合hash要求的一个数,枚举计算符合hash要求的数所需的平均工作量是hash值前导的零位数量的指数,可以通过执行一次哈希来验证,所以就可以调整hash目标的前导0的个数来调整计算难度。

对于时间戳网络,我们通过增加区块中的一个nonce来实现PoW工作量证明,直到找到一个数,该数所在块的哈希满足所需的前导零位数量要求。一旦CPU努力找到了符合要求的数并且生成一个区块,在不重做同样计算工作量的情况下无法更改这个区块。由于后面的区块是在它之后链接的,因此更改区块的工作将包括重做它之后的所有区块。 

PoW工作量证明还解决了在多数决策中确定代表的问题。如果多数是基于一个IP地址一票,那么任何能够分配多个IP的人都可能会破坏它。PoW工作量证明本质上是一个CPU一票。多数决策由最长的链表示,该链具有投入工作量的最大证明。如果大部分CPU能力由诚实节点控制,那么诚实链将增长最快,超过任何竞争链。要修改过去的块,攻击者必须重新验证该块及其后的所有块的工作,然后赶上并超过诚实节点的工作。我们将在后面展示,随着后续块的持续添加,较慢的攻击者追赶的概率呈指数递减。

为了补偿硬件速度的提高和随着时间的推移对运行节点的兴趣的变化,工作量证明的hash目标难度是动态的,以刚刚过去的平均每小时产生新块数为目标来确定下一个小时的目标难度。如果生成速度过快,则增加hash目标难度。

5. 网络

运行网络的步骤如下所示:

1) 新交易事务将广播到所有节点。

2) 每个节点将新交易事务收集到一个块中。

3) 每个节点都致力于为其块找到一个符合hash难度要求的随机数,实现工作量证明。

4) 当节点找到一个符合hash难度要求的随机数,它将构建一个新块,广播到所有节点。

5) 只有当块中的所有交易事务都有效且尚未使用时,节点才接受该新块。

6) 节点通过创建链中的下一个区块来表示其对块的接受,将接受块的哈希用作下一个块里面,与其他字段一起计算下一个哈希。

节点总是考虑最长链是正确的,并将继续努力扩展它。如果两个节点同时广播下一个块的不同版本,则一些节点可能首先接收一个或另一个。在这种情况下,他们处理收到的第一个分支,但保存另一个分支以防它将来变长。当发现下一个新区块且另一个分支变长时,链接将断开,原本分支上工作的节点将切换到这个较长的分支。

新的交易事务广播不一定需要到达所有节点。只要它们到达多个节点,不久就会进入一个区块。区块广播也可以容忍丢弃的消息。如果一个节点没有收到一个区块,它将在收到下一个块并意识到它错过了一个块时,主动请求错过的区块。

6.激励

按照惯例,区块中的第一笔交易是一项特殊交易,它创建一个新硬币(coin),这个新币属于这个区块的创建者,这也是矿工的收益,激励旷工挖矿。这增加了节点参与网络的积极性,这也是提供了一种发行硬币到流通中的方法,因为没有中央机构来发行硬币。稳定地增加一定数量的新硬币类似于金矿开采者花费资源将黄金添加到流通中,在我们的例子中,消耗的是CPU时间和电力。

另外一种激励,是通过交易费用来给矿工提供资金。如果交易的输出值小于其输入值,则差额为交易费,该交易费加在包含该交易的区块的激励值上。一旦预定数量(4000万枚)的硬币全部发行完成,进入流通,矿工的激励就完全转变为只有交易费用,并且完全不会出现货币超发而通货膨胀。

这种激励策略设计有助于鼓励节点保持诚实。如果一个贪婪的攻击者能够收集比所有诚实节点更多的CPU能力,那么他将不得不选择是使用它来通过偷别人的付款来欺骗人们,还是使用它来生成新的硬币。他应该发现,遵守规则比破坏制度对他自己财富的有效性更有利,遵守规则有利于他获得比其他人加起来还要多的新硬币。

7.回收磁盘空间

一旦硬币中的最新交易事务记录被掩埋在足够多的新块下,可以丢弃之前的已完成的交易事务记录以节省磁盘空间。为了在不破坏块哈希的情况下实现这一点,事务在Merkle树[7][2][5]中进行哈希,块哈希中只包含Merkle根。然后,可以通过剪断树枝来压实旧砌块。内部哈希不需要存储所有的完整区块内容。

不包含交易事务记录的块头大约是80字节。如果我们假设每10分钟生成一次块,那么80字节*6*24*365=每年4.2MB。自2008年起,计算机系统的RAM容量通常为2GB,摩尔定律预测目前的年增长率为1.2GB,因此即使所有块头必须保存在内存中,存储也不应该成为问题。

8.简化付款验证

可以在不运行完整网络节点的情况下验证付款。用户只需保留最长工作量证明链的块头的副本,通过查询网络节点,直到确信自己拥有最长的链,然后获取将事务链接到其时间戳中的块的Merkle分支。他自己无法检查交易事务,但通过将其链接到链中的其他节点,他可以看到网络节点已接受该事务,并在进一步确认网络已接受该事务后添加新块,其后每添加一块就增加确认一次。 

因此,只要诚实的节点控制网络,这种简化验证是可靠的,但如果网络被攻击者制服,验证就更容易受到攻击。虽然网络节点可以自己验证事务,但只要攻击者能够继续控制网络,简化方法就可以被攻击者捏造的事务所欺骗。防止这种情况的一种策略是,当网络节点检测到无效块时,接受来自网络节点的警报,提示用户的软件下载完整块,并提醒事务确认不一致性。经常收到付款的企业可能仍然希望运行自己的完整节点,以实现更独立的安全性和更快的验证。

9.币值的组合与分割

虽然可以单独处理硬币,但在转账过程中每一分钱都要单独进行交易是很不方便的。为了允许拆分和组合值,事务包含多个输入和输出。通常情况下,一个较大的前一笔交易会有一个输入,或者多个输入结合较小的金额,最多有两个输出:一个用于支付,另一个将更改(如果有)返回给发送方。

应该注意的是,扇出,其中一个事务依赖于多个事务,而这些事务依赖于更多事务,在这里不是问题,因为永远不需要提取事务所有历史记录的完整独立副本。

10.隐私

传统银行模式通过限制相关方和受信任的第三方对信息的访问来实现一定程度的隐私。公开宣布所有交易的必要性排除了这种方法,但仍然可以通过在另一个地方中断信息流来维护隐私:保持公钥匿名。公众可以看到有人正在向其他人发送金额,但没有将交易与任何人关联的信息。这与证券交易所发布的信息水平相似,在证券交易所中,个人交易的时间和规模即交易记录被公开,但没有告知交易双方是谁。

作为一个额外的防火墙,每个事务都应该使用一个新的密钥对,以防止它们关联到公共所有者而泄露身份。对于多输入交易,某些链接仍然是不可避免的,这必然表明它们的输入属于同一所有者。风险在于,如果密钥的所有者被泄露,关联可能会泄露属于同一所有者的其他交易。

11.计算

我们认为攻击者试图生成一个比诚实链更快的替代链场景。即使做到了这一点,它也不会使系统面临任意更改,例如凭空创造价值或拿走不属于攻击者的钱。节点不会接受无效的交易作为支付,诚实的节点也不会接受包含它们的块。攻击者只能尝试更改自己的一项交易以收回最近花费的资金,影响是非常有限的。

诚实链和攻击者链之间的竞争可以描述为二人随机游走。成功事件是诚实链延长一个区块,增加其领先+1,失败事件是攻击者的链延长一个区块,减少差距-1。

攻击者弥补给定赤字的概率类似于赌徒的破产问题。假设一个拥有无限信用的赌徒从赤字开始,并可能进行无限次的尝试以达到收支平衡。我们可以计算他达到盈亏平衡的概率,或者攻击者追上诚实链条的概率,如下[8]:

p=诚实节点找到下一个块的概率

q=攻击者找到下一个块的概率

qZ=攻击者从后面的z个区块追赶上的概率 

假设p>q,随着攻击者必须赶上的块数增加,概率呈指数下降。如果他没有在早期幸运地向前冲刺,他的机会就会随着他进一步落后而变得越来越小。

现在我们考虑一个新事务的接收者需要多长时间才能充分确定发送者不能改变事务。我们假设发送者是一个攻击者,他想让接收者相信他支付了他一段时间,然后在一段时间后将其切换为向自己支付。当这种情况发生时,会提醒接收者,但发送者希望这已经太晚了。

接收方生成一个新的密钥对,并在签名前不久将公钥提供给发送方。这就防止了发送者通过不断地工作来提前准备一个区块链,直到他足够幸运地走在前面,然后在那一刻执行事务。一旦交易被发送,不诚实的发送者就开始秘密地在包含其交易的备用版本的并行链上工作。

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

为了获得攻击者现在仍然可以追赶的概率,我们将他可以取得的每一个进步量的泊松密度乘以他从该点追赶的概率: 

重新上式排列以避免对无限分布的尾部求和 

转换为C代码

运行一些结果,我们可以看到概率随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.000046 z=10

P=0.000012

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

求解P小于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.结论

我们提出了一个不依赖第三方信任的电子交易系统。我们从通常的数字签名硬币(coin)框架开始,它提供了对所有权的强大控制,但如果没有防止双重消费的方法,它是不完整的。为了解决这个问题,我们提出了一种点对点网络,使用工作量证明PoW来记录事务的公开记录历史,如果诚实的节点控制大部分CPU算力,攻击者很快就无法更改该历史。该网络以其非结构化的简单性而健壮。节点同时工作,几乎没有协调。它们不需要被识别,因为消息不会被路由到任何特定的地方,只需要在尽最大努力的基础上进行传递。节点可以随意离开和重新加入网络,接受工作链证明作为其离开时发生的事情的证明。他们用自己的CPU算力投票,通过扩展有效块来表示接受有效块,通过拒绝处理无效块来表示拒绝。任何必要的规则和激励都可以通过这种共识机制来实施。


---煤油灯科技victorlamp.com翻译整理-----

 

完整附件下载:bitcoin a p2p Electronic cash system.pdf

你可能也喜欢这些文章

科技互联网,科技,资讯,动态,洞察,量子,计算,AI,人工智能,机器人,区块链,Web3,分布式,操作系统,OS,芯片,视频,深度,论文