加餐 | 拜占庭将军问题:如何基于签名消息实现作战计划的一致性?
该思维导图由 AI 生成,仅供参考
什么是签名消息?
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了拜占庭将军问题中的签名消息解决方案,重点讨论了如何基于签名消息实现作战计划的一致性。文章首先解释了数字签名的重要性,指出其能确保消息的完整性和来源,实现不可抵赖性。通过Bob和Alice的故事,说明了如何使用非对称加密算法和哈希算法来实现签名消息。文章强调了数字签名约束了叛将们的作恶行为,使得他们无法篡改或伪造忠将的消息。然后详细介绍了如何实现作战计划的一致性,通过多轮协商和签名消息的约束,保证忠将们能够达成一致的作战计划。最后,强调了签名消息的拜占庭问题之解对后续拜占庭容错算法的影响和启发。整体来说,本文深入浅出地介绍了签名消息在拜占庭将军问题中的重要性和应用,为读者提供了清晰的技术解决方案。
《分布式协议与算法实战》,新⼈⾸单¥59
全部留言(41)
- 最新
- 精选
- 安排除了第一、二轮的指挥官外,剩余的 2 位将军将分别作为指挥官,在上一轮收到的作战指令上,加上自己的签名,并转发给其他将军。 第一二轮不是所有人都当过指挥官了吗?为什么还会有剩余的两位将军呢?
作者回复: 加一颗星:),执行多少轮,不是由“是否当过指挥官”决定的,而是叛将数m决定的,也就是m个叛将,需要执行m +1轮。另外,论文中的“指挥官”和“副官”,是辅助大家理解的。
2020-03-251221 - 羽翼1982每位副官,将从指挥官处收到的新的作战指令(也就与之前收的作战指令不同),按照顺序(比如按照首字母字典排序)放到一个盒子里。 ---------------------------------- 这个排序的方法感觉不是说的很清楚,是按照命令本省的字面量(进攻 / 撤退这两个文字)的字典序进行排序吗? 在上面的2忠2叛问题中,1名武将会收到 1+2+2=5条消息,这些消息如何排序,麻烦用例子说明的清晰些
作者回复: 加一颗星:),问题1,是的;问题2,需要排序的是指令,而不是消息。可以这么理解,最终所有忠诚的将军都会收到完全相同的作战指令集合,如果把这些指令按照一定的顺序进行排序,再约定执行某个位置的指令,就能保证忠将们执行一致的作战指令了。
2020-03-25510 - Geek_8af153在楚发起的两忠两叛案例中,苏秦的盒子的第一个指令不是进攻吗?为什么变成撤退了?
作者回复: 盒子的指令要排序的,比如字典排序,因为C在J前面,所以,“撤退”排在了“进攻”前面。
2020-03-2639 - dakingkong实际操作时,不知道判将的数目,怎么判断是否迭代了m+1轮
作者回复: 加一颗星:),从将军总数来反推,n个将军,能容忍(n - 2)个叛将。需要我们注意的是,这个算法是“早期经典”算法,比较理论化,很难在实际场景中落地,在实际场景中一般使用PBFT等算法。
2020-07-1537 - Geek_8c4282老师图10没有看懂,每个将军发送其他两人的指令为什么不一致呢,我的理解是每个将军,当然除了叛将外,忠将发送的指令都是一致的,是不是画错了?
作者回复: 加一颗星:),因为在第三轮作战信息协商中,苏秦、齐、燕分别作为指挥官,将接收到的作战信息,附加上自己的签名,并转发给另外一位,而他们接收到的消息可能是不同的,比如,齐需要将来自“楚、燕”的作战指令“撤退”转发给苏秦,需要将来自“楚、苏秦”的作战指令“进攻”转发给燕。
2020-10-305 - Geek_201736你好,下面内容是我个人的理解,不知道是否正确。 图9中苏秦指向齐的箭头应为:“进攻:楚、苏秦”而非“进攻:苏秦、楚” 图10中苏秦指向齐的箭头应为:“进攻:楚、燕、苏秦”而非“进攻:苏秦、楚、燕” 图10下面文字结论:“最终,苏秦和齐收到的作战信息都是‘撤退、进攻’”,事实上,仔细看图,发现第三轮的作战协商,苏秦收到的作战信息为: {撤退:楚、燕、齐;撤退:楚、齐、燕} 齐收到的作战信息为:{进攻:楚、苏秦,燕;进攻:楚、燕、苏秦}。 而苏秦和齐发出的指令倒是“进攻”和“撤退“都包含。 看了你下面的回复,是针对指令进行排序,收到的指令无法排出来“撤退、进攻”序列。请指明。如果再进行第四轮协商,苏秦都将收到“进攻”,而齐都将收到“撤退”,而且苏秦发出的指令都是”撤退“,而齐发出的指令都是进攻。 另外因为非对称密钥的特性,考虑一旦指令传递链条中有忠将的私钥进行过加密,则这条指令不能再被篡改或伪造,因此指令后跟随的信息传递链条的顺序应该很重要,不可以擅自更改顺序。是不是这样描述会更准确些。 由于geekbang这边,您如果不精选留言,我看不到这条留言,因此重发了一下,盼回复解惑,多谢。
作者回复: 加一颗星:),赞,思考很细致,1. 在图中没有对将军顺序在显示上做特别区分;2. 是对所有接收到指令进行排序,而不是只对一轮接收到的指令进行排序;3. 是的,消息的多轮传递链条,确保了所有忠将能最终接收到相同的指令集合。
2020-09-211 - XxxxxxxMr假设 数据丢失 某个忠将的盒子里面只有一条数据,另外忠将的盒子有多条数据 ,按照之前的约定 (取盒子里面第二条指令)如何达到统一的作战计划。
作者回复: 加一颗星:),不会出现这种情况,忠将们是忠诚的,他们之前的通讯是能确保正常的。
2020-11-10 - Simon叛徒楚先发送作战信息的情况下,在第三轮中,齐为何会向苏发撤退,向燕发进攻?
作者回复: 加一颗星:),因为在第三轮作战信息协商中,苏秦、齐、燕分别作为指挥官,将接收到的作战信息,附加上自己的签名,并转发给另外一位。也就是说,齐将来自“楚、燕”的作战指令“撤退”转发给苏秦,将来自“楚、苏秦”的作战指令“进攻”转发给燕。
2020-10-30 - 每天都要加油对于通过签名问题来解决拜占庭将军问题的时候,目标是保证忠将行动的一致性,对于有m个将军的情况,能够容忍m-2个叛徒, 需要进行m+1轮次的信息交换来保证忠将行动的一致性。签名问题能够保证叛将发送错误的消息,能够保证叛徒无法改变忠将之间的通信。
作者回复: 加一颗星:),略微补充下,3个m的含义不同,“m”和“m - 2”中的m,表示将军数;“m+1”中的m,表示叛将数。
2020-09-15 - Mars请问下老师,由于第二轮燕发送了背叛消息,直觉上感觉最后大家收到的排过序的指令不应该完全一致,会导致最后的决策也不一致。想问下能解释下指令序列是如何最后完全一致的嘛?
作者回复: 加一颗星:),算法是能保证的,可以推导体验下。
2020-09-04