当前位置: 首页 > 编程日记 > 正文

【分布式共识三】拜占庭将军问题----书面协议

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

区块链兄弟社区,区块链技术专业问答先行者,中国区块链技术爱好者聚集地

作者:吴寿鹤

来源:区块链兄弟

原文链接:http://www.blockchainbrother.com/article/8

著权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

书面协议

Lamport在文中提出,之所以会出现在口头传达中的那些错误是因为一些叛徒可以说谎,这里通过签名就是为了防止说谎。在签名算法中加了两个条件:

attachments-2017-07-2N5LVMYS5969aa26c8b15.png

即A4(a)忠诚将军的签名是不能伪造的,内容修改可检测。(即 即使是叛徒也要原封不动的签了名将消息转发出去)

(b)任何人都可以识别将军的签名,叛徒可以伪造叛徒司令的签名。(后半句是论文中的后半部分规定的)。

而且这里Lamport规定,每条消息只可以复制,然后加上自己的姓名再发出去。 

下面是具体的算法:

attachments-2017-07-pKhBzsEu5969aa3b8460e.png

attachments-2017-07-CtNLzfij5969aa4f8469e.png

对于这个算法要说的是:

1. 初始化中的 Vi 类似于一个集合,表示的是第i个将军收到的命令,比如 Vi= {Attack} 之所以说是个集合是因为Vi里面不会有重复的命令出现。这在算法步骤(2)的(B) 部分描述的很清楚。

在算法步骤(1)中将军将签了自己姓名的消息广播发给所有副官。注意这里发的格式是 V:0,V是命令,0代表自己的身份。

2. 算法步骤(2)(A)中,每个副官将收到的消息 V:0  把命令V放入自己的命令集合Vi(因为初始的时候他们的命令集合都是空的,所以不存在重复问题) 然后他们将命令拷贝,然后加上自己的签名 ,得到消息: V:0:i   然后再发给其他的副官。

在算法步骤(2)(B)中因为副官i 也会收到别的副官发来的消息v:0:1:...:jk. 此时i会判断v在不在自己的命令集合中,如果不存在的话将v加入Vi,并在k的情况下将信息签名,继续发出去。

在这里有几点是需要注意的。

A) 如果将军是忠诚的话,那么因为忠诚将军的签名是不可以改的,所以所有的命令都只是V,只是消息的签名不一样罢了,那么副官将不会将重复的命令再加入Vi,所以这就是lamport在论文中提到的如果将军是忠臣的话,那么每个副官只会保存a single order 。这里之所以提到这个是后面的证明需要用到。

B)为什么说当k的时候才会发送呢,这是因为每条信息只需要被复制m+1就可以了(这里将将军署名的时候也算是一次签名,可以发现每签名1次就是一个复制),超过m就没必要了。之所以有这样的规定会面会有证明,即只需要复制m+1此所有的忠臣就可以达成

一致。还有就是这里的下标k,并不是代表一个副官的id号,而是被签名的多少次,例如 v:0:j3; 这条消息,k是等于1(因为除了将军以外只被签名了一次)的而不是3.

3. 算法步骤(3),当一个副官不会再收到任何的消息时就会执行choice函数。这里不再收到,lamport规定是超过一个时间不再收到就认为不再收到了。这里的choice函数,lamport没做具体的实现,只是认为,当Vi中只有一个命令时就得出这个命令。当Vi和Vj是相等的时候choice执行的结果是一样的,即他们可以达成一致,这个只会在将军是叛徒的时候才会出现,这样的话就满足了IC1条件。

当第三步结束,就可以得出一致命令了。

下面我们看看lamport是怎么证明只需要m+1次复制就可以了。

attachments-2017-07-GYUl1lrP5969aa6ea8013.png

证明的总体思路是:

情形(一)如果将军是忠诚的话,就像我们在讨论算法的时候提到的,所有忠臣的副官只可能是收到a single order然后经过 choice函数得到的是将军的命令,所以满足IC2。

情形(二)这里假如将军是个叛徒。证明的总体思路是只需要证Vi,Vj是相同的集合就可以了。即只需要证明如果在step2中i将命令v放入Vi时,j也会将命令v放入Vj。

