主页 > 安卓怎么下载imtoken钱包 > 比特币论文:点对点电子现金系统

比特币论文:点对点电子现金系统

安卓怎么下载imtoken钱包 2023-05-23 05:40:13

概括

纯 P2P 电子现金系统允许在线支付直接从一方发送到另一方,而无需通过金融机构。数字签名技术提供了部分解决方案,但如果需要依靠第三方机构来防止“双花”问题,那么这种方案的优势就丧失了。我们建议使用 P2P 网络来解决“双花”问题。通过计算交易的哈希值,并根据哈希工作量证明将其放入连续链中,网络可以为交易打上时间戳,并生成一条除非计算工作量重现,否则无法篡改的记录。最长的链不仅证明了所有事件发生的顺序,而且证明了它来自最大的 CPU 工作者池。只要大部分 CPU 能力被诚实节点控制而不会攻击网络,它们就会形成最长的链并超过攻击者。网络本身需要最小的结构。首先,消息需要广播;然后,节点可以随意离开和加入,接受最长的链来证明离开期间发生的事情。

介绍

当前的电子商务本质上依赖金融机构作为受信任的第三方来处理电子支付。尽管该系统适用于大多数交易,但它仍然存在这种信任模型的固有缺陷。完全不可逆的交易几乎是不可能的,因为金融机构无法避免调解纠纷。协调会增加交易成本,限制最小真实交易量,并且不会降低意外交易的可能性。而由于不可逆的服务不能进行不可逆的交易,这会带来更大的损失。正因为交易可以逆转,信任就显得尤为必要。商家担心客户,他们会很麻烦地询问更多实际上不必要的信息。在这种情况下,一定比例的欺诈被认为是不可避免的。在私人使用现金的情况下,可以避免这种支出和支付的不确定性,但在通信渠道中不存在这样的机制来实现不通过第三方的支付。

我们需要的是一个基于密码证明的电子支付系统,它允许两方直接进行交易,而不需要受信任的第三方。交易在计算上是不可逆的这一事实可以防止卖家被欺骗,并使实施日常合同机制来保护买家变得简单。在论文中,我们提出了一种解决“双花”问题的方法,使用分布式 P2P 时间戳服务器来生成按时间顺序交易的可计算证明。只要诚实节点控制的 CPU 能力比攻击节点多,系统就是安全的。

贸易

我们将电子货币定义为数字签名链。所有者通过对上一笔交易和下一户的公钥的哈希值进行数字签名,将电子货币转移到下一户,并将其添加到电子货币的末尾。收款人验证签名以证明链的所有者。

过程

问题是在这个过程中,收款人无法验证电子货币是否被多次消费。通常的做法是引入可信中介或造币厂来检查每笔交易是否“双花”。每次交易后都需要将电子币返还给铸币厂以生成新币,只有铸币厂出的币才算免“双花”。这个方案的问题在于,真正的货币系统依赖于运营铸币厂的公司,这就像每笔交易都要经过的银行。

我们需要一种方法让付款人知道之前的交易不是由之前的所有者签署的。为了达到目的,最早的交易是最重要的,所以我们不关心后续交易的“双花”。确保交易不存在的唯一方法是您了解所有交易。在 Mint 的模型中,它知道所有的交易并且可以知道哪个交易先到达。为了在没有受信任的第三方的情况下实现这一点,交易必须被广播,我们需要一个系统让参与者就单个历史数据达成共识,这些历史数据按交易的时间顺序形成。收款人必须证明对于每笔交易,大多数节点都同意交易首先到达。

时间戳服务器

我们提到的解决方案从时间戳服务器开始。时间戳服务器对由多条数据组成的块进行哈希和时间戳,并广播哈希值,例如通过报纸或互联网发布。时间戳证明数据当时存在,显然是按顺序散列的。每个标记都将包含哈希中的前一个时间戳,形成一个链,用另一个时间戳扩充前一个链。

enter image description here

工作证明

要在 P2P 基础上实现分布式时间戳服务器,我们需要一个类似于 Adam Back 的 Hashcash 的工作量证明系统,而不是使用报纸或网络帖子。工作量证明涉及扫描一个值,并且在进行散列(例如使用 SHA-256 算法)时,散列值以多个零位开头。所需的平均工作量是 0 位数的指数,并且可以执行哈希来验证。

比特币的区块是什么意思_区块链与比特币_比特币现金的区块大小

在时间戳网络中,我们实现了工作量证明:在块中增长一个随机数,直到找到一个值,使块的哈希值具有所需的 0 位。一旦 CPU 计算满足工作量证明,除非再次执行工作量证明,否则无法修改块。由于后续区块会继续添加,因此修改此区块的工作必须与后续区块一起修改。

enter image description here

