主页 > imtoken华为 > 中本聪关于 BTC 的论文

中本聪关于 BTC 的论文

imtoken华为 2023-05-19 05:32:59

比特币:一种点对点的电子货币系统

中本聪

satoshin@gmx.com

从 bitcoin.org/bitcoin.pdf 翻译成简体中文

来自@shdxiangxiaoxiang.io

抽象的。 完全点对点的电子货币应该允许在线支付直接从一方发送到另一方,而无需通过金融机构。 数字签名提供了部分解决方案,但如果仍然需要受信任的第三方来防止双重支出,那么电子货币的主要好处就失去了。 我们提出了一种使用对等网络解决双重支出问题的方法。 网络通过将交易散列到一个不断增长的基于散列的工作证明链中来为交易打上时间戳,形成一个记录,如果不重做工作证明就无法更改。 最长的链不仅是所目击事件顺序的证据,而且证明它本身是由最大的 CPU 能力池产生的。 只要大部分 CPU 能力由不打算联合攻击网络的节点控制,这些节点就会生成最长的链并超过攻击者。 网络本身只需要一个最小的架构。 信息将尽最大努力广播,节点可以随时离开和重新加入网络,只需接受最长的工作量证明链作为他们离开时发生的事情的证据。

简介 互联网商务几乎完全依赖金融机构作为可信赖的第三方来处理电子支付。 虽然这个系统对于大多数交易来说已经足够好了,但它仍然存在基于信任的模型的固有缺点。 由于金融机构不可避免地需要仲裁纠纷,因此完全不可撤销的交易几乎是不可能的。 仲裁成本增加了交易成本,限制了最低实际交易金额,杜绝了日常小额交易的可能性,并且由于不支持不可撤销支付,因此不可撤销服务的支付将需要更大的成本。 由于交易有可能被逆转,因此对信任的需求将更加广泛。 商家必须对他们的客户保持警惕,用超出他们需要的信息来困扰他们。 一定比例的欺诈被认为是不可避免的。 虽然这些成本和支付的不确定性可以通过亲自使用实物货币来避免,但没有在不引入可信方的情况下通过通信渠道进行支付的机制。 我们需要的是一个基于密码学而不是信任的电子支付系统,它允许任何愿意交易的双方直接进行交易,而无需可信任的第三方。 交易的计算不可逆性将保护卖家免受欺诈,用于保护买家的程序化合约机制也应该相对容易实施。 在本文中,我们通过使用点对点分布式时间戳服务器为一系列基于时间的交易生成计算证明,提出了双重支出问题的解决方案。 只要诚实节点集体控制的 CPU 算力大于每个协作攻击节点组的 CPU 算力,系统就是安全的。

交易 我们将电子货币定义为数字签名链。

哈希值与md5_哈希值btc_哈希值 算法

每个所有者通过在硬币末尾添加数字签名将硬币转移给下一个所有者,该数字签名是先前交易的哈希值和下一个所有者的公钥。 收款人可以通过验证数字签名来验证自己是链的所有者。 这里的问题是收款人无法验证其中一位所有者没有双花货币。 一种常见的做法是引入一个受信任的中央机构或铸币厂来检查每笔交易是否存在双重支出。 每次交易后都需要将币返还给铸币厂换取新币,只有铸币厂直接发行的币才能验证没有被双花。 这个方案的问题在于,整个货币体系的命运取决于运营铸币厂的公司,每一笔交易都需要经过它们,就像银行一样。 我们需要一种方法让收款人知道之前的硬币所有者没有签署任何更早的交易。 对我们来说,最早的交易是唯一有效的交易,所以我们不需要关心此交易后面的双花尝试。 确保交易不存在的唯一方法是了解所有以前的交易。 在铸币厂模型中,铸币厂知道所有交易并且可以确定哪笔交易先到。 为了在不引入可信方的情况下实现这一点,所有交易都必须公开发布[1],并且一个系统可以让所有参与者就交易接收顺序的单一历史达成一致。 对于每笔交易,收款人需要证明大多数节点同意该交易是第一个被接收的。 3. 时间戳服务器 我们提出的方案从时间戳服务器开始。 时间戳服务器计算包含多个需要时间戳的数据项的块的散列,并广泛分发此散列,例如在报纸或新闻组帖子中 [2-5]。 时间戳可以证明,要得到这个哈希值,显然当时数据一定是存在的。 每个时间戳的哈希值被合并到前面的时间戳中,形成一条链,后面的时间戳进一步增强前面的时间戳。

