zoukankan      html  css  js  c++  java
  • 拜占庭故障 Byzantine failures

         TT问:

    1、拜占庭故障具体是什么分类呢??

    2、拜占庭故障出现在哪里?粗现在硬件中,还是软件中,粗现在操作系统中吗?

    比如,拜占庭故障会不会出现在云计算中。

    博客一:拜占庭故障(zz)

    这个问题是在1982年由Lamport, Shostak, Pease 提出 ——The problem of reaching a consensus among distributed units if some of them give misleading answers. (在分布式单元中的其中几个成员给出错误讯息的条件下,使分布式单元达到一致的难题。)The original problem(原始问题是关于几个将军策划政变。其中有些将军撒谎说可以支持一个具体的计划,或者支持其他将军告诉他们的话。) concerns generals plotting a coup. Some generals lie about whether they will support a particular plan and what other generals told them. What percentage of liars can a decision making algorithm tolerate and still correctly determine a consensus? (一个决策算法可以容忍多少百分比的骗子,然后仍然能够正确确定共识?)

    最后结论是:既要想容忍t个判国者,必须保证总的将军的个数大于3t。(数学难题???)

     一。拜占庭将军算法的背景:

    对于系统坏掉的风险,可以这样假设:我们的操作员可能会误操作、可能会被贿赂或背叛,系统本身可能就有木马程序,系统可能会被黑客或病毒占领,我们自己开发的系统可能有漏洞,我们的开发人员可能会留下后门,这些都可以导致系统坏掉。因此,在这些假设在变成可能的残酷现实中,拜占庭故障是应真正被采用的一种信息安全技术。   入侵容忍体系就是生存技术中的核心。如果我们的网络和系统(操作系统,数据库系统,云计算学会生存,那么也就是建立起一个完善的入侵容忍体系。   入侵容忍的技术在这样的假设空间中实现它的价值:个人的公开行为在一定的概率下是可预知的,系统在一定的概率下能够正确完成基本的功能。一定的概率并不是指全部,所以,可以允许有错误,因此,入侵容忍还有对纠错理论的联想:即利用纠错码可以在一个错误百出、但有信道容量的信道中准确无误地传输数据,网络系统就这样在错误中“生存”下来的,这就是我们说的入侵容忍体系,它的生存技术有两种实现方式:一是攻击响应的入侵容忍方法,它不需要重新设计系统,可通过高效的检测系统发现异常,利用资源配置系统调整系统资源,并对对错误进行修补(修补系统);二是攻击遮蔽入侵容忍方法,它需要重新设计整个系统,并通过冗余、容错技术,门槛密码学技术及“拜占庭”技术来实现。-----------------------------------------------

    二。算法介绍: “拜占庭”技术,起源于拜占廷将军问题,这是入侵容忍体系的一个基本理论问题。   在1982年被提出的“拜占廷将军问题”在今天被许多学者看好,然而在商业上还没有体现其价值。特别是中国的产业界把它放在了一个被遗忘的角落。 

    描述如下:  

    几个师包围着敌人的一座城市。每一个师都由它自己的司令统帅,司令之间只能通过报信者互相通信。他们必须统一行动 。

    某一位或几位司令可能是叛徒,企图破坏忠诚的司令们的统一行动 。

    司令们必须有一个算法,使所有忠诚的司令能够达成一致,而且少数几个叛徒不能使忠诚的司令们做出错误的计划,即判国的将军虽然可以传递了虚假消息,也不会影响爱国的将军得到正确的决策。   

    拜占廷将军问题就是要让爱国的将军达成一致,而不是找叛国的将军

    我们的入侵容忍体系就是这样,只要在众多服务器上得到的正确的计算结果,,那么我们就可以相信这个数据,而不需要去寻找到底谁是间谍。如果要容忍一个捣乱的服务器,在数量上究竟会需要几个服务器?“拜占廷将军”问题可以为我们解答这个问题:在进行混乱真实消息的传播中,两个将军中一个判国,另一个肯定打败仗,三个将军中如果有一个判国,则判国的将军一定有办法让两个爱国的将军不能达成一致,若再增加一个将军,既4个将军中如果只有一个判国,在不知道谁是判国者的情况下,存在一种算法使将军们达成一致,实际上就是三个爱国的将军能够达成一致,而不管判国的将军如何捣乱。既4个将军的团体能够容忍1个叛国将军。同样我们知道,当有t个判国者在捣乱而又无法找出他们的时候,存在一种算法或称做弹性协议,通过这种协议,能够保证爱国的将军达成一致。如果我们把能够容忍t个叛国者的协议叫t弹性协议,学者证明了,不存在3t个将军下的t弹性协议而一定存在3t+1或以上将军下的t弹性协议。就是说要有3t+1个或以上将军才能保证爱国的将军能够达成一致。既要想容忍t个判国者,必须保证总的将军的个数大于3t。   这样看来,“拜占廷将军”问题应用于信息安全就是入侵容忍体系的重要技术基础之一。以上讲述的仅仅是“拜占廷将军”问题中简化描述,加之以叙述的形式,就是一个描述性的推理,实际上“拜占廷将军”问题程序计算的方法是很复杂的。   据荆老师的介绍,作为入侵容忍体系的理论问题,它可以应用在现实中。实验室开发的CA入侵容忍资料库系统就是应用的案例。当用户查找证书的时候,如何保证得到的是最新的证书而不是过期的证书呢?如果一个服务器保留已经作废的证书欺骗你会如何呢。利用拜占廷法定数目团体系统,实验室很好地解决了这个问题。即使 t个服务器捣乱,输出旧的证书,系统利用拜占廷协议,保证用户一定能够得到最新的证书。   由此看来,入侵容忍技术作为网络生存的重要技术,是保证网络和系统安全的一个新的概念和思路。网络的等级保护不仅仅是空间的,也应该是逻辑上的和技术上的。深层防御就是在不同的地方,用不同的方式,建立多条防线,保护关键网络,入侵容忍技术在这个方面就有这不俗的表现。   

    最后对于如何更好的开发和利用生存技术、如何建立完善入侵容忍体系的问题,荆老师神情急切,他说,这应该是当前中国信息安全最需要的。-----------------------------------------------

    英文解释:这个问题是在1982年由Lamport, Shostak, Pease提出,后少人问津。为了利于对“拜占廷将军”问题原意的理解和避免曲解,把英文解释奉上: Byzantine General Problem ——The problem of reaching a consensus among distributed units if some of them give misleading answers. The original problem concerns generals plotting a coup. Some generals lie about whether they will support a particular plan and what other generals told them. What percentage of liars can a decision making algorithm tolerate and still correctly determine a consensus?

    三。具体分析:

    1。叛徒数大于或等于1/3,拜占庭问题不可解。

    情况一:A,B,C三个司令,C是叛徒。A发消息给B,C“进攻”,C发消息给B“撤退”(因为是叛徒)。B收到两个矛盾的命令,无法作出决策。

    情况二:A,B,C三个司令,A是叛徒。A发消息给B“进攻”,发消息给C“撤退”(因为是叛徒)。B。C收到不同的命令。

    2.用口头信息,叛徒数少于1/3,拜占庭问题可解.

    口头信息三条件
          传送正确
          接收者知道是谁发的
          沉默(不发信息)可被检测
    什么叫可解?
         IC1:所有忠诚副官(B.C,指消息接受者)遵循同一命令。 
         IC2:若司令(A,消息)是忠诚的,所有忠诚副官遵循其命令

    可以证明,多项式复杂性算法OM(m)可以解决拜占庭问题(L Lamport, R Shostak, and M Pease. The Byzantine generals problem. ACM Transactions on Programming Languages and Systems, 1982, 4(3))

    如果记容忍t个叛国者的协议叫t弹性协议(即,在t弹性协议存在的情况下,可以胜利),则: 

        当n=3时,不存在1弹性协议 
        当n>=1,不存在t>=n/3t弹性协议
    n如果记容忍t个叛国者的协议叫t弹性协议,则: 
        当n=3时,不存在1弹性协议 
        当n>=1,不存在t>=n/3t弹性协议

        当n>=1,不存在t>=n/3t弹性协议     

     
     
     
     
     

     

     

                   发送者发送他的值给每个接收者                      发送者发送他的值给每个接收者      

            如果第i个接收者获得的值是vi, 接收者i执行算法OM(m-1)发送vin-2个其他的接收者 

              i个接收者会收到从不同n-1人发来的n-1个值, 取多数认同的值就可以 

     

    nOM(m),m>0 

        

     

    failure的分类:

    1。内容failure:the content of the information delivered at the service interface deviates from implementing the system function.
    2. 时间failure:the time of arrival or the duration of the information delivered at the service interface deviates from implementing the system function.
    当时间和内容都发生错误时:
    1。停止failure: when the service is halted, a special case of halt is silent failure, or simply silence, when no service at all is delivered at the service interface.
    2. Erratic failure: when a service is delivered, but is erratic.胡说错误,哈哈
     
    关于failure是否可以探测到,分两种情况:
    1. signaled failures: the system signals service failures to the users.
    2. unsignaled failures: no warning from the system is given.
     
    但是探测本身也会有误报,比如:
    false alarm: signaling a failure when no failure has actually occurred.
     
    failure本身也有一致性或者非一致性的问题:
    consistent failure: the incorrect service is perceived identically by all system users.
    inconsistent failures: some or all system users perceive the incorrect service differently, but some users may perceive a correct service;这个就是所说的byzantine failure:)
     
    failure 的严重性:
    1. outage duration
    2. possibility of human lives being endangered
    3. the type of information that may be unduly disclosed.
    4. the extent of the corruption of data and the ability to recover from these corruptions
     
    Byzantine <wbr>failures
    下边来说说拜占庭错误:
    拜占庭错误是一个非一致的,不可检测的内容错误;
    也可以定义为交互的非一致错误
    看一个例子:
    Byzantine <wbr>failures

    假设三个节点以取中位数的方式同步,三个节点各自持有的数字分别位10 11 12, 但节点c出现了byzatine错误,所以他向节点b发送了错误的数字12,因为节点b自己持有的数字位11,所以它只能在10 11 12中取中位数=11,但实际节点a和c最后决定的中位数是10;
    节点c的错误导致了一个无辜的节点b做出了错误的决策;
     
    假设多股军队计划同时攻打某城池,这些军队的commande被一个将军领导,但其中一个或几个可能是叛徒,所以如果想获得胜利,就一定要让忠诚的commander同时发动进攻,但叛徒会用错误的信息扰乱进攻时间,避免的方式就是所有的commander共同交换信息,以判定叛徒;
     
    该算法的目标是:
    1。忠诚的commander遵守同样的命令;
    2。如果将军也是忠诚的,所有忠诚的commander遵守该将军发布的命令;
     
    算法的需求:
    1。如果存在3m+1个unit,则可容错1个unit的byzantine错误
    2。至少m+1轮的消息传递
    3。所有unit同步;
     
    算法的假设:
    1。不会丢失消息;
    2。消息接收者知道谁是发送者
    3。消息丢失可被探测;
     
    算法开始:
    1。将军的命令被送到每个commander
    2。每个接收者使用该命令或使用retreat状态;
     
    算法进行;
    1。将军的命令被发布到每个节点;
    2。每个接收者使用该命令或使用retreat状态(如未收到任何命令),每个接受者如将军般向其他n-2个commander继续转发命令(不发给自己和消息来源)
    3。重复以上过程;最后得到命令集合{vi.....vj}
     
     如为了容一个错,使用4个节点:
    Byzantine <wbr>failures
    unit2  将向节点3,4继续转发命令,同时也收到节点3,4转发的命令,节点2在{v1 v31 v41}使用少数服从多数的方式获取最终命令;
    对于获得一个共识的消息数量:3+2*3=9条
    则对于4个节点或许4个共识而言,消息数量是 4*9=36条;
    Byzantine <wbr>failures
    对于一个能容2个错的7节点系统来说
    获取一个共识的消息数量:6+6*(5+5*4)=156条
    消息总数:7*156
  • 相关阅读:
    python3文件操作
    python3复习
    python3集合
    python购物车
    python小知识点总结
    python-review01
    python字典
    04day->python列表和元祖
    python字符串操作
    《令人拍案称奇的Mask RCNN》
  • 原文地址:https://www.cnblogs.com/meihao1989/p/3073446.html
Copyright © 2011-2022 走看看