工作量证明也解决了判断多数的问题。如果多数是基于一个IP,一票,那么它可以被可以收集许多IP的人打破。在实践中,工作量证明是每个 CPU 一票。最长的链代表多数决策,它的工作量最大。如果大部分 CPU 功率由诚实节点控制,则诚实链将增长最快,并将超过竞争链。要修改旧块,攻击者必须对该块和所有后续块执行工作量证明,并且必须能够赶上诚实链的工作。稍后我们将展示,随着后续块的增加,落后的攻击者追赶的概率呈指数下降。

随着时间的推移,为了补偿不断提高的硬件速度和运行节点不断变化的利润,工作量证明的难度由等于每小时相关平均生成块数的移动平均值确定。生成块的速度越快,难度就越大。

互联网

运行网络的步骤如下:

1. 新交易被广播到所有节点

2. 每个节点将新交易收集到块中

3. 每个节点都致力于为该块找到一个困难的工作量证明

4. 当一个节点发现工作量证明时,它会将区块广播到所有节点

5. 只有当区块中的所有交易都有效且未被消费时,所有节点才会接受该区块

6. 节点使用接收到的区块的哈希值作为前一个哈希值来创建下一个节点,表示他们接受了前一个区块

网络中的节点会认为最长的链是正确的,并不断扩展这条链。如果两个节点同时广播下一个区块的两个不同版本,一些节点会收到不同的区块。在这种情况下,节点计算第一个收到的块,但保存另一个分支以防它变得更长。当找到下一个工作证明时,该节被破坏并且分支变得更长。在另一个分支上计算的节点切换到更长的分支。

新的交易广播不需要到达所有节点。一旦他们到达多个节点,他们会在一段时间后进入区块。块广播也容忍消息丢失。如果节点没有收到该块,当它收到下一个块时,会发现缺少一个,然后请求该块。

比特币现金的区块大小_区块链与比特币_比特币的区块是什么意思

励磁

根据规定,一个区块中的第一笔交易是一种特殊交易,它创建了一个新的电子硬币,该电子硬币归该区块的创建者所有。这样鼓励节点支持网络,新币发行进入网络循环,不需要中介机构生产新币,解决了新币发行问题。稳定添加一定数量的电子货币,就像矿工消耗资源挖出黄金,加入流通周期。在我们的例子中,CPU 时间功率是消耗的资源。

也可以通过交易费用建立激励措施。如果交易的输出值小于输入值,则不同的是,交易费用被放入了区块的激励值中。一旦将预定数量的新币添加到循环中,激励就可以完全转换为交易费用,并且可以自由膨胀。

激励措施帮助节点保持诚实。如果一个贪婪的攻击者可以组装比诚实节点更多的 CPU,他可以用它来欺骗其他人窃取付款,或者用它来生成更多的新币。他应该发现按规则玩更有利可图,这将比其他人的电子硬币给他更多的新硬币,并对系统和他自己的财产造成损害。

节省磁盘空间

一旦电子货币的最新交易被埋在足够多的区块中,之前的交易就可以被丢弃以节省这个磁盘空间。为了在不破坏块散列的情况下实现这一点,交易被散列到默克尔树中,只有根包含在块散列中。然后可以压缩旧块,修剪树的分支。内部哈希不需要保存。

enter image description here

没有交易信息的区块头大小约为 80 字节。假设每十分钟生成一次块,这相当于每年 80 字节 * 6 * 24 * 365 = 4.2MB。根据摩尔定律,2008年类似计算机的2G内存将以每年1.2GB的速度增长。即使将块头放在内存中,也不是问题。

简化付款验证

验证付款不需要运行所有网络节点。用户只需要保存一份最长链的区块头副本,他可以通过请求网络节点获取区块链,直到确定自己拥有最长链,也可以获取连接交易的 Merkle 分支块时间。在加盖块中。用户自己并没有发送验证交易,而是通过将交易连接到链上的某个地方,他可以看到网络节点接受了交易,后面添加的区块更多地证明了这一点。

enter image description here

这样,只要诚实节点控制了网络验证,它就是可信的,但如果网络攻击者控制它,它也更容易受到攻击。同时,网络节点本身可以​​验证交易,只要攻击者能够控制网络,这种简化的方法就可以防止攻击者伪造交易。一种方式是在检测到无效区块时接受来自网络节点的警告,提示用户软件下载所有区块并警告交易确认异常。接收频繁付款的企业可能还希望运行自己的节点以实现更独立的安全性和更快的验证。

值的拆分和合并

虽然可以独立处理硬币,但不太可能在一次转账中为每一分钱分割交易。为了对值进行拆分和合并,交易包含多个输入和输出。通常一个输入来自先前较大的交易或来自合并 er 的多个输入的较小值。最多有两个输出,一个用于支付,一个用于找零(如果有,返回给发送者)

比特币现金的区块大小_区块链与比特币_比特币的区块是什么意思

这里写图片描述

当一个事务依赖于多个事务并且这些事务依赖于更多事务时,必须注意扇出不是问题。无需提取完全独立的历史交易副本。

隐私

