在区块链中,究竟什么是拜占庭将军问题?


好了,让我们想象一下,有一群拜占庭将军想要攻打一座城市,他们将面临两个不同的问题:

每个将军及其军队在地理上相距甚远,因此通过中央集权来指挥是不可行的,这使得协同作战变得异常困难。

被攻打的城市拥有一只庞大的军队,他们能获得胜利的唯一方式是所有人在同一时刻一同发起进攻。

为了让合作成功,位于城堡左边的军队派遣一位信使,向城堡右边的军队发送了一则内容为“周三攻击”的信息。然而,假设右边的军队没有做好攻击准备,并让信使携带一则内容为“不,周五攻击”的信息返回。而信使需要通过穿越被攻打的城市返回到左边的军队,那么,问题就来了。在这位可怜的信使身上,很多事情都有可能会发生。例如,他有可能被抓获、泄露信息、或被攻打的城市杀害后将其替换了。这将导致军队获得被篡改过的信息,从而使作战计划无法达成一致而失火币网交易版苹果败。

上述例子对区块链有明显借鉴意义。区块链是一个巨型网络,你要如何信任他们呢?如果你想从钱包里发送4个以太币给某人,你如何确认网络中的某人不会篡改信息,将4个以太币改成40个?中本聪发明了工作量证明机制来绕过拜占庭将军问题。其运行原理是:假设左边的军队想要发送内容为“周一进攻”的信息给右边的军队,他们需要执行如下步骤:

首先,他们会给初始文本添加一个“nonce”,这个nonce可以是任何一个随机十六进制值。

其次,他们将添加了“nonce”的文本进行哈希,得到一个结果。假设说他们决定仅当哈希结果前5位是零的时候,才进行信息共享。

如果哈希结果满足条件,他们就会让信使带着有哈希结果的信息出发。否则,他们会持续随机改变nonce的值,直到得到想要的结果。这一过程不仅冗长耗时,且占用大量的算力。

如果敌人抓到了信使,并企图篡改信息,那么根据哈希函数的特性,哈希结果将会剧烈变化。如果城市右边的将军看到信息没有以规定数量的0作为开头,那么他们就会叫停攻击。

然而,这里有可能有个漏洞。

哈希函数并不是100%免碰撞的。那么,如果城市中的敌人拿到信息之后将之篡改,并通过不断改变nonce值,获得了以规定数量的0作为开头的结果,那该怎么办?虽然极度耗时,但是仍然可行。针对这种情况,将军们可以使用数字的力量。

假设,如果不是1个左边的将军给1个右边的将军发送信息,而是有3个左边的将军来给右边的将军们发送信息。为了实现上述目的,他们可以制作自己的信息,然后对累积的信息进行哈希。紧接着,再给哈希结果添加nonce值后,再次进行哈希。这次,他们希望产生一个以6个0开头的信息。

显而易见,这将会非常耗时。但这次,如果信使被城市抓获,那么敌人想要篡改信息,并且找到符合结果的nonce值,将会耗费无限长的时间,可能历时数年。例如,将军们派遣多个信使,那么,城市在计算到一半的过程中就可能会遭受攻击并且被摧毁。

右边的将军们要做的非常简单。他们只要将之前给他们的正确的nonce值添加在信息上,并进行哈希,然后对照其结果是否匹配即可。对一个字符串进行哈希是非常容易的。那么,从本质上来说,工作量证明的过程是:

寻找一个符合哈希目标的nonce值,是一个非常困难且耗时的过程。

然而,验证结果中是否有作恶行为却是非常简单的。



返回列表页>>> 比特币