拜占庭将军问题 原文翻译

2023-11-16

拜占庭将军问
作者:LESLIE LAMPORT、ROBERT SHOSTAK 和 MARSHALL PEASE @ 斯坦福国际研究院
译者&校对:闵敏 & 裴奇, Elisa @ EthFans.org

可靠的计算机系统必须具备处理故障组件的能力,以防它们向系统中的其它组件传递冲突信息。这种情况可以抽象地表述成一群拜占庭军队的将军各自带领部队驻扎在一座敌城周围。在只能依靠信使进行通信的情况下,这些将军必须就同一个作战计划达成共识。然而,他们中间可能会出现一个或多个叛将,试图混淆其他人的视听。问题在于如何找到一种算法来确保忠将之间达成共识。经论证,如果仅使用口信交流,当且仅当忠将人数超过 2/3 时,此问题有解;因此,一位叛将可以迷惑两位忠将。如果使用无法伪造的书信交流,无论将军总人数和潜在叛将的人数是多少,这个问题都有解。本文最后讨论了如何应用这些解法构建可靠的计算机系统。

分类和关键词 :C.2.4. [计算机通信网络]:分布式系统——网络操作系统;D.4.4 [操作系统]:通信管理——网络通信;D.4.5 [操作系统]:可靠性——容错

通用术语:算法,可靠性

其它关键词:交互一致性

1.引言

可靠的计算机系统必须具备处理一个或多个故障组件的能力。 故障组件可能会表现出一类常常被忽视的行为一一向系 统中的其它组件发送冲突信息。处理这类故障的问题可抽象地表述成拜占庭将军问题。本文主要讨论了这一抽象问 题,并在结论中提出了如何用这些解决方案实现可靠的计算机系统。

假设拜占庭军队中有几个分队驻扎在一座敌城周围,每个分队都有一个将军。这些将军之间只能依靠信使进行交流。 侦查过敌军之后,他们必须制定一个统一的作战计划。然而,一些将军可能会叛变,企图阻止忠将达成共识。这些将 军必须通过一种算法来保证:

A. 所有忠将都达成一致的作战计划。

忠将会遵从算法的一切指令,叛将则会随心所欲。算法必须保证无论叛将怎么摠乱条件 A 都成立。
忠将不仅应该达成共识,还应该就合理的计划达成一致。因此,我们还想要保证:

B. 少数叛将无法致使忠将采纳不良计划。

要将条件 B 形式化很难,因为这需要精确定义何为不良计划,我们也不打算尝试给出该定义,而是把各位将军达成 共识的方式作为思考的切入点。每位将军都会侦查敌方情况,并将侦查结果传达给其他将军。假设第 i i i 位将军传达的 消息为 v ( i ) v(i) v(i) ,将军总人数为 n n n ,每位将军通过某种方法将 v ( 1 ) , … , v ( n ) v(1), \ldots, v(n) v(1),,v(n) 的值结合起来形成一个作战计划。要实现 条件 A,所有将军必须采用同一种方法结合信息。要实现情况 B,必须采取一种稳健的方法。例如,如果只需决定 是进攻还是撤退, v ( i ) v(i) v(i) 则可以代表将军 i i i 认为哪种选项更好的观点,最终决定可以采用多数票决的方式作出。只有在 忠将投出的正反票数几乎相等的情况下,少数叛将才能左右最终决定,在这种情况下,进攻或撤退都不算是不良方案。

虽然这种方式可能不是满足条件 A \mathrm{A} A B \mathrm{B} B 的唯一方法,但这是我们了解的唯一方法。该方法假设各位将军通过某种方 法彼此传达 v ( i ) v(i) v(i) 值。最直接的方式是让将军 i i i 通过信使将 v ( i ) v(i) v(i) 传达给其他将军。然而,这是行不通的,因为满足条 件 A 需要每位忠将获得相同的 v ( 1 ) , … , v ( n ) v(1), \ldots, v(n) v(1),,v(n) 值,而叛将可能会向不同的将军传递不同的值。若要满足条件 A \mathrm{A} A ,必须 做到:

