【拜占庭将军问题】
拜占庭将军:背后的数学证明

拜占庭将军:背后的数学证明我们介绍了著名的拜占庭将军问题的由来及其结论:1. 在存在 m 个叛徒将军的情况下,将军总数⼩于等于 3m 时,忠诚将军之间的⼀致性⽆法达成;2. 当将军总是⼤于等于 3m+1 时,忠诚将军之间可以达成⼀致。
不知道你是否对这个结论存在疑惑,我们只是讲了⼀个叛徒存在的情况下三个将军⽆法达成⼀致,⽽四个将军可以达成⼀致,那到底是怎么推导出 3m 个将军⽆法达成⼀致和 3m+1 个将军能够达成⼀致的呢?如果你有这个疑问,那么说明你是个治学严谨并且随时独⽴思考的好同学。
上⼀讲的主要精⼒集中在对问题进⾏描述和简化上,这⼀讲我们就⼀起进⼊实打实的数学证明的学习。
为什么要进⾏数学证明呢?你可能会有疑问,我知道结论不就好了么,为什么还要去弄明⽩证明过程?我想告诉你的是:⼀来是知道证明的过程,可以帮助你更好地从本质上去更深层次理解拜占庭将军整个问题和结论。
⼆来是拜占庭将军问题的证明过程利⽤到了算法领域中⼗分常见的解题思路,通过学习证明过程,能让你获得触类旁通的能⼒,之后可以解决更多的问题。
具体来说,在这⼀讲的证明过程中,将使⽤到两种⽅法:反证法和数学归纳法,它们是普通算法推导中最常⽤的⽅法。
熟练掌握它们,你将具备⾃⼰创造算法的能⼒。
我曾经在⼀次⾯试中遇到⼀道没见过的题,就是⽤这两种⽅法现场编了⼀个⾯试官都没见过的算法。
当⾯试官质疑我的算法正确性时,我就⽤反证法和数学归纳当场证明了⼀下,直接把⾯试官给征服了。
三来是我希望能够通过我的理解进⾏证明过程推导,以此来消除之前你对数学证明或多或少所存在的畏难⼼理,之后,你可以更加从容地⾯对数学证明相关的问题。
再看拜占庭将军问题上⼀讲中,主要是以易懂的⽅式来讲拜占庭将军问题的,现在到了证明阶段,那么就来看⼀下拜占庭将军严格的形式化表达形式是到底是怎样的。
拜占庭将军问题:发令将军将指令发送给 n-1 个副官(传递消息的将军),副官之间需要通过协作达成下列两个⽬标:IC1:所有忠诚的副官对发令将军发送的指令达成⼀致。
区块链-PPT课件

授课:XXX
16
2、区块链的定义和来源
Blockchain是区块链 是一串使用密码学方 法相关联产生的数据 块,每一个数据块中 包含了一次网络交易 的信息,用于验证其 信息的有效性(防伪) 和生成下一个区块。
区块链?
概念首次出现:《比特币:一种点对 点的电子现金系统》》,区块链诞生 自中本聪的比特币。
另一种方式是让大家来接龙,每 个人在上一个人的后面累加一个 号并加上自己的名字,最后就能 记录全部的报名人员和人数—— 区块链。
微信组局
接龙发帖
规则:每个人发帖=上一个贴内容+下一个 编号+自己名字
规则定下来后,大家自发登记
在微信群里记录登记情况 只要联网就能知道最新进展
为了形成40个人的报名记录,至少有40人 发40篇帖子才够,群友手机里都存档
BlockChain
授课:XXX
1
授课:XXX
2
两个基本问题 –类两军问题
授课:XXX
3பைடு நூலகம்
本问题 –拜占庭将军问题
拜占庭将军问题:
拜占庭帝国派10支军队进攻一敌人,这个敌人 可以抵御5支军队同时袭击,这10支军队不能 集合单点突破,必须分开同时攻击。问题是多 个将军互相并不信任(存在叛徒)时,这种状 态下要保证进攻一致,需要某种分布式协议来 进行远程协调。如果每个将军向其他九位将军 派出一名信使,总计90次传输,部分叛徒还 会故意答应一个的攻击时间,所以他们将重新 广播超过一条的信息链。这个系统变成不可靠 和攻击时间矛盾的混合体。
授课:XXX
4
解决思路
拜占庭将军的故事最后, 数学家们设计了一套算法, 让将军们在接到上一位将 军的信息之后,加上自己 的签名再转给除自己以外 的其他将军,这样的信息 模块就形成了区块链。
区块链共识机制之拜占庭算法

共识机制是区块链技术的核心,那什么是“共识”呢?对于现实世界,共识就是一群人对一件或者多件事情达成一致的看法或者协议。
在计算机世界当中,共识包含两个层面,第一个层面是点的层面,即多个节点对某个数据达成一致共识。
第二个层面是线的问题,即多个节点对多个数据的顺序达成一致共识。
这里的节点可以是任意的计算机设备,比如PC 电脑,笔记本,手机,路由器等,这里的数据可以是交易数据、状态数据等。
现阶段的共识算法分类如下图所示:共识机制来源于著名的“拜占庭将军问题”,拜占庭将军问题是由莱斯利·兰伯特提出的点对点通信的基本问题,主要是用于分析在分布式节点传输信息时如何保持数据的一致。
Pbft 算法的提出主要是为了解决拜占庭将军问题。
那什么是拜占庭将军问题呢?拜占庭位于如今的土耳其的伊斯坦布尔,是古代东罗马帝国的首都。
拜占庭罗马帝国国土辽阔,为了达到防御目的,每块封底都驻扎着一支由将军统领的军队,每个军队都分隔很远,将军与将军之间只能靠信差传递消息。
在战争的时候,拜占庭军队内所有将军必须达成一致的共识,决定是否有赢的机会才去攻打敌人的阵营。
但是,在军队内有可能存有叛徒和敌军的间谍,左右将军们的决定影响将军们达成一致的共识。
在已知有将军是叛徒的情况下,其余忠诚的将军如何达成一致协议的问题,这就是拜占庭将军问题。
应该明确的是,拜占庭将军问题中并不去考虑通信兵是否会被截获或无法传递信息等问题,即消息传递的信道绝无问题。
如果信道不能保证可靠,那么拜占庭问题无解。
关于信道可靠问题,会引出两军问题。
如上图所示,白军驻扎在沟渠里,蓝军则分散在沟渠两边。
白军比任何一支蓝军都更为强大,但是蓝军若能同时合力进攻则能够打败白军。
他们不能够远程的沟通,只能派遣通信兵穿过沟渠去通知对方蓝军协商进攻时间。
是否存在一个能使蓝军必胜的通信协议,这就是两军问题。
看到这里你可能发现两军问题和拜占庭将军问题有一定的相似性,但是我们必须注意到是,通信兵得经过敌人的沟渠,在这个过程中他可能被捕,也就是说,两军问题中信道是不可靠的,并且其中没有叛徒之说,这就是两军问题和拜占庭将军问题的根本性不同。
区块链拜占庭将军问题详解

