比特币网络决策必须遵循最长链规则,即必须选择投入在一个链上最工作努力的作为有效链。这意味着最终必须达成共识,由节点决定最长的链是唯一有效的链。
当矿商将一个区块传输到比特币网络时,该区块的深度为1个区块。因此,对于每个后续块,深度块的数量将增加1。这构成了我们现在区块链的认知。
在最优环境下,比特币在区块链上的交易层被认为是不可逆的、最终的。话虽如此,但区块链的整个结构实际上是为了生成一个交易历史,而修改在计算上是不切实际的。交易也可以是最终的,因此,商家不需要从用户那里收集个人信息,因为如果企业在接受付款前执行严格的付款规则,那么在计算上几乎不可能逆转(或双倍支出)交易。然而,在实践中,矿工可以根据他们所控制的计算能力重新组织块结构。
因此,商家和贸易商在接受用户支付前等待确认是非常重要的。然而,商家选择的确认数量在很大程度上取决于业务的风险管理、区块链体系结构和可用性与一致性的关系。
双重攻击
定义
恶意用户不止一次地成功消费一定金额的能力。
在比特币网络中,我们倾向于在验证交易(或支付)之前等待一定数量的确认。这就确保了在计算上不可能还原或重复支出一定数量的钱。
那么有多少份确认呢?
在比特币社区,我们通常接受6个确认(或6个区块深度),在确认交易前大约需要花费60分钟。
等一下,60分钟?什么!那我怎么去买咖啡呢?也许我们应该把比特币看作是一种价值储存手段,而不是货币(但这是另一个时间的讨论)?
RACE攻击
此攻击发生在交易员或商户在没有考虑确认的情况下立即接受付款。换句话说,也就是接受带有0个确认的付款。
攻击者可以创建两个相同的交易,并将一个交易广播给商家,另一个广播给网络。
交易1:向商户A发送1个BTC
交易2:发送1个BTC给自己
很可能在第一个交易之前挖掘第二个交易Tx2,并将其作为最终交易接受。另一方面,商户A已接受未经确认的交易作为支付。
如果攻击者与商家A的节点有直接连接,那么这种攻击很容易执行。
芬尼攻击
此攻击也发生在商人接受0个确认付款时。
攻击者必须能够生成自己的块并控制比特币网络中的两个地址,地址A和地址B。
攻击者挖掘一个新的块,并包含一个交易Tx1,从地址a到地址b。但是,攻击者不会广播这个块。
相反,他创建一个新的交易Tx2。由于商家不等待任何确认,所以他会直接接受攻击者的交易。
现在,攻击者将使用Tx1将该块广播到网络。
然而,这种攻击在实践中很难使用,因为它要求攻击者具有高哈希率(因为他创建了自己的块),而且大多数商家现在倾向于需要一些确认。
VECTOR76攻击
它是种族攻击和芬尼攻击的组合,也发生在商人接受付款1个确认时。
先决条件:2个完整节点。
节点A:连接到商户A的节点
节点B:连接到网络的其余部分
它开始时非常类似于Race攻击,攻击者可以创建两个花费相同的代币的交易。
Tx1:发送50个BTC给商户A
Tx2:发送0.1个 BTC给他自己
然而,这两个交易都还没有广播。
攻击者开始将交易哈希到一个新块中,直到能够挖掘出该块为止。一旦发生这种情况,他就同时运行这两个操作。
在节点A上:将50个BTC发送到商户A的节点
在节点B上:0.1 BTC被发送到网络的其余部分
很可能网络的其他部分首先解决了这个难题,并创建了一个新的块,因此,接受带有0.1 BTC的块作为有效交易。基本上,拒绝50 BTC交易。
在那一刻,攻击矿商将之前被阻止的块从节点A广播给商人。
商家B会将50比特币存入攻击者的钱包。攻击者立即收回50比特币(注意,商家B将从另一枚未使用的代币地址中发出比特币)。
最终,比特币挖掘网络将解决另一个区块,而区块链(很可能)知道0.1 BTC,因此拒绝了50BTC的交易。
选择历史攻击
这是在区块链最可能发生的攻击,然而,它需要非常高的计算能力,因此变得非常昂贵。
攻击者基本上是为商家创建一个交易,然后在该块上创建一个新的分叉。然后,攻击者将秘密地挖掘这些信息,直到获得对网络的最长链的控制。
当超过51%的采矿力被攻击者控制时,这种攻击是非常具有破坏性的。