拜占庭将军问题(The Byzantine Generals Problem)

拜占庭将军问题(The Byzantine Generals Problem)提供了对分布式共识问题的一种情景化描述, 由Leslie Lamport等人在1982年首次发表. 论文同时提供了两种解决拜占庭将军问题的算法:

  • 口信消息型解决方案(A solution with oral message);

  • 签名消息型解决方案(A solution with signed message);

拜占庭将军问题是分布式系统领域最复杂的容错模型, 它描述了如何在存在恶意行为(如消息篡改或伪造)的情况下使分布式系统达成一致. 是我们理解分布式一致性协议和算法的重要基础.

简单描述

拜占庭军队的几个师驻扎在敌城外, 每个师都由各自的将军指挥. 将军们只能通过信使相互沟通. 在观察敌情之后, 他们必须制定一个共同的行动计划, 如进攻(Attack)或者撤退(Retreat), 且只有当半数以上的将军共同发起进攻时才能取得胜利. 然而, 其中一些将军可能是叛徒, 试图阻止忠诚的将军达成一致的行动计划. 更糟糕的是, 负责消息传递的信使也可能是叛徒, 他们可能篡改或伪造消息, 也可能使得消息丢失.

举例:三个将军攻城

情况一:全部忠诚

AB要打,C不打

A收到一个打一个不打自己还是打 则打与不打2:1 ->A进攻 BC同理进攻 胜利

其他情况->将达成一致的行动计划

情况二:C是叛徒

C传递假消息

A打 B不打 C骗A说不打 骗B说打

A收到两个不打自己是打 则打与不打1:2 ->A不进攻 B进攻 C是叛徒不打 只有B打 失败

论文中:如果存在m个叛将, 那么至少需要3m+1个将军, 才能最终达到一致的行动方案.

解决方案
  • 口信消息型解决方案(A solution with oral message);

  • 签名消息型解决方案(A solution with signed message);

口信消息型解决方案

对于口信消息(Oral message)的定义如下:

  • 任何已经发送的消息都将被正确传达;(不能改)

  • 消息的接收者知道是谁发送了消息;(可伪造)

  • 消息的缺席可以被检测.

可得知口信消息不能被篡改但是可以被伪造

存在一个叛将时, 必须再增加3个忠将才能达到最终的行动一致

3个忠将1个叛将

首先发送消息的将军称为指挥官, 其余将军称为副官. 对于3忠1叛的场景需要进行两轮作战信息协商, 如果没有收到作战信息那么默认撤退.

指挥官为忠将

在第一轮作战信息协商中, 指挥官向3位副官发送了进攻的消息

在第二轮中, 三位副官再次进行作战信息协商, 由于 A, B为忠将, 因此他们根据指挥官的消息向另外两位副官发送了进攻的消息, 而General C为叛将, 为了扰乱作战计划, 他向另外两位副官发送了撤退的消息

A收到一个打一个不打自己还是打(听指挥官的) 则打与不打2:1 ->A进攻 B同理进攻 C是叛徒不打 AB进攻胜利

指挥官为叛将

在第一轮作战信息协商中, 指挥官向A, B发送了撤退的消息, 但是为了扰乱C的决定向其发送了进攻的消息.

在第二轮中, 由于所有副官均为忠将, 因此都将来自指挥官的消息正确地发送给其余两位副官. 最终所有忠将都能达成一致撤退的计划.

对于口信消息型拜占庭将军问题, 如果叛将人数为m, 将军人数不少于3m+1, 那么最终能达成一致的行动计划. 值的注意的是, 在这个算法中, 叛将人数m是已知的, 且叛将人数m决定了递归的次数, 即叛将数m决定了进行作战信息协商的轮数, 如果存在m个叛将, 则需要进行m+1轮作战信息协商. 这也是上述存在1个叛将时需要进行两轮作战信息协商的原因

签名消息型解决方案

对签名消息的定义是在口信消息定义的基础上增加了如下两条:

  • 忠诚将军的签名无法伪造,而且对他签名消息的内容进行任何更改都会被发现;

  • 任何人都能验证将军签名的真伪

基于签名消息的定义, 可以知道, 签名消息无法被伪造或者篡改. 为了深入理解签名消息型解决方案, 同样以三将军问题为例进行推导

忠将率先发起

1.忠将率先发起作战协商的场景, A率先向B, C发送了进攻消息, 一旦叛将 C篡改了来自A的消息, 那么 B将将发现作战信息被C篡改, B将执行A发送的消息->进攻

叛将率先发起

2.叛将率先发起作战协商的场景, 叛将C率先发送了误导的作战信息, 那么A, B将发现C发送的作战信息不一致, 因此判定其为叛将. 可对其进行处理后再进行作战信息协商.

签名消息型解决方案可以处理任何数量叛将的场景

总结

在分布式系统领域, 拜占庭将军问题中的角色与计算机世界的对应关系如下:

  • 将军, 对应计算机节点;

  • 忠诚的将军, 对应运行良好的计算机节点;

  • 叛变的将军, 被非法控制的计算机节点;

  • 信使被杀, 通信故障使得消息丢失;

  • 信使被间谍替换, 通信被攻击, 攻击者篡改或伪造信息.

如上文所述, 拜占庭将军问题提供了对分布式共识问题的一种情景化描述, 是分布式系统领域最复杂的模型. 此外, 它也为理解和分类现有的众多分布式一致性协议和算法提供了框架. 现有的分布式一致性协议和算法主要可分为两类:

  • 一类是故障容错算法(Crash Fault Tolerance, CFT), 即非拜占庭容错算法, 解决的是分布式系统中存在故障, 但不存在恶意攻击的场景下的共识问题. 也就是说, 在该场景下可能存在消息丢失, 消息重复, 但不存在消息被篡改或伪造的场景. 一般用于局域网场景下的分布式系统, 如分布式数据库. 属于此类的常见算法有Paxos算法, Raft算法, ZAB协议等.

  • 一类是拜占庭容错算法, 可以解决分布式系统中既存在故障, 又存在恶意攻击场景下的共识问题. 一般用于互联网场景下的分布式系统, 如在数字货币的区块链技术中. 属于此类的常见算法有PBFT算法, PoW算法.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

伏颜.

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值