Lucifaer's Blog.

区块链补充

Word count: 1,368 / Reading time: 5 min
2018/06/18 Share

区块链补充

在完成区块链基础的笔记后,我认真地读了一遍以太坊白皮书,感觉有很多问题是之前那篇文章没有说清楚的,需要自己再好好的补充学习一下,这篇笔记就是对之前笔记的补充。

0x00 去中心化需要面对的核心问题——拜占庭将军问题

1. 拜占庭将军问题

在了解了一些区块链基础后,经常会看到某某区块链利用某某算法解决了拜占庭问题,所以理解拜占庭问题是了解为什么区块链是去中心化的关键。

拜占庭将军问题(拜占庭容错)是莱斯利·兰波特用来为描述分布式系统一致性问题在论文中抽象出来的一个著名的例子。

这个例子挺好玩的,我在他的描述上把数字量化了,方便理解:

一组拜占庭将军分别各率领一支军队共同围困一座城市。为了简化问题,将各支军队的行动策略限定为进攻或撤离两种。因为部分军队进攻部分军队撤离可能会造成灾难性后果,因此各位将军必须通过投票来达成一致策略,即所有军队一起进攻或所有军队一起撤离。因为各位将军分处城市不同方向,他们只能通过信使互相联系。在投票过程中每位将军都将自己投票给进攻还是撤退的信息通过信使分别通知其他所有将军,这样一来每位将军根据自己的投票和其他所有将军送来的信息就可以知道共同的投票结果而决定行动策略。

在这个问题中,我们不讨论信使无法传达信息的情况。我们现在来分析一下这个问题可能出现的情况:

假设有9位将军投票,其中1名叛徒。8名忠诚的将军中出现了4人进攻,4人撤退的情况。这个时候叛徒可能就故意的给4名投进攻的将领送信表示投票进攻,而给4名投撤离的将领送信表示投撤离,这样无论从进攻方还是从撤离方来看,他们都是占有人数多的优势的,这样就造成了这一组军队的协同性遭到破坏。

假设那些忠诚的将军们仍能通过多数决定来决定他们的战略,这样就叫做达成了拜占庭容错。

我们可以看到传统的加解密是无法解决这样的问题的,因为这个问题的关键不是信息泄露,而是存在一个信息来源是否可信的问题。

解决这个问题的最好方法就是利用无法消去的数字签名来进行认证。利用数字签名固然可以找到那些“叛徒”,但是相比于消耗资源更小的错误检测(日志审计系统)系统来说,有些小题大做,比较消耗资源。而错误检测系统也会因为其覆盖错误率不全的问题而出现拜占庭问题。

莱斯利·兰波特的解决方案是Paxos算法或其衍生算法,简单来说就是建立一个绝对可信任的中心,收集各个节点的消息,并将准确的消息再同步到各个节点上。而这样的做法是只适用于中心化的分布式系统的。并不适合区块链的去中心化思想。

中本聪利用了一种巧妙的方式,解决了去中心化的拜占庭将军问题。

2. 去中心化的解决方法——工作量证明算法(POW)

POW利用工作量证明增加了发送消息的成本,降低节点发送消息的频率,这样就可以保证在一个时间段内只有一个节点(或者很少的节点)在进行广播,同时在广播时附带自己的签名。

这样就相当于减少了在整个分布式网络中其他节点的噪声,只需要让其他节点选择接受或不接受即可,诚实的节点自然会选择接受。你也可以理解为能者为大。

以上就是区块链网络中单个区块达成共识的方法(取得一致性)。

同时也可以用这个例子来解释区块链的最长链选择问题:假设这座城市需要攻打多次,那么每次发出攻击提议的人员必须是之前取得最多次胜利的人提出,也就是做的工作最多的人来完成。

3. 总结一下

中本聪将一个非常简单的基于节点的去中心化共识协议与工作量证明机制结合在一起。节点通过工作量证明机制获得参与到系统的权利,每十分钟将交易打包到“区块”中,从而创建出不断增长的区块链。拥有大量算力的节点有更大的影响力,但获得比整个网络更多的算力比创建一百万个节点困难得多。

CATALOG
  1. 1. 区块链补充
  2. 2. 0x00 去中心化需要面对的核心问题——拜占庭将军问题
    1. 2.1. 1. 拜占庭将军问题
    2. 2.2. 2. 去中心化的解决方法——工作量证明算法(POW)
    3. 2.3. 3. 总结一下