下面我们来证这个:

因为i要是想将v命令放入Vi,肯定会收到一个消息,V:0:j1:j2:...jk。那么下面就讨论:

(1)如果j属于j1~jk中的一个,那么他既然在消息上签了名,那么肯定也收到了消息v,所以在这种情况下是满足的。

(2)如果j不属于j1~jk中的一个的话,再讨论k的范围:

a.如果k那么i肯定会签上自己的姓名,将消息转发给所有的副官当然这里面肯定会有副官j(根据算法B中的ii),那么j要么在命令集vj中没有v的情况下将他保存,要么在已经有的情况下置之不理,但是无论是哪种情况,都会保证,Vj和Vi一致。

b. 如果k=m.此时i不会转发此消息。但是因为只有m个叛徒,又将军是叛徒,那么这m+1个复制里面就肯定有1个是忠臣,而忠臣会不修改消息直接将叛徒将军的消息v传给所有的副官,当然包括 j, 所以在此情况下也是可以保证的。

现在用个实例来证明:

当n=4,m=2必须要经过m+1轮复制才可以完成容错(或者说是交换)。

实例证明:n=4,m=2,r=m+1时(r=3 复制的轮数)可容错

1,当将军,L3是叛徒

attachments-2017-07-zkrUTpxW5969ac159f04b.png

step1:R1={x:0} R2={y:0} R3={0:0}

step2:k=0;1将 x:0:1 发给2,3;2将 y:0:2 发给1,3;3将 z1:0:3 发给1,将 z2:0:3 发给2。得到:

R1={x:0;y:0:2;z1:0:3} R2={y:0;x:0:1; z2:0:3} R3={0:0;x:0:1;y:0:2} 

step3:k=1,k进行下一轮复制。1将 z1:0:3:1发给2,3;2将z2:0:3:2发给1,3。得到:

R1={x:0;y:0:2;z1:0:3; z2:0:3:2} R2={y:0;x:0:1; z1:0:3; z2:0:3:1} k=2算法执行choice函数。

书面协议的本质就是引入了签名系统,这使得所有消息都可追本溯源。这一优势,大大节省了成本,他化解了口头协议中1/3要求,只要采用了书面协议,忠诚的将军就可以达到一致(实现IC1和IC2)。这个效果是惊人的,相较之下口头协议则明显有一些缺陷。

书面协议的结论非常令人兴奋,这不是解决了拜占庭将军问题了吗?但请注意我们在A1~A4中实际上是添加了一些条件的,这使得拜占庭将军问题在这些假设下能够解决,但是在实际状况中却会有一些问题。观察A1~A4,我们做了一些在现实中比较难以完成的假设,比如没考虑传输信息的延迟时间,书面协议的签名体系难以实现,而且签名消息记录的保存难以摆脱一个中心化机构而独立存在。

文章发布只为分享区块链技术内容,版权归原作者所有,观点仅代表作者本人,绝不代表区块链兄弟赞同其观点或证实其描述

转载于:https://my.oschina.net/u/3786249/blog/1793232

相关文章:

2021.09 电子学会 - 软件编程(图形化)试题讲解

软件编程(图形化)试题讲解 一级 考核目标 考查对软件编程界面的认识和基本操作;能够导入角色、背景和声音,通过对角色和背景进行简单操作,编写一个具有简单顺序结构的作品;同时考查简单的逻辑推理能力。 …

css代码应该放html哪里,css代码放到哪里?

CSS以HTML为基础,提供了丰富的功能,如字体、颜色、背景的控制及整体排版等。css代码需要放到哪里? 是不是一定写到html文件里面呢? 下面给大家介绍一下。css代码的定义通常有三种方式,内部样式表,内联样式表…

vmware克隆centos修改linux mac地址

故障背景: 在vmware workstation中了完全克隆了一个已经存在的centos的虚拟机,启动之后发现网卡没有启动。于是重启一下network服务,发现提示错误信息“Device eth0 does not seem to be present, delaying initialization.” www.2cto.com …

运用jieba库分词