区块链拜占庭将军问题详解引言:区块链是目前最受瞩目的技术之一,而其中的拜占庭将军问题更是备受关注。
本文将对拜占庭将军问题进行详解,并探讨其在区块链中的应用。
一、拜占庭将军问题的基本概念所谓拜占庭将军问题,是指在信息传递过程中,由于受到了不确定因素或受到欺诈的干扰,导致信息传递出现了错误的情况。
换句话说,拜占庭将军问题是一个有误差、有不确定性、有欺诈情况的分布式系统中的一种问题。
在一个分布式系统中,由于存在各种的干扰因素,分布在不同节点上的计算机之间可能会出现通信错误、数据丢失等情况,这就是拜占庭将军问题。
二、拜占庭将军问题的解决方法解决拜占庭将军问题的关键在于找到一种有效的方法来识别出故障节点,从而确保系统的正常运转。
实际上,目前有许多解决拜占庭将军问题的方法,比如:PBFT算法、SOSP算法、Byzantine Reliable Broadcast等。
三、拜占庭将军问题在区块链中的应用在区块链技术中,拜占庭将军问题也同样存在。
例如,在比特币中,由于矿工之间的竞争,可能存在恶意节点的情况,从而导致区块链出现错误。
而采用拜占庭将军问题的解决方法,则可以让区块链系统更为安全可靠。
最近,随着区块链技术的不断发展和普及,拜占庭将军问题的研究也日益深入。
目前,已经有越来越多的研究者开始着手研究如何将拜占庭将军问题的解决方法与区块链技术相结合,以实现更加安全可靠的区块链系统。
总结:拜占庭将军问题是一个有误差、有不确定性、有欺诈情况的分布式系统中的一种问题,在信息传递过程中,由于受到了不确定因素或受到欺诈的干扰,导致信息传递出现了错误的情况。
目前,拜占庭将军问题的解决方法也有很多,而在区块链技术中,拜占庭将军问题也同样存在。
因此,研究如何将拜占庭将军问题的解决方法与区块链技术相结合,已经成为当前区块链技术研究的热点。
区块链-重塑经济与世界

8、区块链的网络构架
公共区 块链
网络中的节点可以任意接入,网络中 的读写权限不受限制,任何人都能参 与共识过程,比特币属于典型的公有 链。
私有区 块链
网络中的节点被一个组织控制,写入 权限仅限在一个组织内部,读取权限 有限对外开放,全球42家银行组建的 区块链联盟R3 CEV就是私有链。
联盟区 块链
数据库 可靠
系统中每个节点都能获得一 份完整的“账本”(数据库)的 拷贝,除非能够同时控制整 个系统中超过51%的节点,否 则单个节点上对数据的修改 是无效的,也无法影响其他 节点上的数据内容。
该怎么证明我妈是我妈?如何实现自证?
北京市民陈先生一家三口准备出境 旅游,需要明确一位亲人为紧急联络 人,于是他想到了自己的母亲。可问 题来了,需要书面证明他和他母亲是 母子关系。可陈先生在北京的户口簿, 只显示自己和老婆孩子的信息,而父 母在江西老家的户口簿,早就没有了 陈先生的信息。
网络中部分节点可以任意接入,另一 部分则必须通过权限才可以接入的区
块链,比如清算。
区块链基于互联网运行, 但其功能却广于互联网。 两种技术的相同点主要 在于 : 在数据传输方式上, 互联网与区块链都不需 要中心化的中介;两种 技术都要求用户接入互 联网;两种技术都能够 满足一个组织内的多个 使用者同时使用。
7、区块链的核心技术
去中心 化
网络中没有中心化的物理节点 和管理机构,网络功能的维护 依赖网络中所有具有维护能力 的节点完成,各节点的地位是 平等的,一个节点甚至几个节 点的损坏不会影响整个系统的 运作,网络具备很强的健壮性。
去信任
网络节点间数据传输是匿名的 而且节点之间不需要互相信任, 整个系统通过公开透明数学算 法运行。节点彼此数据公开, 彼此信任,没有办法欺骗其他 节点。
将军饮马模型原理

将军饮马模型原理解析背景介绍将军饮马模型(也称为“Generals and the Drinking Horse”)是一个经典的分布式系统问题,用于解释在分布式系统中的一致性问题。
这个问题最早由莱斯利·兰伯特(Leslie Lamport)在1982年提出,并被广泛应用于分布式计算和共识算法研究中。
问题描述将军饮马模型是一个由多个将军组成的系统,这些将军通过发送消息来达成共识。
每个将军都可以选择发动进攻或撤退,而他们的目标是要么全体进攻,要么全体撤退。
然而,由于通信不可靠,将军之间可能无法完全互相了解对方的行动意图。
具体来说,每个将军可以发送三种类型的消息给其他将军: 1. ATTACK:表示该将军希望进攻。
2. RETREAT:表示该将军希望撤退。
3. ACKNOWLEDGE:表示该将军已经收到了另一位将军发送的消息。
所有的消息都会通过信使传递给其他的将军。
然而,由于信使可能被敌方拦截或延迟送达,所以将军无法得知他们的消息是否已经被其他将军收到。
此外,每个将军还有一个重要的限制条件:如果将军A收到了一条进攻消息,那么他必须向其他所有将军发送一条进攻或撤退的消息。
同样地,如果将军A收到了一条撤退消息,那么他也必须向其他所有将军发送一条进攻或撤退的消息。
问题是如何设计一种算法来确保所有的将军在没有完全互相了解对方行动意图的情况下达成共识。
基本原理为了解释将军饮马模型中的基本原理,我们可以使用著名的“Byzantine Generals Problem”作为一个更具体和形象化的例子。
Byzantine Generals Problem是一个扩展和推广了将军饮马模型的问题,在其中有多个叛徒(即“拜占庭将军”)可能会向其他人发送虚假信息。
在这个问题中,我们假设有n个拜占庭将军,并且至多有m个叛徒。
每个拜占庭将军都需要向其他人发送一个确定性的值(例如进攻或撤退),并且希望建立一个共识来确保他们中大多数人都达成相同的值。
拜占庭容错——精选推荐

