区块链上数据公开透明、可追踪溯源等特点让我们看到了这项技术在提高多方协作效率、增强组织自治能力等诸多领域的应用潜力。然而在这个缺乏权威角色管理的去中心化系统中,如何让各节点在互不信任的情况下也能达成共识,实现高效协作呢?这主要依赖于区块链的共识机制。

除PoW、PoS外,还有一些共识机制也应用到了区块链中,比如PBFT(Practical Byzantine Fault Tolerance拜占庭容错)。万向区块链和生态合作伙伴打造的联盟链平台——PlatONE,使用的共识机制就是PBFT。对于前两个,大家可能比较了解,但对于PBFT这个中文全称读起来有点拗口的共识机制,可能有点难以理解。今天的小课堂,我们就来看看这个共识机制到底是怎么让大家达成共识的?

“拜占庭容错”早在1999年,就由两位美国计算机科学家Barbara Liskov和Miguel Castro提出。但要理解这个概念,就得了解一个由来已久的拜占庭将军问题。

什么是拜占庭将军问题?

拜占庭将军问题是在1982年,由图灵奖得主Leslie Lamport和其他两位学者Robert Shostak、Marshall Pease在合著论文中详细阐述了这个“故事”。总结来说就是,在没什么信息科技的冷兵器时代,将领之间如何传递信息才能避免被己方叛徒泄露信息。

假设拜占庭军队的几只小分队驻扎在敌军城外,每只分队由一名将军统领,将军之间只能通过信使通信。现在诸位将军要协商进攻敌军的方式和时间,保证各分队统一行动,拧成一股绳,发挥最大武力,一举攻破敌军。但将军中藏有叛徒,企图阻挠其他忠诚的将军达成进攻方案。这时候,在已知有成员谋反的情况下,其余忠诚的将军在不受叛徒的影响下如何达成一致的协议,让叛徒无法阻挠忠诚将军们的协商,最终达成统一行动方案。

拜占庭将军问题就此形成。

什么是拜占庭容错?

拜占庭容错就是要确保诚实的将军们在受到叛徒干扰的情况下也能达成共识。应用到分布式区块链系统中,每个将军就是一个节点,拜占庭容错就是要保证该系统能够容忍一定程度的拜占庭失效,让诚实节点(将军)免受恶意节点的影响,达成共识、保证系统正常运行。

最初设计这种机制是为了解决拜占庭将军问题,运用集体决策的力量降低恶意节点对整体网络的影响力,避免网络出现严重故障。

什么是拜占庭失效?

这些将军在地理上是分隔开来的,并且将军中存在叛徒。叛徒可以任意行动以达到以下目标:欺骗某些将军采取进攻行动;促成一个不是所有将军都同意的决定,如当将军们不希望进攻时促成进攻行动;或者迷惑某些将军,使他们无法做出决定。如果叛徒达到了这些目的之一,则任何攻击行动的结果都是注定要失败的,只有完全达成一致的努力才能获得胜利。

对应到分布式网络中,拜占庭失效主要有失效-停止(即网络中所有节点失效,停止运行)和任意节点失效这两种类型。任意节点失效又包含以下几种情况:

1、  无法返回结果

2、  返回错误结果

3、  有意返回误导性结果

4、  返回与网络中其他节点不一致的结果

为应对以上失效情况,Barbara Liskov和Miguel Castro设计了实用拜占庭容错机制。

实用拜占庭容错机制的运行逻辑

实用拜占庭容错机制会指定系统中的一个节点为主节点(领导节点),其他节点就是次节点(候补节点)。当主节点出现故障时,系统中所有的合法节点都有资格从次节点升级为主节点,遵循少数服从多数的原则确保诚实节点能达成共识。

但是想要让实用拜占庭容错机制正常运行,恶意节点数量必须小于网络里节点总数的1/3。关于这一容错程度, Lesile Lamport在其关于拜占庭将军问题的论文中也有所论证,即恶意节点数为m时,只要总节点数能够达到3m+1,就能确保共识的达成。换句话说,要想顺利达成共识,就得保证系统内至少2/3的节点是诚实的。

实用拜占庭容错机制的运行分为4个阶段:

1、用户将请求发送给主节点

2、主节点将用户请求广播给所有次节点

3、主次节点共同完成用户请求,并向用户发送回复信息

4、当用户从网络中的各个节点处收到m+1个相同回复时(m代表网络允许的恶意节点数量最大值),表明请求已完成。

如上图中只有次节点3没有返回消息,说明该节点是恶意节点。

该机制每完成一轮请求就会更换一次主节点。还可以设定主节点轮替协议,如果主节点没有在规定时间内将用户请求广播给次节点,则按照协议规定的顺序更换主节点。网络中的诚实节点也有权利投票决定现任主节点的合法性,如果超过半数诚实节点认为现任主节点不合法,则由协议规定的顺位次节点接替主节点。

实用拜占庭容错机制的价值

1、 提高计算效率:与工作量证明(PoW)共识机制相比,实用拜占庭容错机制不需要耗费算力解决复杂的数学问题就能让分布式系统达成共识,能有效节省能源消耗。

2、 缩短交易确认时间:在运用工作量证明(PoW)作为共识机制的比特币区块链中,所有节点都会参与交易验证,根据参与验证的节点的数量不同,出块时间在10到60分钟不等。但是在运用实用拜占庭容错机制的区块链里,交易一旦被诚实节点认可就不需要其他多方再确认,缩短交易时间。

3、 减小奖励差异:实用拜占庭容错机制中所有节点都会回复用户需求,为系统决策做出差不多的贡献,所以收到的奖励差异也会相应减小。

实用拜占庭容错机制的问题

1、延展性问题:由于实用拜占庭容错机制最多只能容忍占系统总节点数1/3的恶意节点,系统规模越大,节点数越多,系统承受的容错压力就越大,越容易出现安全问题。这就限制了运用该机制的系统的延展性。

2、易受女巫攻击:女巫攻击是指单个恶意节点伪装多重身份,提高自身在系统中的权重,夺取系统的控制权。一般随着系统里节点数量的增加,恶意节点需要伪装的身分数也就越多,造假难度系数提高自然会降低系统遭受女巫攻击的风险。但是由于采用实用拜占庭容错机制的系统延展性较低,通常是节点数量比较少的小网络,所以单用实用拜占庭容错机制受到女巫攻击的风险比较大,建议和其他共识机制搭配使用。

参考文章:

1、practical Byzantine Fault Tolerance (pBFT)

https://www.geeksforgeeks.org/practical-byzantine-fault-tolerancepbft/

2、What is Practical Byzantine Fault Tolerance? Complete Beginner’s Guide

https://blockonomi.com/practical-byzantine-fault-tolerance/