BlockChain学习——达成没有身份的共识协议

分布式共识

书接上文,去中心化的网络节点中,节点之间首先要解决的就是达成共识的问题,节点必须对哪些交易可以进行广播和交易发生的次序达成共识。在上文中提到过,财奴币将交易打包成块,对信息进行优化处理。类似的,在比特币体系里,也将每个区块进行共识处理。

在任何时点,所有在点对点网络上的节点都有包含一系列区块的总账本,每个区块中都包含了已经被所有节点达成共识的交易清单。除此之外,每个节点还有一堆没有被打包进入区块的交易,就是那些网络节点已经被通知、交易已经发生,但还没有被写进区块的交易。网络节点对于这些交易还没有达成共识,所以每个节点都有一个略有差异、尚待确认的交易池,交易池中的交易一般包含其他节点广播出的交易,和自己的交易。那么所有的节点是如何对一个区块达成共识的呢?一种方法是每隔一段时间,每个节点将交易池中的结果作为提议作为区块的输入,然后再执行共识协议。

上面描述的是一种理想情况,实际上实施起来会有各方面的困难:

  • 可能由于网络原因,有些节点听到了交易,有些节点却没有听到(发生了丢包、延迟等情况)。
  • 达成共识一般来说是个难题,可能有恶意节点的存在,尤其是比特币网络中身份是缺失的,恶意节点很容易就被制造出来。

使用区块链达成没有身份的共识

比特币中的每个节点并没有一个稳定的、长期的身份,这一点也是与传统分布式共识算法的不同之处。身份缺失的原因是,在一个点对点网络中,没有一个中央权威机构来发放身份,并保证它们没有制造节点。

针对乱造节点这一情况(这个节点称为女巫节点,乱造节点是黑客恶意制造不同的节点,这些节点看起来像是不同身份的人,这种行为被称为女巫攻击),有这样一种共识算法来弥补这种不足:
在一次发布区块的过程中,有且仅有一个唯一的节点能发布区块。这个能发布交易池的区块的节点是随机选出来的,所以尽管黑客能制造很多女巫节点,但是一次发布区块的过程中只能由一个节点被选上(一次发布的过程称为一个回合),所以只要该网络中节点的数目足够多,女巫节点被选上的概率就会变小,连续几次被选上的概率会更小。
在这个回合中,被选上的节点才有资格发布这个链的下一个区块,其他节点有权利选择接受或者忽略该节点发布的区块(称为隐形共识),如果接受这个区块,那么它们会记录这个区块的Hash值,并在这个块之后继续接龙下去;如果选择忽略该区块,那么保持记录前一个块的Hash值。
最重要的一个原则,诚实节点总是选择延展最长的区块链

上面算法有些地方没有被提及(比如这个节点是怎么被随机选择出来的,如何判断是否接受区块,以及网络的大小划分等等),以后会在学习过程中完善。
我们来看看为什么上述的共识算法是有效的,主要从这几个方面论述:

  • 窃取比特币
  • 拒绝服务攻击
  • 双重支付攻击

窃取比特币

假设这一个回合是由Oscar来提议区块链上的下一个区块,要窃取别人的比特币,Oscar可以伪造一份交易使得“别人转此币给Oscar”的声明成立,然而Oscar无法伪造该交易的签名(只要密码学基础是牢靠的,数字签名就是安全的),所以Oscar无法伪造这样的交易,也就无从窃取比特币。

拒绝服务攻击

假设这一个回合是由Oscar来提议区块链上的下一个区块,Oscar决定不把Bob 广播的所有交易放进他提议的区块里。Oscar做到了,他提议的区块被大部分区块接受了。然而在接下来的回合里,Bob只要等到诚实节点发起区块提议的时候,他的交易就会被放进这个区块里,所以这其实不算是一个有效的攻击。

双重支付攻击

双重支付攻击(简称“双花”)所涉及的内容比较多,且容我娓娓道来。

首先说明两种Hash指针:

  • 区块链的Hash指针,负责记录上一个区块的地址和交易的内容。
  • 说明比特币来源的Hash指针,用来指向之前的交易以说明比特币来源的Hash指针。

现在回到正题,假设Oscar是Bob网站的一名顾客,Bob提供一些比特币付费的在线服务。Oscar发起了“Oscar把此币给Bob”的声明,盖上了自己的数字签名,并且向整个网络广播这笔交易。这个回合发起区块提议的诚实节点收到了消息,并且将该交易放到了区块中。
假设在紧接着的下一个回合,Oscar恰好得到了区块提议的权力。他选择了忽略掉前面诚实节点的提出的区块,而产生一个指向之前区块指针的区块。不仅这样Oscar在这个提议的区块中,加入了一笔新的交易,“Oscar把此币给Oscar的女巫节点”,仍旧使用的“此币”,收款人其实还是自己。由于两个回合中,使用了同样的“此币”,只有一个交易能被放进区块链。

那么怎么判断双花是否成功呢?那么就是看最终结果:哪个交易被放进了区块链。这取决于哪个区块会被纳入长期的共识链,前文说过,诚实节点总是选择延展最长的区块链,然而在这两个回合中,两个区块链是一样长的。实践中,诚实节点往往是用“时间戳”的方式来选择延展,并不是说交易中盖上了时间戳,而是诚实节点收到该交易的时间顺序。一般来说,前一个回合会比后一个回合快,但是不要忘了,存在着网络延迟的情况,很有可能诚实节点先收到的交易是后一个回合创造出来的。另外,Oscar还可能有女巫节点,或者选择贿赂其他节点来选择有双花情况(后一个回合)的区块。随着这个过程,那双花情况的区块会因为其更长,而被纳入长期共识链。所以按照这样的情况,双花是存在的。

现在从Bob的立场来考虑整个过程:
要理解Bob如何保护自己不被双花,是理解比特币安全措施的重要部分。因为我们已经无力阻止Oscar的双花行为了。
如果Bob在看到Oscar广播“Oscar把此币给Bob”的声明后,就像Bob提供了服务(称为零验证交易),这样无论如何也阻止不了被欺诈。所以Bob必须要作出一些改变,Bob现在称为了谨慎的Bob。他看到Oscar的广播后仍然无动于衷,甚至在看到交易在这个回合被包含进了区块中也会无动于衷。他继续等待,如果看到下一个回合Oscar的双花行为,他就会放弃交易。一个过分谨慎的Bob会在几个回合后才同意这笔交易并开放服务(在比特币生态系统中,是等待6个回合,双花被纳入长期共识链的概率会跟随着回合数成指数级下降)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值