拜占庭容错拜占庭容错 拜占庭将军问题提出后,有很多的算法被提出⽤于解决这个问题。
这类算法统称拜占庭容错算法(BFT: Byzantine Fault Tolerance)。
简略来说,拜占庭容错(BFT)不是某⼀个具体算法,⽽是能够抵抗拜占庭将军问题导致的⼀系列失利的系统特点。
这意味着即使某些节点出现缺点或恶意⾏为,拜占庭容错系统也能够继续运转。
本质上来说,拜占庭容错⽅案就是少数服从多数。
拜占庭容错系统需要达成如下两个指标:安全性:任何已经完成的请求都不会被更改,它可以在以后请求看到。
在区块链系统中,可以理解为,已经⽣成的账本不可篡改,并且可以被节点随时查看。
活性:可以接受并且执⾏⾮拜占庭客户端的请求,不会被任何因素影响⽽导致⾮拜占庭客户端的请求不能执⾏。
在区块链系统中,可以理解为,系统需要持续⽣成区块,为⽤户记账,这主要靠挖矿的激励机制来保证。
拜占庭系统⽬前普遍采⽤的假设条件包括:拜占庭节点的⾏为可以是任意的,拜占庭节点之间可以共谋;节点之间的错误是不相关的;节点之间通过异步⽹络连接,⽹络中的消息可能丢失、乱序、延时到达;服务器之间传递的信息,第三⽅可以知晓 ,但是不能窜改、伪造信息的内容和验证信息的完整性;在BFT共识机制中,⽹络中节点的数量和⾝份必须是提前确定好的。
且每⼀次节点的进出都需要对⽹络进⾏初始化,故其⽆法像PoW共识机制那样任何⼈都可以随时加⼊/退出挖矿。
另外,由于节点间基于消息传递达成共识,因此采⽤BFT算法的⽹络⽆法承载⼤量的节点,业内普遍认为100个节点是BFT算法的上限。
所以BFT算法⽆法直接⽤于公有链,⽽更多的应⽤于私有链和联盟链。
业内⼤名⿍⿍的联盟链Hyperledger fabric v0.6采⽤的是PBFT,v1.0⼜推出PBFT的改进版本SBFT。
后续⼜有相当多的⼈对其进⾏了改进,⼒求提⾼其扩展性。
但往往都是基于对⽹络环境的理想假设,以省去部分共识阶段,实现更⾼的节点承载量。
云计算技术与分布式系统测试 选择题 60题

1. 云计算的主要服务模型不包括以下哪一项?A. IaaSB. PaaSC. SaaSD. DaaS2. 以下哪个不是云计算的部署模型?A. 公有云B. 私有云C. 社区云D. 本地云3. 在分布式系统中,CAP理论指的是什么?A. Consistency, Availability, Partition toleranceB. Consistency, Accessibility, Partition toleranceC. Continuity, Availability, Partition toleranceD. Continuity, Accessibility, Partition tolerance4. 以下哪个协议常用于云计算中的虚拟网络?A. HTTPB. TCP/IPC. VXLAND. SMTP5. 云计算中的“弹性计算”主要指的是什么?A. 计算资源的固定分配B. 计算资源的按需分配C. 计算资源的随机分配D. 计算资源的预分配6. 在分布式系统中,“一致性哈希”主要用于解决什么问题?A. 数据备份B. 数据分片C. 数据加密D. 数据压缩7. 以下哪个是云计算中的存储服务模型?A. S3B. EC2C. RDSD. Lambda8. 在云计算环境中,“多租户”指的是什么?A. 多个用户共享同一物理资源B. 多个用户使用独立的物理资源C. 单个用户使用多个物理资源D. 单个用户使用独立的物理资源9. 以下哪个技术不是用于提高分布式系统性能的?A. 负载均衡B. 缓存C. 数据压缩D. 数据备份10. 在云计算中,“无服务器计算”通常指的是什么?A. 不需要物理服务器B. 不需要管理服务器C. 不需要虚拟服务器D. 不需要网络服务器11. 以下哪个是分布式文件系统的例子?A. HDFSB. NTFSC. FAT32D. EXT412. 在云计算中,“容器化”技术主要使用哪个工具?A. DockerB. KubernetesC. VagrantD. Ansible13. 以下哪个不是云计算的安全挑战?A. 数据隐私B. 服务可用性C. 网络延迟D. 身份验证14. 在分布式系统中,“拜占庭将军问题”主要涉及什么?A. 数据一致性B. 数据可靠性C. 数据安全性D. 数据可用性15. 以下哪个是云计算中的网络服务模型?A. VPCB. S3C. RDSD. EC216. 在云计算中,“自动扩展”主要用于什么?A. 减少资源使用B. 增加资源使用C. 动态调整资源D. 固定资源使用17. 以下哪个不是分布式数据库的特点?A. 高可用性B. 低延迟C. 数据一致性D. 数据隔离18. 在云计算中,“混合云”指的是什么?A. 公有云和私有云的组合B. 公有云和社区云的组合C. 私有云和社区云的组合D. 公有云和本地云的组合19. 以下哪个是云计算中的计算服务模型?A. EC2B. S3C. RDSD. VPC20. 在分布式系统中,“两阶段提交”主要用于什么?A. 数据备份B. 数据恢复C. 事务处理D. 数据分片21. 以下哪个是云计算中的数据库服务模型?A. RDSB. S3C. EC2D. VPC22. 在云计算中,“边缘计算”主要用于什么?A. 数据中心B. 终端设备C. 网络边缘D. 云端23. 以下哪个不是云计算的成本优势?A. 资本支出B. 运营支出C. 资源共享D. 资源独占24. 在分布式系统中,“最终一致性”主要用于什么?A. 数据备份B. 数据恢复C. 数据一致性D. 数据可用性25. 以下哪个是云计算中的消息队列服务模型?A. SQSB. S3C. EC2D. RDS26. 在云计算中,“云爆发”主要用于什么?A. 资源扩展B. 资源收缩C. 资源固定D. 资源共享27. 以下哪个不是云计算的性能挑战?A. 网络延迟B. 数据一致性C. 服务可用性D. 资源分配28. 在分布式系统中,“分布式锁”主要用于什么?A. 数据备份B. 数据恢复C. 资源同步D. 数据分片29. 以下哪个是云计算中的分析服务模型?A. RedshiftB. S3C. EC2D. RDS30. 在云计算中,“云原生”主要指的是什么?A. 基于云的应用开发B. 基于本地的应用开发C. 基于虚拟机的应用开发D. 基于物理机的应用开发31. 以下哪个是云计算中的容器编排工具?A. DockerB. KubernetesC. VagrantD. Ansible32. 在分布式系统中,“分布式事务”主要用于什么?A. 数据备份B. 数据恢复C. 事务处理D. 数据分片33. 以下哪个是云计算中的存储服务模型?A. EBSB. S3C. EC2D. RDS34. 在云计算中,“云迁移”主要用于什么?A. 数据备份B. 数据恢复C. 应用迁移D. 数据分片35. 以下哪个不是云计算的可靠性挑战?A. 数据备份B. 数据恢复C. 服务可用性D. 资源分配36. 在分布式系统中,“分布式缓存”主要用于什么?A. 数据备份B. 数据恢复C. 提高性能D. 数据分片37. 以下哪个是云计算中的网络服务模型?A. ELBB. S3C. EC2D. RDS38. 在云计算中,“云安全”主要涉及什么?A. 数据备份B. 数据恢复C. 安全策略D. 数据分片39. 以下哪个是云计算中的计算服务模型?A. LambdaB. S3C. EC2D. RDS40. 在分布式系统中,“分布式存储”主要用于什么?A. 数据备份B. 数据恢复C. 数据存储D. 数据分片41. 以下哪个是云计算中的数据库服务模型?A. DynamoDBB. S3C. EC2D. RDS42. 在云计算中,“云监控”主要用于什么?A. 数据备份B. 数据恢复C. 性能监控D. 数据分片43. 以下哪个不是云计算的可扩展性挑战?A. 资源分配B. 资源共享C. 资源扩展D. 资源收缩44. 在分布式系统中,“分布式日志”主要用于什么?A. 数据备份B. 数据恢复C. 日志记录D. 数据分片45. 以下哪个是云计算中的消息队列服务模型?A. SNSB. S3C. EC2D. RDS46. 在云计算中,“云备份”主要用于什么?A. 数据备份B. 数据恢复C. 数据存储D. 数据分片47. 以下哪个不是云计算的可用性挑战?A. 服务中断B. 资源分配C. 资源共享D. 资源扩展48. 在分布式系统中,“分布式调度”主要用于什么?A. 数据备份B. 数据恢复C. 任务调度D. 数据分片49. 以下哪个是云计算中的分析服务模型?A. AthenaB. S3C. EC2D. RDS50. 在云计算中,“云网络”主要用于什么?A. 数据备份B. 数据恢复C. 网络连接D. 数据分片51. 以下哪个是云计算中的存储服务模型?A. GlacierB. S3C. EC2D. RDS52. 在云计算中,“云恢复”主要用于什么?A. 数据备份B. 数据恢复C. 数据存储D. 数据分片53. 以下哪个不是云计算的性能优化技术?A. 负载均衡B. 缓存C. 数据压缩D. 数据备份54. 在分布式系统中,“分布式配置”主要用于什么?A. 数据备份B. 数据恢复C. 配置管理D. 数据分片55. 以下哪个是云计算中的网络服务模型?A. Direct ConnectB. S3C. EC2D. RDS56. 在云计算中,“云存储”主要用于什么?A. 数据备份B. 数据恢复C. 数据存储D. 数据分片57. 以下哪个不是云计算的安全技术?A. 身份验证B. 数据加密C. 数据备份D. 访问控制58. 在分布式系统中,“分布式计算”主要用于什么?A. 数据备份B. 数据恢复C. 计算任务D. 数据分片59. 以下哪个是云计算中的分析服务模型?A. QuickSightB. S3C. EC2D. RDS60. 在云计算中,“云集成”主要用于什么?A. 数据备份B. 数据恢复C. 服务集成D. 数据分片答案1. D2. D3. A4. C5. B6. B7. A8. A9. D11. A12. A13. C14. A15. A16. C17. D18. A19. A20. C21. A22. C23. D24. C25. A26. A27. B28. C29. A30. A31. B32. C33. A34. C35. D36. C37. A38. C39. A40. C41. A42. C43. D44. C45. A46. A47. C48. C49. A50. C51. A52. B53. D54. C55. A56. C57. C58. C60. C。
三分钟教您看懂中本聪是如何解决拜占庭将军问题的