传统银行模式通过限制相关方和受信任的第三方对信息的访问来实现这种隐私级别。公开广播所有交易的需要排除了这种方法,但打破信息流仍然可以在另一个地方保护隐私:保持公钥匿名。公众可以看到有人正在向其他人汇款,但没有关于交易的信息。这类似于股票交易中的信息披露水平。个人知道交易时间和交易金额,但不知道交易方是谁。

这里写图片描述

作为额外的保护,每个事务都需要一个新的密钥对以避免与用户相关联。在具有多个输入的交易中,一些相关性仍然是不可避免的,因此可以知道哪些输入来自同一用户。这里的风险是,如果密钥的所有者被暴露,关联也会暴露该所有者的其他交易。

算法

我们考虑一个场景比特币现金的区块大小,攻击者尽力生成链块而不是诚实节点。即使这样做了,也不代表可以随意修改系统,比如凭空产生币值,拿到不属于攻击者的钱。节点不会接受无效交易作为付款,诚实节点也不会接受包含此类的块。攻击者只能修改自己的交易以取回最近花费的硬币。

诚实节点和攻击节点之间的竞争可以表示为二项式随机游走。成功的标志是诚实节点增加了一个新块,值增加了+1;失败的标志是攻击节点增加了-1的块差。攻击者从负值追赶的概率类似于赌徒破产问题。假设一个不受限制的信用赌徒一开始是负资产,并且无限次尝试收支平衡。我们可以计算达到平衡点的概率,即攻击者超越诚实节点的概率,如下:

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

q = 攻击节点找到下一个区块的概率

qz = 攻击者在第 z 个区块开始时赶上的概率

这里写图片描述

假设 p > q,随着攻击者必须追逐的块数的增加,概率呈指数下降。随着赔率的下降,他越落后,他的机会就接近于零。

比特币的区块是什么意思_比特币现金的区块大小_区块链与比特币

现在让我们考虑一下新交易的接收者要等待多长时间才能明确发送者没有修改交易。假设发送者是攻击者,他希望接收者相信他支付了这笔钱,一段时间后它变成了对自己的支付。发生这种情况时会警告接收方,但发送方的希望为时已晚。

在签名之前,接收者生成一个新的密钥对并将公钥传输给发送者。这可以防止发送者提前准备区块链,而不是让发送者继续计算,直到它有幸赶上然后进行交易。一旦交易被发送,不诚实的发送者开始在包含另一个版本的交易的平行链上私下计算。

接收者等待直到交易被添加到块中,然后是 z 个块。他不知道攻击者执行了多少进程,但可以假设诚实节点在每个块上花费一定的时间,并且攻击者可能的处理是具有固定值的泊松分布:

这里写图片描述

为了得到攻击者超车的概率,我们将超车概率乘以每个进程的泊松密度:

为了避免最后的无限加法,将公式展开如下:

这里写图片描述

转换为 C++ 代码:

   #include 
   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

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

综上所述

区块链与比特币_比特币的区块是什么意思_比特币现金的区块大小

我们提出了一种不依赖依赖方的电子交易系统。我们首先讨论了使用数字签名的电子货币的一般框架,它具有很强的控制力,但没有彻底解决“双花”问题。为了解决这个问题,我们提出了一个使用工作量证明来记录公共交易历史信息的 P2P 网络。当诚实节点控制大部分 CPU 能力时,攻击者改变系统变得不切实际。通过非结构化的简化,网络是坚实的。这些网络在没有协调的情况下同时工作。节点不需要被识别,因为消息不会被路由到任何特定的地方,只需要基本的传递。节点可以随意离开或加入节点,接受一个有工作量的链来证明离开时发生了什么。使用CPU算力投票,扩展区块表示接受有效区块,拒绝计算表示不接受无效区块。可以添加任何规则和激励,形成共识机制。

引用

[1] W. Dai,“b-money”,1998.

[2] H. Massias、XS Avila 和 J.-J。Quisquater,“设计一个安全的时间戳服务,最小化

信任要求,”在比荷卢经济联盟第 20 届信息理论研讨会上比特币现金的区块大小,199 年 5 月9.

[3] S. Haber,WS Stornetta,“如何为数字文档添加时间戳”,密码学杂志,第 3 卷,第

2,第 99-111、199 页1.

[4] D. Bayer、S. Haber、WS Stornetta,“提高数字时间戳的效率和可靠性”,

在序列 II:通信、安全和计算机科学中的方法,第 329-334、199 页3.

[5] S. Haber,WS Stornetta,“位串的安全名称”,第 4 届 ACM 会议论文集

关于计算机和通信安全,第 28-35 页,199 年 4 月7.

[6] A. Back,“Hashcash - 一种拒绝服务的对策”,

, 2002.

[7] RC Merkle,“公钥密码系统协议”,Proc。1980 年安全与安全研讨会

隐私,IEEE 计算机协会,第 122-133 页,198 年 4 月0.

[8] W. Feller,“概率论及其应用导论”,1957.