1.每位忠将必须获得相同的信息 v ( 1 ) , … , v ( n ) v(1), \ldots, v(n) v(1),,v(n)

条件 1 意味着其它将军不一定要使用直接从将军 i i i 处获得的 v ( i ) v(i) v(i) 值,因为如果叛变的是将军 i i i ,他可能会向不同的将 军发送不同的值。此即表明,除非非常谨慎,否则为了满足条件 1,还需考虑一种可能性,哪怕将军 i i i 是忠诚的,其 他将军们还是使用了一个不同于将军 i i i 发送的 v ( i ) v(i) v(i) 值(校注: 即接收 v ( i ) v(i) v(i) 的将军中有叛变) 。若要满足条件 B \mathrm{B} B ,必 须禁止这种情况发生。例如,在所有忠将发送的值均为 “进攻” 的情况下,不能允许少数叛将诱导忠将在 “撤退”, ,…, “撤退" 这些值中作出决定。因此,将军 i i i 还必须遵从下列要求:

2.如果将军 i i i 是忠诚的,那么其它忠将必须将他发送的值作为 v ( i ) v(i) v(i)

我们可以将条件 1 改为针对所有将军 i i i 的条件 (不管将军 i i i 忠诚与否),

1’. 任意两位忠将使用的 v ( i ) v(i) v(i) 值是相同的。

条件 1 ’ 和 2 均针对将军 i i i 发送的值。因此,我们现在仅需考虑一位将军如何将他的值发送给其他将军。这种情况可 以描述成一位指挥官向副官下达命令,引出了下述问题。

拜占庭将军问题。一位指挥官必须向他的 n − 1 n-1 n1 位副官发送一个命令,这个命令要满足以下两个条件:

IC1. 所有忠诚的副官都服从同一个命令。

IC2. 如果指挥官是忠诚的,则每位忠诚的副官都会服从他下达的命令。

IC1 和 IC2 称为 交互一致性条件。请注意,如果指挥官是忠诚的,那么满足了 IC2 势必会满足 IC1 。然而,指挥官 不一定是忠诚的。

若要解决最初的问题,将军 i i i 在发送 v ( i ) v(i) v(i) 值之时使用拜占庭将军问题的解法,发送命令“将 v ( i ) v(i) v(i) 作为我的值",其他将军则充当副官。

无解之解 反证法

拜占庭将军问题看似简单,实则难在: 如果将军只能发送口信的话,除非忠将人数达 2 / 3 2 / 3 2/3 以上,否则无解。尤其是在 仅有三位将军的情况下,一旦出现一位叛将,这个问题就无解。由于口信的内容是完全由发送者控制的,因此叛变的 发送者可以传达任意消息。这类消息类似于计算机通常情况下互相发送的那类消息。我们在第 4 节提出的签名书面消 息属于另一种情况。

如上所述,如果以口信作为通信方式,一旦三位将军中有一位叛变,则该问题无解。为了简化问题,我们只考虑“进 攻"和“撤退"两种选择。首先探究图 1 所示场景,即指挥官是忠诚的,并发送了“进攻"的命令,然而副官 2 叛变了,向 副官 1 谎报自己收到的是“撤退”的命令。若要满足条件 IC2,副官 1 必定要服从进攻的命令。

现在考虑图 2 所示的另一个场景,即指挥官叛变了,并向副官 1 发送了"进攻”的命令,向副官 2 发送了"撤退”的命 令。副官 1 不知道谁是叛将,而且没法辨别指挥官实际向副官 2 发送了什么消息。因此,图 1 和图 2 所示场景对副 官 1 来说没有区别。如果叛将坚持谎报军令,副官 1 没法辨别是哪种场景,就必须服从“进攻”的命令。因此副官 1 只 要从指挥官处收到 “进攻” 的命令,必定会服从。

