推广 热搜: 采购方式  滤芯  甲带  带式称重给煤机  气动隔膜泵  减速机型号  无级变速机  链式给煤机  履带  减速机 

btc白皮书中文汤友军用微信翻译而成,借花献佛

   日期:2026-01-11 18:48:03     来源:网络整理    作者:本站编辑    评论:0    
btc白皮书中文汤友军用微信翻译而成,借花献佛

比特币:一个对等电子现金系统

中本聪satoshin@gmx.com www.bitcoin.org

摘要。纯P2P版本的电子现金将允许在线支付直接从一方发送到另一方,而无需通过金融机构。数字签名提供了部分解决方案,但如果仍然需要一个可信赖的第三方来防止双重支出,主要好处就会丧失。我们提出了一种使用点对点网络解决双重消费问题的方案。该网络通过将事务哈希化为基于哈希的作业证明链来对它们进行时间戳设置,形成一个记录,如果不重做作业证明,则无法更改。最长的链条不仅证明了所目睹事件的顺序,还证明了这些事件来自最大的CPU能力池。只要大多数CPU端口由不合作攻击网络的节点控制,它们就会生成最长的链,并超过攻击者。网络本身需要最少的结构。消息在尽最大努力的基础上进行广播,节点可以随意离开和重新加入网络,接受最长的工作证明链作为他们离开时发生的事情的证明。

1. 介绍

互联网上的商业几乎完全依赖金融机构作为可信赖的第三方来处理电子支付。虽然该系统在大多数交易中运行良好,但仍然存在基于信任模型的潜在弱点。完全不可逆转的交易实际上是不可能的。因为金融机构无法避免调解纠纷。调解费用增加了交易成本,限制了最低的实际交易规模,切断了小额临时交易的可能性,并且在失去为不可逆转的服务支付不可逆转费用的能力方面存在更广泛的成本。随着逆转的可能性,信任的必要性也就显而易见。商人必须警惕他们的客户。向他们索取比他们本来需要的更多信息。一定比例的欺诈被认为是不可避免的。这些费用和支付不确定性可以通过使用实物货币亲自来避免,但没有任何机制可以在没有受信任方的情况下通过通信渠道进行支付,

需要的是基于加密证明而不是信任的电子支付系统,允许任何两个愿意的方直接进行交易,而不需要一个可信的第三方。计算上不切实际的交易可以防止卖方欺诈,而常规托管机制可以很容易地实施以保护买方。在这篇论文中,我们提出了一种解决方案,使用点对点分布式时间戳服务器来生成交易时间顺序的计算证明,以解决双重支出问题。只要诚实的节点集体控制比任何合作攻击者节点组更多的CPU功率,系统是安全的。

2. 交易

我们把电子硬币定义为一串数字签名。每个所有者通过数字签名将前一交易的散列和下一个所有者的公钥转移到下一个所有者,并将它们添加到硬币的末尾。收款人可以验证签名,以验证所有权链。

交易 交易 交易所

公钥所有者1的公钥所有者2的公钥所有人3的公钥

哈希哈希

真理

韦尔蒂

所有者1的所有者2的所有者3的所有者

签名 签名   igr

私钥所有者1的私钥所有者2的私钥车主3的私钥

当然,问题在于收款人无法核实其中一位所有者没有重复花费硬币。一个常见的解决方案是引入一个可信赖的中央机构,或铸币局,检查每笔交易是否存在双重支出。每次交易后,硬币必须退回铸币厂重新发行,只有直接从铸币厂发行的硬币才被信任不会重复使用。这种解决方案的问题在于,整个货币系统的命运取决于运营铸币厂的公司,每笔交易都必须经过它们,就像银行一样。我们需要一种方法让收款人知道以前的所有者没有签署任何早期交易。对我们来说,最早的交易才是最重要的,所以我们不会在意以后再花两倍的钱。确认没有交易的唯一方法是了解所有交易。在基于铸币局的模型中,铸币局了解所有交易,并决定哪笔交易先到。为了在没有受信任方的情况下做到这一点,交易必须公开宣布[1],我们需要一个系统,让参与者就他们被接收的顺序达成一致。收款人需要证明,在每次交易时,大多数节点都同意它是第一个收到的。

