区块链: 技术驱动金融 - 第2章 比特币如何做到去中心化 (3)

    其他节点可以通过隐性地接受或拒绝前面这个被随机选中的节点。如果接受,他们就在这个区块之后接龙下去;如果拒绝,他们就忽略这个区块,而是选择前一个曾经接受的区块,来继续接龙下去。值得注意的是,这里的前一个曾经接受的区块,并不一定就是这个区块的前一个区块,因为,很有可能在之前的几个回合中,随机选择的节点都是恶意节点,其他节点已经隐性拒绝了多个回合

比特币共识算法(简化版)

这个算法的简化假设是,可以随意选择一个节点,这些节点都不受女巫攻击的影响。

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

    2. 每个节点都将新的交易放进一个区块。

    3. 在每个回合,一个随机选择的节点可以广播它的区块。

    4. 其他节点可以选择接受这个区块,前提是区块里的交易是正当有效的(有真的签名)。

    5. 节点们可以把以上接受的区块的哈希值放进自己的区块里,以此来表示它们对这个新区块的认可。

 

    接下来我们看看这个算法如何能够抵抗一些常见的攻击行为。

    窃取比特币

    假设这一轮由Alice来提议区块链的下一个区块,如果她想窃取Bob的比特币,那么Alice就发起一笔把Bob的比特币转到自己地址上的交易,伪造Bob的数字签名来对这笔交易进行签名,并把这笔交易放到下一个区块中。显然,如果数字签名机制是安全的,那么Alice就不可能达到目的。

    拒绝服务攻击

    假设这一轮由Alice来提议区块链的下一个区块,如果她不喜欢Bob,那么她可以拒绝把和Bob有关的任何交易放进区块中。尽管这是Alice可以开展的有效攻击,即拒绝为Bob提供服务,但显然这是个小问题。Bob只需要等下一个诚实节点来提议区块,他的交易就有可能被放进区块中。

    双重支付攻击

    假设AliceBob开的网店的一个顾客,Bob提供一些付费软件下载服务。Alice可以发起这样的双重支付攻击:

    AliceBob购买一个软件,她就在自己的地址上向Bob的地址发起一笔比特币交易,并向整个网络广播这笔交易。假设现在由某个诚实节点来制造下一个区块,并把这笔交易放进区块中。当看到这笔交易被放进区块链之后,Bob认为Alice已经给他付款了,于是允许Alice下载软件。紧接着,假设下一回合随机选择的节点刚好是由Alice控制的节点,那么Alice可以产生一个新区块,并且放进一笔交易,这笔交易是把她付给Bob的币转到一个被她所控制的地址上,并将这个区块接到上一个诚实节点所产生的区块的前一个区块,以此来忽略掉诚实节点所创建的区块。

    这就是一个经典的双重支付攻击,因为两笔交易用的是同一个币,只能有一个交易可以被放进区块链中。

    你可能会问,既然Alice在第一笔交易中已经明确地把币转给了Bob的地址,这个币的拥有者就是Bob,那Alice又怎么来创建第二笔交易,将这个币转移到自己控制的地址上呢?这是否需要伪造Bob的签名?显然,伪造签名是属于窃取比特币行为,并不属于双重支付攻击

    事实上,我们需要清楚地了解一笔交易的结构。在比特币中,一个交易就是一个数据结构,其中包含三个主要的部分:

交易发起者的数字签名

一个付给目标公钥(地址)的指令

一个哈希值

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzpyjx.html