三分钟教您看懂中本聪是如何解决拜占庭将军问题的拜占庭将军问题很多⼈可能听过,但不知道是什么意思,今天⾦猫kinmall就让你三分钟看懂区块链智慧是如何解决拜占庭将军问题的。
故事⼤概是这么说的:拜占庭帝国即中世纪的⼟⽿其,拥有巨⼤的财富,周围10个邻邦垂诞已久,但拜占庭⾼墙耸⽴,固若⾦汤,没有⼀个单独的邻邦能够成功⼊侵。
任何单个邻邦⼊侵的都会失败,同时也有可能⾃⾝被其他9个邻邦⼊侵。
拜占庭帝国防御能⼒如此之强,⾄少要有⼗个邻邦中的⼀半以上同时进攻,才有可能攻破。
然⽽,如果其中的⼀个或者⼏个邻邦本⾝答应好⼀起进攻,但实际过程出现背叛,那么⼊侵者可能都会被歼灭。
于是每⼀⽅都⼩⼼⾏事,不敢轻易相信邻国。
这就是拜占庭将军问题。
其实,在拜占庭问题⾥,各邻国最重要的事情是:所有国家如何能过达成共识去攻打拜占庭帝国。
针对这种情况,有科学家们提出了两种⽅案,即⼝头协议和书⾯协议。
解决⽅案⼀:⼝头协议各个国家派信兵向其他所有国家传达⼝信,每个国家再将⾃⼰收到的⼝信传达给其他国家以供决策,最终多数投票即为共识。
最终达成以下三点:1、每个被发送的消息都能够被正确投递;2、信息接受者知道消息是谁发的;3、沉默(不发消息)可以被检测;但这个⽅案存在的缺陷也很明显:消息⽆法溯源,⽆法确定消息的上⼀来源是谁,如有叛徒,则难以找到叛徒所在。
解决⽅案⼆:书⾯协议如果不形成共识会导致失败各个国家派信兵向其他国家发送书⾯信息,并附其签章,其他国家收到书信后附上⾃⼰的意见与签章再发给剩余国家,最终得到共识。
实现了以下三点:1、签章有记录,解决溯源问题2、签章难以伪造,篡改会被发现3、任何国家都可验证其他国家的签章真伪但这⼀解决⽅案依然存在缺陷:签章记录的保存⼈不⼀定可信,真正可信的签名体系很难实现。
以上两个⽅案,在任意时间,系统中可能会存在多个提案,即每个国家都可以传出⾃⼰的意见。
这就是⼀个由互不信任的各个邻邦国家所构成的分布式⽹络,要获得最⼤的利益,⼜必须⼀起努⼒才能完成,如何达成⼀致的共识,变成了⼀个难题。
拜占庭将军问题