3. 时间戳服务器

我们提出的解决方案从一个时间戳服务器开始。时间戳服务器的工作原理是获取要进行时间戳处理的项目块的哈希值,并广泛发布该哈希值(例如在报纸或Usenet帖子中[2-5])。时间戳显然证明了数据在当时一定存在,以便进入哈希。每个时间戳在其哈希中包含之前的时间戳,形成一个链,每个附加的时间戳都会加强之前的时间戳。

4. 工作证明

要在对等基础上实现分布式时间戳服务器,我们需要使用类似于亚当·巴克(Adam Back)的Hashcash的“工作量证明”系统。[6],而不是报纸或 Usenet 帖子。工作量证明涉及扫描一个值,当该值经过哈希处理(如使用 SHA-256)时,哈希值以零位开头。所需的平均工作量与零位数量呈指数级增长,可以通过执行一次哈希来验证。

对于我们的时间戳网络,我们通过增加块中的nonce值来实现工作量证明,直到找到一个值使得该块的哈希满足所需的零位。一旦CPU努力使其满足工作量证明,则无法在不重做工作的情况下更改该块。随着后来的块在其后链接,更改该块的工作将包括重做其后的所有块。

出块

前缀哈希值 非ce 前缀哈希值 非ce

Tx Tx Tx Tx 

工作量证明还解决了在多数决策中确定代表权的问题。如果多数基于一个IP地址一票,它可能会被任何能够分配多个IP地址的人颠覆。工作量证明本质上是一CPU一票。多数决策由最长的链表示,该链具有最大的工作量证明努力投入。如果大多数CPU能力由诚实节点控制,那么诚实链将增长最快,超过任何竞争链。要修改过去的块,攻击者将不得不重新计算该块及其之后所有块的证明工作量,然后赶上并超过诚实节点的努力。我们稍后将证明,随着后续块的添加,较慢的攻击者赶上概率呈指数级下降。

为了补偿硬件速度的增加和随着时间的推移对运行节点的兴趣的变化,工作量证明难度由移动平均数确定,目标是每小时的平均块数。如果生成得太快,难度就会增加。

5. 网络

运行网络的步骤如下:

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

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

3)每个节点都在为其块寻找一个困难的证明工作。

4) 当一个节点找到一个工作量证明时,它会广播该区块给所有节点。

5)节点只有在块中的所有交易都是有效的且没有被使用过的情况下才会接受该块。

6)节点通过创建下一个块来表明它们接受该块。

链,使用已接受的块的哈希作为前一个哈希。

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

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

6. 激励

按照惯例,区块中的第一笔交易是一笔特殊交易,它启动了该区块创建者拥有的新硬币。这增加了节点支持网络的动力,并提供了一种最初将硬币分发到流通中的方法,因为没有中央机构来发行它们。稳定增加一定数量的新硬币类似于金矿工花费资源将黄金添加到流通中。在我们的例子中,花费的是 CPU 时间和电力。

激励措施也可以用交易费用来资助。如果交易的产出值小于其输入值,则差额是交易费用,该费用被添加到包含该交易的区块的激励值中。一旦预定数量的硬币进入流通,激励措施就可以完全过渡到交易费用,并且完全没有通货膨胀。

这种激励措施可能有助于鼓励节点保持诚实。如果一个贪婪的攻击者能够组装比所有诚实节点更多的 CPU 能力,他将不得不选择使用它来通过窃取他的付款来欺骗人们,或者使用它来生成新硬币。他应该发现按规则行事更有利可图,这种规则比其他人加起来的钱更多,对他有利,而不是破坏系统和他自己财富的有效性。

7. 回收磁盘空间

一旦硬币中的最新交易被埋在足够多的区块下,之前花费的交易就可以被丢弃以节省磁盘空间。为了在不破坏区块哈希值的情况下实现这一点,交易在 Merkle Tree [7][2][5] 中进行哈希处理,只有根包含在区块的哈希值中。然后可以通过从树的树枝上下来压缩旧块。不需要存储内部哈希值。

区块头 (Block Hash) 区块头 (Block Hash) 

上一个 Hash Nonce 上一个 Hash Nonce 

Root Hash Root Hash 