代码: 统计出团队中文简介中词频 import jieba txtopen("C:\\Users\\Administrator\\Desktop\\介绍.txt","r",encodingutf-8).read() wordsjieba.lcut(txt) counts{} for word in words: if len(word)1: continue else: counts[word]counts.get…

【NCEPU】韩宇:上海新能源汽车比赛方案讲解

韩宇是华北电力大学国教大三的学生,参加了多期Datawhale的组队学习,也在天池、Kaggle等比赛中取得了不错的成绩。 他在线下组队学习时,曾为大家分享过如何准备天池深度学习的比赛?。这篇图文是他为大家分享自己刚刚参加的2021上海…

宁波大红鹰学院计算机科学与技术,2019宁波大红鹰学院专业排名

宁波大红鹰学院是一所全日制民办普通本科高校,由宁波大红鹰教育集团出资举办。学校创办于2001年4月,2008年4月,经教育部批准升格为本科院校,为了让大家更好的了解这所大学的专业排名,下面是学习啦小编给大家带来的宁波…

Json.Net学习笔记

Json.Net学习笔记 摘自: http://www.verydemo.com/demo_c360_i45119.html分类:编程语言/ASP.NET/文章导读:string googleSearchText "{ ""responseData"": { ""results"": [ { ""GsearchResul…

中国电子学会青少年编程能力等级测试图形化四级编程题:正话反说

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100,小马老…

4.10日一直报错application未注入的问题解决

1.db.propertities 里面连接的是正式库,改为5522测试库 2.将pom.xml右键run as 后点击 instal转载于:https://www.cnblogs.com/CrisZjie180228/p/8793502.html

北邮计算机科学技术是学硕吗,【计算机考研】2020北京邮电大学计算机科学与技术考研初试科目、参考书目、复试详情汇总...

原标题:【计算机考研】2020北京邮电大学计算机科学与技术考研初试科目、参考书目、复试详情汇总一、考试科目计院的学硕是计算机科学与技术,专硕为计算机技术。计算机科学与技术:①101思想政治理论②201英语一③301数学一④803计算机学科基础…

node学习笔记

