一、BFT简介
1.拜占庭将军问题简介
拜占庭将军问题(Byzantine Generals Problem),主要指分布式对等网络节点间的通信容错问题。
2.BFT简介
BFT(Byzantine Fault Tolerance),即拜占庭容错,是分布式计算领域的容错技术,拜占庭容错来源于拜占庭将军问题。
拜占庭将军问题是对现实世界的模型化,由于硬件错误、网络拥塞或中断以及遭到恶意攻击等原因,计算机和网络可能出现不可预料的行为。拜占庭容错技术被设计用来处理现实存在的异常行为,并满足所要解决的问题的规范要求。
区块链网络环境符合拜占庭将军问题模型,有运行正常的服务器(忠诚的拜占庭将军),有故障的服务器,还有破坏者的服务器(叛变的拜占庭将军)。共识算法的核心是在正常的节点间形成对网络状态的共识。
通常,发生故障的节点被称为拜占庭节点,而正常的节点为非拜占庭节点。
拜占庭容错系统是一个拥有n台节点的系统,整个系统对于每一个请求,满足以下条件:
A、所有非拜占庭节点使用相同的输入信息,产生同样的结果;
B、如果输入的信息正确,那么所有非拜占庭节点必须接收这个信息,并计算相应的结果。
拜占庭系统普遍采用的假设条件包括:
A、拜占庭节点的行为可以是任意的,拜占庭节点之间可以共谋;
B、节点之间的错误是不相关的;
C、节点之间通过异步网络连接,网络中的消息可能丢失、乱序并延时到达,但大部分协议假设消息在有限的时间里能传达到目的地;
D、服务器之间传递的信息,第三方可以嗅探到,但是不能篡改、伪造信息的内容和验证信息的完整性。
原始的拜占庭容错系统由于需要展示其理论上的可行性而缺乏实用性。另外,还需要额外的时钟同步机制支持,算法的复杂度也是随节点增加而指数级增加。
二、PBFT算法
1、PBFT算法简介
PBFT(Practical Byzantine Fault Tolerance),即实用拜占庭容错算法,由Miguel Castro和Barbara Liskov在1999年发表的论文《Practical Byzantine Fault Tolerance》中提出。PBFT算法可以工作在异步环境中,并且通过优化解决了原始拜占庭容错算法效率不高的问题,将算法复杂度由指数级降低到多项式级,使得拜占庭容错算法在实际系统应用中变得可行,目前已得到广泛应用。PBFT算法可以在失效节点不超过总数1/3的情况下同时保证Safety和Liveness。
PBFT 算法采用密码学相关技术(RSA 签名算法、消息验证编码和摘要)确保消息传递过程无法被篡改和破坏。
2、PBFT算法原理
参考:
(1). Byzantine fault:https://en.wikipedia.org/wiki/Byzantine_fault#External_links
(2). Lamport, L.; Shostak, R.; Pease, M. (1982). “The Byzantine Generals Problem” :https://www.microsoft.com/en-us/research/uploads/prod/2016/12/The-Byzantine-Generals-Problem.pdf
(3). “Practical Byzantine Fault Tolerance” by Miguel Castro and Barbara Liskov. In Third Symposium on Operating Systems Design and Implementation (OSDI), (New Orleans, Louisiana), Feb. 1999. :http://www.pmg.lcs.mit.edu/bft/ http://pmg.csail.mit.edu/papers/osdi99.pdf