有趣的拜占庭将军问题与BFT算法

1982年,著名计算机学家兰波特( Lamport )提出了拜占庭将军问题:拜占庭帝国派出了几只军队进攻一个城堡,如果这些带队的将军中有叛徒,在只能靠信使通讯的情况下,如何能够保证忠诚的将军同时、准确的行动?

论文:https://dl.acm.org/doi/pdf/10.1145/357172.357176

有一些将军可能会背叛并传播虚假的命令,试图通过传递错误的信息来干扰其他将军的决策。

在这个问题中:

  • 每个将军都知道自己军队的情况,但不知道其他将军的具体情况。
  • 将军们只能通过信使互相传递消息。
  • 他们需要就是否进攻达成一致的决策。
  • 有些将军可能是叛徒,他们故意传播错误的信息。

问题难点:困扰这些将军的问题,是他们不确定他们中是否有叛徒,叛徒可能会擅自变更进攻意向或者进攻时间。在这种状态下,拜占庭的将军们能否找到一种分布式的协议来让他们能够远程协商,从而赢取战斗?

论文首先定义了拜占庭将军问题:一个指挥官发送一个命令给n-1个将军,保证:

1)所有诚实的将军遵守统一的命令

2)如果指挥官是诚实的,所有的诚实的将军必须准守指挥官的命令。

论文接着指出如果将军之间通过口述消息,只有超过2/3的将军是诚实将军,拜占庭将军问题才能解决。论文给出了两个极限例子:总共三个拜占庭将军,其中一个是Commander(指挥官),拜占庭将军之能有两个选择:attack(进攻)或者retreat(撤退)。下图中显示了,只有2/3个诚实将军,无法解决拜占庭将军问题。

兰伯特 同时也提出两种解决该问题的思路,分别是基于口述消息与基于签名消息的拜占庭容错(Byzantine Fault Tolerance,BFT)共识算法。但是,由于这两种方案的通信复杂度很高(分别为 O(n^m) 与 O(nm) ,n 为总节点数量,m 为拜占庭节点数量),导致算法的使用难度较高。

基于口述消息(Oral Message)的BFT算法

论文给出了口述消息的定义(满足三个条件):

A1. 消息可以准确发送到指定的接收方 A2.消息接收者知道消息的发送方 A3. 可以检测消息的缺失。

基于上面的条件假设,不诚实的聪明的将军可以有如下的攻击手段(不被发现):

1)向不同的将军发送不同的消息

2)延迟消息发送。

论文提出了OM的算法:

OM(m)算法就是递归的,其中m指的是不诚实将军的个数。

很明显看出,OM(m)中有n-1个OM(m-1),对于每个OM(m-1)又有n-2个OM(m-2)。整个OM(m)的算法复杂度是O(n^m)。举个例子,如下图,四个拜占庭将军,其中Commander是诚实的,将军3是非诚实的。

第1步,Commander发送命令v给其他三个将军。第2步,三个将军广播消息给其他两个将军,将军3非诚实,发送B给将军2。第3步,将军2收到的消息为(A,A,B),使用A作为命令(多数消息是A)。

基于签名消息(Signed Message)的BFT算法

签名消息的定义,在口述消息的定义上增加了一个条件:

诚实将军的签名无法修改,任何篡改都会发现,并且任何人可以验证签名。

论文提出了SM(Signed Message)的算法:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小小小关同学

你的支持就是我的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值