故事梗概
拜占庭帝国即中世纪的土耳其,拥有巨大的财富,周围10个邻邦垂诞已久,但拜占庭高墙耸立,固若金汤,没有一个单独的邻邦能够成功入侵。任何单个邻邦入侵的都会失败,同时也有可能自身被其他9个邻邦入侵。拜占庭帝国防御能力如此之强,至少要有十个邻邦中的一半以上同时进攻,才有可能攻破。
然而,如果其中的一个或者几个邻邦本身答应好一起进攻,但实际过程出现背叛,那么入侵者可能都会被歼灭。
于是每一方都小心行事,不敢轻易相信邻国。这就是拜占庭将军问题。
故事解剖
在拜占庭问题中,最重要的point就是:所有将军如何达成一致攻打拜占庭的共识,这当中,可能出现的情况举例如下:
- 存在叛徒,欺骗其他将军自己将采取行动
- 叛徒可能迷惑其他将军,使他们接受的消息不一致(传递消息的过程)
用一个模型解释一下:
假设只有3个人,A、B、C,三人中如果其中一个是叛徒。当A发出进攻命令时,B如果是叛徒,他可能告诉C,他收到的是“撤退”的命令。这时C收到一个“进攻”,一个“撤退“,于是C被信息迷惑,而无所适从。
如果A是叛徒。他告诉B“进攻”,告诉C“撤退”。当C告诉B,他收到“撤退”命令时,B由于收到了司令“进攻”的命令,而无法与C保持一致。
正由于上述原因,在只有三个角色的系统中,只要有一个是叛徒,即叛徒数等于1/3,拜占庭问题便不可解。
可以看得出,只要叛徒的数量大于或等于1/3,拜占庭问题不可解
再度解剖拜占庭问题
从技术上理解,拜占庭将军问题是分布式系统容错性问题。加密货币建立在P2P网络之上,是典型的分布式系统,类比一下,将军就是P2P网络中的节点,信使就是节点之间的通信,进攻还是撤退的决定就是需要达成的共识。如果某台独立的节点计算机拓机、掉线或攻击网络搞破坏,整个系统就要停止运行,那这样的系统将非常脆弱,所以容许部分节点出错或搞破坏而不影响整个系统运行是必要的,这就需要算法理论上的支撑,保证分布式系统在一定量的错误节点存在的情况下,仍然保持一致性和可用性。
而且,拜占庭将军与两军问题不同,前者假定信差没有问题,只是将军出现了叛变等问题;后者研究信差的通信问题。
科学家们的解决方法
-
口头信息(未了)
即将军们派人用口信传递信息,其实际含义是指:
- 每个被发送的消息均可被正确投递
- 消息接受者知道消息是谁发的
- 不发消息可被检测
大白话就是,一个节点1发布消息,节点2-10都可以收到消息,其他节点类似,一轮下来,每个节点手上都会有10个信息(进攻或者撤退),这时候只要叛徒数目小于一半,那么
-
书面协议
10个国家,每个国家都可以派人向各个国家派信,比如一起约定“某天早上六点,大家一起进攻拜占庭,同意就签个字”。收到信的国家如果同意的话,就可以在原信上签名盖章。
相比口头协议,实际说的是在这个多人的将军模型中加了了个隐含条件:
- 将军们能够使用签名技术,签名不可伪造,一旦篡改即可发现。
- 同时任何人都可以验证签名的可靠性。
书面协议相比口头协议,所有的消息都是有记录的,解决了追根溯源的问题。
但是,签名消息记录的保存难以摆脱中心化的机构。另外,倘若每个国家都各自向其他9个国家派出信使,在这个网络即需要90次的传输才能完成一轮信息交流,但是每个国家可能回馈不同的进攻时间,在这种异步通信的条件下,要能协商一致是个大问题。
区块链技术
终极解决方案到了——
如果10个将军中的几个同时发起消息,势必会造成系统的混乱,造成各说各的攻击时间方案,行动难以一致。
谁都可以发起进攻的信息,但由谁来发出呢?中本聪巧妙地在个系统加入了发送信息的成本,即:
- 一段时间内只有一个节点可以传播信息。
它加入的成本就是”工作量“——节点必须完成一个计算工作才能向各城邦传播消息,当然,谁第一个完成工作,谁才能传播消息。(这也是工作量证明机制的意义:以检验结果的方式证明你过去所做过了多少工作)
比特币有一个算法难度,会
根据全网算力自动调整,以保证网络一直需要花费10分钟来找到一个有效的哈希值,并产生一个新区块。当某个节点发出统一进攻的消息后,各个节点收到发起者的消息必须签名盖章,确认各自的身份。中本聪在这里引用现代加密技术为这个信息签名。
这种加密技术——非对称加密,完全可以解决古代难以解决的签名问题:
- 消息传送的私密性
- 能够确认身份
- 签名不可伪造、篡改
- 通过区块链,使用一个共同账本。如果有一个叛徒(不诚实节点)修改了前面区块的信息,计划把钱全部划归自己所有,当它广播新区块的时候,其他节点如何通过验证?如果大家手里没有一份相同的账本,肯定无法验证,问题就会陷入僵局。基于P2P网络的BT技术是成熟的,同步一个总帐是很简单的事情。网络中的节点,在每个循环周期内都是同步的,这让每个节点(将军)做决策的时候就有了共同的基础。
中本聪在设计比特币时,它采用了一种工作量证明机制叫哈希现金,在一个交易块这要找到一个随机数,计算机只能用穷举法来找到这个随机数,可以说,能不能找到全靠运气,所以对于各个节点来说,这个世界上,只有随机才是真正的公平,实现随机的最好办法是使用数学,所有的将军在寻找共识的过程,借助了大家都认可的数学逻辑。
当然了,凭什么要义务进行计算工作,那么肯定要有一个激励机制:比特币的奖励机制是每打包一个块,目前是奖励25个比特币,而拜占庭将军问题的奖励机制可以是瓜分拜占庭获得的利益。
如果又出现背叛怎么办?
在这个分布式网络里:
每个将军都有一份实时与其他将军同步的消息账本。
账本里有每个将军的签名都是可以验证身份的。如果有哪些消息不一致,可以知道消息不一致的是哪些将军。
尽管有消息不一致的,只要超过半数同意进攻,少数服从多数,共识达成(只要大多数是好人,那么就可以实现共识)。
区块链上的共识机制主要解决由谁来构造区块,以及如何维护区块链统一的问题。
拜占庭容错问题需要解决的也同样是谁来发起信息,如何实现信息的统一同步的问题。
注:区块链学习新人,若有不正确的地方,望指出