1.node.js的回调函数的两个参数:第一个参数代表错误信息,第二个参数代表结果。 if (err) {// 出错了 } else {// 正常 } 复制代码注:当正常读取时,err参数为null,data参数为读取到的String。当读取发生错误时&#xff…

PHP5.3.8连接Sql Server SQLSRV30

PHP5.3连接SQL Server就不能用php_mssql.dll了。 网上下载了好多都不行,因为它的版本是5.2的,不能再PHP5.3中使用。 后来听说微软专门为PHP出了自己的dll。 叫做Microsoft SQL Server Driver for PHP PHP5.3中用3.0的版本就可以了。 SQLSRV30.EXE 就是这…

Task03:青少年软件编程(Scratch)等级考试模拟卷(一级)

电子学会 软件编程(图形化)一级训练营 试题来源 青少年软件编程(Scratch)等级考试试卷(一级)【2019.09】青少年软件编程(Scratch)等级考试试卷(一级)【2019…

青岛中专学计算机哪个学校比较好,青岛最好的中专学校是哪个

青岛最好的中专学校是山东省轻工工程学校,小编为大家带来了青岛优秀中专学校名单,一起来看看吧。青岛有哪些好的中专山东省轻工工程学校青岛西海岸新区中德应用技术学校青岛华夏职业学校青岛旅游学校寿光市职业教育中心学校青岛经济职业学校枣庄市龙都中…

中国电子学会青少年编程能力等级测试图形化四级编程题:排序

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100,小马老…

Extjs 基础篇—— Function基础

这里主要是JS的基础知识,也是深入理解Ext的基础。1.参数可变长,注意跟Java还是有一点区别的。例: view source print?1.function getUser(name,age){2.alert("name: "name " age: "age);3.}调用方法:getUse…

Datagridview中数字格式列 不显示小数点前面的0

用代码设置DataGridView中某列为数字格式,但当小数为0.*的时候,前面的0却不显示。只显示.*。 看网上有说: 调整本地设置,控制面板-区域和语言选项,在弹出框的区域选项卡中,选择自定义,在弹出框的…

使用计算机辐射最大,计算机辐射的主要来源及其对人体的危害

计算机已进入现代社会的各行各业和千家万户,它给人们的工作、学习、生活带来了极大的方便。但“计算机病”也与日俱增,严重的影响了人们的身心健康。“计算机病”的症状表现为神经衰弱综合癌、肩颈腕综合症、以及腰背酸疼、抗病能力降低、易感冒等&#…

Android开发权威指南(第2版)新书发布

《Android 开发权威指南(第二版)》是畅销书《Android开发权威指南》的升级版,内容更新超过80%,是一本全面介绍Android应用开发的专著,拥有45 章精彩内容供读者学习。  《Android开发权威指南(第二版)》全面介绍了Android应用开发的各种技术…

北京智能计算产业研究院落户顺义,中科睿芯联手计算所、顺义区打造“产业园2.0”...

作为具有重大发展潜力的高技术产业方向,智能计算在我国方兴未艾。 12月6日,由中科院计算所孵化的智能计算领域创业公司“中科睿芯”牵头发起、联袂中科院计算所和中关村顺义园管委会共同打造的“北京智能计算产业研究院”(下简称“研究院”&…

Scratch青少年编程能力等级测试模拟题(四级)

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100,小马老…

react 用html插件,React配置过程中用到的插件汇总

●react插件●react-dom插件●react-router插件●react-redux插件●babel插件●webpack插件●loader插件●jquery插件●moment插件●bootstrap插件●react插件→react(局部安装:cnpm install react --save-dev)→react-dom(局部安装:cnpm install react …

iOS学习之路十三(动态调整UITableViewCell的高度)

大概你第一眼看来,动态调整高度是一件不容易的事情,而且打算解决它的第一个想法往往是不正确的。在这篇文章中我将展示如何使图表单元格的高度能根据里面文本内容来动态改变,同时又不必子类化UITableViewCell。你当然可以通过子类化它来实现&…

近期Freecodecamp问题总结

最近没什么事,刷了freecodecamp的算法题,发现了自己基础的薄弱 1 where are thou 写一个 function,它遍历一个对象数组(第一个参数)并返回一个包含相匹配的属性-值对(第二个参数)的所有对象的数…

中国电子学会青少年编程能力等级测试图形化四级编程题:随机选T恤

「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 我们将有关编程题目的教学视频已经发布到抖音号21252972100,小马老…

计算机网站编辑需要学什么,网站编辑工作的心得体会

网站编辑工作的心得体会从事网络编辑之前,我对网络编辑这个名词可谓前所未闻,一无所知。从起步时我也认为网络编辑的工作应该是很轻松的,每天就是相同的工作:复制加粘贴,感觉是一个“搬运工”,而后在这十个…

Earth to developers: Grow up!

这是篇老外写的文章,主题是针对网络上的一些宗教式的争论,作者叙述了他自己的一些观点。主要从以下6点做了陈述。为了表达的精确性,就直接用英文。 1. Reject dogmatic thinking about tools, practices, and processes. 2. value flexibilit…

php的匿名函数和闭包函数

php的匿名函数和闭包函数 tags: 匿名函数 闭包函数 php闭包函数 php匿名函数 function use 引言:匿名函数和闭包函数都不是特别高深的知识,但是很多刚入门的朋友却总是很困惑,因为大家习惯上写了函数就是用来调用的,匿…

青少年编程竞赛交流群周报(第042周)

2021年12月19日(周日)晚20:00我们在青少年编程竞赛交流群开展了第四十二期直播活动。 一、直播内容 我们直播活动的主要内容如下: 讲解了上次测试中小朋友们做错的题目 Scratch青少年编程能力等级测试模拟题(四级)。…

太原理工大学计算机专业多少分录取分数线,多少分能上山西太原理工大学,往年全国各省各专业录取分数线出炉...

太原理工大学简称“太原理工”,位于山西省太原市,国家”世界一流学科建设高校“,国家“211工程”重点建设高校,国家“111计划”地方高校新建基地,教育部首批“卓越工程师教育培养计划”实施高校如果报考太原理工大学&a…