哈希 01 哈希 23 哈希 01 哈希 23 

哈希 0 哈希 1 哈希 2 哈希 3 哈希 2 哈希 3 

发送0

从区块中修剪 tx0-2 后在 Merkle 树中散列的交易 

没有交易的区块头大约为 80 字节。如果我们假设每 10 分钟生成一次区块,则每年 80 字节 * 6 * 24 * 365 =4.2MB。截至 2008 年,计算机系统通常以 2GB RAM 出售,摩尔定律预测当前增长

每年 1.2GB,即使区块头必须保存在内存中,存储也应该不是问题。

8. 简化的付款验证

可以在不运行完整网络节点的情况下验证付款。用户只需要保留最长工作量证明链的区块头副本,他可以通过查询网络节点来确认自己拥有最长的链,并获取将交易链接到其时间戳所在的区块的默克尔分支。他不能自己检查交易,但通过将交易链接到链中的某个位置,他可以看到一个网络节点已经接受它,之后添加的区块进一步确认网络已经接受它。

最长的工作量证明链

块头 块头 块头

前一个哈希值 非ce 前一个哈希值 非ce 前个哈希值 非ce

Merkle 根 Merkle 根 Merkle 根

哈希01 哈希23

Merkle分支用于Tx3

哈希2 哈希3

Tx3

因此,只要诚实节点控制网络,验证就是可靠的,但如果网络被攻击者控制,则更容易受到攻击。虽然网络节点可以自行验证交易,但简化方法可能会被攻击者伪造的交易欺骗,只要攻击者能够继续控制网络。一种防范策略是在网络节点检测到无效块时接受它们的警报,从而提示用户软件下载整个块和已警告的交易,以确认不一致。频繁收到付款的企业可能仍然希望运行自己的节点,以获得更独立的安全性和更快的验证。

9. 组合和拆分值

虽然可以单独处理硬币,但为每次转账的每一分钱进行单独交易是不方便的。为了允许价值被拆分和组合,交易包含多个输入和输出。通常会有来自之前较大交易的单个输入或多个输入组合较小金额,最多有两个输出:一个用于支付,一个将任何找零返回给发送者。

需要注意的是,扇出(即一个事务依赖于多个事务,而这些事务又依赖于更多的事务)在这里不是一个问题。永远不需要提取一个事务历史的完整独立副本。

10. 隐私

传统银行模式通过限制信息访问方和参与方以及受信任的第三方来实现一定程度的隐私。公开宣布所有交易的必要性排除了这种方法,但可以通过在另一个地方中断信息流来保持隐私:通过保持公钥匿名。公众可以看到有人向其他人发送金额,但没有将交易与任何人联系起来的信息。这与证券交易所发布的信息级别类似,其中单个交易的时间和大小(即“磁带”)被公开,但没有透露交易双方的身份。

传统隐私模型

身份 交易 可信 第三方 交易对手方 公共

新的隐私模式

身份 交易 公共

作为额外的防火墙,每个交易都应该使用新的密钥对,以防止它们与共同的拥有者相关联。对于多输入交易,一些关联仍然不可避免,这必然会揭示它们的输入属于同一拥有者。风险在于,如果密钥的拥有者被揭示,关联可能会揭示属于同一拥有者的其他交易。

11. 计算
我们认为攻击者试图生成比诚实链更快的替代链的场景。即使实现了这一点,它也不会使系统对任意更改开放,例如凭空创造价值或拿走从未属于攻击者的钱。节点不会接受无效的交易作为付款,诚实的节点永远不会接受包含这些交易的区块。攻击者只能尝试更改他自己的交易之一,以收回他最近花费的资金。
诚实链和攻击者链之间的竞赛可以描述为二项随机游动。成功事件是诚实链增加一个区块,使其领先优势增加1,而失败事件是攻击者链增加一个区块,使其差距减少1。


