拜占庭将军|青训营笔记

121 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天

关于拜占庭将军问题做一些补充。

对应关系: 将军——分布式系统的计算机节点

忠将——运行良好的计算机节点

叛将——遭到恶意攻击被控制的计算机节点

失踪的信使——通信故障丢失通信消息

信使被间谍替换——通信消息被恶意攻击者伪造或篡改

拜占庭将军问题(The Byzantine Generals Problem)提供了对分布式共识问题的一种情景化描述, 由Leslie Lamport等人在1982年首次发表。以三将军问题作为例子,要怎样操作,才可以在存在通信间恶意攻击行为情况下,使分布式系统达成一致?作者在文中给出两种解决拜占庭将军问题的算法,分别为口信和签名。

口信:发送的消息不会被篡改、消息的接收者可以从消息中得知发送者、可以知道是否收到消息。

可证明,使用口信的情况下,只要总人数大于叛将人数的三倍(即m个叛将和>=3m个忠将)那么最终能使大多数将军达成一致。叛将数m决定了进行作战信息协商的轮数,有m个叛将,则需要进行m+1轮作战信息协商,方可达成一致。

此处说的达成一致,是指少数服从多数,尽可能地保证大多数人的行动一致。作者在提出问题的论文中已经通过反证法证明了三将军问题对于口信是无解的。因此作者又提出了另一种方案:签名。

签名(在口信定义的基础上):消息无法被伪造或篡改、所有人均可验证消息的真伪

经推导即可发现,不管叛将数量为多少,在消息无法伪造和篡改的前提下,忠将均可达成一致的行动计划。