回想上面的实例,四只豺狼想要实现同时进攻或者同时撤退,必须达成共识。针对这种情况,科学家们想出了两个解决方案。
第一个是口头协议。在口头协议中需要注意以下三点是默认条件。
1.每个信息都能够被准确接收
2.接收者知道是谁发送给他的
3.谁没有发送消息大家都知道
口头协议的算法原理比较简单,为方便大家理解,举个例子。
假如一共有10个节点,节点1对其他9个节点都发送了消息,然后节点2-10将消息进行转达,每个节点都是信息的发送者和转达者,这样一轮下来,每个节点手上都会有10条信息(包括自己手里的信息)。
接下来每个节点根据自己手中的信息,选择多数人的投票结果行动即可,这个时候即便有间谍,因为少数服从多数的原则,只要听大多数好节点的话就是正确的。
但是这种算法有着很大的缺陷,首先是计算工作量大,每一个节点都需要去和其他节点进行沟通,随着节点数量增加,工作量成几何增长。
再者就是无法查出哪个节点是坏节点,无法排除故障。因为口头协议无法将历史消息进行记录,也就是我们常说的不可追溯,即便间谍发送不一致的消息,也无法追查到。
第二个就是书面协议。这里同样隐含了一些条件。
节点可以进行签字,并且大家都能够识别出这个签字是否是本人,换种说法就是如果有人篡改签字大家可以知道。
这样就简单多了,就好比这10个节点是通过书信来联系的,假设节点1建议明天上午10点进攻。
同意节点1的就签个字,然后再给后面的,以此类推,直至所有人手里堆满了10封信,这个时候情况就与口头协议类似了。
书面协议相对比口头协议就是增加了一个认证机制,所有的消息都有记录。一旦发现有人所给出的信息不一致,就是追查间谍。
但是书面协议也面临诸多问题,首先就是签名的不可伪造,真实情况复杂多变,连价值上亿的名画都可以伪造,区区一个签名不足以保证真实性。
再者,现实中需要协商的内容更加复杂,协商成本太大,想要大规模应用困难重重。