一、如何理解拜占庭将军问题
1、11位拜占庭将军去打仗,他们各自有权力观测敌情并作出判断,进攻或撤退,那么怎么让他们只用传令兵达成一致呢?
2、每位将军作出决定后都将结果"广播"给其余所有将军,这样所有将军都能获得同样的11份(包括自己)结果,取多数,即可得到全军都同意的行为.
3、但如果这11位将军中有间谍呢?假设有9位忠诚的将军,5位判断进攻,4位判断撤退,还有2个间谍恶意判断撤退,虽然结果是错误的撤退,但这种情况完全是允许的.因为这11位将军依然保持着状态一致性.
4、暂时从战争故事中抽离出来,分布式数据库最糟糕的问题绝对不是写入或者读取失败,而是状态不同步,还感知不到.这个的后果就是correctness不能保证,那程序就没有任何意义了.
5、2个间谍怎么破坏状态一致性呢?他们跟5位判断进攻的将军说,我们支持进攻,那么这5位将军统计发现7位支持进攻,4位支持撤退,将发动进攻.又跟4位撤退的将军说,我们支持撤退,一统计,5票进攻,6票撤退,立马撤退.这场战争必输无疑了.
6、避免这种状态不同步的问题,我称之为"广义拜占庭将军问题".
7、解决广义拜占庭问题,必须满足两个条件:
8、上面的条件等价于如何让一个将军(可以是间谍)对所有接收者的指令保持一致?这个我叫"狭义拜占庭将军问题".
9、总的来说,这是一个非常严苛的模型,
10、因为有可能是叛徒!他会给不同的不同的指令.
11、所以,悲催的忠臣必须问所有别的将军,"你们收到的观测结果是啥?"来取校验,同时又必须告诉所有别的将军,"我收到的观测结果是啥?".
12、但该死的是,忠臣A在告诉别的将军来自观测结果的时候,别的将军会怀疑忠臣A是不是叛徒.别的将军判断忠臣A是忠臣的唯一的办法是询问别的忠臣A通知的忠臣,"忠臣A告诉你都发了啥?"
13、每次递归都做悲观预期即是个叛徒,那么就达成了
14、感觉这是说不明白了=_=,看例子也不容易懂,从传统动态规划状态转移的角度理解是最容易的.
二、比特币系统如何解决“拜占庭将军问题”与“双花”问题
1、交易是否可信的问题,每一笔交易都是有数字签名的,通过校验改数字签名,就能确认确实是该发起者发起的一个交易。首先是对交易进行一个数字摘要,然后用私钥加签形成数字签名。验证者需要用发起者的公钥进行解密,对比数字摘要。就可以断定是否是合法交易。
2、双花问题,如果在未收到确认前,进行了双花,这些在在未确认交易内存中重复了也会被拒绝。即便是一笔交易传递到一半网络,另一笔交易传递到另一半网络,导致了分叉,这作弊者获得记账权也需要很大的算力。如果担心交易被操纵,当经过六次确认后,基本就不可能双花了。也就是一个小时。
三、区块链中的拜占庭将军问题是什么问题
1、拜占庭将军问题,是由莱斯利·兰波特在其同名论文中提出的分布式对等网络通信容错问题。
2、在分布式计算中,不同的计算机通过通讯交换信息达成共识而按照同一套协作策略行动。但有时候,系统中的成员计算机可能出错而发送错误的信息,用于传递信息的通讯网络也可能导致信息损坏,使得网络中不同的成员关于全体协作的策略得出不同结论,从而破坏系统一致性。拜占庭将军问题被认为是容错性问题中最难的问题类型之一。
3、一组拜占庭将军分别各率领一支军队共同围困一座城市。为了简化问题,将各支军队的行动策略限定为进攻或撤离两种。因为部分军队进攻部分军队撤离可能会造成灾难性后果,因此各位将军必须通过投票来达成一致策略,即所有军队一起进攻或所有军队一起撤离。因为各位将军分处城市不同方向,他们只能通过信使互相联系。在投票过程中每位将军都将自己投票给进攻还是撤退的信息通过信使分别通知其他所有将军,这样一来每位将军根据自己的投票和其他所有将军送来的信息就可以知道共同的投票结果而决定行动策略。
4、系统的问题在于,将军中可能出现叛徒,他们不仅可能向较为糟糕的策略投票,还可能选择性地发送投票信息。假设有9位将军投票,其中1名叛徒。8名忠诚的将军中出现了4人投进攻,4人投撤离的情况。这时候叛徒可能故意给4名投进攻的将领送信表示投票进攻,而给4名投撤离的将领送信表示投撤离。这样一来在4名投进攻的将领看来,投票结果是5人投进攻,从而发起进攻;而在4名投撤离的将军看来则是5人投撤离。这样各支军队的一致协同就遭到了破坏。
5、由于将军之间需要通过信使通讯,叛变将军可能通过伪造信件来以其他将军的身份发送假投票。而即使在保证所有将军忠诚的情况下,也不能排除信使被敌人截杀,甚至被敌人间谍替换等情况。因此很难通过保证人员可靠性及通讯可靠性来解决问题。
6、假始那些忠诚(或是没有出错)的将军仍然能通过多数决定来决定他们的战略,便称达到了拜占庭容错。在此,票都会有一个默认值,若消息(票)没有被收到,则使用此默认值来投票。
7、上述的故事映射到计算机系统里,将军便成了计算机,而信差就是通信系统。虽然上述的问题涉及了电子化的决策支持与信息安全,却没办法单纯的用密码学与数字签名来解决。因为不正常的电压仍可能影响整个加密过程,这不是密码学与数字签名算法在解决的问题。因此计算机就有可能将错误的结果提交去,亦可能导致错误的决策。