主页 > imtoken钱包怎么激活 > 什么是比特币 51% 攻击?如何在比特币中获得 6 次确认?

什么是比特币 51% 攻击?如何在比特币中获得 6 次确认?

imtoken钱包怎么激活 2024-01-26 05:10:18

一、51% 攻击

51%攻击是指掌握了全网一半以上算力的人,可以对抗全网其他算力,改变区块链记录。最根本的原因是比特币区块链采用最长链原则,即当前最长的链被认为是主链,也就是正确的链。 51% 到底能做什么?

1.假设51%的算力仍然遵循比特币的规则

此时进行转账交易等仍需签名,则51%攻击无法修改他人账户中的金额无法转入自己账户,但只能操作自己账户,例如双重支付(双重支付可以通过两种方式完成:在交易确认之前,或者通过分叉区块链进行攻击),防止其他交易被确认。

比特币一直0确认

2.假设51%的算力不遵循比特币规则

此时,51%的算力可以修改区块链规则,比如放弃非对称加密,加上签名机制,可以在没有签名的情况下进行转账,51%的算力可以转账金额其他账户到自己名下,因为他有一半以上的算力,所有规则都可以修改,不需要其他计算。算力参与(因为从长远来看,他总能超越其他算力)。

二、6 次确认

比特币一直0确认

为什么掌握51%的算力就能摧毁比特币网络?直觉上,这是真的。将攻击节点的算力和诚实节点的算力视为两个人,挖矿行为就像赛跑一样。当然,最快的人会赢得比赛。事实上,中本聪在论文中做了一个数学分析。另外,现在比特币转账,建议等6次确认后,资金才算安全,他的论文中也有说明。

首先,所有的推导都有一个前提,即随着时间的推移以大致恒定的速率产生区块,即每T0(10分钟)只产生一个区块。

假设当前网络算力为H,诚实节点算力为pH,攻击节点算力为qH,p + q = 1。因为算力本身就是指可以计算Hash的次数在每个固定的时间间隔内,在比特币中,每 10 分钟产生一个区块,我们可以将 10 分钟视为最小的时间间隔,那么诚实节点的算力和攻击节点的算力意味着每隔10分钟。在这 10 分钟内,诚实节点可以计算 k * p 次,攻击节点可以计算 k * q 次(k 只是一个系数,不重要,重要的是比率),从前提:平均而言,诚实节点和攻击节点都没有挖出块(如果这种情况出现在某个 10 分钟内,那么接下来的 10 分钟挖矿难度会降低),也没有诚实节点和攻击节点都挖出块(如果这种情况发生在某个一定的10分钟,接下来的10分钟挖矿难度会增加)。因此,可以认为:诚实节点有概率p挖到块(此时攻击节点没有挖块),攻击节点有概率q挖块(此时时间,诚实节点不挖块)!即使诚实节点和攻击节点在两条分叉链上相互独立挖矿,整个区块链网络也符合这个速度的特点,这是理解下式的关键。

比特币一直0确认

关于一笔交易在资金安全之前获得多少确认的问题,在中本聪的论文中比特币一直0确认,这个问题分为两个步骤(假设是在n次确认之后):

1) n 表示交易完成后,诚实节点挖出 n 次区块,即诚实节点已经确认交易 n 次,因为攻击节点的目的是为了破坏这个交易不要浪费您的任何计算能力来确认此交易。此时,攻击节点挖了多少块? (可以理解为,在交易之后比特币一直0确认,攻击节点暗中分叉了区块链,并没有把分叉后的工作放到区块上,而是在自己的链上保持单独挖矿,等到时机成熟的时候我会公开我的工作吗)

2)假设此时攻击节点挖出m个区块,与诚实节点的差距为z=n-m,那么攻击节点弥补这个差距的概率有多大赶上诚实节点?

比特币一直0确认

我们先来看第一个问题。从固定时间间隔来看,中本聪认为,一个诚实节点T0挖出块的概率是p,那么平均来说,T0/p的时间间隔,绝对可以挖出一个块,那么诚实节点挖出n个块,消耗To * n / p的时间间隔。在攻击节点 T0 挖出块的概率为 q,那么在 T0 * n / p 的时间间隔内,平均可以挖出 q * n / p 个块,并且每个 T0 * n / p 的时间间隔内,挖出的块数差不多。以T0*n/p为单位时间间隔,要解决的问题是:单位时间内随机事件发生次数的概率分布。泊松分布是描述这种概率的工具。另请参阅:维基百科 - 泊松分布。 λ表示单位时间间隔内出现的次数,为q*n/p。

《基于算力的双花分析》一文认为,不应从固定时间间隔的角度进行估算,中本聪的计算只是一个简化模型。论文认为,从出块数入手等价于:攻击节点在至少 n 次失败后(诚实节点已经挖出 n 个块)可以挖出的块数,负二项分布是一个工具描述这个问题,另见:维基百科 - 负二项分布。这个概率公式很简单,不用解释,可以参考论文。论文最终得到的概率值与中本聪模型的概率值大致相同,仅略有差异。

我们来看第二个问题。这里再次说一下推导的前提,即随着时间的推移,区块以大致恒定的速度产生,即每间隔T0(10分钟)产生一次,只产生一个区块。明确了这个前提,可以发现诚实节点和攻击节点是互斥的,每10分钟只有一个可以发现一个区块,即使它们可能在两个分叉上。那么这个问题,正如中本聪在论文中所说,可以等价于赌徒破产问题,参见:Wikipedia-Gambler Bankruptcy Problem 或 Gambler Bankruptcy Problem。里面的递归公式

比特币一直0确认

Pa= pPa+1+ q Pa-1,a=1,2,…,N-1

的意思是,假设有一个初始,如果你以概率p获得一枚金币,则相当于初始拥有一个+1金币,如果你以概率q失去一枚金币,则相当于最初只有 - 1 个金币。应用于比特币,从诚实节点的角度,可以理解为,一开始,诚实节点有z个金币,怎么赌输掉所有z个金币或者财富一直在增加。详情请参考中本聪的论文。

下面列出了基于算力的双花分析中,在不同的攻击节点q和等待确认数n的概率下,攻击节点追上的概率(因为本文提出的模型和计算结果中本聪提出的模型差别不大,提供的数据也比较全,所以用这张表)

如何获得6个确认号码呢?假设攻击节点的算力在10%左右,攻击成功的概率小于0.1%。从上表可以看出是6。