在这里插入图片描述
然而,类似上述论断,如果副官 2 从指挥官处收到的命令是“撤退”,即使副官 1 告诉他指挥官下达的命令是“进攻", 他也会服从“撤退”命令。因此,在图 2 所示场景下,副官 2 必须服从“撤退”的命令,而副官 1 必须服从“进攻”的命 令,从而违反了条件 IC1。因此,三位将军中只要有一位叛变,这个问题就无解。

这个论点似乎很有说服力,不过我们强烈建议读者对这种末经严格论证的推理持怀疑态度。虽然所得结论确实是对 的,但是我们也见过对无效结论做出的类似的“证明”。我们知道,在计算机或数学领域中,用非形式推理来研究这类 算法的出错率是最高的。关于“两忠一叛”问题无解的严密论证,我们建议阅读第 3 节。

由此可得,如果叛将人数为 m m m , 将军总人数少于 3 m + 1 3 m+1 3m+1 时,则该问题无解 1 。该证明过程使用反证法一一先假设 在将军人数不超过 3 m 3 m 3m 的情况下该问题有解,并用它来构造我们已知无解的“两忠一叛”问题的解。为避免混淆两种算 法,我们将假设有解的问题中的将军称为阿尔巴尼亚将军,构造求解的问题中的将军称为拜占庭将军。因此,通过先 假设一个“不超过 3 m 3 m 3m 位阿尔巴尼亚将军中出现 m m m 位叛将"的算法,就可以构造出“两忠一叛"的拜占庭将军问题的解。

可将每位拜占庭将军模拟为大约 1 / 3 1 / 3 1/3 的阿尔巴尼亚将军,来得到“两忠一叛”问题的解,即每位拜占庭将军相当于最多 m m m 位阿尔巴尼亚将军。其中,拜占庭指挥官相当于一位阿尔巴尼亚指挥官加上最多 m − 1 m-1 m1 位阿尔巴尼亚副官,剩下 两位拜占庭副官各相当于最多 m m m 位阿尔巴尼亚副官。拜占庭将军中仅有一位会叛变,相当于最多有 m m m 位阿尔巴尼亚 将军会叛变。因此,该模拟下假定的解可以保证阿尔巴尼亚将军问题同样满足条件 IC1 和 IC2。根据 IC1,由一位忠 诚的拜占庭副官模拟的所有阿尔巴尼亚副官都会服从同一个命令。很容易可以验证出,阿尔巴尼亚将军问题像拜占庭 将军问题一样满足条件 IC1 和 IC2,由此我们已经找到了我们需要的无解之解。

有人可能认为解决拜占庭将军问题的难点在于需要达成某个确切的共识。为证明事实并非如此,我们现在要论证达成 近似共识与确切共识的难度相当。假设将军只试图就大致的作战时间,而非确切的作战计划达成共识。更准确地说, 我们假设指挥官下达了进攻时间的命令,且以下两个条件需成立:

IC1’. 所有忠诚的副官发动进攻的时间差在 10 分钟之内。

IC2’. 如果指挥官是忠诚的,所有忠诚的副官会按照指挥官命令的时间在 10 分钟内发动进攻。

(假设命令是在进攻前一天下达并处理的,而命令何时送达无关紧要一一重要的只有命令中给出的进攻时间。)

与拜占庭将军问题一样,除非忠将人数超过 2 / 3 2 / 3 2/3 ,否则该问题无解。我们的证明需要一个假设,令该问题的“两忠一 叛“问题有解,那么我们就能够用这个解构建出一个拜占庭将军问题的“两忠一叛”的解。假设指挥官想要下令“进攻"或"撤退"。根据假定算法,如果指挥官发送的进攻时间为 1:00,则代表进攻的命令,如果发送的进攻时间为 2:00 ,则代表撤退的命令。每位副官通过下列步骤获取命令。

(1) 从指挥官处收到进攻时间的命令后,副官采取以下某个步骤:
\quad (a) 如果进攻时间不晩于 1:10,进攻。
\quad (b) 如果进攻时间不早于 1:50,撤退。
\quad (c) 其它情况则执行步骤 (2)。
(2) 询问另一个副官在步骤 (1) 中做出了什么决定。
\quad (a) 如果另一个副官做出了决定,做出与他相同的决定。
\quad (b) 其它情况则撤退。

