然而,这里有可能有个漏洞。
哈希函数并不是100%免碰撞的。那么,如果城市中的敌人拿到信息之后将之篡改,并通过不断改变nonce值,获得了以规定数量的0作为开头的结果,那该怎么办?虽然极度耗时,但是仍然可行。针对这种情况,将军们可以使用数字的力量。
假设,如果不是1个左边的将军给1个右边的将军发送信息,而是有3个左边的将军来给右边的将军们发送信息。为了实现上述目的,他们可以制作自己的信息,然后对累积的信息进行哈希。紧接着,再给哈希结果添加nonce值后,再次进行哈希。这次,他们希望产生一个以6个0开头的信息。
显而易见,这将会非常耗时。但这次,如果信使被城市抓获,那么敌人想要篡改信息,并且找到符合结果的nonce值,将会耗费无限长的时间,可能历时数年。例如,将军们派遣多个信使,那么,城市在计算到一半的过程中就可能会遭受攻击并且被摧毁。
右边的将军们要做的非常简单。他们只要将之前给他们的正确的nonce值添加在信息上,并进行哈希,然后对照其结果是否匹配即可。对一个字符串进行哈希是非常容易的。那么,从本质上来说,工作量证明的过程是:
寻找一个符合哈希目标的nonce值,是一个非常困难且耗时的过程。
然而,验证结果中是否有作恶行为却是非常简单的。