讲到 CASPER 不得不提到 PoS,我们之前花了非常多篇幅介绍 PoW 的原理以及好处,基本上我们看到现在比特币牢不可破的局面,就应该知道规模到一定程度的 PoW 资料区块链天下无敌,想破解它不如花时间找外星人或神明降驾帮你。那么为什么还是有人就是想搞 PoS 呢?背后有许多理由,我们来看看以下几点。
- 不是每个区块链都可以长到像比特币那么大,如果政府自营或企业自营的区块链,节点规模一定很有限,如果要和骇客的僵尸大军比火力一定输。所以除了资安要做好,我们也希望有一个花费比较小的代价,就可以得到相同安全性的方法来串住区块链。
- 比特币的设计就是无法快速达成交易,如果每交易都要 1 小时的确认时间,这样子的数位交易或储存系统一定无法全面普及。
- PoW 的共识决议通讯协定有点脆弱,专家想追求更高的安全性。
- PoW 非常耗电,为了比特币我们已经杀死了许多北极熊、麋鹿、企鹅还有哈士奇(误),因此我们仍然想追求一个省电的方法达到相同的安全性。
以太币在交易速度上是有名地快,但对某些交易来讲,目前仍然要等待非常多个 confirms,有些商家会要求高达十多个,就算每个只花 1 分钟,都会花掉近 20 分钟的等待时间。以太币团队有野心希望有效取代法定货币,因此考量全局后乃决定必需走上 PoS 的路。
Proof of Stake 是什么?
Proof of Stack 大多基于源自拜占庭容错法推演出来,在 PoW 中任何一个找到区块解的人就可以拿到新生货币,但是在 PoS 中,只有握有主控权的人才可以获得新生货币。为达成分散式原则,主控权会轮流交到有投票权的节点手上,运作方式就有点像投票表决,有主控权的人验证并发布新区块,但是中间会经过大家压注表决(是押上实际的数位货币当成投票),如果乱搞的人基本上得不到多数“投票节点”压注支持,就会输掉。
拜占庭容错法简介
拜占庭容错法又称为拜占庭将军问题,是由 Leslie Lamport 于 1982 年提出的分散式节点同步容错模型。他用了一个架空的历史平台来解释这个模型,也就是罗马帝国的首都拜占庭。由于罗马帝国幅员广大,因此所有镇外将军都离首都非常远,中间的讯息传递无法由中央亲自证实,只能靠将军的通信兵传送消息。那若外面的将军叛变了,就会传来假的军情,就有可能让军队失去一致性。Leslie Lamport 论文是这样描述拜占庭将军问题:
一组拜占庭将军各率领一支军队共同围困一座城市。为了简化问题,将各支军队的行动策略限定为进攻或撤退两种。因为部分军队进攻、部分军队撤退可能会造成灾难性后果,因此各位将军必须透过投票来达成一致策略,即所有军队一起进攻或所有军队一起撤退。因为各将军分处城市不同方向,他们只能通过信使互相联系。投票过程中每位将军都将自己投票给进攻或撤退的信息,透过信使分别通知其他将军,这样一来,每位将军根据自己的票和其他将军送来的信息,就可以知道投票结果而决定行动策略。
系统的问题在于,将军中可能出现叛徒,不仅可能投给较糟糕的策略,还可能选择性地发送投票信息。假设有 9 位将军投票,其中 1 名叛徒。8 名忠诚的将军有 4 人投进攻,4 人投撤退。这时候叛徒可能故意送信给 4 名投进攻的将领表示自己投给进攻,而送信给 4 名投撤退的将领表示自己投撤退。这样一来在 4 名进攻的将领看来,投票结果是 5 人投进攻,进而发起进攻;而 4 名投撤退的将军看来就是 5 人投撤退。这样各军队的一致协同就遭到破坏。
要有多少将军是良善的,才能确定一个消息的真假?
经由数学证明,假设总将军数是 N,叛变将军数是 F,则当 N ≥ 3F + 1 时,我们才有办法确认一个消息的真假,它的启动分成四个阶段:
请求(request):client 请求阶段,皇帝给总司令下命令。
预准备(pre-prepare):主节点向所有 backup 节点发送预准备消息,其中包括当前 view 编号、client 请求及请求摘要、签名是否一致等。总司令对各位将军说:现在是我的时代(view),我是总司令,所有人都得听我的。现在公布皇帝的命令(先说说总统是谁,命令摘要)。
准备(prepare):包括主节点在内的所有副本节点在收到准备讯息之后,对讯息的数位签章是否正确,view 编号是否一致,以及讯息序号这三个条件进行验证,如果验证通过则把这个准备讯息写入消息日志。backup 节点核对签名资讯,比如其他将军听到皇帝的名字,说对,皇帝是这个人没错,然后核对皇帝曾经任命谁当总司令,如果对,大家就听他的。
确认(commit):每个副本接受确认讯息的条件是:1. 签名正确;2. 消息的 view 编号与节点的目前 view 编号一致;3. 讯息的序号 N 够新。一旦确认消息的接受条件满足了,则该副本节点将确认消息写入消息日志。每个将军都经过上述核对,确认无误,就会接受命令执行。
回复(reply):结果回馈。
实际做法
Ethereum 的开发社群基于拜占庭容错模型设计出 CASPER 的 PoS 方法,每次会有一群节点成为投票者,中间会有一位总司令,而每轮成立时第一件事就是选出下轮总司令和监督的将军。每次针对一个新区块的内容,都经由总司令整理完后公告,当然这中间也包括该节点视角下的主链及支链(uncle chain),而各将军实际上押注以太币在他们认为正确的区块。以太链的设计有一个特别之处,他们为了防止有些节点乱押注,正确的也押,不正确的也押(基本上他们也未必知道这个区块可能是不正确的),所以若押在不正确的区块而被大家投票否决时,这些押错的节点会被罚款;若某个节点非常坚持发布有问题的区块,这个节点甚至会被大家踼出表决者名单(将军被革职)。产生新区块时的所得就由总司令分派给投注者。
这点听起来很不错,不过大大违背了比特币的开发宗旨:人人都可以经营,人人都有机会挖矿的大政治原则。因此一旦 PoS 上线,以太币将成为只有手上有一堆以太币的人才能挖矿的富者愈富网络。金钱的信用力绝对基于政治,因此在政治面来看,如此方法将造成不小危机。以太币最近会有一个硬分叉,也就是俗称的拜占庭分叉,为了让冲击减小,同时验证 PoS 是否可撑过真实世界的考验,只有百分之一区块会用 PoS 验证(希望这些区块不会成为链上的弱点)。
而 PoS 技术的区块链也未必真的比较安全,因为用户本身如果不能确定区块真实性,那么就只能依靠向每个节点询问并选择最多的结果(当然 PoS 区块链也可加入 PoW 的验证 hash,但强度大多很差,否则就会回到拼计算力的老路了)。不像 PoW,如果一个 PoW 区块链用户觉得结果怪怪的,只要自己在电脑上验算一下就百分之百知道他的结果有没有被改过(前提是得多等几个 confirms)。因此若是某一轮 PoS 投票节点不小心被骇客大举进攻成功,甚至只要某个用户受到 Man-in-Middle 攻击,那么区块链也就完了。这个概率又牵涉到参与节点的总量(别忘了至少要有三分之二节点没问题,才能保证 PoS 网络的同步性)。而 PoS 的好处是在共识决部分速度较好,不用等太多 confirms 也不怕同步速度太慢,要等一段时间才能产生新区块。目前实做上在私有区块链,PoS 已可达每秒处理千笔以上交易。
以太坊宣称 PoS 的好处
- 快速收敛:可加快交易速度,同时等待的 confirms 数量不用这么多。而且就算区块链网络因通讯问题分裂成两个,也可在短时间内收敛回来。
- 避免大山头破坏去中心化:PoW 网络中,如果出现有人持有大量计算力,那么该人就有足够成功率修改区块链。
- 省电能:不再需要大量运算力做 hash。
不过基于 FLP Impossibility 原理,PoS 同样无法保证区块链在每种攻击或通讯问题下都有正确共识产生。而资料本身不具备自我验证性则是致命之处。
另一个安全性问题:系统
比特币的挖矿专家都知道,用 GPU 或 CPU 来挖根本就没什么利益了,因为特制的 ASIC 可用更少电能达到万倍速度提升。听起来是件有利个人的好事,但同样会在人人可经营的理念上违反大原则。一旦出现这种事,就让少数 ASIC 系统占去大半计算力,那么骇客就只要专心找出这一、二家系统的弱点,比特币就完了。如果比特币的算力无论用 CPU、GPU、ASIC 都一样快的时候,骇客要对付的系类型就多如牛毛了,成本必然大幅拉升。因此算法是否 GPU 或 CPU 适用,就成了安全性的重要议题。目前新的数位货币都是使用内存速度相关的算法。
后记:私有区块链的发展
过去两年我们可看到许多人开始讨论私有区块链的价值和应用,然而私有区块链本身就无法具备公有区块链的许多强大特性,好比资料透通性、节点数量、计算能力等等,私有区块链的电脑数量必然相当有限,因此参与决策的节点计算力必需达到一定水准才能用 PoW 达成安全性,就连使用 PoS 也是一样。所以私有区块链一直没什么好应用出现,它全然违背区块链发展历史。同时,区块链资料只有流水账可以用对账方式得到正确结果,如果只是资讯储存,那产生共识时出了任何错也没人能确定该笔资讯的正确性,好比若有一个区块产生节点宣称:A 愿意以 100 万元卖车给 B;但是另一个节点却同时宣告:A 愿意以 100 万元卖车给 C,如果签名验证都正确,这下子就没有任何方法在系统里得到真实情况了。
如果私有区块链要得到良好安全性,就必需使用各种 firewall 等资安技术隔离,那么和传统数据库又有什么差异?因此目前各行业对私有区块链的看法是连适用场景都找不到,也想不出有什么适合的资料存在上面是有好处的。倒是公有区块链出现百家争呜的情况,或许区块链的宿命就是只能建构公众型服务吧!
(首图来源:shutterstock)
延伸阅读:
- 以太币 DAO 事件打破区块链不可逆神话,13 亿人都惊呆了(一)
- 以太坊即将开启“拜占庭”硬分叉
- 区块链技术概观(五):以太链与智慧合约
- 区块链技术概观(四):以太币运作模式拆解