问题总结
此时总结一下, 拜占庭问题的问题到底是什么:所有将军如何才能达成共识去攻 打(或撤退)城堡
区块链技术
根据相关的研究,得出一个【一般性的结论】:如果叛徒的数量大于或等于三分 之一 ,那么拜占庭问题不可解,这个三分之一也被称为拜占庭容错,三模冗余 是完全无法容错的(也就是说无解,不可能保持一致性)
最简单的策略即: 投票 (上图中的红色箭头和绿色箭头为每个将军做出的判断) , 超过半数支持某个决定,那么所有 9 个将军一定执行这个决定。如上图,5 个将 军决定进攻,4 个将军决定撤退,那么所有将军都会下令:进攻!
这种策略需要每个将军把自己的判断通过一种途径(途中灰色箭头)传递到所有 其他将军处。相对的,每个将军只有在收到了所有投票结果后,才会下令。如上 面的例子,所有将军得到投票:4 进攻 5 撤退,才下令撤退。
我们先假设信道一定是可靠的, 传令兵死亡之类的事情我们不考虑,毕竟在一个 非常复杂的网络中, 还可以通过多条的方式连接任意两个节点,可靠性还是值得 相信。主要破坏一致性的还是心怀不轨的【间谍】,或者总结为:如何防止【间 谍】对整体决策(进攻还是撤退)进行破坏?
我们按照区块链模型构造一个下图所示的系统
解释方法使用副官模型即可
推广到计算机系统内,【将军】类比为【计算机】,而计算机因为物理或被感染 等其他原因造成的【运行异常】就是【叛徒】,其实整个问题也是为了保证分布 式系统的一致性和可用性
传统解决方案
在区块链 之前,有两种解决方案:口头协议(又称为拜占庭 容错算法)和书面协议
【可视化直观】
其中每个将军投降下方的数字就是收到的攻击事件列表,在该规则下,可以看到 能保证,当叛徒数量小于 1/3 维护系统的一致性,即无论是什么情况,都可以防 止不一致的决定被执行(至少也是按兵不动,并且很容易定位叛徒是谁)
与霍桑效应相似的效应

与霍桑效应相似的效应拜占庭将军问题效应引言:在计算机科学领域,拜占庭将军问题是指在计算机网络中,由于消息传输的不可靠性和网络节点的故障,导致无法确定网络中的某些节点是否可信,从而影响系统的可靠性和安全性。
这个问题类似于社会心理学中的霍桑效应,即人们的行为会受到观察者的影响,而在计算机网络中,节点的行为也会受到其他节点的影响。
拜占庭将军问题:拜占庭将军问题最早由莱斯利·兰伯特(Leslie Lamport)等人在1982年提出,用来描述在分布式计算中存在的一种不可靠性。
问题的描述是:假设有一支由拜占庭将军组成的军队,他们需要共同决定是否进攻敌人。
然而,有些将军可能是叛徒,他们可能会发送虚假的指令,导致其他将军做出错误的决策。
问题的关键在于如何确保忠诚的将军能够就进攻与否达成一致的共识,即使部分将军是叛徒。
类似于霍桑效应:拜占庭将军问题与霍桑效应类似,都涉及到信息传递过程中的不可靠性和外界因素的干扰。
在霍桑效应中,研究对象的行为会受到观察者的影响,从而产生不真实或者不准确的结果。
而在拜占庭将军问题中,节点的行为会受到其他节点的干扰,导致无法达成一致的共识。
在霍桑效应中,观察者的存在会改变被观察者的行为。
研究者埃尔顿·梅约(Elton Mayo)在20世纪20年代的霍桑工厂进行了一系列实验,发现当研究者对工人的行为进行观察时,工人们会表现出更高的工作积极性和生产效率。
这种现象被称为“霍桑效应”,即人们的行为会受到观察者的影响。
在拜占庭将军问题中,节点的行为会受到其他节点的干扰。
在一个分布式计算系统中,节点之间通过消息进行通信和协作。
然而,由于网络的不可靠性和节点的故障,可能会导致消息的丢失、延迟或篡改。
这些不可靠的消息会干扰节点的正常行为,使得节点无法达成一致的共识。
类似于霍桑效应中观察者的作用,其他节点的行为对节点的决策产生影响。
解决方法:为了解决拜占庭将军问题,研究者提出了一系列的算法和协议。
描述拜占庭将军问题

描述拜占庭将军问题
拜占庭将军问题(Byzantine failures),是由莱斯利·兰伯特提出的点对点通信中的基本问题。
含义是在存在消息丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的。
该问题可以抽象地表述为:一群拜占庭军队的将军率兵驻扎在敌城附近,在只能依靠信使联系彼此的情况下,将军们必须就同一个作战方案达成共识。
然而,他们中的一位或多位有可能是叛徒,试图混淆其他人的视听。
解决该问题的关键在于找到一种算法来确保忠心耿耿的将军之间能够达成共识。
研究显示,如果仅靠口信交流,当且仅当忠诚的将领人数超过三分之二时,此问题便可解决;因此,一个叛变的将领会迷惑两位忠诚的将领。
如果使用不可伪造的书信交流,不论有多少将领和潜在的叛变的将领,此问题有解。
拜占庭将军算法共39页

66% 38%
55% 16%
53% 35%
34% 25%
24% 12%
20% 10%
Public names improved security as top priority for government Web pages.
现有安全问题
程序漏洞/错误 缓冲区溢出 蠕虫与病毒 垃圾邮件 网络欺骗(邮件/网站) 僵尸网络(Botnet)
Gov’t employees misuse personal information
Less personal privacy
People without Internet get less gov’t service
Government more impersonal
Harder to get answers to problem
HART-TEETER/August 2000
2:1选择放慢电子政务先解决安全
General public extremely concerned (9-10, 10-point scale) Government officials extremely concerned
Hackers break into government computers
Public opinion surveys consistently identify security and privacy issues as a foremost concern for Internet users, yet many government websites fail to reassure citizens with simple privacy and security policies. Uncertainty over the security of online activities and information will hamper the take up of e-government
拜占庭将军算法

