区块链论文笔记(1)

参考链接:https://zhuanlan.zhihu.com/p/44106775

1.拜占庭问题( [Byzantine] The byzantine generals problem. Lamport L, Shostak R, Pease M. ACM Transactions on Programming Languages and Systems (TOPLAS), 1982, 4(3): 382-401.)

写作特点:

喜欢以演进的方式一步一步的解析并推导出问题的约束条件和目标; 根据自己的逐步加约束条件来给出自己的算法。

背景知识:

拜占庭容错(BFT)是容错计算机系统,特别是分布式计算系统的可靠性问题,其中组件可能发生故障并且关于组件是否发生故障的信息不完整。在“拜占庭式故障”中,诸如服务器之类的组件对故障检测系统可能不一致地出现故障和起作用两种情况,向不同的观察者呈现不同的状况。

其他组件很难将其声明失败并将其关闭,因为他们需要首先就哪个组件失败达成共识。所以的组件必须就协同战略达成一致,以避免灾难性的系统失败,但有些组件不可靠。拜占庭容错也被称为交互一致性或源一致性、错误雪崩、拜占庭协议问题、拜占庭将军问题和拜占庭失败。

所以,听起来神秘高大上的拜占庭问题,也就是在分布式系统中的一个共识问题。用计算机的术语来说,就是一个多主机的系统如何处理一个或者多个组件失效的问题。这个有10台主机的系统,需要有所有的主机互相通信,必须要一半以上的主机就一个问题达成一致。但是有的主机坏掉了,以至于向其他主机发送信息时出现错误。那共识问题时,当有主机失效时,其他的主机能达成一致吗?

当前研究的结论是:如果叛徒的数量大于或等于1/3,拜占庭问题不可解。

下面看论文:

摘要:为了解决存在故障节点的可靠分布式计算机系统达成一致性的问题,作者形象地将此问题类比为存在叛徒的拜占庭军队就作战计划达成一致的问题,这个问题就是区块链中有名的拜占庭问题。

正文:

将军们必须拥有一个算法可以保证:

A.所有忠诚的将军都决定同一个行动计划。

忠诚的将军们都会按照算法的要求去做,但是叛徒们可以为所欲为。不管叛徒做什么,算法都必须保证条件A。

B.少数叛徒不能使忠诚的将军采取坏的计划。(这一条件主要针对在进攻和撤退两种决策可能性几乎相等的情况下,少数叛徒才能影响这一决定,在这种情况下,两种决定都不能说是坏的。)

这里假设第i个将军发送的值为v(i),为了满足条件A,每个忠诚的将军必须获得v(1),..., v(i)相同的信息,如果第(i)个忠诚的将军发送的信息为v(i),其他将军必须使用v(i)。

使用n=3,一个将军两个中尉来假设问题,当将军是叛徒时,分别给两个中尉发送攻击和撤退不同的指令,这时两个中尉无法判断到底是攻击还是撤退。证明必须至少有3m+1个将军才能解决m个将军是叛徒的问题。


接着假设传递的信息是作战时间。

3.先对口头消息进行证明

证明在n=3m+1的情况下,采用大多数值的策略,可以得到正确结果。采用的主要是数学归纳法,证明算法在故障节点数目=0以及m-1的情况下成立,推理出m的情况下也成立。

有三个假设:

A1.发送的每个消息都被正确传递。

A2.消息的接收者知道是谁发的。

A3.可以检测到没有消息。


4.接着,讨论带有签名消息的解决方案,不可篡改。增加一个假设


A4(a)忠诚将军的签名不能伪造,并且可以检测到他签名的信息内容的任何更改。

(b) 任何人都可以核实将军签名的真实性。

注意,我们对叛徒将军的签名没有任何假设。特别是,我们允许另一个叛徒伪造他的签名,从而允许叛徒相互勾结。

5.缺少通信路径(图的强连通性被破坏)


也证明在N>=3m时可以解决拜占庭问题

6.可靠的系统

除了使用本质可靠的电路元件外,我们所知道的实现可靠计算机系统的唯一方法是使用几个不同的“处理器”计算相同的结果,然后对其输出进行多数表决以获得单个值。(表决可以在系统内部进行,也可以由输出的用户在外部进行。)无论是使用冗余电路实现可靠的计算机以防止单个芯片的故障,还是使用冗余计算站点实现发射防御系统以防单个站点被核攻击破坏,这都是可行的。唯一的区别是复制的“处理器”的大小。

然而,任何单一的输入数据都来自单一的物理组件——例如,来自可靠计算机中的某个其他电路,或者来自导弹防御系统中的某个雷达站——一个故障组件可以为不同的处理器提供不同的值。此外,如果不同的处理器在值发生变化时读取该值,则即使是从非故障输入单元也可以获得不同的值。例如,如果两个处理器在时钟前进时读取它,那么一个可能得到旧时间,另一个得到新时间。这只能通过同步读取时钟的前进来防止。

为了使多数表决产生可靠的系统,应满足以下两个条件:

1.所有非故障处理器必须使用相同的输入值(因此它们产生相同的输出)。

2.如果输入单元是非故障的,那么所有非故障处理器都使用它提供的值作为输入(因此它们产生正确的输出)。

这些只是我们的交互一致性条件IC1和IC2,其中“指挥官”是生成输入的单元,“中尉”是处理器,“忠诚”是非故障的。

