拜占庭是古代东罗马帝国的首都,它曾经是世界上最强大、最富有的城市之一。但是,由于地域广阔,拜占庭经常遭受外敌侵略和内部叛乱。为了保卫边境,拜占庭派出了多支军队,由不同的将军指挥。将军之间如何达成信息一致性成了最大问题。
而区块链与拜占庭将军问题有着密切的联系。区块链网络是一种分布式网络,其节点就像拜占庭将军一样,需要在不可靠的网络环境中达成交易和数据的共识。
两军问题是拜占庭问题的一个特例。
两军问题及其无解性证明最早是由E.A. Akkoyunlu、K.Ekanadham和R.V.Huber于1975年在联合发表的论文《网络通信设计的约束与权衡》(Some Constraints and Trade-offs In The Design of Network Communications)中首次提出。
1978年,JimGray在《数据库操作系统笔记》书中将这个问题正式命名为“两军问题” (Two General’s Problem)。原本是用来分析在一个不可靠的通信链路上试图通过通信以达成一致是存在问题的,后来常被用于阐述分布式系统的一致性和共识问题。
问题定义
A国的两支军队,分别由两个将军领导,正在准备攻击B国的一支军队。B国的这支军队被包围在一个山谷里,A国的两只军队A1和A2分别驻扎在山谷两边的山头上,但从A1驻扎地到A2驻扎地,只有唯一的一条山道,且必须经过山谷。同时,B军的数量和作战能力比A1军和A2军的任意一支都要强(A军知道,B军不知道),A国的任意一支军队单独去进攻B军,都会被B军击败,从而让B军逃掉,但只要A1军与A2军联合攻击,就可以战胜B军。
问题:是否可以想出一种能让A国的两支军队的将军达成同时攻击约定的算法,该算法可包含发送和接收处理消息?
说答案:经典的两军问题是无解的,不存在一个能确保A国军队成功协商一致攻击B国的协议。但在一定的容忍条件下,可以通过一种相对可靠的方式解决大多数问题,例如TCP协议中建立连接的“三次握手”机制。
拜占庭将军问题是由2013年度图灵奖得主莱斯利·兰波特(Leslie Lamport)在1982年发表的论文《拜占庭将军问题》(The Byzantine Generals Problem)中首次提出。拜占庭将军问题描述了如何在存在恶意行为(如消息被篡改)的情况下实现分布式系统的一致性。
拜占庭帝国的几支军队将敌城包围,每支军队都由一名将军指挥。拜占庭的军队之间只能通过通信兵相互传达消息。在观察敌情之后后,根据敌城的军事力量,拜占庭将军们都得出相同的结论,只有超过半数的拜占庭军队共同发起进攻,才能攻破城池,取得胜利。
因此,所有的拜占庭军队必须制定一个联合行动计划,要么共同进攻,要么共同撤退。
但是,情报部门已经知道这些拜占庭军队的将军中存在叛徒,将试图破坏忠诚的将军们达成一致的联合行动计划。同时,虽然拜占庭军队的通信兵一定能不被敌方截获且确保送达消息,但是通信兵中也可能存在叛徒,可能在传信过程中篡改或伪造消息,也可能丢失消息。
问题求解
如果将拜占庭问题中的攻城军队的将军数量对应为分布式系统的节点数量,可以将符合拜占庭问题条件的分布式系统称为”拜占庭系统”,
在拜占庭系统中任意两个节点之间的通信是保证可达的,可以得出以下结论:
对于一个拜占庭系统,如果系统总节点数为Z,表示叛变将军的不可靠节点数为X,只有当Z≥3X+1时,可由基于拜占庭客容错(BFT)类算法的协议保证系统的一致性。
在实际的系统中,一般把由于系统故障导致节点不响应的情兄归类为“非拜占庭错误(Crash Fault)”,把节点伪造或篡改信息进行恶意响应的情况归类为“拜占庭错误(Byzantine Fault)”。
区块链系统是一种分布式系统,特别是像比特币、以太坊等公有链系统,由大量高度分散且彼此不信任的网络节点构成,区块链共识机制就是以共识算法为核心,确保区块链系统就某个事物始终能达成数据一致且不产生分叉。
目前,根据共识算法容错类型的不同,可以将共识算法分为非拜占庭容错类(CFT,Crash Fault Tolerance)算法和拜占庭容错类(BFT,ByzantineFault Tolerance)算法。
对于分布式系统,非拜占庭容错类共识算法能在节点发生系统故障或非计划停机等非拜占庭错误时,确保整个分布式系统的可靠性;但是,当系统中存在恶意节点伪造或篡改数据等行为时,非拜占庭容错算法无法保证系统的可靠性。
因此,非拜占庭容错类共识算法主要用于实现封闭的、系统节点都受控的企业吸分布式系统,如某企业构建的内部分布式应用集群系统或分布式存储系统。非拜占庭容错类共识算法中最有代表性的包括PaxoS算法与Raft算法。
拜占庭容错类共识算法能允许分布式系统节点发生任何类型的错误但错误节点数量不超过一定比例时,确保整个分布式系统的可靠性。简单的说,只要分布式系统的故障 (由于非拜占庭错误或拜占庭错误导致)节点数与系统总节点数相比,小于一定比例,拜占庭容错类共识算法就能保证分布式系统的可靠性。
由于像比特币、以太坊等区块链系统中,存在大量彼此不信任的网络节点,不排除有恶意节点企图伪造或篡改系统数据,因此,拜占庭容错类共识算法是区块链共识机制主要采用的共识算法。拜占庭容错类共识算法中最有代表性的包括PBFT实用拜占庭容错算法、PoW工作量证明算法、PoS权益证明算法等。
拜占庭是古代东罗马帝国的首都,它曾经是世界上最强大、最富有的城市之一。但是,由于地域广阔,拜占庭经常遭受外敌侵略和内部叛乱。为了保卫边境,拜占庭派出了多支军队,由不同的将军指挥。将军之间如何达成信息一致性成了最大问题。
而区块链与拜占庭将军问题有着密切的联系。区块链网络是一种分布式网络,其节点就像拜占庭将军一样,需要在不可靠的网络环境中达成交易和数据的共识。
两军问题是拜占庭问题的一个特例。
两军问题及其无解性证明最早是由E.A. Akkoyunlu、K.Ekanadham和R.V.Huber于1975年在联合发表的论文《网络通信设计的约束与权衡》(Some Constraints and Trade-offs In The Design of Network Communications)中首次提出。
1978年,JimGray在《数据库操作系统笔记》书中将这个问题正式命名为“两军问题” (Two General’s Problem)。原本是用来分析在一个不可靠的通信链路上试图通过通信以达成一致是存在问题的,后来常被用于阐述分布式系统的一致性和共识问题。
问题定义
A国的两支军队,分别由两个将军领导,正在准备攻击B国的一支军队。B国的这支军队被包围在一个山谷里,A国的两只军队A1和A2分别驻扎在山谷两边的山头上,但从A1驻扎地到A2驻扎地,只有唯一的一条山道,且必须经过山谷。同时,B军的数量和作战能力比A1军和A2军的任意一支都要强(A军知道,B军不知道),A国的任意一支军队单独去进攻B军,都会被B军击败,从而让B军逃掉,但只要A1军与A2军联合攻击,就可以战胜B军。
问题:是否可以想出一种能让A国的两支军队的将军达成同时攻击约定的算法,该算法可包含发送和接收处理消息?
说答案:经典的两军问题是无解的,不存在一个能确保A国军队成功协商一致攻击B国的协议。但在一定的容忍条件下,可以通过一种相对可靠的方式解决大多数问题,例如TCP协议中建立连接的“三次握手”机制。
拜占庭将军问题是由2013年度图灵奖得主莱斯利·兰波特(Leslie Lamport)在1982年发表的论文《拜占庭将军问题》(The Byzantine Generals Problem)中首次提出。拜占庭将军问题描述了如何在存在恶意行为(如消息被篡改)的情况下实现分布式系统的一致性。
拜占庭帝国的几支军队将敌城包围,每支军队都由一名将军指挥。拜占庭的军队之间只能通过通信兵相互传达消息。在观察敌情之后后,根据敌城的军事力量,拜占庭将军们都得出相同的结论,只有超过半数的拜占庭军队共同发起进攻,才能攻破城池,取得胜利。
因此,所有的拜占庭军队必须制定一个联合行动计划,要么共同进攻,要么共同撤退。
但是,情报部门已经知道这些拜占庭军队的将军中存在叛徒,将试图破坏忠诚的将军们达成一致的联合行动计划。同时,虽然拜占庭军队的通信兵一定能不被敌方截获且确保送达消息,但是通信兵中也可能存在叛徒,可能在传信过程中篡改或伪造消息,也可能丢失消息。
问题求解
如果将拜占庭问题中的攻城军队的将军数量对应为分布式系统的节点数量,可以将符合拜占庭问题条件的分布式系统称为”拜占庭系统”,
在拜占庭系统中任意两个节点之间的通信是保证可达的,可以得出以下结论:
对于一个拜占庭系统,如果系统总节点数为Z,表示叛变将军的不可靠节点数为X,只有当Z≥3X+1时,可由基于拜占庭客容错(BFT)类算法的协议保证系统的一致性。
在实际的系统中,一般把由于系统故障导致节点不响应的情兄归类为“非拜占庭错误(Crash Fault)”,把节点伪造或篡改信息进行恶意响应的情况归类为“拜占庭错误(Byzantine Fault)”。
区块链系统是一种分布式系统,特别是像比特币、以太坊等公有链系统,由大量高度分散且彼此不信任的网络节点构成,区块链共识机制就是以共识算法为核心,确保区块链系统就某个事物始终能达成数据一致且不产生分叉。
目前,根据共识算法容错类型的不同,可以将共识算法分为非拜占庭容错类(CFT,Crash Fault Tolerance)算法和拜占庭容错类(BFT,ByzantineFault Tolerance)算法。
对于分布式系统,非拜占庭容错类共识算法能在节点发生系统故障或非计划停机等非拜占庭错误时,确保整个分布式系统的可靠性;但是,当系统中存在恶意节点伪造或篡改数据等行为时,非拜占庭容错算法无法保证系统的可靠性。
因此,非拜占庭容错类共识算法主要用于实现封闭的、系统节点都受控的企业吸分布式系统,如某企业构建的内部分布式应用集群系统或分布式存储系统。非拜占庭容错类共识算法中最有代表性的包括PaxoS算法与Raft算法。
拜占庭容错类共识算法能允许分布式系统节点发生任何类型的错误但错误节点数量不超过一定比例时,确保整个分布式系统的可靠性。简单的说,只要分布式系统的故障 (由于非拜占庭错误或拜占庭错误导致)节点数与系统总节点数相比,小于一定比例,拜占庭容错类共识算法就能保证分布式系统的可靠性。
由于像比特币、以太坊等区块链系统中,存在大量彼此不信任的网络节点,不排除有恶意节点企图伪造或篡改系统数据,因此,拜占庭容错类共识算法是区块链共识机制主要采用的共识算法。拜占庭容错类共识算法中最有代表性的包括PBFT实用拜占庭容错算法、PoW工作量证明算法、PoS权益证明算法等。