增加一个将军
一个发送者,3 一个发送者,3个接收者,只有一个判国者
发送者
接收者3 接收者1 接收者2
结论
至少必须有2/3以上的将军是爱国的才能达成 至少必须有2/3以上的将军是爱国的才能达成 一致。 如果记容忍t个叛国者的协议叫t 如果记容忍t个叛国者的协议叫t弹性协议,则:
当n=3时,不存在1弹性协议 n=3时,不存在1 当n>=1,不存在t>=n/3的t弹性协议 n>=1,不存在t>=n/3的
Public names improved security as top priority for government Web pages.
现有的安全问题
程序漏洞/ 程序漏洞/错误 缓冲区溢出 蠕虫与病毒 垃圾邮件 网络欺骗(邮件/网站) 网络欺骗(邮件/网站) 僵尸网络(Botnet) 僵尸网络(Botnet)
只修墙不行! 只修墙不行!
用户鉴别/认证 存取控制
内部攻击,身份假冒
内部系统
信息保障
以检测为基础
发现攻击,发现异常,发现死机
以恢复为后盾
大不了重新来过,全面恢复
辅助以保护、响应等手段
检测系统仍旧有魔高一丈的时候
识别全部的入侵是困难的
新的入侵方式
内部职员的犯罪是很难预防的(高价值系统) 内部职员的犯罪是很难预防的(高价值系统) 技术人员犯罪(程序员,芯片设计人员) 技术人员犯罪(程序员,芯片设计人员) 间谍, 间谍,通过各种方式的渗透
一般的拜占庭算法
OM(0):
发送者将其命令送给每个接收者 每个接受者使用这个值,如果没有收到就认为是 “撤退” 撤退”
OM(m),m>0
发送者发送他的值给每个接收者 如果第i个接收者获得的值是vi, 如果第i个接收者获得的值是vi,
两军问题与拜占庭将军问题

两军问题与拜占庭将军问题下⾯这篇⽂章,感觉讲的⾮常好:拜占庭将军问题是⼀个共识问题: ⾸先由Leslie Lamport与另外两⼈在1982年提出,被称为The Byzantine Generals Problem或者Byzantine Failure。
核⼼描述是军中可能有叛徒,却要保证进攻⼀致,由此引申到计算领域,发展成了⼀种容错理论。
随着⽐特币的出现和兴起,这个著名问题⼜重⼊⼤众视野。
应该明确的是,拜占庭将军问题中并不去考虑通信兵是否会被截获或⽆法传达信息等问题,即消息传递的信道绝⽆问。
Lamport已经证明了在消息可能丢失的不可靠信道上试图通过消息传递的⽅式达到⼀致性是不可能的。
所以,在研究拜占庭将军问题的时候,我们已经假定了信道是没有问题的,并在这个前提下,去做⼀致性和容错性相关研究。
如果需要考虑信道是有问题的,这涉及到了另⼀个相关问题:两军问题。
1.2.与拜占庭将军相关问题:两军问题正如前⽂所说,拜占庭将军问题和两军问题实质是不⼀样的。
国内⼤量解释拜占庭将军问题的⽂章将两者混为⼀谈,其实是混淆了两个问题的实质,由此造成了许多误解。
这两个问题看起来的确有点相似,但是问题的前提和研究⽅向都截然不同。
看到这⾥您可能发现两军问题和拜占庭将军问题有⼀定的相似性,但我们必须注意的是,通信兵得经过敌⼈的沟渠,在这过程中他可能被捕,也就是说,两军问题中信道是不可靠的,并且其中没有叛徒之说,这就是两军问题和拜占庭将军问题的根本性不同。
由此可见,⼤量混淆了拜占庭将军问题和两军问题的⽂章并没有充分理解两者。
两军问题的根本问题在于信道的不可靠,反过来说,如果传递消息的信道是可靠的,两军问题可解。
然⽽,并不存在这样⼀种信道,所以两军问题在经典情境下是不可解的.但我们能不能通过⼀种相对可靠的⽅式来解决⼤部分情形呢?这需要谈到TCP协议。
事实上,搜索“两军问题与三次握⼿”,您⼀定可以找到⼤量与TCP协议相关的内容。
拜占庭容错(BFT)技术详解「科普」

节点之间的错误是不相关的;
节点之间通过异步网络连接,网络中的消息可能丢失、乱序并延时到达,但大部分协议假设消息在有限的时间里能传达到目的地;
节点之间传递的信息,第三方可以嗅探到,但是不能篡改、伪造信息的内容和破坏信息的完整性。
另外,拜占庭容错系统需要达成如下两个指标:
安全性:任何已经完成的请求都不会被更改,它可以在以后请求看到。在区块链系统中,可以理解为,已经生成的账本不可篡改,并且可以被节点随时查看。
活性:可以接受并且执行非拜占庭客户端的请求,不会被任何因素影响而导致非拜占庭客户端的请求不能执行。在区块链系统中,可以理解为,系统需要持续生成区块,为用户记账,这主要靠挖矿的激励机制来保证。
假设分布式系统拥有n台节点,并假设整个系统拜占庭节点不超过m台(n≥3m+1),拜占庭容错系统需要满足如下两个条件:
所有非拜占庭节点使用相同的输入信息,产生同样的结果。在区块链系统中,可以理解为,随机数相同、区块算法相同、原账本相同的时候,计算结果相同。
如果输入的信息正确,那么所有非拜占庭节点必须接收这个消息,并计算相应的结果。在区块链系统中,可以理解为,非拜占庭节点需要对客户的请求进行计算并生成区块。
拜占庭将军问题(Byzantine Generals Problem),首先由Leslie Lamport与另外两人在1982年提出,很简单的故事模型,却困扰了计算机科学家们数十年。
我们将拜占庭将军问题简化一下,所有忠诚的将军都能够让别的将军接收到自己的真实意图,并最终一致行动;而形式化的要求就是,“一致性”与“正确性”。
一致性:每个忠诚的将军必须收到相同的命令值vi(vi是第i个将军的命令)
什么是供应链管理(大全五篇)

