拜占庭将军问题是什么?跟虚拟货币又有什么关系?区块链不可不知的核心技术逻辑
区块链的技术在近年来开发了许许多多不同的演算法,但解决的核心问题仍然是所谓的拜占庭将军问题,有在研究区块链的朋友们一定不觉得陌生,但刚进入虚拟货币圈子的朋友大概会被这个标题搞得一头雾水,拜占庭将军问题是个存在已久的哲学、数学也是逻辑问题,在该领域中,也一直被认为是最困难的问题之一,还记得区块链吗?简单的说,区块链让我们可以不用透过中心化的第三方(政府、银行等)去决定交易的费用是否有传达到(想像贪腐的银行把你的交易扣住但并未传给对方),这块地是否真的属于我(想像贪腐的政府把你拥有的地低价卖给国际企业),而是让一群人透过一个共识机制,达成公正的判决,同事虽说煽情,但裁判vs摄影师的例子想得相当不错。
这样的共识机制,就是解决拜占庭将军问题的核心。
所以拜占庭将军担忧什么问题?
Leslie Lamport 是一位获得了图灵奖的数学家,也是提出解决拜占庭将军问题的人,他在论文中是这样描述拜占庭将军问题的
一组拜占庭将军分别各率领一支军队共同围困一座城市。为了简化问题,将各支军队的行动策略限定为进攻或撤离两种。因为部分军队进攻部分军队撤离可能会造成灾难性后果,因此各位将军必须通过投票来达成一致策略,即所有军队一起进攻或所有军队一起撤离。因为各位将军分处城市不同方向,他们只能通过信使互相联系。在投票过程中每位将军都将自己投票给进攻还是撤退的资讯通过信使分别通知其他所有将军,这样一来每位将军根据自己的投票和其他所有将军送来的资讯就可以知道共同的投票结果而决定行动策略。
我来重新解释一次这个问题
拜占庭帝国有四位勇猛的将军,蜘蛛人、美国队长、索尔、与钢铁人,他们各自有自己的军队,打算攻下萨诺斯的城堡(我并不是把各位当三岁,这其实是个好例子,请大家继续读下去)。
但打胜仗有个前提,因为萨诺斯过于强大,他们四支军队必须同时进攻,才有可能拿下这座城堡(是不是开始有点神似电影了)。
在这个前提下,最优先的要务就是四人彼此必须沟通,确认彼此真正的决定与进攻时间,才有机会打胜仗。
如果目标确认了,接下来便是寻找沟通的方法。拜占庭时代没有电话(我无法解释为什么钢铁人的AI 系统Friday 无法作用),他们唯一与彼此沟通的方法只有派出信使,告知对方彼此的想法。
于是钢铁人将军派出了三位信使给三位将军,送出的信息是『我将在星期一进攻,你愿不愿意跟我一起在周一进攻?』蜘蛛人可能会回说『不,我太年轻,我需要多一天的时间跟我的阿姨在一起,但我会在周二进攻。你愿不愿意跟我一起在周二进攻?』然后让钢铁人信使把这个新讯息带回去。
但是问题来了,钢铁人的信使可能会在中途被萨诺斯拦截,萨诺斯的属下甚至有人可以假冒穿上信使的钢铁装,将假信息给带回去,告诉钢铁人将军说蜘蛛人将军同意了你的提议,我们周一进攻。
因为四个将军并没有在同一时间进攻,萨诺斯赢得了战争。
这就是四位拜占庭将军的共识问题,他们的沟通管道并不可靠,如果你把四位将军想成虚拟货币钱包的话,钢铁人希望传送100 个Bitcoin 传送给蜘蛛人,萨诺斯却可以窜改这个交易,让蜘蛛人什么都收不到。因为沟通管道不可靠,他们无法信任任何传到手上的讯息,那该如何解决呢?
如果我们是拜占庭军师
我们先来看一下这些讯息长什么样子
星期一攻击
星期二攻击
星期一撤退
简单来说在讯息中会有两个元素,一是时间,二是进攻或撤退的决策,而文字的问题是蜘蛛人无法确认这讯息是否正确,或是是否真的来自钢铁人,这给了萨诺斯极大的动机去拦截或窜改讯息,这就跟所有以区块链为技术核心的虚拟货币一样,它们都需要一个可以辨认真伪,确认讯息没有被修改过的沟通机制。
锦囊一:伪装讯息
在区块链中,我们使用一种要做哈希算法的技术(Hash functions)来做加密,不用害怕,专有名词我就讲到这,如果妳希望可以多了解请看哈希函数在维基百科的解释,现在你要知道的,只有哈希函数的特性。
当钢铁人(或任何其他将军)要传送一个讯息给蜘蛛人及其他将军的时候,他必须通过哈希函数(加密),帮助传讯兵与讯息本身做出一定的伪装,这个伪装有个前提,就是伪装外型必须是钢铁人与蜘蛛人同意过的,到达蜘蛛人手上时,他才认得出来(譬如说他们两人都同意将传讯兵伪装成浩克,如果今天出现的是洛基,他们就知道讯息可能被窜改过)。
做出这个伪装需要花费很大的精力,萨诺斯的威力极其强大,可以看透几乎一切,所以在我们的拜占庭将军传送讯息时,必须花费许多的成本来伪装成浩克(以哈希函数加密)才有办法避免被萨诺斯窜改讯息,让收到讯息的将军可以辨认真伪,同理,蜘蛛人回覆给钢铁人的讯息,也会使用这种加密模式,让钢铁人可以确认讯息的真伪。
这在Bitcoin 中叫PoW, Proof of Work(工作证明),未来我们也会在文章中解释。
锦囊二:密上加密
伪装讯息有个小问题,如果萨诺斯愿意付出同等级的成本及时间,他还是有可能可以窜改讯息,伪装成浩克,要怎么让窜改讯息变得不可能呢?
区块链的做法其实并不难,它将多个将军的讯息与伪装集合起来,再用杂凑函数加密一次,这个技巧叫做Merkle Tree,简单呈现如下。
群体讯息再次加密后,会让讯息几乎无法被窜改,萨诺斯必须要付出比单一讯息高得多的成本,才可能有机会,而这个成本可能比他守下城堡能获得的利益加总更多,另外是等到萨诺斯解开了这讯息的时候,进攻可能早就发生了。
这个群体再度加密后,所形成的就是一个『区块』,对面的将军也能更确认自己收到讯息的真实性。
复仇者联盟续集
有些细节值得注意一下,譬如说在区块链的技术上,其实所有的资料都是公开的,所以区块链的加密并不是为了让萨诺斯或其他参与者看不到讯息,而是没有办法更改讯息而不让等待讯息的将军知道。
有了这样的加密技术,将军与将军间达成共识便成可能,在区块链上对于交易是否被确认,身份是否被认可等,也可以由多个电脑(节点)达成协议进行确认,再也不需要一个中心化的机构来认证,推翻现实生活中的萨诺斯,贪腐的银行政府,让社会能够更加公平的向前推进。
这样的例子当然跟真实情况偶尔会有些微出入,欢迎大家指教,但希望可以给各位新进者一个比较容易理解的方式,搞懂区块链到底在做什么。