由 IC2’ 可推知,如果指挥官是忠诚的,忠诚的副官会在步骤(1)得到正确的命令,从而满足 IC2 。如果指挥官是忠诚的,满足了 IC2 势必会满足 IC1,因此只需要证明在假设指挥官是叛将的情况下,仍能满足 IC1 即可。 因为叛将人数最多只有一位,所以可推知两位副官都是忠将。由 IC1’ 可推知,如果一位副官在步骤(1)中作出了进攻的决定,那么另一位副官不能在步骤(1)中得出撤退的决定。因此存在两种可能性,即两位副官执行步骤(1)得出了相同的决定,或是至少有一位将决定推迟到了步骤(2)。进入步骤(2)后,他们显然会做出相同的决定,从而满足 IC1 。因此,我们已经为无解的拜占庭将军问题的“两忠一叛”构建出了解法。综上所述,解决“两忠一叛”问题的算法不可能同时满足 IC1’ 和 IC2’ 。

现在可使用上述将一位将军模拟成 位将军的方法来证明:如果叛将人数为 m m m,将军人数少于 3 m + 1 3m+1 3m+1时,则该问题无解。论证过程与原始的拜占庭将军问题类似,留待读者自行论证。

下载地址:https://download.csdn.net/download/qq_36667170/85690424


  1. DIFFIE, W., AND HELLMAN, M.E. New directions in cryptography. IEEE Trans. Inf. Theory IT-22 (Nov. 1976),644-654. ↩︎

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

拜占庭将军问题 原文翻译 的相关文章