什么是供应链管理(大全五篇)第一篇:什么是供应链管理供应链管理可以定义为:在满足服务水平需要的同时,为使系统成本最小而把供应商、制造商、仓库和商店有效地结合成一体来生产商品,并把正确数量的商品在正确的时间配送到正确地点的一套方法。
这个定义中包含下面三个方面的内容。
1)供应链管理把对成本有影响、在产品满足顾客需求的过程中起作用的每一一方都考虑在内,从供应商和制造工厂经过仓库和配送中心到零售商和商店。
实际上,在一些供应链分析中,有必要考虑供应商的供应商及用户的用户,因为它们对供应链的业绩是有影响的。
2)供应链管理的目的在于追求效率和整个系统费用的有效性,使系统总成本达到最小。
这个成本包括从运输和配送成本到原材料、在制品和产成品的库存成本。
因此,供应链管理的重点不在于简单地使运输成本达到最小或减少库存,而在于采用系统方法来进行供应链管理。
3)因为供应链管理是围绕着把供应商、制造商、仓库和商店有效率地结合成一这一问题来展开的,因此它包括公司许多层次上的活动,包括战略层次、战术层次和操作层次。
关于供应链管理与物流管理有什么区别,不同的人回答会有所不同。
实际上,我们可以把供应链管理看成物流管理的最新理念。
天津物流管理协会给出的定义也说明了这个问题。
从1998年起,天津物流管理协会对物流管理的定义中就加入了供应链的概念。
在实际物流管理中,只有通过供应链的整合,公司才能显著地降低成本和提高服务水平。
但是,供应链的理念不难理解,大家都认识到市场中的竞争已经不是企业与企业的竞争,而是供应链与供应链的竞争。
第二篇:什么是区块链定义】区块链(Blockchain)是指通过去中心化和去信任的方式集体维护一个可靠数据库的技术方案。
该技术方案让参与系统中的任意多个节点,把一段时间系统内全部信息交流的数据,通过密码学算法计算和记录到一个数据块(block),并且生成该数据块的指纹用于链接(chain)下个数据块和校验,系统所有参与节点来共同认定记录是否为真。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
了解过比特币和区块链的人,多少都听说过拜占庭将军问题,或听说过比特币(或区块链)的一个重要成就正是解决了拜占庭将军问题。
但真正明白这个问题的人并不多,甚至知道这个问题实质的人都很罕见。
本文是一篇技术科普,将重点提供了拜占庭将军问题本身对本质及经典算法的解析,并探讨与之相关的一些问题。
笔者参考了不少文献,夹杂了大量私货,但并没有提出解决该问题的新算法,这也不是本文的目的。
PART1:拜占庭将军问题是什么拜占庭将军问题是一个共识问题: 首先由Leslie Lamport与另外两人在1982年提出,被称为The Byzantine Generals Problem或者Byzantine Failure。
核心描述是军中可能有叛徒,却要保证进攻一致,由此引申到计算领域,发展成了一种容错理论。
随着比特币的出现和兴起,这个著名问题又重入大众视野。
1.1. 拜占庭将军问题场景关于拜占庭将军问题,一个简易的非正式描述如下:拜占庭帝国想要进攻一个强大的敌人,为此派出了10支军队去包围这个敌人。
这个敌人虽不比拜占庭帝国,但也足以抵御5支常规拜占庭军队的同时袭击。
基于一些原因,这10支军队不能集合在一起单点突破,必须在分开的包围状态下同时攻击。
他们任一支军队单独进攻都毫无胜算,除非有至少6支军队同时袭击才能攻下敌国。
他们分散在敌国的四周,依靠通信兵相互通信来协商进攻意向及进攻时间。
困扰这些将军的问题是,他们不确定他们中是否有叛徒,叛徒可能擅自变更进攻意向或者进攻时间。
在这种状态下,拜占庭将军们能否找到一种分布式的协议来让他们能够远程协商,从而赢取战斗?这就是著名的拜占庭将军问题。
应该明确的是,拜占庭将军问题中并不去考虑通信兵是否会被截获或无法传达信息等问题,即消息传递的信道绝无问。
Lamport已经证明了在消息可能丢失的不可靠信道上试图通过消息传递的方式达到一致性是不可能的。
所以,在研究拜占庭将军问题的时候,我们已经假定了信道是没有问题的,并在这个前提下,去做一致性和容错性相关研究。
如果需要考虑信道是有问题的,这涉及到了另一个相关问题:两军问题。
1.2.与拜占庭将军相关问题:两军问题正如前文所说,拜占庭将军问题和两军问题实质是不一样的。
国内大量解释拜占庭将军问题的文章将两者混为一谈,其实是混淆了两个问题的实质,由此造成了许多误解。
这两个问题看起来的确有点相似,但是问题的前提和研究方向都截然不同。
(图1:两军问题图示)如图1所示,白军驻扎在沟渠里,蓝军则分散在沟渠两边。
白军比任何一支蓝军都更为强大,但是蓝军若能同时合力进攻则能够打败白军。
他们不能够远程的沟通,只能派遣通信兵穿过沟渠去通知对方蓝军协商进攻时间。
是否存在一个能使蓝军必胜的通信协议,这就是两军问题。
看到这里您可能发现两军问题和拜占庭将军问题有一定的相似性,但我们必须注意的是,通信兵得经过敌人的沟渠,在这过程中他可能被捕,也就是说,两军问题中信道是不可靠的,并且其中没有叛徒之说,这就是两军问题和拜占庭将军问题的根本性不同。
由此可见,大量混淆了拜占庭将军问题和两军问题的文章并没有充分理解两者。
两军问题的根本问题在于信道的不可靠,反过来说,如果传递消息的信道是可靠的,两军问题可解。
然而,并不存在这样一种信道,所以两军问题在经典情境下是不可解的,为什么呢?倘若1号蓝军(简称1)向2号蓝军(简称2)派出了通信兵,若1要知道2是否收到了自己的信息,1必须要求2给自己传输一个回执,说“你的信息我已经收到了,我同意你提议的明天早上10点9分准时进攻”。
然而,就算2已经送出了这条信息,2也不能确定1就一定会在这个时间进攻,因为2发出的回执1并不一定能够收到。
所以,1必须再给2发出一个回执说“我收到了”,但是1也不会知道2是否收到了这样一个回执,所以1还会期待一个2的回执。
TCP的三次握手也面临类似问题。
虽然看似很可笑,但在这个系统中永远需要存在一个回执,这对于两方来说都并不一定能够达成十足的确信。
更要命的是,我们还没有考虑,通信兵的信息还有可能被篡改。
由此可见,经典情形下两军问题是不可解的,并不存在一个能使蓝军一定胜利的通信协议。
不幸的是,两军问题作为现代通信系统中必须解决的问题,我们尚不能将之完全解决,这意味着你我传输信息时仍然可能出现丢失、监听或篡改的情况。
但我们能不能通过一种相对可靠的方式来解决大部分情形呢?这需要谈到TCP协议。
事实上,搜索“两军问题与三次握手”,您一定可以找到大量与TCP协议相关的内容。
若您是通信方面的专家,权当笔者是班门弄斧,这里仅用最浅显易懂的方式科普TCP协议的原理和局限,可能存在一些毛刺,请多包涵。
(图2:TCP协议的基本原理)TCP协议中,A先向B发出一个随机数x,B收到x了以后,发给A另一个随机数y以及x+1作为答复,这样A就知道B已经收到了,因为要破解随机数x可能性并不大;然后A再发回y+1给B,这样B就知道A已经收到了。
这样,A和B之间就建立一个可靠的连接,彼此相信对方已经收到并确认了信息。
而事实上,A并不会知道B是否收到了y+1;并且,由于信道的不可靠性,x或者y都是可能被截获的,这些问题说明了即使是三次握手,也并不能够彻底解决两军问题,只是在现实成本可控的条件下,我们把TCP协议当作了两军问题的现实可解方法。
(图3:量子隐形传态的原理图)那么,是否能够找到一个理论方法来真正的破解两军问题呢?答案是有的,量子通讯协议,笔者并没有能力弄清这个颇为高深的问题。
据我的理解,处于量子纠缠态的两个粒子,无论相隔多远都能够彼此同步,光是直观的来看,这个效应可以用来实现保密通讯。
但是由于测不准原理,一测量粒子状态就会改变其状态,所以通讯时还必须通过不可靠信道发送另一条信息。
尽管这个“另一条信息”是不可靠的,但是由于已经存在了一条绝对可靠的信道(量子纠缠),保证了另一条信道即使不可靠也能保证消息是可靠的,否则至少被窃取了一定能够被发现。
因此我们可以相信,至少理论上两军问题是可解的,即存在一种方法,即使利用了不可靠的信道,也能保证信息传递的可靠性。
所以,在确保了信道可靠的基础上,我们可以回到拜占庭将军问题上继续讨论。
PART2:问题实质及形式化我们已经了解了拜占庭将军问题的场景,并且明确了这个问题的解决是建立在通信兵可以正确的传达信息的基础上的,即信道绝对可信。
同时,通过前文对于两军问题的探讨,我们明白了理论上可信的信道也是可以实现的。
接下来,我们将探讨拜占庭将军问题的实质。
2.1. 拜占庭将军问题实质回顾问题,一群将军想要实现某一个目标(一致进攻或者一致撤退),但是单独行动行不通,必须合作,达成共识;由于叛徒的存在,将军们不知道应该如何达到一致。
注意,这里“一致性”才是拜占庭将军问题探讨的内容,如果本来叛徒数量就已经多到了问题不可解的地步,这个就是“反叛”的问题了;同时,我们的目标是忠诚的将军能够达成一致,对于这些忠诚的将军来说,进攻或者撤退都是可以的,只要他们能够达成一致就行。
但是,光靠“一致”就可以解决问题吗?考虑一下,如果万事俱备,客观上每个忠诚的将军只要进攻了就一定能够胜利,但是却因为叛徒的存在他们都“一致的”没有进攻;反之,条件不利,将军们不应该进攻,但是却因为叛徒的存在所有人都“一致的”进攻了。
可以发现,只有“一致性”是不足以解决拜占庭将军问题的,我们还需要提出一个“正确性”要求。
这个要求是值得斟酌的,因为如果客观来看或许会有“绝对正确的”判断,但是针对每一个将军,大家的判断或许都不相同,我们如何定义“正确”呢?我们或许可以简单地说,正确就是每个忠诚的将军都正确的表达了自己的意思,不会因为叛徒让别的将军认为忠诚的将军是叛徒而不采用他传达的消息。
至此,我们将拜占庭将军问题简化成了,所有忠诚的将军都能够让别的将军接收到自己的真实意图,并最终一致行动;而形式化的要求就是,“一致性”与“正确性”。
如果将问题推广开来,可以发现针对一致性和正确性的算法并不要求命令必须是“进攻/撤退”或是“1/0”,而可以是“发送消息1/发送消息2/待机”或“x/y/z/w”,这意味着拜占庭将军问题算法可以为多种分布式系统提供启发,比如电力系统或网络系统。
由此可见,这个问题说到底是一个关于一致性和正确性的算法问题,这个算法是针对的是忠诚的将军,因为叛徒可以做出任何超出约定的判断。
我们就是要在有叛徒的干扰下,找到一个抗干扰的算法。
要解决这个算法问题,我们需要将形式化要求具体化。
2.2.形式化条件的推演定义一个变量vi(为不失一般性,并不要求vi是布尔值),作为其他将军收到的第i个将军的命令值;i将军会将把自己的判断作为vi。
可以想象,由于叛徒的存在,各个将军收到的vi值不一定是相同的。
之后,定义一个函数来处理向量(v1,v2,…,vn),代表了多数人的意见,各将军用这个函数的结果作为自己最终采用的命令。
至此,我们可以利用这些定义来形式化这个问题,用以匹配一致性和正确性。
1)一致性条件1:每一个忠诚的将军必须得到相同的(v1,v2,…,vn)指令向量或者指令集合。
这意味着,忠诚的将军并不一定使用i将军送来的信息作为vi,i将军也可能是叛徒。
但是仅靠这个条件,忠诚的将军的信息送来的信息也可能被修改,这将影响到正确性。
2)正确性条件2:若i将军是忠诚的,其他忠诚的将军必须以他送出的值作为vi。
如此,我们得到了一致性和正确性的形式化条件(条件1和条件2),这个条件是充分条件。
考虑到正确性条件是针对单个将军,而一致性条件是针对所有将军的,为方便我们重写一致性条件为条件1′:无论i将军是忠诚或是叛徒,任何两个忠诚的将军都使用相同的vi。
条件1和条件1′是完全等价的。
这是很巧妙的一步转换,如此一致性条件(条件1′)和正确性条件(条件2)都只涉及一个将军i如何帮别的将军接受自己送出的值vi,所以可以将问题改为司令-副官模式来简化问题,即一个司令把自己的命令传递给n-1个副官,使得:IC1:所有忠诚的副官遵守一个命令,即一致性。
IC2:若司令是忠诚的,每一个忠诚的副官遵守他发出的命令,即正确性。
IC1和IC2分别由条件1′和条件2演化得来。
司令-副官模式只要将司令遍历各个将军,就可以变成完整问题,而他们采用的算法可以是完全一致的。
IC1和IC2构成了解决拜占庭将军问题的充分条件,在这种模式下,司令副官的形式下达成的一致意味着司令的命令得到了有效传达,若出现了异议,有异议的将军会作为司令发起新的司令副官模式寻求自己的观点表达,以协商达成一致。
接下来,我们可以讨论拜占庭将军问题的算法了,这个算法只要能够满足IC1和IC2,就代表这个算法可以切实有效的解决拜占庭将军问题。
在经典的情形下,我们可以找到两种办法,口头协议和书面协议。
笔者将会逐一探讨两种算法的推演和证明,其中证明部分并不会采用纯推理,而以介绍证明思路为主。