哈希值btc_哈希值 算法_哈希值与md5

4. 工作量证明 为了实现点对点时间戳服务器,我们需要使用像 Adam Back 的哈希货币 [6] 这样的工作量证明系统来代替报纸或新闻组帖子。 工作证明需要搜索一个数字,以便在对其进行哈希处理时(例如使用 SHA-256),生成的哈希值以几个 0 位开头。 所需的平均工作量随着所需的 0 位呈指数增长,验证只需要一个哈希。 对于我们的时间戳网络。 我们通过向块添加一个随机数来实现工作量证明,直到找到一个满足块所需的 0 位散列的数字。 一旦消耗了 CPU 能力来使一个块满足工作量证明,就不能在不重做工作的情况下更改该块。 由于后面的块是在这个块之后链接的,因此更改此块将需要重做所有后续块。

哈希值 算法_哈希值与md5_哈希值btc

工作量证明还解决了确定在多数决定中如何投票的问题。 如果多数通过 IP 地址投票,它可以被可以分配大量 IP 地址的人颠覆。 工作量证明本质上是每个 CPU 的投票。 最长的链代表多数决定,因为最大的计算工作证明工作都用于该链。 如果大部分 CPU 算力由诚实节点控制,则诚实链将增长最快并超越其他竞争链。 要修改过去的一个块,攻击者必须重做这个块和所有后续块的工作量证明,以赶上并超过诚实节点的工作量。 稍后我们将展示,随着后续块的添加,较慢的攻击者赶上诚实节点的概率呈指数下降。 为了抵消硬件计算速度的提升,平衡不同时期运行节点的利益,工作量证明的难度将通过移动平均法来确定每小时产生的平均区块数。 如果区块生成速度过快,生成难度会增加。

5.网络运行网络的步骤如下:

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

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

3) 每个节点为其块找到工作量证明。

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

5) 只有当区块中的所有交易都有效并且之前没有支付过时,节点才会接受该区块。

6) 节点通过使用这个块的散列作为前一个散列在链中创建下一个块来接受这个块。 节点始终认为最长的链是正确的,并继续努力扩展它。 如果两个节点同时广播不同的下一个块,一些节点可能先接收一个,而其他节点可能先接收另一个。 在这种情况下,节点根据它们收到的第一个块工作,但也会保存另一个分支,以防它变成更长的链。 当找到下一个工作量证明时哈希值btc,僵局被打破,一个分支变得更长; 在另一个分支上工作的节点切换到更长的链。 新交易的广播不必到达所有节点。 只要到达一些节点,很快就会进入一个区块。 块广播也可以容忍消息丢失。 如果一个节点没有收到某个块,它会在收到下一个块时发现它缺少一个块并请求这个块。

6. 激励我们同意一个区块中的第一笔交易是区块创建者开启属于他的新币的特殊交易。 这增加了节点支持网络的激励,并提供了一种将货币分配到流通中的方法,因为没有中央机构发行货币。 新货币以固定的数量稳步增加,就像金矿开采者消耗资源并增加黄金进入流通一样。 对我们来说,消耗是 CPU 时间,电力激励也可以通过交易费用来实现。 如果交易的输出值小于其输入值,差额将作为交易费用添加到包含该交易的区块的激励中。 一旦预定数量的货币进入流通,激励措施将仅包括交易费用,从而完全避免通货膨胀。 激励措施将有助于鼓励节点保持诚实。 如果一个贪婪的攻击者有能力积累比所有诚实节点更多的 CPU 算力,他将面临通过骗回付款或利用算力生成新货币来欺骗他人的选择。 他会发现遵守规则比破坏系统的有效性和他自己的财产更有利,因为这些规则允许他获得比其他人更多的新钱。

7.回收磁盘空间一旦一种货币的最新交易被足够多的区块覆盖,之前的支付交易就可以被丢弃以节省磁盘空间。 为了在不破坏区块哈希的情况下促进这一点,交易被哈希到 Merkle 树 [7][2][5] 中,并且只有根节点包含在区块哈希中。 旧块可以通过修剪树枝来压实。 分支内的散列不需要保存。

哈希值 算法_哈希值与md5_哈希值btc