攻击者从给定亏空赶上来的概率类似于Gambler's Ruin问题。假设一个信用无限的赌徒从亏空开始,并可能进行无限次的尝试以达到收支平衡。我们可以计算他达到收支平衡的概率,或者攻击者赶上诚实链的概率,如下所示:[8]:
p = 诚实节点找到下一个块的概率 q = 攻击者找到下一个块的概率
q== 攻击者从 z 个区块后赶上来的概率
r
s假设p > q,随着攻击者必须追赶的阻塞数量增加,概率会指数级下降。由于他的胜算不大,如果他不早早地幸运地向前冲刺,随着他进一步落后,他的机会就会变得微乎其微。
我们现在考虑新交易的收件人需要等待多长时间才能充分确定发件人不能更改交易。我们假设发件人是攻击者,他想让收件人相信他支付了他一段时间,然后在一段时间后改为回报自己。当这种情况发生时,接收方会收到警报,但发送方希望为时已晚。
接收方生成一个新的密钥对,并在签名前不久将公钥交给发送方。这使得发件人无法提前准备区块链链,因为发件人会不断地处理区块链链,直到他有幸提前到达足够远的距离,然后在那个时刻执行交易。一旦交易被发送出去,不诚实的发送者就开始秘密地建立一个包含其交易的替代版本的并行链。
接收方等待,直到交易被添加到块中,并且在交易之后链接了z块。他不知道攻击者的确切进度,但假设真实的块花费了每个块的平均预期时间,攻击者的潜在进度将是一个具有预期值的泊松分布:
λ==/0
为了得到攻击者现在仍然可以追上的概率,我们乘以他可能取得的每一次进步的泊松密度乘以他从那时起可以追上的可能性:
ifk>z|
重新排列以避免求和分布的无限尾...
1-[1 (q/ >)“-^)
k=0

转换成C代码...
#include <math.h>
双攻击者成功概率(双q,数z){
双倍p=1.0-q;
双λ=z*(q/p);双和=1.0;int i, k;
对于(k = 0;k <= z;k++)
双泊松 = exp(-lambda); for (i = l; i<= k; i++)
泊松*=λ/i;
和 -- 泊松 * (1 - pow(q/p,z - k));}。
回报金额;

运行一些结果,我们可以看到概率随z指数下降。
9=0.1
2=0 P=1.0000000
P=0.2045873
2-2 P=0.0509779
2-3 P=0.0131722
2-4 P=0.0034552
P=0.0009137 P=0.0002428
2-7 P=0.0000647
2=8 P=0.0000173
2=9 P=0.0000046
=-10 P=0.0000012
q=0.3
0 P=1.0000000
==5 P=0.1773523
2=10 P=0.0416605
z-15 P=0.0101008
2-20 P=0.0024804
2*30 2=25 P=0.0001522 P=0.0000379 P=0.0006132
P=0.0000095 P=0.0000024 P=0.0000006
解决P小于0.1%的问题...P<0,001克-8.10
-0.20 x=11
q=0.25 ==15
q=0.30 =-24
q=0.35 q=0.40
q=0.45==340


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

参考资料
[1]W. Dai,“b-money”,http://www.weidai.com/bmoney,txut,1998
[2]H.马西亚斯,X.S.阿维拉和J.-J.奎斯夸特,“设计一个最少的安全时间戳服务
信任要求,“1999年5月,在本克勒大学举办了20次关于信息理论的研讨会,
[3]S. Haber, W.S. Stornetta,“如何对数字文档进行时间戳”,载于《密码学杂志》,第3卷, No。
2,第99—111页,1991年。
[4]D.Bayer, S. Haber, W.S. Storetta,“提高数字时间标记的效率和可靠性”,
载于序列I:通信、安全和计算机科学的方法,第329-334页,1993年,[5]S Haber, W.S. Stornema,“位字符串的安全名称”,《第41届ACM会议论文集》
关于计算机和通信安全,第28-35页,1997年4月。[6]A. 回,“哈希现金——一种拒绝服务对策”,
http://www.hashcash.onwnasersuhishcash.ndf. 2002.
[7]RC. “公钥密码系统的协议”,I proc。1980年安全问题专题讨论会
Prinacs,IEFE计算机学会,第122-133页,1980年4月。
[8]介绍概率论及其应用〉,1957。

欢迎转载

如有错误,也希望大家指正和探讨

 
打赏
 
更多>同类资讯
0相关评论

推荐图文
推荐资讯
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  皖ICP备20008326号-18
Powered By DESTOON