提起区块链,大家似乎感觉这项技术很神秘。今天从技术的角度剖析一下区块链的分布式一致性问题,很多研究人员称此问题为分布式领域的幽灵,也就是大家常常听到的拜占庭将军问题。
拜占庭将军问题(The Byzantine Generals Problem)是Leslie Lamport(莱斯利·兰伯特)提出的针对分布式对等网络中的通信容错问题。
Leslie Lamport在其论文The Byzantine Generals Problem中以一个示例形象的描述了此问题:一组拜占庭将军分别各率领一支军队共同围困一座城市。为了简化问题,各支军队的行动策略仅限定为进攻或撤离两种。因为部分军队进攻、部分军队撤离可能会造成灾难性后果,因此各位将军必须通过投票来达成一致策略,即所有军队一起进攻或所有军队一起撤离。因为各位将军分别处于城市不同方向,他们只能通过信使互相联系。在投票过程中每位将军都将自己投票给进攻还是撤退的信息通过信使分别通知其他所有将军(此假设中,将军可能是叛徒,发送错误信息等),从而,每位将军根据自己的投票和其他所有将军送来的信息就可以知道共同的投票结果而决定行动策略。
用通信术语描述拜占庭将军问题:可靠的计算机系统必须处理有故障的组件,这些组件的引入可能与系统其它部分信息冲突[1]。根本不发送任何消息,向不同的邻居发送不同且错误的消息,以及谎报自己的输入值[2]。一个可靠的计算机系统必须能够处理一个或多个组件的失败。失败的组件出现被忽略的行为,向系统的其他部分发送不一致的信息。
在分布式计算中,不同的计算交换通讯信息从而达成共识并按照同一套协作策略行动。但有时,系统中的成员计算机可能因出错而发送错误的信息,用于传递信息的通讯网络也可能导致信息损坏,使得网络中不同的成员关于全体协作的策略得出不同结论,从而破坏系统一致性。
拜占庭将军问题是存在前提假设条件的,在消息丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的,因此对一致性的研究一般假设是建立在信道是可靠的这个前提下。拜占庭将军问题的核心是允许存在少数节点作恶(消息存在被伪造的可能性)的情况下如何达成共识的问题。
拜占庭将军问题实际上是如何让一个分布式系统的保持一致性和在特定条件下保持正确性的问题。可抽象为满足以下2个条件的算法:
条件IC1. 所有忠诚的将军得出相同的作战指令,并且按指令执行(正常处理单元必须使用相同的输入值),保持指令的一致性。
条件IC2. 如果作战指令是忠诚的将军发出的,所有忠诚的将军会遵循该将军发出的作战指令(如果输入单元是正常的,那么每个正常的单元都应该使用它提供的值作为输入),特定条件下的正确性。
Leslie Lamport论文里The Byzantine Generals Problem提到了Oral Messages和Signed messages两个解决方案,其算法如下:
1、OM(m)口头协议算法
结论: 如果有m个叛军,必须至少有 3m+1位将军(包括背叛和忠诚的将军)才能保证口头协议算法(简称OM算法)能解“拜占庭将军问题”。
前提假设:
A1. 每个被发送的消息都能够被正确的投递
A2. 信息接收者知道是谁发送的消息
A3. 能够知道缺少的消息(如果叛军不配合发送消息,算法默认一个值“撤退”的来替代)
证明过程:
https://www.microsoft.com/en-us/research/uploads/prod/2016/12/The-Byzantine-Generals.pdf
2、SM签名协议算法
结论:在不管有多少叛军的情况下,都能让忠诚的将军们保持一致的行动
前提假设:
A1. 每个被发送的消息都能够被正确的投递
A2. 信息接收者知道是谁发送的消息
A3. 能够知道缺少的消息(如果叛军不配合发送消息,算法默认一个值“撤退”的来替代)
A4.1 签名不可被伪造,一旦被篡改即可发现
A4.2 任何人都可以验证将军签名的可靠性
证明过程:
https://www.microsoft.com/en-us/research/uploads/prod/2016/12/The-Byzantine-Generals.pdf
读者如果想对分布式算法深入解析,如Paxos、Pow、BFT,推荐区块链核心算法一书,文中有部分值得深入研读的参考文献。
参考文献:
[1] The Byzantine Generals Problem. LESLIE LAMPORT, ROBERT SHOSTAK, and MARSHALL PEASE SRI International
[2] 区块链核心算法解析. Roger Wattenhofer
参考链接
The Byzantine Generals Problem
同步链接:
https://www.microsoft.com/en-us/research/uploads/prod/2016/12/The-Byzantine-Generals.pdf