每个没有交易的区块头大约是 80 字节。 如果每10分钟产生一个区块,每年80字节*6*24*365=4.2MB,2008年销售的典型电脑内存为2GB,摩尔定律预测现在内存每增加1.2GB年,所以连区块头都必须存在内存中,存储不是问题。

8. 简化支付验证无需运行全网络节点即可进行支付验证。 用户只需要拥有最长工作量证明链的区块头副本。 他可以通过查询其他网络节点来确认他拥有最长的链,并获得默克尔将交易链接到为交易打上时间戳的区块。 分支。 虽然他自己无法验证交易,但如果交易已经链接到链中的某个位置,则意味着网络节点已经接受了交易,附加区块进一步确认网络已经接受了它。

哈希值btc_哈希值与md5_哈希值 算法

同样,只要诚实节点控制网络,简化验证就是可靠的,但如果网络被攻击者控制,简化验证就会变弱。 虽然网络节点可以验证自己的交易,但只要攻击者继续控制网络,这种简化的方法就可能被攻击者伪造的交易所愚弄。 一种对策是在其他网络节点发现无效块时接受警告,提醒用户软件下载整个块并提醒交易检查 5 块哈希的块头(块哈希)上的随机数哈希 01 Hash Hash1230Hash23 root hash Cut off from the block Transaction 0-2 Transaction Tx1230 Transaction 被散列到 Merkle tree 区块头(block hash) last hash value 随机数 hash 01 ha Hash 0 Hash1 Hash2 Hash3Hash23 Root Hash Transaction 0 Tx1 Tx2 Tx3 区块头(Block Hash) Previous Hash Random Number Hash 01 Hash 0 Hash 1 Hash 2 Hash 3 Hash 23 Root Hash Greek Transaction 0 Transaction 1 Transaction 2 Transaction 3BlockHash01Hash2Tx3Hash23Block Header (Block Hash)Root HashPrev Hash NonceHash3BlockHash01Hash2Tx3Hash23Block Header (Block Hash)Root HashPrev Hash NonceHash3Block Hash01Hash2Transaction3Hash23Block Header ( Block Hash)Root Hash hash last hash nonce hash 3 hash 01 hash 2 hash 3 hash 23 区块头 merkle root la st hash nonce block header merkle root last hash nonce block header merkle root 哈希 nonce 交易 3 的 Merkle 分支交易 3 具有最长的工作量证明链一致性。 接受频繁付款的公司可能仍需要运行自己的节点以获得更独立的安全性和更快的付款确认。

9.合并和拆分交易金额虽然单独处理每种货币是可行的,但每次拆分将转账拆分为多个交易是很笨拙的。 为了允许交易被拆分和合并,一个交易将包含多个输入值和输出值。 通常是来自先前交易的一个较大的输入值或多个较小的输入值的组合,以及最多两个输出值:一个作为支付,另一个作为找零,如果有的话,返回给支付的发送方。

哈希值btc_哈希值与md5_哈希值 算法

注意这里的fan-out,就是一个transaction依赖于几个transaction,而这几个transaction又依赖于更多的transaction。 这里没有问题。 永远不需要获取交易历史的完整独立副本。

10. 隐私 传统的银行业务模式通过限制参与方和受信任的第三方对信息的访问来实现一定程度的隐私。 交易必须公开发布以防止这种方法哈希值btc,但隐私仍然可以通过阻止信息流动在其他地方得到保护:通过保持公钥匿名。 公众可以看到有人正在向其他人发送一定数量的货币,但无法将交易与单个人联系起来。 这类似于证券交易所发布的信息级别。 每笔交易的时间和交易量,即市场是公开的,但不显示交易双方是谁。

哈希值btc_哈希值 算法_哈希值与md5

作为额外的防火墙,为每笔交易使用新的密钥对可以防止它们链接到一个共同的所有者。 由于多输入值交易的存在,一些关联仍然是不可避免的,因为多输入值交易必须揭示其多个输入属于同一个所有者。 风险在于,如果密钥的所有者被泄露,协会将暴露属于同一所有者的其他交易。