随机推荐

  • 86-信号和槽-信号与槽的参数

    信号与槽的参数 上节介绍了信号与槽的基本使用方法 本节介绍其参数传递的情况 通过为槽函数传递特定的参数 可以实现更复杂的功能 既可以传递 Qt 的内置参数 也可以传递自定义参数 当然 内置参数和自定义参数也可以放在一起传递 自定义参数既可以
  • 不习惯的 Vue3 起步六 の Echarts绘制下钻地图

    序 看过一些可视化大屏展示地图的例子 准备动手做做 既然要开始比制作 那么先把目标定好 做一个展示中国城市的下钻地图 使用 Vue3 Vite Typescript echarts 实现效果 准备工作 创建项目 因为准备使用Vue3 Vit
  • Vue——自定义指令

    自定义全局指令 注 使用指令时必须在指名名称前加前缀v 即v 指令名称 Vue directive hello bind 常用 alert 指令第一次绑定到元素上时调用 只调用一次 可执行初始化操作 inserted alert 被绑定元素
  • 【上位机】通过QTCreator编写WIFI上位机与网络调试助手通信绘制曲线

    文章目录 前言 一 使用QT Creator编写上位机 二 上位机与网络调试助手联调 三 总结 前言 17年电赛H题中要求编写WIFI上位机实现远程幅频特性曲线显示 以下是本人在近期摸索出来的一些心得及体会 一 使用QT Creator编写
  • 目前有哪些好用的测试管理工具?

    PingCode Testhub Zephyr for jira 禅道等都是当下不错的测试管理工具 其实就测试用例管理工具或Bug管理工具来说 当前市场上种类并不少 功能也各有特色 我们在工具选型过程中最大的问题并不是不知道有哪些好的工具
  • FastDFS单机部署安装

    FastDFS单机部署安装 文章目录 FastDFS单机部署安装 前言 1 服务器规划 2 安装包 3 所有tracker和storage节点都执行如下操作 3 1 安装所需的依赖包 3 2 安装libfatscommon 3 3 安装Fa
  • mac电脑屏幕录制Berrycast Mac屏幕录制软件

    Berrycast是一款为Mac设计的优秀屏幕录制软件 它让屏幕录制变得简单而高效 以下是Berrycast的一些主要特点 简单的用户界面 Berrycast拥有直观和简洁的用户界面 使得用户可以轻松上手 高质量的视频输出 Berrycas
  • Vue2开发插件并发布到npm

    Vue3 TS Vite开发插件并发布到npm 目标 创建vue amazing selector下拉框组件 并发布到npm 效果如下图 默认时样式 禁用时样式 创建vue项目 vue create vue amazing selector
  • 指针和引用的区别

    从概念上讲 指针从本质上讲就是存放变量地址的一个变量 在逻辑上是独立的 它可以被改变 包括其所指向的地址的改变和其指向的地址中所存放的数据的改变 而引用是一个别名 它在逻辑上不是独立的 它的存在具有依附性 所以引用必须在一开始就被初始化 而
  • Kafka传输数据到Spark Streaming通过编写程序java、scala程序实现操作

    一 案例说明 现有一电商网站数据文件 名为buyer favorite1 记录了用户对商品的收藏数据 数据以 t 键分割 数据内容及数据格式如下 二 前置准备工作 项目环境说明 Linux Ubuntu 16 04 jdk 7u75 lin
  • segment anything原来可以这么玩

    Segment Anything能给我们做什么 前言 内容 具体实现 成果 前言 最近 大模型的热度确实是非常非常的高 从chatgpt到segment anything 这些东西整的我这刚入门的小白确实有点懵逼 最近实在是不知道干啥 想想
  • TypeScript装饰器原理分析

    文章目录 1 前言 2 装饰器原理 2 1 类装饰器 2 2 属性饰器 2 3 方法装饰器 访问器set get也属于方法 2 4 参数装饰器 3 装饰器执行顺序 1 前言 TypeScript装饰器装饰器是一种特殊类型的声明 它能够被附加
  • python numpy中mgrid使用方法

    import numpy as np 基本介绍 np mgrid start end Sj 上述表达中start表示开始数 end表示结束数 Sj表示总共个数 实例 生成的数组是包含end和start这两个数的 np mgrid start
  • 如何在ParaView中使用编程对不同的切面进行积分计算并保存输出?

    如何在ParaView中使用编程对不同的切面进行积分计算并保存输出 ParaView是一个强大的可视化和数据处理工具 它可以通过编程方式自动化各种任务 在此教程中 我们将讨论如何使用ParaView的Python编程接口来对不同的切面进行积
  • 谈谈我对redis事务的理解

    redis事务的所有命令都是序列化 有序地执行 在事务的执行过程中 不会被其他客户端发送的命令所打断 事务的主要作用就是串联所有命令防止其他命令插队 redis事务有几个常用的命令 首先是multi命令 它标记着事务的开始 意思是将命令入命
  • 恒源云GPU租用保姆级教程,助力深度学习训练!

    文章来源 恒源云社区 专注人工智能 深度学习GPU免费加速平台 官方体验网址 https gpushare com 恒源云史上最全的平台使用教程诞生了 用实力证明咱们能唱能跳产品好用 助力大家AI训练 跑赢开学季 必看篇 初次使用恒源云的用
  • golang flag 包的使用指北

    说起 golang 的 flag 个包 我们第一反应的是什么呢 至少我曾经第一次看到 flag 包的时候 第一反应是想起写 C 语言的时候咱们用于定义一个表示的 我们一般会命名为 flag 变量 实际上 golang 的 flag 包是用于
  • 无法定位软件包问题

    在etc apt 的sources list 添加镜像源 deb http archive ubuntu com ubuntu trusty main universe restricted multiverse 然后 sudo apt g
  • 数据分析报告概述

    一 结构规范及写作 报告常用结构 1 架构清晰 主次分明 数据分析报告要有一个清晰的架构 层次分明能降低阅读成本 有助于信息的传达 虽然不同类型的分析报告有其适用的呈现方式 但总的来说作为议论文的一种 大部分的分析报告还是适用总 分 总 的
  • 拜占庭将军问题 原文翻译

    拜占庭将军问 作者 LESLIE LAMPORT ROBERT SHOSTAK 和 MARSHALL PEASE 斯坦福国际研究院 译者 校对 闵敏 裴奇 Elisa EthFans org 可靠的计算机系统必须具备处理故障组件的能力 以防