每一个时代都有自己值得骄傲的技术,无论是晶体管、激光、互联网,还是载人航天飞机。近10年中,金融网络领域最具颠覆性、最闪耀的技术发明莫过于区块链。无论是与数字货币一道横空出世,继续发力衍生出智能合约,还是可预见的未来,不断重塑整个金融世界,都使它的夺目光芒无法掩盖。然而究其源头,我们不得不追溯到“拜占庭将军问题”和“双花问题”。后者比较简单,即如何杜绝非实体货币的再次被使用,或者是双重支付(只要引入盖时间戳的电子签名就能解决)。而前者,“拜占庭将军问题”则看起来费解且扑朔迷离,但我们又不能回避,因为它是整个区块链技术核心思想的真正根源,也直接决定了区块链技术的种种与众不同的颠覆性特质。
在某种程度上,问题比答案更重要。很难想象:如果没有“拜占庭将军问题”,没有它揭示出在人类散兵游勇的状态下,永恒的“共识”困境,那么对于这种困境的反思和探索便无法成为可能,逃离困境到达光明之地也无法成为可能。所以在我们向伟大的“答案”——区块链致以敬意之时,请不要忘记它的源头,不要忘记拜占庭。
拜占庭将军的难题
古老的“拜占庭将军问题”
让人生,让人死,让人痴迷,让人疯狂。
这就是传说中繁华与没落,绝望与救赎并存的东罗马帝国首都,拜占庭。
在2013年获得计算机科学领域最高奖项图灵奖的31年前,1972年,莱斯利·兰伯特(Leslie Lamport)搬到湾区。此时,他仍然是一个寂寂无闻的美国小伙。他充当Compass(马萨诸塞州计算机合伙人公司)西海岸计划前哨基地的先锋,不幸的是,这个分支机构最终未能落实。在长达5年的时间里,他曾是Compass总部派驻加州的唯一员工。最后,他却收到撤回东海岸的指令。于是,他决定加入斯坦福国际研究院(SRI)。在那段岁月里,SRI有一个项目,要在美国航空航天局建立容错型航电计算机系统。考虑到系统的工作性质,故障是不允许发生的。这段经历孕育了两篇旨在解决一种特殊故障的论文,由兰伯特和SRI同事马歇尔·皮斯(Marshall Pies)及罗伯特·肖斯塔克(Robert Shostak)合作完成。用计算学术语说,普通故障可能会导致信息丢失或进程停止,但系统不会遭到破坏,因为这种普通故障属于一出错就会停下来的故障类型,剩下的备份的、正常的部分照样可以运转,发挥作用。就像战场上的士兵,他们一旦受伤或阵亡就停止战斗,但并不妨碍他人继续作战。
然而一旦发生“拜占庭故障”,就会非常麻烦,因为它们不会停下来,还会继续运转,并且给出错误讯息。就像战争中有人成了叛徒,会继续假传军情,惑乱人心。当时为了解决这个问题,常常使用的技术被称为“三重模块冗余”:也就是说使用三台计算机进行万一出错的备份工作,三台独立的计算机按照少数服从多数的原则“投票”。这样,即使其中一台机器提供了错误结果,其他两台仍然会提供正确答案。但是为了证明这种方法的有效性,必须拿出证据。而在编写证据的过程中,研究人员遇到了一个问题:“错误”计算机可能给其他两台计算机发送互不相同的错误值,而后者却不会知道。这就需要使用第四台计算机来应对这个故障。
兰伯特说:“如果你使用数字签名,就可以用三台机器达成目的,因为如果‘坏了’的计算机向一台计算机发送了带签名的错误值,并向另一台发送了不同的带签名错误值,另外两台计算机就能够交换消息,以检查究竟发生了什么情况,因为两个不同的值都是签名发送的。”兰伯特还听吉姆·格雷谈论过另一个性质大体相同的问题,人们称之为“中国将军问题”。这引起了兰伯特有关司令将军和叛徒将军的联想,于是他将这个问题及其解决方案命名为“拜占庭将军问题”。加 入 会 员 微 信
“我记得,与我的朋友怀特·迪菲(White Duffy)坐在伯克利的一间咖啡馆里,当时他描述了一个构建数字签名的问题。”兰伯特回忆说,“他说:‘如果能办到的话,会非常有用。’我说:‘这听起来并不很困难。’于是在一张餐巾纸上,我为他勾画出了第一种数字签名算法。虽然当时并不很实用,但目前已经变得切实可行。”只可惜那张餐巾纸已经消逝在时间的流沙中。在后来1982年正式出版的拜占庭将军论文的序言中,他这样写道:
“我一直觉得正是因为通过用一组围坐在圆桌旁的哲学家来表述,Dijkstra(迪克斯塔)的‘哲学家就餐问题’才变得如此让人关注(比如在理论界,它可能比‘读者/作者’问题都引人注目,尽管读者/作者问题可能更具实际意义)。我认为Reaching Agreement in the Presence of Faults(达成共识的缺陷)中所描述的问题十分重要,值得计算机科学家们去关注。‘哲学家就餐问题’使我认识到,把问题以讲故事的形式表达出来更能引起人们的关注。在分布式计算领域有一个被称作‘中国将军问题’的问题。在这个问题中,两个将军必须在进攻还是撤退上达成一致,但是相互只能通过信使传送消息,而且这个信使可能永远都无法到达。我借用了这里的将军的叫法,并把它扩展成一组将军,同时这些将军中有些是叛徒,他们需要达成一致的决定。同时我想给这些将军赋予一个国家,同时不能得罪任何读者。那时候,阿尔巴尼亚还是一个完全封闭的国家,我觉得应该不会有阿尔巴尼亚人看到这篇文章,所以最初的时候这篇论文题目实际是The Albanian Generals Problem(阿尔巴尼亚将军问题)。但是Jack Goldberg(杰克·古登博格)后来提醒我,在这个世界上除了阿尔巴尼亚之外还有很多阿尔巴尼亚移民,所以建议我换个名字。于是就想到了这一更合适的叫法——Byzantine generals(拜占庭将军)。”
写这篇论文的最主要目的是将拜占庭将军这个叫法用在这个问题上。基本的算法文章在1980年的论文中就已经出现了。
起源:拜占庭位于现在土耳其的伊斯坦布尔,是东罗马帝国的首都。由于当时拜占庭罗马帝国国土辽阔,为了防御敌人每个军队都分隔很远,将军与将军之间只能靠信差传消息。在战争时期,拜占庭军队内所有将军和副官必须达成一致共识,决定是否有赢的机会才去攻打敌人的阵营。但是,军队可能有叛徒和敌军间谍,左右将军们的决定,扰乱军队整体的秩序。在达成共识的过程中,有些信息,往往并不代表大多数人的意见。这时候,在已知有成员谋反的情况下,其余忠诚的将军在不受叛徒的影响下如何达成一致的协议,就是“拜占庭将军问题”。
两军问题:军队与军队之间分隔很远,传递信息的信差可能在途中阵亡,或因军队距离不能在得到消息后即时回复,发送方也无法确认消息确实丢失的情形,导致不可能达到一致性。在分布式计算上,试图在异步系统和不可靠的通道上达到一致性是不可能的。因此对一致性的研究一般假设信道是可靠的,或非异步系统上运行。来自维基百科。
[2]在数学和计算机科学之中,算法为一个计算的具体步骤,常用于计算、数据处理和自动推理。