11. 计算 我们考虑攻击者试图生成比诚实链更快的替代链的情况。 即使达到了这个目标,也不会让系统可以任意修改,比如凭空创造货币,或者拿走不属于他的钱。 节点永远不会接受无效交易作为支付,诚实节点永远不会接受包含无效交易的区块。 攻击者只能更改自己的一笔交易来取回前段时间花掉的钱。 诚实链和攻击者链之间的竞争可以描述为二项式随机游走。 成功事件是诚实节点延长了一个区块,两条链之间的差距增加了1。失败事件是攻击者的链延长了一个区块,两条链之间的差距减少了1.攻击者从某个滞后位置追上诚实链的概率类似于赌徒破产理论。 想象一个信用无限的赌徒,他从一定的损失开始,可能无限次地赌博,试图达到收支平衡。我们可以计算他的收支平衡,即攻击者追上诚实链的概率,如下[8]: p = 诚实节点找到下一个区块的概率 q = 攻击者找到下一个区块的概率 qz = 攻击者从后面 z 个区块赶上诚实链的概率

哈希值 算法_哈希值btc_哈希值与md5

我们假设 p > q,概率会随着攻击者需要追上的块数呈指数下降。 由于他的机会越来越多,如果他不早点幸运和快速,他跌得越远,他追上的可能性就越小。 我们现在考虑新交易的收款人必须等待多长时间才能确定付款人不能再更改交易。 我们假设付款人希望收款人相信他已经付款了一段时间,然后在一段时间后更改为还给自己。 此时会警告收款人,但付款人希望警告为时已晚。 收款人生成新的密钥对,并将公钥交给付款人,使付款人无法提前签署交易。 这可以防止付款人通过继续工作直到他幸运地获得大量领先,然后执行交易来预先设置区块链。 发送交易后,不诚实的付款人会秘密地在包含他的替代交易版本的平行链上工作。 收款人一直等到交易被添加到一个区块并且 z 个区块已经被追加。 他不知道攻击者的确切进度,但假设诚实区块在预期的平均时间内生成,则攻击者可能的进度将服从泊松分布,其期望值为:

哈希值与md5_哈希值 算法_哈希值btc

为了计算攻击者现在仍然可以追上的概率,我们将他可以达到的每个进度的泊松密度乘以他可以在该进度上追上诚实链的概率:

哈希值 算法_哈希值btc_哈希值与md5

翻译成C代码...运行得到一些结果 结果,我们可以看到概率随z呈指数下降。

哈希值 算法_哈希值与md5_哈希值btc

P < 0.001

q=0.10 z=5

q=0.15 z=8

q=0.20z=11

q=0.25 z=15

q=0.30z=24

q=0.35 z=41

q=0.40 z=89

q=0.45 z=340

12. 结论 我们提出了一个无需信任的电子交易系统。 我们从一个通用的数字签名货币系统开始,它提供了强大的所有权控制,但由于缺乏防止双重支出的方法而不完善。 为了解决这个问题,我们提出了一个点对点网络,它使用工作量证明来记录公共交易历史。 只要诚实的节点控制着大部分的 CPU 能力,交易历史就会很快变得对攻击者来说在计算上是不可变的。 . 网络之所以强大,是因为它们的结构简单。 节点可以在很少协调的情况下同时工作。 他们不需要进行身份验证,因为信息不会发送到特定位置,这只是尽力而为。 节点可以随时离开和重新加入网络,只需接受最长的工作量证明链作为它们离开时发生的事情的证据。 节点使用 CPU 算力进行投票,通过努力扩展有效块来表示接受有效块,并通过拒绝在无效块上工作来表示抵制。 任何需要的规则和激励措施都可以通过这种共识机制来执行。

参考文献 [1] W. Dai, "b-money,", 1998. [2] H. Massias, XS Avila, and J. -J. Quisquater,“具有最低信任要求的安全时间戳服务的设计”,比荷卢经济联盟第 20 届信息论研讨会,1999 年 5 月。 [3] S. Haber,WS Stornetta,“如何为数字文档添加时间戳”,在Journal of Cryptology,第 3 卷,第 2 期,第 99-111 页,1991 年。[4] D. Bayer、S. Haber、WS Stornetta,“提高数字时间戳的效率和可靠性”,序列 II:通信方法,安全和计算机科学,第 329-334 页,1993 年。

[5] S. Haber,WS Stornetta,“位串的安全名称”,第 4 届 ACM 计算机和通信安全会议论文集,第 28-35 页,1997 年 4 月。 [6]A。 返回,“Hashcash - 拒绝服务对策”,2002 年。 [7] R. c. Merkle,“公钥密码系统协议”,In Proc。 1980 年安全和隐私研讨会,IEEE 计算机协会,第 122-133 页,1980 年 4 月。[8]W。 Feller,“概率论及其应用简介”,1957 年。