试图用“硬件”解决方案来规避这个问题是很有诱惑力的。例如,可以尝试通过让所有处理器从同一条线路读取输入值来确保所有处理器获得相同的输入值。然而,有故障的输入单元可能会沿着线路发送一个边缘信号——这个信号可以被一些处理器解释为0,也可以被其他处理器解释为1。无法保证不同的处理器从可能有故障的输入设备获得相同的值,除非让处理器彼此通信以解决拜占庭将军的问题。

当然,有故障的输入设备可能会提供无意义的输入值。拜占庭将军的解决方案所能做的就是保证所有处理器使用相同的输入值。如果输入是重要的,那么应该有几个单独的输入设备提供冗余值。例如,导弹防御系统中应该有冗余的雷达和冗余的处理点。然而,冗余输入无法实现可靠性;仍然需要确保非故障处理器使用冗余数据来产生相同的输出。

如果输入设备是非故障的,但由于在其值变化时读取它而给出不同的值,我们仍然希望非故障处理器获得合理的输入值。结果表明,如果将函数majority和choice作为中值函数,则我们的算法具有非故障处理器获得的值在输入单元提供的值范围内的特性。因此,只要输入单元产生一个合理的值范围,非故障处理器将获得一个合理的值。

我们已经给出了几种解决方案,但它们都是用拜占庭将军而不是计算系统来表述的。我们现在研究如何将这些解决方案应用于可靠的计算系统。当然,用处理器实现“通用”算法是没有问题的。问题在于实现满足假设A1-A3(算法SM(m)的假设A1-A4)的消息传递系统。我们现在按顺序考虑这些假设。

A1.  假设A1声明由非故障处理器发送的每一条消息都被正确地传递。在实际系统中,通信线路可能发生故障。对于口头消息算法OM(m)和OM(m,p),连接两个处理器的通信线路的故障与其中一个处理器的故障是不可区分的。因此,我们只能保证这些算法将在多达m个故障的情况下工作,无论是处理器故障还是通信线路故障。(当然,连接到同一处理器的多条通信线路的故障等同于单个处理器的故障。)如果我们假设一条故障的通信线路不会导致一条签名消息的伪造,那么我们将在下面看到一个非常合理的假设,然后我们的签名消息算法SM(m)对通信线路故障不敏感。更准确地说,定理4即使在通信线路故障的情况下仍然有效。失败的通信线路与简单地删除通信线路具有相同的效果——它降低了处理器图的连接性。

A2. 假设A2规定,处理器可以确定它接收到的任何消息的发起人。实际需要的是,有故障的处理器不能模拟非故障处理器。实际上,这意味着进程间通信是通过固定线路进行的,而不是通过某种消息交换网络进行的。(如果使用交换网络,则必须考虑故障网络节点,并且拜占庭将军问题再次出现。)请注意,如果假设A4并且所有消息都已签名,则不需要假设A2,因为模拟另一个处理器将意味着伪造其消息。

A3.  假设A3要求能够检测到消息的缺失。消息的缺失只能通过在某个固定时间段内未能到达来检测,换句话说,通过使用某种超时约定。使用超时来满足A3要求需要两个假设:

1. 消息的生成和传输需要固定的最大时间。

2. 发送器和接收器具有在一定的最大误差内同步的时钟。

第一个假设的必要性是相当明显的,因为接收者必须知道他需要等待消息到达多长时间。(生成时间是处理器在接收到生成消息所需的所有输入后发送消息所需的时间。)第二种假设的必要性不太明显。然而,可以证明,这个假设或一个等价的假设对于解决拜占庭将军问题是必要的。更准确地说,假设我们允许将军们仅在以下情况下采取行动的算法:

1. 在某个固定的初始时间(对所有将军都一样)。

2. 收到消息后。

3. 当随机选择的时间长度过去时。(即,将军可以将定时器设置为随机值,并在定时器关闭时动作。)

A4.  假设A4要求处理器能够以这样一种方式对其消息进行签名,即非故障处理器的签名不能被伪造。

7.结论

在各种假设下,我们提出了拜占庭将军问题的几种解决方案,并展示了它们如何用于实现可靠的计算机系统。这些解决方案在所需的时间和消息数量上都很昂贵。算法OM(m)和SM(m)都要求消息路径的长度达到m+1。换言之,每个中尉可能必须等待发自指挥官的消息,然后通过其他中尉转发。菲舍尔和林奇已经表明,对于任何能够对付m叛徒的解决方案,这都必须是正确的,因此我们的解决方案在这方面是最优的。对于一个不完全连通的图,我们的算法要求消息路径的长度达到m+d,其中d是忠诚将军子图的直径。我们怀疑这也是最优的。

算法OM(m)和SM(m)涉及发送多达(n-1)(n-2)。。。(n-m-1)消息。可以通过组合消息来减少所需的单独消息的数量。也可以减少传输的信息量,但尚未对此进行详细研究。但是,我们希望仍然需要大量的消息。

在任意故障情况下实现可靠性是一个困难的问题,而且它的解决方案似乎天生就很昂贵。降低成本的唯一方法是对可能发生的故障类型进行假设。例如,通常假设计算机可能无法响应,但永远不会错误响应。然而,当需要极高的可靠性时,这种假设是不可能的,并且需要拜占庭将军解决方案的全部费用。

总结:拜占庭问题,本质上,它是分布式系统的一致性问题。区块链最重要的特点就是分布式系统,去中心化,那么在这个系统中同样地存在一致性问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,752评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,100评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,244评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,099评论 1 286
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,210评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,307评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,346评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,133评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,546评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,849评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,019评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,702评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,331评论 3 319
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,030评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,260评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,871评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,898评论 2 351

推荐阅读更多精彩内容